MarkLogic 使用什么引擎根据 XML 模式版本 1.1 验证 XML 文档?

What engine does MarkLogic use to validate XML documents against an XML Schema version 1.1?

我被要求研究在 MarkLogic 环境中使用 1.1 版 XML 模式将 Schematron 断言折叠到 XML 模式中。

XSD 1.1 没有指定的一件事是自定义错误消息的使用,因为它们在 Schematron 文件中。

我发现 Saxonica 和 Xerces 都有解决该问题的扩展。

以下是 Saxonica 处理问题的方式:

<xs:element name="date">
  <xs:simpleType>
     <xs:restriction base="xs:date" xmlns:saxon="http://saxon.sf.net/">
       <xs:assertion test=". lt current-date()"
                  saxon:message="The date must not be in the future"/>
       <xs:pattern value="[^Z:]*" 
                  saxon:message="The date must not have a timezone"/>
     </xs:restriction>   
  </xs:simpleType>
</xs:element>

以下是 Xerces 处理问题的方式:

  <xs:simpleType name="myPrecisionDecimal">
    <xs:restriction base="xs:decimal" xmlns:xerces="http://xerces.apache.org">
       <xs:totalDigits value="6" />
       <xs:fractionDigits value="4" />
       <xs:assertion test="string-length(substring-after(string($value), '.')) ge 2" 
              xerces:message="minScale of this decimal number should be 2" />
    </xs:restriction>
  </xs:simpleType>

此外:这些扩展中的任何一个是否处理 Schematron assert 标签中的 <sch:name/><sch:value-of/> 标签之类的东西 <sch:assert test="..."/>?

关于撒克逊,没有办法参数化消息。但是,您可以要求 Saxon 生成一份 XML 格式的报告,其中包含有关无效的所有信息以及有关它们出现位置的上下文信息,并且您可以 运行 将此报告转换为 assemble将信息转换成您喜欢的任何形式(包括,例如,显示源文档并用红线标出无效元素的交互式再现)。