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

252

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

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

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

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

  • 110
    Мне нравится, что многие из этих "неконструктивных" вопросов являются лучшими в результатах поиска Google по тем вещам, которые я ищу, и ответы полезны
  • 1
    Я понимаю, откуда взялись с неконструктивными. Честно говоря, хотя это великий вопрос, и споры / аргументы иногда в конечном итоге превращаются в отличные ответы
Показать ещё 2 комментария
Теги:
validation
schema
xsd

14 ответов

224
Лучший ответ

После некоторых исследований я считаю, что лучший ответ 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. Вы можете протестировать свою схему несколькими инструментами.

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

  • 1
    Я нашел следующее полезное: jmvanel.free.fr/xsd/README.html
  • 0
    Может быть полезен пример использования StdinParse (в Linux): StdInParse -n -s -f -v = всегда <XML_FILE. XML_FILE должен включать расположение схемы. Для меня это дает более полные результаты, чем xmllint.
Показать ещё 8 комментариев
112

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

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

  • 0
    Этот плагин утверждает, что все мои файлы действительны, даже если они не являются. (npp 5.7, XMLTools 2.3.1 unicode beta2 r805)
  • 5
    -1, этот плагин - боль в установке
Показать ещё 10 комментариев
22

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
  • 3
    Знаете ли вы, насколько серьезным является предупреждение о неполной поддержке XML-схем?
  • 2
    Судя по другим ответам, xmlstarlet немного слаб в реализации xsd.
Показать ещё 3 комментария
14

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

5

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

  • 1
    Ссылка больше не доступна ...
  • 1
    Теперь он доступен - он перенаправляет на corefiling.com/opensource/schemaValidate.html
3

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

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

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

3

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

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

  • 1
    Есть ли у них командная строка, которую можно использовать из консоли для проверки валидации XSLT-файла на соответствие XSD XSLT 2.0?
2

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

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

2

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

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

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

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

2

http://www.xmlvalidation.com/

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

  • 2
    -1, не работает в firefox
  • 0
    @jcollum Кажется, сейчас.
1

Еще один модуль проверки подлинности XML-схемы (XSD): http://www.utilities-online.info/xsdvalidation/.

1

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

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

1

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

0

Я использую 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 и проверки их. Даже если они находятся в нескольких подкаталогах.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню