Больше, чем любая другая Рекомендация W3C, XSD является наиболее критикуемой. Есть много причин для критики, но давайте посмотрим на самую болезненную,
читаемость .
Я хочу прочитать описание XML
Существует широко используемая технология описания структуры данных XML, которая называется XSD Schema. Вы пишете XSD для своих данных XML, а затем отправляете его другим сторонам запланированного обмена данными, чтобы сохранить структуру XML. Когда человек на другой стороне получает Схему, ему нужно понять структуру данных и подготовить API.
На самом деле ему нужно прочитать что-то вроде этого:
<xs:element name="Books">
<xs:complexType>
<xs:sequence>
<xs:element name="Book" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="title" type="xs:string" use="required"/>
<xs:attribute name="author" type="xs:string" use="required"/>
<xs:attribute name="pagecount" type="xs:integer" use="optional"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
Для компьютера не проблема прочитать XSD, но для человека это немного утомительно. Итак, сначала вы просто будете использовать
«эскиз» , пример данных с закомментированными типами данных.
<Books>
<Book title="required string" author="required string" pagecount="optional int"/>
</Books>
Таким образом, нам достаточно удобно объяснить, как должны выглядеть данные XML, но парсеру нужен реальный язык схемы для проверки, поэтому нам нужно поддерживать несколько описаний и синхронизировать их. Мы видим, как это происходит в этом и во многих других случаях использования. Но есть несколько других доступных языков схемы. Давайте посмотрим на
XDefinition , который ближе всего подходит к вашему первому «эскизу».
XDefinition
XDefinition — это язык схемы, разработанный с самого начала в тесной связи с естественной читаемостью, сохраняя форму источника данных XML. Предназначен для понимания не только программистами, но и аналитиками, системными архитекторами и всеми другими участниками проекта. Такой подход не оставляет места для неправильной интерпретации описания данных во время их обмена, начиная с архитекторов и заканчивая специалистами по базам данных. Итак, взгляните на полное XDefinition нашего примера XML.
<xd:def xmlns:xd = "http://www.syntea.cz/xdef/2.0"
xd:name = "Books"
xd:root = "Books">
<Books>
<Book title="required string" author="required string" pagecount="optional int"
xd:script="occurs *"/>
</Books>
</xd:def>
Реализации процессора XDefinition доступны в Java 1.3-1.6 и .NET. Первое, о чем вы, вероятно, думаете, это то, что он не может полностью заменить функциональность XSD … но он может и гораздо больше, чем просто заменить его.
Не только проверка
Возможности
XDefinition выходят за пределы концепции валидации. Существует возможность выполнить
преобразование документа на основе значений входного документа или других входных данных, например базы данных, доступ к которой осуществляется
внешними методами . Внешние методы — это методы классов, доступные через загрузчик классов контекста, доступный процессору XDefinition. Это означает, что вы можете запустить свой собственный код из XDefintion и использовать результат при обработке документа XML.
Служба поддержки
Существует доступный плагин для
IDE NetBeans, обеспечивающий широкую поддержку XDefintion, плагин для проверки XML в
редакторе oXygen XML , плагины для
Eclipse и
IDE IntelliJ IDEA находятся на ранней стадии разработки. Плагин NetBeans поставляется с контекстной справкой, примером проекта, собственным типом данных XDefinition, возможностью проверки XDefinition, отслеживанием ошибок и возможностью проверки документов XML.
Не бойся попробовать что-то еще
Есть еще много интересного о XDefinition, ищите их в сети
программной группы Syntea или на
странице XDefintion .
Ресурсы: