2011-05-05 53 views
3

我已经创建了几个Schematron断言,它们都对我的XML实例运行良好。但是,我想以这种方式来构造我的错误消息的输出,以便我稍后可以使用例如Java对它们进行后处理。如何以结构化的方式返回Schematron验证结果

我的断言错误消息的输出应该

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

不起作用。返回Schematron结果采用结构化(XML-ified)方式的正确方式是什么?

回答

1

实际上,要将Schematron报告作为XML使用,您应该使用SVRL。您可以在这里了解更多关于它的信息:Schematron Validation Report Language (SVRL)

使用SVRL的一大优点是您还可以获取有关断言/报告触发位置为XPath的详细信息。

1

Schematron设计希望仅将断言和报告的内容保留为自然语言。该标准(可用here)鼓励使用诊断元素获取更丰富的信息。它指出:

自然语言断言可能 包含有关除了实际 值的信息与预期值 并可能包含诊断 信息。然而,用户应该注意到, 为诊断元素 提供了这样的信息, 鼓励对自然语言断言的明确声明。

诊断消息包含在< diagonstic>元件(包装在一个<诊断>包装器),并用使用ID/IDREF机构报告和断言相关联。

有一个例子显示了诊断标准在附录G中的使用。

+0

感谢@alexbm,这对我非常有帮助。 – Chris 2012-04-18 08:48:37

0

您还可以利用本机schematron引擎而不是XSL样式表来确定是否满足断言。我正在与.NET/C#here合作。