【问题标题】:How do I return Schematron validation results in a structured manner如何以结构化方式返回 Schematron 验证结果
【发布时间】:2011-08-19 15:06:28
【问题描述】:

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

【问题讨论】:

    标签: xml schematron


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      实际上,要获得 XML 形式的 Schematron 报告,您应该使用 SVRL。你可以在这里了解更多信息:Schematron Validation Report Language (SVRL)

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

      【讨论】:

        【解决方案3】:

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

        自然语言断言可以 包含有关实际的信息 除了期望值之外的值 并且可能包含诊断 信息。用户应注意, 然而,诊断元素 提供此类信息以 鼓励明确声明 自然语言断言。

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

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

        【讨论】:

        • 谢谢@alexbm,这对我很有帮助。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-30
        • 2015-06-19
        相关资源
        最近更新 更多