Мы выполняем отдельный процесс проверки по отношению к множеству нескольких форм Орбеона, чтобы мы могли отображать полный набор сообщений проверки для пользователя в одном месте. Мы хотим использовать выражения XPath в relevant
, required
и выражения проверки в определениях форм как часть этого процесса, а не дублировать эти правила.Как я могу повторно использовать проверку орбена во внешнем валидаторе?
Есть ли способ, по которому мы можем позвонить Орбену, чтобы получить сообщения о проверке для формы, включая метаданные, чтобы соответствовать этим сообщениям с элементами управления?
В качестве альтернативы мы попытались принять выражения и обработать их для работы с нашими данными. В нашей системе мы используем канонические имена для элементов управления, которые мы используем для хранения данных из нескольких форм в единой структуре XML. Например, если мы имели набор форм с двумя формами со следующими полями:
Форма A
now.applicantInformation.individualOrCompany
now.applicantInformation.relationshipToCompanyOrOrganization
now.applicantInformation.areYouTheIndividualThisAuthorizationWillBeIssuedTo
now.agentInformation.agentMailingAddress.addressType
now.agentInformation.agentMailingAddress.additionalAddressInformation
Форма B
now.access.presentlyGated
now.access.inspectorHasKey
Наши полученные данные будут выглядеть примерно так :
<now>
<applicantInformation>
<individualOrCompany>Organization</individualOrCompany>
<relationshipToCompanyOrOrganization>Agent</relationshipToCompanyOrOrganization>
<areYouTheIndividualThisAuthorizationWillBeIssuedTo>N</areYouTheIndividualThisAuthorizationWillBeIssuedTo>
</applicantInformation>
<agentInformation>
<agentMailingAddress>
<addressType>Rural Route</addressType>
<additionalAddressInformation></additionalAddressInformation>
</agentMailingAddress>
</agentInformation>
<access>
<presentlyGated>Y</presentlyGated>
<inspectorHasKey>N</inspectorHasKey>
</access>
</now>
Для поля now.agentInformation.agentMailingAddress.additionalAddressInformation
мы имеем это выражение relevant
XPATH:
(
(
$now.applicantInformation.applicantInformation.individualOrCompany='Organization'
and $now.applicantInformation.applicantInformation.relationshipToCompanyOrOrganization = ('Agent','Executor_Administrator_Trustee','Friend_Neighbour','Power of Attorney','Representative','Trustee in Bankruptcy')
)
or ($now.applicantInformation.applicantInformation.areYouTheIndividualThisAuthorizationWillBeIssuedTo='N')
)
and $now.applicantInformation.agentInformation.agentMailingAddress.addressType='Rural Route'
Мы думали, мы могли бы преобразовать это выражение XPath, который будет работать с нашей структуры данных, как это:
(
(
/now/applicantInformation/applicantInformation/individualOrCompany/text() = 'Organization'
and /now/applicantInformation/applicantInformation/relationshipToCompanyOrOrganization/text() = ('Agent','Executor_Administrator_Trustee','Friend_Neighbour','Power of Attorney','Representative','Trustee in Bankruptcy')
)
or (/now/applicantInformation/applicantInformation/areYouTheIndividualThisAuthorizationWillBeIssuedTo/text() = 'N')
)
and /now/applicantInformation/agentInformation/agentMailingAddress/addressType/text() = 'Rural Route'
К сожалению, когда мы запускаем это выражение xpath из Java, мы получаем ошибку из этой части выражения:
/now/applicantInformation/applicantInformation/relationshipToCompanyOrOrganization/text() = ('Agent','Executor_Administrator_Trustee','Friend_Neighbour','Power of Attorney','Representative','Trustee in Bankruptcy')
Ошибка:
expected) but found ,
кажется, что синтаксис /element/text() = ('a','b','c')
не поддерживается стандартной XPath. Может ли Orbeon поддерживать это с помощью XQuery или XForms?
Мы можем преобразовать это использовать ИЛИ оператора, но это немного некрасиво, чтобы сделать это:
/now/applicantInformation/applicantInformation/relationshipToCompanyOrOrganization[text() = 'Agent' or text() = 'Executor_Administrator_Trustee' or text() = 'Friend_Neighbour' or text() = 'Power of Attorney' or text() = 'Representative' or text() = 'Trustee in Bankruptcy' ]
У нас также есть выражения, которые используют такие функции, как days-from-duration
. XPath имеет функцию days-from-duration
, но, похоже, она отличается от той, что используется Orbeon. Пример выражение:
days-from-duration(($nda.technicalInformation.startAndEndDate.endDate) - ($nda.technicalInformation.startAndEndDate.startDate)) > 0
Как вы это называете на Java? Я полагаю, вы не используете процессор Sathon XPath 2? Если XPath 1, то вы не сможете многое сделать, потому что XPath 1 является антикварным. Даже скобки, которые вы используете в своем выражении, не будут работать с XPath 1. – ebruchez
Кстати, в XPath 2 вы почти * никогда не должны использовать 'text()'. Например, 'foo/text() = ('bar', 'baz')' можно заменить на 'foo = ('bar', 'baz')' или 'foo/string() = ('bar', 'Баз') '. – ebruchez