使用SAXON EE版本针对schematron验证XML

时间:2018-03-09 05:19:52

标签: saxon schematron

我正在评估SAXON EE版本以根据xsd和schematron验证XML。

有人可以帮我解决以下问题:

  1. 在针对xsd验证xml文档时,我们是否还可以获得该错误节点的xpath以及纯文本中的错误。目前我只收到错误。

  2. 我们可以使用Saxon EE版本对schematron验证xml吗?任何代码示例都会有很大的帮助。

  3. 感谢。

1 个答案:

答案 0 :(得分:1)

<强> 1。在针对xsd验证xml文档时,我们是否也可以获得该错误节点的xpath。

是的,错误信息包括对无效节点的XPath引用(在大多数情况下:在某些情况下,例如重复ID,其中一个特定节点没有错误)。

如果使用SchemaValidator.SetValidityReporting()生成XML有效性报告,则生成的报告将包含路径信息。这是一个例子:

<?xml version="1.0" encoding="UTF-8"?>
<validation-report xmlns="http://saxon.sf.net/ns/validation"
                   system-id="file:/Users/mike/repo2/samples/data/books-invalid.xml">
   <error line="3"
          column="17"
          path="/Q{}BOOKLIST[1]/Q{}BOOKS[1]/@x"
          xsd-part="1"
          constraint="cvc-complex-type.3">Attribute @x is not allowed on element &lt;BOOKS&gt;</error>
   <error line="10"
          column="17"
          path="/Q{}BOOKLIST[1]/Q{}BOOKS[1]/Q{}ITEM[1]/Q{}PRICE[1]"
          xsd-part="2"
          constraint="cvc-datatype-valid.1">The content "$0.2" of element &lt;PRICE&gt; does not match the required simple type. Cannot convert string to decimal: $0.2</error>
   <error line="21"
          column="20"
          path="/Q{}BOOKLIST[1]/Q{}BOOKS[1]/Q{}ITEM[2]/Q{}PUB-DATE[1]"
          xsd-part="2"
          constraint="cvc-datatype-valid.1">The content "2002-02-31" of element &lt;PUB-DATE&gt; does not match the required simple type. Invalid date "2002-02-31" (Non-existent date)</error>
   <error line="42"
          column="22"
          path="/Q{}BOOKLIST[1]/Q{}BOOKS[1]/Q{}ITEM[3]/Q{}REPUTATION[1]"
          xsd-part="1"
          constraint="cvc-complex-type.2.4">In content of element &lt;ITEM&gt;: The content model does not allow element &lt;REPUTATION&gt; to appear immediately after element &lt;WEIGHT&gt;. No further elements are allowed at this point. </error>
   <meta-data>
      <validator name="SAXON-EE" version="9.8.0.9"/>
      <results errors="4" warnings="0"/>
      <schema file="books.xsd" xsd-version="1.1"/>
      <run at="2018-03-07T15:22:04.847Z"/>
   </meta-data>
</validation-report>

如果您提供IInvalidityHandler作为SchemaValidator的回调,您也可以获取相关信息,但这需要更多挖掘。 Saxon称你的IInvalidityHandler提供StaticError对象(这有点用词不当)。 StaticError对象没有直接提供路径信息,但它包含对XPathException对象的引用,该对象可以转换为ValidationExceptionValidationException有一个方法getPath(),如果可用,它会返回此信息。

<强> 2。我们可以针对schematron验证xml吗?

Saxon本身并没有包含一个schematron验证器,尽管许多执行schematron验证的第三方工具都使用了Saxon&#34;#34;。我不了解.NET的情况 - 但基本上有两种Schematron处理器:从schematron架构生成XSLT代码的处理器(通常使用Saxon来生成XSLT并执行它),&#34;本地&#34;处理器。在.NET&#34;上搜索&#34; schematron;给你很多项目,但我不知道他们目前的状态或质量。