Конвертация Xsd в rnc (или rng) (командная строка unix)

Краткий поиск показывает, что все доступные инструменты (командная строка uUnix), которые конвертируют из xsd (XML Schema) в rng (RelaxNG) или rnc (compact RelaxNG), имеют проблемы своего рода.

Во-первых, если я использую rngconv:

$ wget https://msv.dev.java.net/files/documents/61/31333/rngconv.20060319.zip
$ unzip rngconv.20060319.zip
$ cd rngconv-20060319/
$ java -jar rngconv.jar my.xsd  > my.rng

У него нет способа отменить нормализацию элементов, поэтому все они в конечном итоге становятся альтернативными начальными элементами (кажется, что это тоже немного глючит).

Trang является альтернативой, но он не поддерживает файлы xsd на входе только на выходе (почему?). Однако он поддерживает DTD. Сначала приходит на ум преобразование в DTD, но трудно найти и твердый xsd2dtd. Тот, что ниже:

 $ xsltproc http://crism.maden.org/consulting/pub/xsl/xsd2dtd.xsl in.xsd > out.dtd

Кажется, глючит.

Все это очень удивительно. За все эти годы использования XML (ab) не было достойных инструментов командной строки для этих тривиальных базовых задач? Люди используют только редакторы? Это работает? Я предпочитаю командную строку, особенно потому, что я хотел бы автоматизировать эти задачи.

Какие-нибудь поучительные комментарии по этому поводу?

5 ответов

Преобразование XSD - очень сложная задача; спецификация XSD немного кошмарна и чрезвычайно сложна. Из некоторых быстрых исследований кажется, что от RelaxNG легко перейти к XSD, но обратное может быть неверным или даже невозможным (что объясняет ваш вопрос о Транге).

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

Лучшим советом может быть, по возможности, избегать XSD или, по крайней мере, использовать RNG в качестве окончательного документа и генерировать XSD из этого. Вы также можете взглянуть на schematron.

Правда, trang не принимает xsd на входной стороне. Однако Trang может взять набор xml-файлов, которые должны соответствовать спецификации, и сгенерировать схему rnc или rng, в отношении которой они все будут действительны.

Недостатки:

  • Требуется много совместимых XML-файлов (я думаю, чем больше, тем лучше)
  • Результирующая схема, вероятно, все еще может использовать некоторые настройки.

Пример дела:

Если мои совместимые XML-файлы спрятаны в 1.xml 2.xml 3.xml 4.xml 5.xml

следующая команда скажет trang вывести схему rnc, которая будет действительна для всех из них:

java -jar trang.jar -I xml -O rnc 1.xml 2.xml 3.xml 4.xml 5.xml foo.rnc

Заключение

Если у вас есть хороший набор тестовых XML-файлов, которые соответствуют вашей схеме (или вы можете легко их создать), это может быть лучшим вариантом.

Я желаю вам удачи.

В список добавлен онлайн-конвертер ( XSD -> RNG) http://relaxng.org/#conversion, Я пытался преобразовать maven-v4_0_0.xsd для проверки файлов pom.xml в emacs, но безуспешно. Сайт также содержит таблицу стилей XSL, которую вы можете использовать с xsltprocне могу ручаться за качество результата...

Другая возможность может быть http://www.brics.dk/schematools/, но я еще не пробовал.

Опять же, в отношении редакторов: я вижу, что нет способа сделать это с Oxygen, который, кажется, является популярным инструментом.

Другие вопросы по тегам