如何以结构化方式返回Schematron验证结果

时间:2011-05-05 18:17:58

标签: xml schematron

我创建了几个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结果的正确方法是什么?

3 个答案:

答案 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