【问题标题】:XML Schema (XSD) validation tool? [closed]XML Schema (XSD) 验证工具? [关闭]
【发布时间】:2010-09-12 14:20:19
【问题描述】:

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

是否有可用于自动化测试的工具或库来检查生成的 XML 是否与架构匹配?

我们更喜欢适合商业用途的免费工具,尽管我们不会捆绑模式检查器,因此它只需要开发人员在开发期间使用。

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

【问题讨论】:

  • 我喜欢这些“非建设性”问题中有多少是我搜索的内容的热门 Google 搜索结果,并且答案很有用
  • 我理解不具建设性的来源。老实说,虽然这是一个很好的问题,但辩论/争论有时最终会得出很好的答案
  • 这正是管理员适得其反的情况
  • Maven 构建工具的上下文中查看similar question 可能是值得的。

标签: xml validation xsd schema


【解决方案1】:

【讨论】:

  • 他们是否有可以从控制台使用的命令行来检查 XSLT 文件对 XSLT 2.0 的 XSD 的验证?
  • 是的,您可以使用sudo apt install libxerces-c-samples 安装CLI 工具,然后使用StdInParse -v=always -n -s < document.xml 查看文档。
【解决方案2】:

xmlstarlet 是一个命令行工具,可以执行此操作以及更多功能:

$ xmlstarlet val --帮助 XMLStarlet 工具包:验证 XML 文档 用法:xmlstarlet val [ ... ] -w 或 --well-formed - 仅验证格式正确(默认) -d 或 --dtd - 根据 DTD 验证 -s 或 --xsd - 验证 XSD 架构 -E 或 --embed - 使用嵌入式 DTD 进行验证 -r 或 --relaxng - 验证 Relax-NG 模式 -e 或 --err - 在 stderr 上打印详细的错误消息 -b 或 --list-bad - 仅列出不验证的文件 -g 或 --list-good - 仅列出验证的文件 -q 或 --quiet - 不列出文件(仅返回结果代码) 注意:由于 XML 模式不完整,因此尚未完全支持 libxml2 中的支持(参见 http://xmlsoft.org) XMLStarlet 是一个用于查询/编辑/检查/转换的命令行工具包 XML 文档(有关更多信息,请参见 http://xmlstar.sourceforge.net/)

在您的情况下,用法如下:

xmlstarlet val --xsd your_schema.xsd your_file.xml

【讨论】:

  • 你知道关于不完全支持 xml 模式的警告有多严重吗?
  • 从其他答案来看,xmlstarlet 的 xsd 实现有点弱。
  • 鉴于 xmlstarlet 只是在底层使用 libxml2,因此使用与 libxml2 捆绑并在接受的答案中解释的 xmllint 可能更容易。
  • @JasonDagit, ...它和 xmllint 一样弱——它们使用相同的库实现。
  • 内容模型不是确定性的。 :-(
【解决方案3】:

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

如果您愿意使用C++ version of Xerces,也可以使用它。 StdInParse utility 可用于从命令行调用它。此外,下面的评论者指向此more complete wrapper utility

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

xmllint --noout --schema XSD_FILE XML_FILE

一个问题是 libxml 没有实现所有的规范,所以你可能会遇到问题:(

或者,如果您在 Windows 上,您可以使用 msxml,但您需要某种包装器来调用它,例如 DDJ article 中描述的 GUI。但是,Windows 上的大多数人似乎都使用 XML 编辑器,例如 Notepad++(如Nate's answer 中所述)或XML Notepad 2007suggested by SteveC(还有几个商业编辑器,我不会在此提及)。

最后,不幸的是,您会发现不同的程序会给出不同的结果。这主要是由于 XSD 规范的复杂性。您可能需要使用多种工具来测试您的架构。

更新:我在blog post 中对此进行了扩展。

【讨论】:

  • 我发现以下内容很有帮助:jmvanel.free.fr/xsd/README.html
  • StdinParse 用法示例(在 linux 上)可能有用:StdInParse -n -s -f -v=always
  • 有没有办法让程序使用 xsi:schemaLocation 而不是手动输入所有 XSD?
  • @GaborGarami 目前没有,但这是一个功能请求:github.com/amouat/xsd-validator/issues/5
  • xmllint 不符合 XML 正则表达式,不幸的是,一些有效的 XML 正则表达式不会通过它
【解决方案4】:

http://www.xmlvalidation.com/

(请务必选中“针对外部 XML 模式进行验证”框)

【讨论】:

  • @jcollum 现在看来。
【解决方案5】:

DecisionSoft 的在线XML Schema Validator 允许您根据给定架构检查 XML 文件。

【讨论】:

【解决方案6】:

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

你可以看看如何使用它here

【讨论】:

  • -1,这个插件很难安装
  • 我用 npp 5.8.6, XMLTools 2.3.1 unicode beta2 r805 测试过,效果很好。
  • 很棒的插件。有关安装的帮助,请参阅 Notepad++ XmlTools Not Installing
  • 在 5.8.7 版本中,Notepad++ 自己的插件管理器(“Plugins/Plugin Manager”)使安装过程自动化。
  • @FranzEbner 我遇到了同样的问题。如果XML 本身引用了XSD 文件,例如xsi:noNamespaceSchemaLocation="file.xsd",那么XML 工具将尝试使用它而不是给您一个“设置”对话框。
【解决方案7】:

http://www.xml-buddy.com 上提供了用于快速轻松地进行 XML 验证的 XML 编辑器

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

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

【讨论】:

    【解决方案8】:

    对于 Windows,有免费的XML Notepad 2007。 您可以选择 XSD 对其进行验证

    更新:更好的是,使用带有 XML 工具插件的 Notepad++

    【讨论】:

      【解决方案9】:

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

      如果 XML 中有错误的属性,则 xmllint 会告诉您不受支持的属性的名称。但是,如果您在 XML 中缺少某个属性,您只会收到一条消息,指出无法验证该元素。

      我正在处理一些非常复杂的 XML 和非常复杂的规则,而且我是新手,因此跟踪缺少哪个属性需要很长时间。

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

      【讨论】:

        【解决方案10】:

        我倾向于使用 Microsoft 的 xsd 来帮助从 .NET 文件生成 xsd。我还使用 xmlstarlet 解析出部分 xml。最后一个对您有用的免费工具是 altovaxml,可从以下 URL 获得:http://www.altova.com/download_components.html

        这允许我扫描所有 xml 文件,通过解析 xml 来选择要使用的 xsd。

        # Function:
        #    verifyschemas - Will validate all xml files in a configuration directory against the schemas in the passed in directory
        # Parameters:
        #    The directory where the schema *.xsd files are located.  Must be using dos pathing like: VerifySchemas "c:\\XMLSchemas\\"
        # Requirements:
        #    Must be in the directory where the configuration files are located
        #
        verifyschemas()
        {
            for FILENAME in $(find . -name '*.xml' -print0 | xargs -0)
            do
                local SchemaFile=$1$(getconfignamefromxml $FILENAME).xsd
                altovaxml /validate $FILENAME /schema $SchemaFile > ~/temp.txt 2> /dev/null
                if [ $? -ne 0 ]; then
                    printf "Failed to verify: "
                    cat ~/temp.txt | tail -1 | tr -d '\r'
                    printf "    - $FILENAME with $SchemaFile\n"
                fi
            done
        }
        

        要生成我使用的 xml: xsd DOTNET.dll /type:CFGCLASS & 重命名 schema0.xsd CFGCLASS.xsd

        要获取我使用的 xsd 名称: xmlstarlet sel -t -m /XXX/* -v local-name() $1 | sed 's/$//'

        这允许我使用 xml 文件中的元素标记来获取正确的 XSD。

        最终结果是我可以调用 bash 函数来扫描所有 XML 文件并验证它们。即使它们位于多个子目录中。

        【讨论】:

          【解决方案11】:

          我发现这个来自 'corefiling' 的在线验证器非常有用 -
          http://www.corefiling.com/opensource/schemaValidate.html

          在尝试了一些工具来验证我的 xsd 之后,这是给我详细错误信息的工具 - 所以我能够修复架构中的错误。

          【讨论】:

          • 在线工具是一个安全问题。
          【解决方案12】:

          从 XML 验证和生成 XSD 的一个出色的可视化工具是 IntelliJ IDEA,直观且简单。

          【讨论】:

            【解决方案13】:

            您可以将您的 XML 架构连接到 Microsoft Visual Studio 的 Intellisense。此选项为您提供实时验证和自动完成功能,真是太棒了。

            我在我的免费 Microsoft Visual C++ 2010 Express 副本上运行了这个确切的场景。

            【讨论】:

              【解决方案14】:

              另一个在线 XML Schema (XSD) 验证器:http://www.utilities-online.info/xsdvalidation/

              【讨论】:

                猜你喜欢
                • 2016-07-09
                • 1970-01-01
                • 2016-02-03
                • 2011-01-24
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2014-05-12
                • 1970-01-01
                相关资源
                最近更新 更多