Электронный магазин на Java и XML

Схема XML


Хотя определения DTD в настоящее время являются стандартом определений типов документов XML, у них есть несколько серьезных ограничений. Определения DTD были унаследованы от языка SGML, где они были исходно разработаны для определения языков разметки, а не для создания схем баз данных. Самое существенное ограничение определения DTD заключается в том, что оно не обеспечивает достаточного контроля над содержимым элементов. Например, с помощью DTD невозможно указать, что показанный ниже элемент является допустимым [Today's date — сегодняшняя дата — Примеч. перев. ]:

<todaysdate>09/01/2000</todaysdate>

Точно так же нельзя указать, что следующий элемент не является допустимым:

<todaysdate>Яйца, тост, кофе</todaysdate>

Кроме того, вам может потребоваться задать более точные ограничения на количество появлений элемента в документе. С помощью DTD этого сделать не удастся.

В результате этих ограничений, а также из-за того, что XML все больше используется для хранения данных, были предложены некоторые альтернативные варианты. В настоящее время среди них лидирует язык определений схем XML (XML Schema Definition Language, XSD).

ПРИМЕЧАНИЕ

На момент написания данной книги XSD находится в стадии разработки. Это означает, что к моменту, когда этот язык получит официальный статус, в нем могут произойти значительные изменения по сравнению с нынешней версией. Со спецификацией XSD можно ознакомиться по адресу www.w3.org/XML/Schema.html.

Назначение схем XML то же, что и DTD: определение классов документов XML. Основная разница между ними заключается в том, что в схемах XML все элементы подразделяются на два типа: простые и сложные.

Элементы, которые содержат другие элементы или атрибуты наряду с символьными данными, относятся к типу сложных (complex), а те элементы, которые содержат только символьные данные, называются простыми (simple) элементами. Атрибуты всегда имеют простой тип. В листинге 1.5 показана схема XML для каталога товаров. В листинге 1.6 приведен документ XML, использующий эту схему [On sale date — дата начала продаж, quantity in stock — количество имеющегося в наличии товара. — Примеч. перев. ].






Листинг 1.5. Схема для каталога (catalog.xsd)

<xsd:schema xmlns:xsd="http://www.w3.org/1999/XMLSchema">

<xsd:element name="Catalog" type="CatalogType"/>

<xsd:complexType name="CatalogType">

<xsd:element name="product" type="ProductType"/>

<xsd:attribute name="onSaleDate" type="xsd:date"/>

<xsd:attribute name="partNum" type="Sku"/>

</xsd:complexType>

<xsd:complexType name="ProductType">

<xsd:element name="productName" type="xsd:string"/>

<xsd:element name="quantity_in_stock">

<xsd:simpleType base="xsd:positivelnteger">

<xsd:maxExclusive value="500"/>

</xsd:simpleType>

</xsd:element>

<xsd:element name="pnce" type="xsd'decimal"/>

<xsd:element name="description" type="xsd:string" minOccurs="0"/>

</xsd:complexType>

<xsd:simpleType name="Sku" base="xsd:string">

<xsd:pat tern value="\[A-Z]{3}-[A-Z]{3}d{3}"/>

</xsd:simpleType>

</xsd:schema>

<catalog>

<product partNum="ABC-PR0336" onSaleDate="12/12/2004">

<productName>BigSoft Xtreminator 3.36</productName>

<quantity_in_stock>20</quantity_in_stock >

<price>195.99</price>

<description> Managing your life has never been so easy.</description>

</product>

<product partNura="ABC-PR0343" onSaleDate="12/12/2004">

<productName>E-Dev ProntoWorks</productName>

<quanti ty_in_stock>35</quantity_in_stock >

<price>299.99</price>

<description>The premier integrated rapid e-development suite for busy e-professionals.</description>

</product>

</catalog>

Элементы сложного типа определяются с помощью элемента compl exType. Как было уже сказано, элементы сложного типа содержат другие элементы и атрибуты. Элементы и атрибуты, содержащиеся внутри сложных элементов, определяются с помощью элементов element и attribute соответственно. Например, в листинге 1.5 элемент product определен как элемент сложного типа. Внутри определения типа ProductType определяются пять элементов: productName, quantity_in_stock, price, comment и partNum.



Элементы простого типа не имеют атрибутов и не содержат других элементов. В XSD имеется ряд встроенных простых типов, в том числе string, binary, boolean, double, float и т. д. На основе встроенных простых типов можно сконструировать дополнительные простые типы. В частности, в предыдущем примере определяется простой тип Sku, сконструированный на основании типа string.

Процесс конструирования новых простых типов из уже существующих называется ограничением (restriction). Обратите внимание, что в определении нового типа Sku используется регулярное выражение, задающее шаблон, которому должно соответствовать содержимое любого элемента или атрибута данного типа.

В схемах XSD имеются гораздо более гибкие операторы повторяемости, чем в DTD. Как говорилось выше, в DTD можно указать, что элемент должен встретиться ноль, один, один или более или любое количество раз. В дополнение к этим операторам схема XML позволяет задавать минимальное и максимальное количество повторов одного элемента в документе, его значение или диапазон значений и т. д.




Содержание раздела