【发布时间】:2020-05-27 21:58:46
【问题描述】:
我希望我不是在问一个愚蠢的问题,但我自己还找不到答案。
情况:
我有一个 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 规则的内容?还是之后?我是完全偏离了轨道还是我错过了一些明显的东西?
请帮我找到正确的方向。
再见,托尔斯滕...
【问题讨论】:
标签: java xml validation xerces xsd-1.1