Інструмент перевірки схеми XML (XSD)? [зачинено]


266

Зараз в офісі ми пишемо заявку, яка генерує XML-файли проти схеми, яку нам дали. У нас є схема у файлі .XSD.

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

Ми вважаємо за краще безкоштовні інструменти, що підходять для комерційного використання, хоча ми не будемо комплектувати перевіряючу схему, тому її потрібно використовувати лише розробникам під час розробки.

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


132
Мені подобається, що багато цих "
неконструктивних

1
Я розумію, звідки беруться неконструктивні. Чесно кажучи, хоча це велике питання, і дебати / аргументи іноді в кінцевому підсумку виходять із чудових відповідей
Метт

22
це саме той випадок, коли адміністратори ведуть контрпродуктивність
anon58192932

Можливо, варто заглянути в подібне питання в контексті інструменту побудови Maven .
Альберто

Відповіді:


239

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

Також є версія Cerces C ++, якщо ви хочете скористатися нею. Утиліта StdInParse може бути використана для виклику з командного рядка. Також коментатор нижче вказує на цю більш повну утиліту для обгортки .

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

xmllint --noout --schema XSD_FILE XML_FILE

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

Крім того, якщо ви перебуваєте в Windows, ви можете використовувати msxml , але для його виклику вам знадобиться якась обгортка, наприклад GUI, описана в цій статті про DDJ . Однак, здається, більшість людей в Windows використовують редактор XML, наприклад, Блокнот ++ (як описано у відповіді Ната ) або XML Блокнот 2007, як запропонував SteveC (також є кілька комерційних редакторів, про які я тут не згадую).

Нарешті, ви знайдете різні програми, на жаль, дадуть різні результати. Багато в чому це пов'язано зі складністю специфікації XSD. Ви можете протестувати схему кількома інструментами.

ОНОВЛЕННЯ . Про це я розповів у публікації в блозі .


1
Я знайшов таке корисне: jmvanel.free.fr/xsd/README.html
Меттью

Приклад використання mdinth StdinParse (на Linux) буде корисним: StdInParse -n -s -f -v = завжди <XML_FILE. XML_FILE повинен містити розташування схеми. Для мене це дає більш повні результати, ніж xmllint.
helcim

3
Чи є спосіб попросити програму використовувати xsi: schemaLocation, а не подавати всі XSD вручну?
Габор Гарамі

@GaborGarami Наразі не є, але це запит на особливості: github.com/amouat/xsd-validator/issues/5
Адріан Муат

1
xmllintна жаль, не сумісний з XML-регулярними виразками, на жаль, тому деякі дійсні XML-реджекси через нього не пройдуть
Сергій Бушманов

112

Існує плагін для Notepad ++ під назвою Інструменти XML, який пропонує перевірку та перевірку XML щодо XSD.

Ви можете побачити , як використовувати його тут .


5
-1, цей плагін болісно встановити
jcollum

2
Я тестував npp 5.8.6, XMLTools 2.3.1 unicode beta2 r805, він працює чудово.
Палані

5
Відмінний плагін. Див. Розділ Notepad ++ XmlTools Not Installing, щоб отримати довідку щодо встановлення.
навантажений

16
А з версією 5.8.7, власний диспетчер плагінів Notepad ++ ("Плагіни / менеджер плагінів") робить процес встановлення автоматичним.
Заправлено

1
@FranzEbner У мене була ця сама проблема. Якщо , наприклад , XMLсам посилається на XSDфайл, xsi:noNamespaceSchemaLocation="file.xsd"то інструменти XML спробують використовувати його замість того, щоб надати діалог "встановити".
theblang

22

xmlstarlet - це інструмент командного рядка, який зробить це та інше:

$ xmlstarlet val - допомогти
Інструментарій XMLStarlet: перевірка документів XML
Використання: xmlstarlet val <варіації> [<xml-file-or-uri> ...]
де <варіанти>
  -w або - добре сформовано - підтверджуйте лише чітку форму (за замовчуванням)
  -d або --dtd <dtd-file> - перевірити DTD
  -s або --xsd <xsd-file> - перевірити схему XSD
  -E або --embed - перевірити за допомогою вбудованого DTD
  -r або --relaxng <rng-file> - перевірити схему Relax-NG
  -e або --err - друкує багатослівні повідомлення про помилки на stderr
  -b або --list-bad - список лише файлів, які не підтверджують
  -g або --list-good - перелік лише тих файлів, які підтверджують
  -q або --quiet - не перераховуйте файли (тільки повертайте код результату)

ПРИМІТКА: XML-схеми ще не повністю підтримуються через її неповну
      підтримка в libxml2 (див. http://xmlsoft.org)

XMLStarlet - це інструментарій командного рядка для запиту / редагування / перевірки / перетворення
XML-документи (для отримання додаткової інформації див. Http://xmlstar.sourceforge.net/)

Використання у вашому випадку буде таким чином:

xmlstarlet val --xsd your_schema.xsd your_file.xml

3
Чи знаєте ви, наскільки серйозним є попередження про не повністю підтримку xml-схем?
Джейсон Дагіт

2
Судячи з інших відповідей, xmlstarlet трохи слабкий щодо своєї реалізації xsd.
Джейсон Дагіт

3
Враховуючи, що xmlstarlet просто використовує libxml2 під кришкою, можливо, простіше просто використовувати xmllint, який в комплекті з libxml2 та пояснений у прийнятій відповіді.
Адріан Муат

@JasonDagit, ... він такий же слабкий, як і xmllint - вони використовують ту ж саму реалізацію бібліотеки.
Чарльз Даффі

Змістова модель не детермінована. :-(
Грег

16

Для Windows існує безкоштовний XML Notepad 2007 . Ви можете вибрати XSD для його перевірки

ОНОВЛЕННЯ: ще краще, використовуйте Notepad ++ за допомогою плагіна XML Tools



3

Я використовую Xerces:

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


1
Чи є у них командний рядок, який можна використовувати з консолі, щоб перевірити перевірку файлу XSLT щодо XSD XSLT 2.0?
Алексіс Вілке

Так, ви можете встановити інструмент CLI з, sudo apt install libxerces-c-samplesа потім перевірити документ StdInParse -v=always -n -s < document.xml.
jgrocha


2

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

Якщо в XML є неправильний атрибут, то xmllint повідомляє вам ім'я непідтримуваного атрибута. Але якщо у вас відсутній атрибут у XML, ви просто отримаєте повідомлення про те, що елемент не може бути перевірений.

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

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


2

Мені здається, що цей онлайн-валідатор від 'corefiling' є досить корисним -
http://www.corefiling.com/opensource/schemaValidate.html

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


2

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

Вам просто потрібно запустити інсталятор, після чого ви можете перевірити свої XML-файли за допомогою простого у користуванні настільного додатка або командного рядка. Крім того, ви також отримуєте підтримку для Schematron та RelaxNG. Підтримка пакету також підтримується ...

Оновлення 13.01.2012: Інструмент командного рядка вільний для використання та використовує Xerces як парсер XML.


1

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


1

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

У мене такий точний сценарій працює на моїй безкоштовній копії Microsoft Visual C ++ 2010 Express.



0

Я схильний використовувати 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 / type: CFGCLASS & перейменувати schema0.xsd CFGCLASS.xsd

Для отримання імені xsd я використовую: xmlstarlet sel -t -m / XXX / * -v local-name () $ 1 | sed 's / $ //'

Це дозволяє мені підбирати правильний XSD за допомогою тегу елементів у файлі xml.

Результатом цього є те, що я можу викликати функцію bash для сканування всіх XML-файлів та перевірки їх. Навіть якщо вони знаходяться в декількох підкаталогах.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.