Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

xmllint --noout --schema XSD_FILE XML_FILE

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

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

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

Обновить:Я подробно остановился на этом в запись в блоге.

Другие советы

Есть плагин для Блокнот++ вызванный Инструменты XML это обеспечивает проверку 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-блокнот 2007.Вы можете выбрать XSD-файлы, чтобы они соответствовали

Онлайн Средство проверки XML-схемы from 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-файлом с очень сложными правилами, и я новичок в этом, поэтому отслеживание того, какой атрибут отсутствует, занимает много времени.

Обновить:Я только что нашел инструмент 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=$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 /введите:CFGCLASS и переименуйте schema0.xsd CFGCLASS.xsd

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top