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

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

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

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

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

Ответ 1

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

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

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

xmllint --noout --schema XSD_FILE XML_FILE

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

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

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

ОБНОВЛЕНИЕ: я расширил это в сообщении .

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

.ОБНОВЛЕНИЕ: еще лучше, используйте Notepad++ с плагином XML Tools

Ответ 5

В режиме онлайн Validation вы можете проверить XML файл по данной схеме.

Ответ 7

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

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

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

Ответ 8

http://www.xmlvalidation.com/

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

Ответ 9

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

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

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

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

Ответ 10

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

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

Ответ 11

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

Ответ 12

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

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

Ответ 14

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

Это позволяет мне сканировать все файлы xml, которые собирают хsd, используя синтаксический анализ 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=$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/$//'

Это позволяет мне выбрать правильный XSD с помощью тега элемента в XML файле.

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