3

我已经创建了几个 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 化)方式返回 Schematron 结果的正确方法是什么?

4

3 回答 3

1

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

自然语言断言除了预期值之外还可能包含关于实际值的信息,并且可能包含诊断信息。但是,用户应注意,为此类信息提供了诊断元素,以鼓励对自然语言断言的清晰陈述。

诊断消息包含在 <diagonstic> 元素中(包装在 <diagnostics> 包装器中)并使用 ID/IDREF 机制与报告和断言相关联。

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

于 2011-05-23T09:33:47.227 回答
1

实际上,要获得 XML 形式的 Schematron 报告,您应该使用 SVRL。您可以在此处了解更多信息:Schematron 验证报告语言 (SVRL)

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

于 2012-10-15T13:02:13.990 回答
0

您还可以利用本机 schematron 引擎而不是 XSL 样式表来确定断言是否得到满足。我正在使用 .NET / C# here中的一个。

于 2014-08-04T15:49:36.947 回答