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



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

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

  1. 在根据 xsd 验证 xml 文档时,我们是否还可以获取该错误节点的 xpath 以及纯文本格式的错误。目前我只收到错误。

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

谢谢。

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对象没有直接可用的路径信息,但它包含对可以强制转换为ValidationExceptionXPathException对象的引用,并且ValidationException有一个方法getPath()该方法返回此信息(如果可用)。

2. 我们可以根据 schematron 验证 xml 吗?

Saxon 本身不包括 schematron 验证器,尽管许多进行 schematron 验证的第三方工具都"在引擎盖下"使用 Saxon。我不了解 .NET 上的最新情况 - 但本质上有两种类型的 Schematron 处理器:从 schematron 架构生成 XSLT 代码的处理器(通常使用 Saxon 来生成 XSLT 并执行它)和"本机"处理器。搜索".NET 上的 schematron"会给你很多项目,但我不知道它们的当前状态或质量。

最新更新