5.1 Определение уникальности

XML Schema предоставляет нам возможность указать, что значение любого атрибута или элемента должно быть уникально в пределах некоторой области. Для показа уникальности значения определенного атрибута или элемента, мы сначала используем элемент unique , чтобы "выбрать" набор элементов. Затем определяем соответствующее "поле" атрибута или элемента для каждого выбранного элемента, значение которого должно быть уникально в пределах набора выбранных элементов. В случае нашей схемы отчета, report.xsd, элемент selector  с атрибутом xpath  содержит XPath выражение, regions/zip, которое выбирает список всех элементов zip в примере отчета. Аналогично, элемент field  с атрибутом xpath  содержит второе XPath выражение, @code, которое определяет, что значения атрибутов code этих элементов должны быть уникальны. Отметим, что XPath выражения ограничивают область, в которой должно удовлетворяться условие уникальности. Отчет может содержать другой атрибут code, но его значение может быть не уникальным, поскольку он располагается вне области, определенной выражениями XPath. Отметим, что XPath выражения, которые Вы можете использовать в атрибуте xpath , ограничены поднабором полного языка XPath, определенного в XML Path Language 1.0.

Мы можем также указать комбинации полей, которые должны быть уникальны. Для иллюстрации этого предположим следующее. Мы желаем ослабить ограничение, связанное с уникальностью почтовых индексов. Хотя мы все еще хотим оставить ограничение, что любое изделие перечислено только однажды в пределах действия данного почтового индекса. Такое ограничение можно обеспечить, определяя уникальность для комбинации почтового индекса и номера изделия. Из документа отчета, 4Q99.xml, объединенные значения почтового индекса code и number были бы: {95819 872-AA }, {95819 926-AA }, {95819 833-AA }, {95819 455-BX } и {63143 455-BX }. Очевидно, эти комбинации не обеспечивают однозначности по совокупности почтового индекса code и number, если они получены из одной или нескольких распечаток, сформированных только на основании, какого либо почтового кода. Поэтому не исключена двусмысленность в представлении изделий, перечисленных более одного раза в пределах одного почтового индекса. Другими словами, обработчик схемы может обнаружить нарушения ограничений уникальности.

Для определения комбинации значений, мы просто добавляем элементы field, идентифицирующие все вовлеченные значения. Поэтому, чтобы добавить часть значения номера к нашему существующему определению, мы вводим новый элемент field. Его значение part/@number атрибута xpath идентифицирует атрибут number элементов part, которые являются дочерними от элементов zip, определенных посредством regions/zip:

Уникальные составные значения

<unique name="dummy1">
 <selector xpath="r:regions/r:zip"/>
 <field xpath="@code"/>
 <field xpath="r:part/@number"/>
</unique>
Сайт создан в системе uCoz