XML Schema(XSD)验证工具?

时间:2020-03-06 14:38:13  来源:igfitidea点击:

当前,我们在办公室正在编写一个应用程序,该应用程序将根据给定的模式生成XML文件。我们在.XSD文件中具有架构。

是否可以使用工具或者库来进行自动化测试,以检查生成的XML是否与模式匹配?

尽管我们不会捆绑模式检查器,所以我们希望使用适合于商业用途的免费工具,因此它仅需要开发人员在开发过程中使用。

如果有什么不同,我们的开发语言是C ++,尽管我认为它不应该,因为我们可以生成xml文件,然后通过在测试中调用单独的程序进行验证。

解决方案

我使用Xerces:

http://xerces.apache.org/xerces-c/

xmlstarlet是一个命令行工具,它将执行此操作以及更多操作:

$ xmlstarlet val --help
XMLStarlet Toolkit: Validate XML document(s)
Usage: xmlstarlet val <options> [ <xml-file-or-uri> ... ]
where <options>
  -w or --well-formed        - validate well-formedness only (default)
  -d or --dtd <dtd-file>     - validate against DTD
  -s or --xsd <xsd-file>     - validate against XSD schema
  -E or --embed              - validate using embedded DTD
  -r or --relaxng <rng-file> - validate against Relax-NG schema
  -e or --err                - print verbose error messages on stderr
  -b or --list-bad           - list only files which do not validate
  -g or --list-good          - list only files which validate
  -q or --quiet              - do not list files (return result code only)

NOTE: XML Schemas are not fully supported yet due to its incomplete
      support in libxml2 (see http://xmlsoft.org)

XMLStarlet is a command line toolkit to query/edit/check/transform
XML documents (for more information see http://xmlstar.sourceforge.net/)

在情况下,用法如下:

xmlstarlet val --xsd your_schema.xsd your_file.xml

经过研究,我认为最好的答案是Xerces,因为它实现了所有XSD,并且是跨平台的并且被广泛使用。我在github上创建了一个小型Java项目,以使用默认的JRE解析器(通常为Xerces)从命令行进行验证。可以在Windows / Mac / Linux上使用。

如果我们愿意的话,还有Xerces的C ++版本。 StdInParse实用程序可用于从命令行调用它。另外,下面的注释者指向此更完整的包装器实用程序。

我们还可以使用xmllint,它是libxml的一部分。我们可能已经安装了它。用法示例:

xmllint --noout --schema XSD_FILE XML_FILE

一个问题是libxml并没有实现所有规范,因此我们可能会遇到问题:(

另外,如果我们使用的是Windows,则可以使用msxml,但是需要某种包装程序来调用它,例如DDJ文章中介绍的GUI。但是,似乎Windows上的大多数人都使用XML编辑器,例如Notepad ++(如Nate的回答所述)或者SteveC建议的XML Notepad 2007(也有一些商业编辑器,在这里我不会提及)。

最后,不幸的是,我们会发现不同的程序会产生不同的结果。这主要是由于XSD规范的复杂性。我们可能想用几种工具测试模式。

更新:我已经在博客文章中对此进行了扩展。

http://www.xmlvalidation.com/

(请确保选中"根据外部XML模式验证"框)

DecisionSoft的在线XML模式验证器允许我们根据给定的模式检查XML文件。

Notepad ++的一个名为XML Tools的插件提供了针对XSD的XML验证和验证。

我们可以在此处查看如何使用它。

可通过http://www.xml-buddy.com获得用于快速简便地进行XML验证的XML编辑器。

我们只需要运行安装程序,然后即可使用易于使用的桌面应用程序或者命令行来验证XML文件。此外,我们还将获得对Schematron和RelaxNG的支持。还支持批量验证...

2012年1月13日更新:命令行工具可免费使用,并将Xerces用作XML解析器。

对于Windows,有免费的XML Notepad 2007.
我们可以选择XSD进行验证

我只是在学习模式。我正在使用RELAX NG并使用xmllint进行验证。 xmlllint发出的错误使我感到沮丧。我希望他们能提供更多信息。

如果XML中的属性错误,则xmllint会告诉我们不支持的属性的名称。但是,如果我们缺少XML中的属性,则只会收到一条消息,提示无法验证该元素。

我正在使用一些非常复杂的规则来处理一些非常复杂的XML,对此我是陌生的,因此要查找缺少的属性会花费很长时间。

更新:我刚刚发现了一个我非常喜欢的Java工具。它可以像xmllint这样的命令行运行,并且支持RELAX NG:https://msv.dev.java.net/