Краткий поиск показывает, что все доступные инструменты (командная строка uUnix), которые конвертируют из xsd (XML-схема) в 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) не было достойных инструментов командной строки для этих тривиальных базовых задач? Люди используют только редакторы? Это работает? Я предпочитаю командную строку, особенно потому, что хотел бы автоматизировать эти задачи.
Какие-нибудь поучительные комментарии по этому поводу?