Генерация XML-схем из XML с помощью inst2xsd

В более ранняя запись в блоге Я писал об использовании Транг чтобы генерировать XML-схема из XML исходный документ. В этой записи блога я буду смотреть на использование Apache XMLBeans «s инструмент называется inst2xsd также генерировать XML-схему из исходного XML-файла.

В большинстве случаев можно было бы определить XML-схему, а затем сгенерировать XML, соответствующий этой схеме. Тем не менее, я был удивлен тем, сколько раз мне нужно подходить к XML и XML-схеме с «обратной» точки зрения. Обычно это тот случай, когда мне предоставляют XML из другого источника и я хочу использовать платформу или инструмент, который полагается на XSD для правильной работы. Например, если я хочу использовать JAXB «s XJC компилятор связывания для генерации классов Java, но только с примером XML-файла и без XSD, инструмент, подобный inst2xsd, очень полезен для генерации этого XSD.

Инструмент inst2xsd является частью Apache XMLBeans и может быть загружен с одного из Apache скачать зеркала , Весь ZIP-файл является относительно небольшим, и инструмент находится в каталоге bin разархивированного содержимого.

Привлекательной особенностью inst2xsd является ее простота. На следующем снимке экрана показано относительно простое использование команд. Эти выходные данные можно получить, запустив inst2xsd без каких-либо параметров или исходных XML-файлов или запустив его с параметром -help.

inst2xsd Справка / Использование

Как указывается в информации об использовании / помощи, существует несколько шаблонов разработки схемы XML, которые можно использовать при использовании inst2xsd для генерации файлов схемы XML из исходного XML. Солнце документ Представление шаблонов проектирования в XML-схеме предоставляет обзор трех шаблонов проектирования XML-схем, которые поддерживает inst2xsd ( Русская матрешка , Ломтик салями , а также Жалюзи [по умолчанию в inst2xsd]), а также охватывает четвертый райский сад. Те же четыре шаблона проектирования XML-схемы также рассматриваются в эта презентация ,

Чтобы продемонстрировать использование inst2xsd, требуется исходный XML-файл. В следующем листинге кода показан простой XML-файл, который будет использоваться в качестве источника в этом примере.

publications.xml

<? xml version = "1.0&quot;?> <публикации> <публикация title = "Применение Flash к Java: Flex и OpenLaszlo" publishingDate = "2008-10-20" publisher = "Colorado Software Summit" url = " http://softwaresummit.org/2008/speakers/marx.htm "description =" Использование Flex и OpenLaszlo с Java EE. "> <themes> <topic> Flash </ topic> <topic> Java </ topic> <topic> Flex </ topic> <topic> OpenLaszlo </ topic> < topic> RIA </ topic> <topic> Интернет </ topic> </ themes> </ publishing> <публикация title = "Java Management Extensions (JMX) около 2008 года" publishingDate = "2008-10-21" publisher = "Колорадо Саммит по программному обеспечению "url =" http://softwaresummit.org/2008/speakers/marx.htm "description =" JMX в 2008 году стал проще, более открытым и более полезным. "> <themes> <topic> Java Management Extensions </ topic> <topic> JMX </ topic> <topic> Java </ topic> <topic > Spring Framework </ topic> <topic> Веб-службы </ topic> </ themes> </ публикация> <публикация title = "Рекомендации по использованию API-интерфейса для базовых функций Java"> <themes> <topic> Java </ topic> <topic > JPA </ topic> <topic> ORM </ topic> <topic> Oracle </ topic> <topic> RDBMS </ topic> <topic> Рекомендации </ topic> </ themes> </ публикация> <название публикации = "Добавьте немного весны в свой доступ к JDBC Oracle" publishingDate = "2005-11" publisher = "Сеть технологий Oracle" url = " http://www.oracle.com/technology/pub/articles/marx_spring.html "description =" Использовать поддержку Spring Framework JDBC с Oracle DB. "> <themes> <topic> Spring Framework </ topic> <topic> Oracle </ topic> <topic> Java </ topic> <topic> JDBC </ topic > <topic> RDBMS </ topic> </ themes> </ publishing> <публикация title = "Дополнительные рекомендации JSP" publishingDate = "2003-07-25" publisher = "JavaWorld" url = " http://www.javaworld.com/javaworld/jw-07-2003/jw-0725-morejsp.html "description =" Дополнительные и обновленные советы по улучшению страниц JavaServer. "> <themes> <topic> JavaServer Pages </ topic> <topic> JSP </ topic> <topic> Рекомендации </ topic> <topic> Поддерживаемость </ topic> <topic> Web </ topic> </ themes> </ publishing> <публикация title = "JSP Best Practices" publishingDate = "2001-11-29" publisher = "JavaWorld" url = " http://www.javaworld.com/javaworld/jw-11-2001/jw-1130-jsp.html "description =" Советы по повторно используемым и поддерживаемым страницам JavaServer. "> <themes> <topic> JavaServer Pages </ topic> <topic> JSP </ topic> <topic> Рекомендации </ topic> <topic> Поддерживаемость </ topic > <topic> Интернет </ topic> </ themes> </ публикация> </ публикации>

На следующем снимке экрана показана команда inst2xsd, запускаемая четыре раза. Эти четыре команды определяют три доступных шаблона проектирования ( Русская матрешка через "RD", Ломтик салями через 'ss' и Жалюзи через 'vb'), а также по умолчанию (дизайн явно не указан), что на самом деле эквивалентно запуску с указанным Venetian Blind. Другие параметры, используемые в этих командах, включают явную спецификацию выходного каталога для сгенерированных файлов XSD и спецификацию префикса сгенерированных имен файлов.

Запуск inst2xsd со всеми доступными шаблонами проектирования

Следующие три листинга кода показывают результат работы inst2xsd, как показано выше. Обратите внимание, что я не показываю результаты запуска шаблона проектирования по умолчанию, потому что они в точности совпадают с явным указанием жалюзи с параметром 'vb'.

russian_doll_schema0.xsd

<? xml version = "1.0" encoding = "UTF-8&quot;?> <xs: schema attributeFormDefault = "unqualified" elementFormDefault = "qualified" xmlns: xs = " http://www.w3.org/2001/XMLSchema "> <xs: element name =" публикации "> <xs: complexType> <xs: sequence> <xs: имя элемента =" публикация "maxOccurs =" unbounded "minOccurs =" 0 "> <xs: complexType> <xs: sequence> <xs: element name = "themes"> <xs: complexType> <xs: sequence> <xs: element type = "xs: string" name = "topic" maxOccurs = "неограниченный" minOccurs = "0" /> </ xs: sequence> </ xs: complexType> </ xs: element> </ xs: sequence> <xs: attribute type = "xs: string" name = "title" use = "необязательный" /> <xs: attribute type = "xs: string" name = "publishingDate" use = "необязательно" /> <xs: attribute type = "xs: string" name = "publisher" use = "необязательно" /> <xs: attribute type = " xs: anyURI "name =" url "use =" необязательный "/> <xs: attribute type =" xs: string "name =" description "use =" необязательный "/> </ xs: complexType> </ xs: element > </ xs: sequence> </ xs: complexType> </ xs: element> </ xs: schema>

salami_slice_schema0.xsd

<? xml version = "1.0" encoding = "UTF-8&quot;?> <xs: schema attributeFormDefault = "unqualified" elementFormDefault = "qualified" xmlns: xs = " http://www.w3.org/2001/XMLSchema "> <xs: element name =" topic "type =" xs: string "/> <xs: element name =" themes "> <xs: complexType> <xs: sequence> <xs: element ref =" topic "maxOccurs = "unbounded" minOccurs = "0" /> </ xs: sequence> </ xs: complexType> </ xs: element> <xs: element name = "публикации"> <xs: complexType> <xs: sequence> < xs: element ref = "публикация" maxOccurs = "неограниченный" minOccurs = "0" /> </ xs: sequence> </ xs: complexType> </ xs: element> <xs: element name = "публикация"> <xs : complexType> <xs: sequence> <xs: element ref = "themes" /> </ xs: sequence> <xs: attribute type = "xs: string" name = "title" use = "необязательный" /> <xs : attribute type = "xs: string" name = "publishingDate" use = "необязательно" /> <xs: attribute type = "xs: string" name = "publisher" use = "необязательно" /> <xs: attribute type = "xs: anyURI" name = "url" use = "необязательный" /> <xs: attribute type = "xs: string" name = "description" use = "необязательный" /> </ xs: complexType> </ xs: элемент> </ xs: схема>

venetian_blind_schema0.xsd

<? xml version = "1.0" encoding = "UTF-8&quot;?> <xs: schema attributeFormDefault = "unqualified" elementFormDefault = "qualified" xmlns: xs = " http://www.w3.org/2001/XMLSchema "> <xs: element name =" publishing "type =" publicationsType "/> <xs: complexType name =" publishingType "> <xs: sequence> <xs: element type =" themesType "name =" themes "/> < / xs: sequence> <xs: attribute type = "xs: string" name = "title" use = "необязательный" /> <xs: attribute type = "xs: string" name = "publishingDate" use = "необязательный" / > <xs: attribute type = "xs: string" name = "publisher" use = "необязательный" /> <xs: attribute type = "xs: anyURI" name = "url" use = "необязательный" /> <xs: attribute type = "xs: string" name = "description" use = "необязательный" /> </ xs: complexType> <xs: complexType name = "publishingType"> <xs: sequence> <xs: element type = "publishingType" name = "публикация" maxOccurs = "неограниченный" minOccurs = "0" /> </ xs: sequence> </ xs: complexType> <xs: complexType name = "themesType"> <xs: sequence> <xs: element type = "xs: string" name = "topic" maxOccurs = "unbounded" minOccurs = "0" /> </ xs: sequence> </ xs: complexType> </ xs: schema>

Приведенные выше примеры демонстрируют, как легко создать файл определения схемы XML из исходного файла XML в соответствии с желаемым шаблоном проектирования схемы XML. Можно выбрать преимущества и функции, которые он или она желает в схеме, и выбрать шаблон, который наиболее соответствует этим ожиданиям. Если вам интересно, откуда взялись в этом контексте названия «Русская кукла», «Кусок салями» и «Венецианские жалюзи» или, в частности, как они связаны с XML-схемами, см. это объяснение , В этом же документе также объясняется, почему разные шаблоны проектирования могут быть предпочтительнее для разных ситуаций.

Уже рассмотренные примеры демонстрируют центральное значение inst2xsd. Однако у него есть и другие приятные функции. Например, как указано в информации об использовании, показанной ранее, параметр -validate может использоваться для проверки исходного XML по только что сгенерированной XML-схеме как часть процесса генерации XML-схемы. Это показано на следующем снимке экрана.

Проверка исходного XML с помощью сгенерированной XML-схемы

Существует также опция -verbose, чтобы увидеть весь вывод, как часть процесса генерации XML-схемы. Наконец, стоит отметить, что inst2xsd также требует правильно сформированного XML для генерации XSD. Если исходный XML не является правильно сформированным, часто будет отображаться сообщение об ошибке, подобное одному из следующих:

Пролог источника XML отсутствует, закрывающий вопросительный знак

Исходный код XML сформирован некорректно из-за закрытого тега

Инструмент Apache XMLBeans inst2xsd - это простой, но очень полезный инструмент для генерации файлов XML Schema из исходного XML. Инструмент позволяет использовать различные шаблоны проектирования XML-схем. После создания файла XML-схемы его можно изменить вручную, чтобы он был более описательным или более узким в своих определениях.

Похожие

SnapLogic Советы и хитрости: Снимок генератора XML (часть 1)
... помощью XML Generator Snap. Мы предоставляем образец XSD (происходящий из: http://www.w3schools.com/schema/schema_example.asp ) определяется как: <? xml version = "1.0" encoding = "UTF-8&quot;?>
Как исправить Overscan при использовании телевизора в качестве монитора ПК
Потоковая передача может неуклонно заменять старые добрые кабели в качестве средства просмотра медиаконтента на ПК на наших телевизорах, но еще есть что сказать о прямом использовании кабеля HDMI. Качество передачи данных безупречно, и это, безусловно, лучший вариант, если ваш компьютер находится в той же комнате, что и телевизор. Но есть большая вероятность, что у вас возникнут проблемы с пересканированием, когда края рабочего стола выходят за края телевизора, и вы не можете видеть все, что
Как установить и запустить Android Apps (APKs) в Linux с помощью Shashlik
... сновном это набор программных компонентов, которые позволяют пользователям Linux устанавливать и запускать Android APK прямо в своем дистрибутиве GNU / Linux. Shashlik достигает этого, используя урезанную версию Android вместо эмулируемой версии, которая вкладывается в пользовательский сеанс после запуска установленного приложения Android. Рендеринг графики в приложении осуществляется инфраструктурой OpenGL нашей системы, поэтому производительность хороша для того, что хорошо поддерживается.
Как: создать карту сайта и зарегистрировать ее в Google
Карта сайта - это своего рода страница содержимого для вашего сайта, содержащая URL-адреса всех вложенных страниц в домене. Карта сайта сообщает Google и другим поисковым системам обо всей структуре вашего веб-сайта, а также может содержать важные метаданные, например, когда страница обновлялась в последний раз, как часто она редактировалась и насколько важны отдельные страницы. Также возможно создать карту сайта с видео или изображением, чтобы сделать эти медиафайлы также доступными для
Голосовой ввод Google Doc: секретное оружие для повышения производительности
Реклама Я никогда не был большим поклонником голосовой диктовки. Родившись с клавиатурой и мышью в руке, я всегда чувствовал себя более комфортно, и мой словесный WPM не может сравниться с моей скоростью печати. Но я использую Google Docs каждый божий день, поэтому, когда я узнал, что у него есть функция голосового набора текста, я подумал, что я также могу попробовать его. По общему признанию, я опоздал на игру - она ​​впервые дебютировала в начале 2016 года - но лучше
Quot;?
Мы предоставляем образец XSD (происходящий из: http://www.w3schools.com/schema/schema_example.asp ) определяется как: <?