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文件并验证它们。即使它们在多个子目录中。