XML Schema(XSD)验证工具?

XML Schema (XSD) validation tool?

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

是否有工具或库可以用于自动测试,以检查生成的XML是否与模式匹配?

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

我们的开发语言是C++,如果这样做有什么区别,虽然我认为它不应该像我们可以生成XML文件,然后通过在测试中调用一个单独的程序来验证。


经过一些研究,我认为最好的答案是xerces implements,因为它所有的xsd,是跨平台和广泛使用的。我已经创造了一个小型的Java项目在github确认从使用安装默认的命令行jre xerces语法分析器,这是通常的。这可以用于在Windows / Linux / Mac。

也有一个C + +版本可用,如果你xerces D,而不是使用。的stdinparse效用可以用于电话线从它的命令。同时,这一点commenter下面更完整的wrapper效用。

你可以同时使用libxml启动xmllint,这是部分。你可能已经把它安装好。使用的例子:

1
xmllint --noout --schema XSD_FILE XML_FILE

一个问题是,libxml所有implement也不规范,所以你很成问题:(颤抖

另外,如果你是在Windows,你可以使用一些msxml,但你会需要它的那些wrapper",如在这篇文章ddj GUI的一个描述。然而,它似乎大多数人对Windows使用XML安全的编辑,如记事本++(作为描述在Nate的回答)或XML作为建议由2007 stevec记事本(有几个是商业编辑,我也不会在这里提到)。

最后,你会发现不同的程序会,不幸的是,给不同的结果。这是很大程度上是由于设计的复杂性的研究xsd将军。你可能想测试你的schema与几个工具。

更新:我已经在这个扩展在一个博客帖子


那里的一个插件,为记事本+ +为工具,提供了XML验证和XML安全xsd validation反对。

你可以看到如何使用它在这里。


这一href ="http:/ / / AA xmlstar.sourceforge.net"> xmlstarlet { } -是一个指挥,线工具和更会做这个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ 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/)

在你的情况会随着使用的线的:

1
xmlstarlet val --xsd your_schema.xsd your_file.xml


为Windows记事本2007 XML有自由。 你可以选择xsd为它的确认,对


在线validator从XML schema decisionsoft允许你检查XML文件的安全对一个给定的schema。


快速和容易的为安全的XML编辑XML validation是可在HTTP:/ / www.xml-buddy.com

你需要的只是颤抖的东西后,你可以和你的XML文件validate安全容易使用与桌面应用程序或命令-线。此外,你schematron和relaxng也得到支持。巴赫validation是同时支持……

2012年1月13日更新:命令行工具的使用和使用是免费的大xerces作为XML语法分析器。


我使用xerces:

HTTP:/ / xerces.apache.org xerces - C / /


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

在尝试了几个工具来验证我的XSD之后,这是一个给了我详细的错误信息的工具——所以我能够在模式中修复错误。


我只是学习schema。我使用的放松和使用启动xmllint确认。我得到frustrated由错误xmlllint即将离开。我希望他们是一个小更知识性。

如果那是一个错误的XML,然后在第attribute启动xmllint告诉你名字的attribute不支持。但如果你是在XML安全attribute失踪你只是得到一个消息说的是可以不validated元。

我工作在一些非常复杂的XML与非常复杂的规则,和我在纽约跟踪下来,所以这是一个attribute失踪是以长时间。

更新:我才发现我是一个Java工具liking很多。它可以从命令行启动xmllint稳像和它支持HTTPS的放松:msv.dev.java.net:/ / /


www.xmlvalidation.com http:/ / /

(大检查是确定"validate反对外部XML schema"盒)


另一个联机XML模式(XSD)验证程序:http://www.utilities-online.info/xsdvalidation/。


可以将XML架构连接到Microsoft Visual Studio的IntelliSense。这个选项提供了实时验证和自动完成功能,这非常棒。

我有这个确切的场景运行在我的微软Visual C++ 2010 Express的免费副本。


从XML验证和生成XSD的一个很好的可视化工具是Intellij思想,直观而简单。


我倾向于使用Microsoft的XSD来帮助从.NET文件生成XSD。我还使用xmlstarlet解析了XML的各个部分。您将使用的最后一个免费工具是AltovaXML,该工具可从以下网址获得:http://www.altova.com/download_components.html。

这允许我通过解析XML扫描所有XML文件,以获取要使用的XSD。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 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 '
'

            printf"    - $FILENAME with $SchemaFile
"

        fi
    done
}

要生成我使用的XML,请执行以下操作:xsd dotnet.dll/type:cfgclass&rename schema0.xsd cfgclass.xsd

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

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

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