Надеюсь, я не задаю глупый вопрос, но сам пока не смог найти ответ.
Ситуация:
У меня есть файл xml, который нужно проверить на XSD 1.1 (с большим количеством утверждений). Для проверки я использую эту версию xerces: org.opengis.cite.xerces:xercesImpl-xsd11:2.12-beta-r1667115.
Как неоднократно заявлялось в Stackoverflow, это единственная рабочая версия для XSD 1.1. И да, он работает идеально.
После проверки мне нужно знать каждое нарушение правила утверждения, поскольку (в моем случае использования) они только намекают на некоторые статистические проблемы, о которых впоследствии следует сообщить пользователю.
Я переписал обработчик ошибок, чтобы он собирал все случаи нарушения правил во время выполнения.
В файлах XSD правило выглядит так:
<xs:assert test="if(SVDUSCHENBADEN/@value = (2,3) and (SVOBERKOERPER/@value = 0 or SVKOPF/@value = 0 or SVINTIMBEREICH/@value = 0)) then false() else true()">
<xs:annotation>
<xs:appinfo>
<das:rule_id value="70011"/>
<das:rule_text value="Hinweis: Für das Datenfeld 'Duschen oder Baden einschließlich Waschen der Haare' ist [2] = 'überwiegend unselbständig' oder [3] = 'unselbständig' und für eines der Datenfelder 'Waschen des vorderen Oberkörpers','Körperpflege im Bereich des Kopfes' oder 'Waschen des Intimbereichs' ist [0] = 'selbständig' angegeben (Die Angaben können zu einer Auffälligkeit in der statistischen Plausibilitätsprüfung führen)"/>
<das:rule_type value="WARNING"/>
<das:rule_fields>
<das:field value="SVDUSCHENBADEN"/>
<das:field value="SVINTIMBEREICH"/>
<das:field value="SVKOPF"/>
<das:field value="SVOBERKOERPER"/>
</das:rule_fields>
</xs:appinfo>
</xs:annotation>
</xs:assert>
Я ожидал (по своей наивности), что у меня будет доступ, например. значение «das_rule_text» во время обработки ошибок при выполнении проверки, но я получаю только номер столбца и строки закрывающего тега, где произошла ошибка, и предустановленное сообщение об ошибке, подобное этому:
cvc-assertion: Assertion evaluation ('if(SVDUSCHENBADEN/@value = (2,3) and (SVOBERKOERPER/@value = 0 or SVKOPF/@value = 0 or SVINTIMBEREICH/@value = 0)) then false() else true()') for element 'qs_data' on schema type 'das_qs_data_type' did not succeed.
Есть ли способ прочитать содержание правила XSD во время проверки? Или потом? Я совсем запутался или пропустил что-то очевидное?
Пожалуйста, помогите мне найти правильное направление.
До свидания, Торстен...