使用 SAXON EE 版本针对 schematron 验证 XML
Validate XML against schematron using SAXON EE edition
我正在评估 SAXON EE 版本以针对 xsd 和 schematron 验证 XML。
谁能帮我解决以下问题:
在根据 xsd 验证 xml 文档时,我们是否还可以获取该错误节点的 xpath 以及纯文本中的错误。目前我只收到错误。
我们可以使用 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 <BOOKS></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 "[=10=].2" of element <PRICE> does not match the required simple type. Cannot convert string to decimal: [=10=].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 <PUB-DATE> 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 <ITEM>: The content model does not allow element <REPUTATION> to appear immediately after element <WEIGHT>. 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
对象没有直接可用的路径信息,但它包含对可以转换为 ValidationException
的 XPathException
对象的引用,并且 ValidationException
有一个方法 getPath()
其中 returns 此信息(如果可用)。
2。我们可以针对 schematron 验证 xml。
Saxon 本身不包含 schematron 验证器,尽管许多执行 schematron 验证的 third-party 工具都使用 Saxon "under the hood"。我不了解 .NET 上的情况 - 但本质上有两种 Schematron 处理器:从 schematron 模式生成 XSLT 代码的处理器(通常使用 Saxon 来生成 XSLT 并执行它)和 "native" 个处理器。搜索 "schematron on .NET" 可以找到很多项目,但我不知道它们的当前状态或质量。
我正在评估 SAXON EE 版本以针对 xsd 和 schematron 验证 XML。
谁能帮我解决以下问题:
在根据 xsd 验证 xml 文档时,我们是否还可以获取该错误节点的 xpath 以及纯文本中的错误。目前我只收到错误。
我们可以使用 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 <BOOKS></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 "[=10=].2" of element <PRICE> does not match the required simple type. Cannot convert string to decimal: [=10=].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 <PUB-DATE> 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 <ITEM>: The content model does not allow element <REPUTATION> to appear immediately after element <WEIGHT>. 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
对象没有直接可用的路径信息,但它包含对可以转换为 ValidationException
的 XPathException
对象的引用,并且 ValidationException
有一个方法 getPath()
其中 returns 此信息(如果可用)。
2。我们可以针对 schematron 验证 xml。
Saxon 本身不包含 schematron 验证器,尽管许多执行 schematron 验证的 third-party 工具都使用 Saxon "under the hood"。我不了解 .NET 上的情况 - 但本质上有两种 Schematron 处理器:从 schematron 模式生成 XSLT 代码的处理器(通常使用 Saxon 来生成 XSLT 并执行它)和 "native" 个处理器。搜索 "schematron on .NET" 可以找到很多项目,但我不知道它们的当前状态或质量。