我创建了几个Schematron断言,它们对我的XML实例运行良好。但是,我想以这样的方式构造我的错误消息的输出,我稍后可以使用例如Java对它们进行后处理。
我的断言错误消息的输出应为
<error>
<errorMessage>My error message</errorMessage>
<violatingElement>The violating element</violatingElement>
</error>
但是,构造如:
<pattern>
<rule context="/p1:Document/p1:Delivery/p1:DeliveryDetails/p1:ShippingDate">
<report test=".">
<error>
<errorMessage>My error message</errorMessage>
<violatingElement>The violating element</violatingElement>
</error>
</report>
</rule>
</pattern>
不起作用。以结构化(XML-ified)方式返回Schematron结果的正确方法是什么?
答案 0 :(得分:1)
Schematron设计希望仅将断言和报告的内容保留为自然语言。标准(可用here)鼓励使用诊断元素获取更丰富的信息。它声明:
自然语言断言可能 包含有关实际的信息 除预期值之外的值 并可能包含诊断 信息。用户应注意, 然而,那个诊断元素 提供此类信息 鼓励明确表达 自然语言主张。
诊断消息包含在&lt; diagonstic&gt;中。元素(包含在&lt; diagnostics&gt;包装器中)并使用ID / IDREF机制与报告和断言相关联。
有一个例子显示在标准的附录G中使用诊断。
答案 1 :(得分:1)
实际上,要将Schematron报告作为XML获取,您应该使用SVRL。您可以在此处了解详情:Schematron Validation Report Language (SVRL)
使用SVRL的一大优势是,您还可以获得有关将断言/报告作为XPath触发的位置的详细信息。
答案 2 :(得分:0)
您还可以利用本机schematron引擎而不是XSL样式表来判断断言是否满足。我正在使用.NET / C#here。