Инструмент проверки XML-схемы (XSD)? [закрытый]

в офисе мы в настоящее время пишем приложение, которое будет генерировать XML-файлы по схеме, которую нам дали. У нас есть схему .XSD-файл.

есть ли инструмент или библиотеки, которые мы можем использовать для автоматического тестирования, чтобы проверить, что сгенерированный XML соответствует схеме?

мы предпочли бы бесплатные инструменты, подходящие для коммерческого использования, хотя мы не будем связывать schema checker, поэтому он должен использоваться только разработчиками во время развитие.

наш язык разработки-C++, если это имеет значение, хотя я не думаю, что это должно, поскольку мы могли бы создать xml-файл, а затем выполнить проверку, вызвав отдельную программу в тесте.

14 ответов


после некоторых исследований, я думаю, что лучший ответ -Xerces, поскольку он реализует все XSD, является кросс-платформенным и широко используется. Я создал малый проект Java на github для проверки из командной строки с помощью синтаксического анализатора JRE по умолчанию, который обычно является Xerces. Это можно использовать в Windows / Mac / Linux.

также C++ версия Xerces доступно, если вы предпочитаете использовать это. The утилита StdInParse смогите быть использовано к вызвать его из командной строки. Кроме того, комментатор ниже указывает на это более полная утилита обертки.

вы также можете использовать xmllint, который является частью libxml. Возможно, вы уже установили его. Пример использования:

xmllint --noout --schema XSD_FILE XML_FILE

одна из проблем заключается в том, что libxml не реализует всю спецификацию, поэтому вы можете столкнуться с проблемами: (

кроме того, если вы находитесь в Windows, вы можете использовать в MSXML, но вам понадобится какая-то оболочка, чтобы назвать это, например, GUI, описанный в этом DDJ статья. Однако, похоже, большинство людей в Windows используют редактор XML, такой как Notepad++ (как описано в ответ Нейта) или XML Notepad 2007 as предложенный SteveC (есть также несколько коммерческих редакторов, которые я не буду упоминать здесь).

наконец, вы обнаружите, что разные программы, к сожалению, дают разные результаты. Это во многом связано к сложности спецификации XSD. Вы можете протестировать свою схему с помощью нескольких инструментов.

обновление: я расширил это в блоге.


есть плагин для Notepad++ под названием XML Tools который предлагает проверку XML и проверку против XSD.

вы можете увидеть, как его использовать здесь.


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

для Windows есть бесплатный XML Notepad 2007. Вы можете выбрать XSD для его проверки на


онлайн XML Schema Validator из DecisionSoft позволяет проверить XML-файл по заданной схеме.


Я использую Xerces:

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


редактор XML для быстрой и легкой проверки XML доступен наhttp://www.xml-buddy.com

вам просто нужно запустить установщик, и после этого вы можете проверить свои XML-файлы с помощью простого в использовании настольного приложения или командной строки. Кроме того, вы также получаете поддержку Schematron и RelaxNG. Также поддерживается пакетная проверка...

обновление 1/13/2012: средство командной строки свободно использовать и использует Xerces в качестве синтаксического анализатора XML.


http://www.xmlvalidation.com/

(обязательно установите флажок "проверить по внешней схеме XML")


Я просто изучаю схему. Я использую RELAX NG и использую xmllint для проверки. Я расстраиваюсь из-за ошибок, исходящих из xmlllint. Хотел бы я, чтобы они были более информативными.

Если в XML есть неправильный атрибут, то xmllint сообщает вам имя неподдерживаемого атрибута. Но если у вас отсутствует атрибут в XML, вы просто получаете сообщение о том, что элемент не может быть проверен.

Я работаю над очень сложным XML с очень сложные правила, и я новичок в этом, поэтому отслеживание того, какой атрибут отсутствует, занимает много времени.

Update: я только что нашел инструмент java, который мне очень нравится. Его можно запустить из командной строки, как xmllint, и он поддерживает RELAX NG:https://msv.dev.java.net/


Я нашел этот онлайн-валидатор из "corefiling" довольно полезным -
http://www.corefiling.com/opensource/schemaValidate.html

после попытки нескольких инструментов для проверки моего xsd, это тот, который дал мне подробную информацию об ошибке-так что я смог исправить ошибку в схеме.


один большой визуальный инструмент для проверки и генерации XSD из XML-IntelliJ IDEA, интуитивно понятный и простой.


вы можете подключить XML-схему к Intellisense Microsoft Visual Studio. Эта опция дает вам как проверку в реальном времени, так и автозаполнение, что просто потрясающе.

У меня есть этот точный сценарий, работающий на моей бесплатной копии Microsoft Visual C++ 2010 Express.


другой онлайн-валидатор XML-схемы (XSD):http://www.utilities-online.info/xsdvalidation/.


Я обычно использую xsd от Microsoft для создания xsd из файла .NET. Я также разбираю разделы xml с помощью xmlstarlet. Последним бесплатным инструментом, который будет Вам полезен, является altovaxml, который доступен по этому URL:http://www.altova.com/download_components.html .

Это позволяет мне сканировать все xml-файлы, выбирая, какой xsd использовать, анализируя xml.

# 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=$(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 / тип: CFGCLASS & переименовать schema0.xsd и CFGCLASS.xsd-схемы

чтобы получить имя xsd, которое я использую: xmlstarlet sel-t-m /XXX/*-V local-name() $1 | sed 's/ $//'

Это позволяет мне выбрать правильный XSD, используя тег элемента в xml-файле.

в результате я могу вызвать функцию bash для сканирования всех XML-файлов и проверки их. Даже если они находятся в разных подкаталогах.