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
, значение атрибута xpath
которого
, part/@
number
, идентифицирует атрибут
number
элементов part
, которые являются дочерними от элементов zip
, определенных посредством regions/
zip
:
Уникальные
составные значения
<unique name="dummy1"> <selector xpath="r:regions/r:zip"/> <field xpath="@code"/> <field xpath="r:part/@number"/> </unique>