Элемент <xsd:key>
Указывает, что значение атрибута или элемента (либо набор значений) должно быть ключом в данной области видимости. Область видимости ключа – элемент-контейнер element в документе экземпляра. Ключ должен быть уникальным в пределах конкретной области действия, необнуляемым и постоянно доступным.
<key
id = ID
name = NCName
{any attributes with non-schema Namespace}...>
Content: (annotation?, (selector, field+))
</key>
Атрибуты
id
Идентификатор данного элемента. Значение id должно иметь тип ID и быть уникальным в пределах документа, содержащего этот элемент.Необязательно.
имя
Имя элемента key. Имя не должно содержать двоеточий (NCName), как определено в спецификации пространств имен XML.Имя должно быть уникальным в области действия ограничения IDENTITY.
Обязательный.
Сведения об элементе
Количество вхождений |
Без ограничений |
Родительские элементы |
|
Описание |
Примечания
Элемент key должен содержать в определенном порядке следующие элементы.
selector |
Элемент selector содержит XPath-выражение, определяющее множество элементов, в котором значения полей должны быть уникальными. Элемент selector должен существовать в единственном экземпляре. |
поле |
Каждый элемент field содержит XPath-выражение, определяющее значения (атрибутов или элементов), которые должны быть уникальны на множестве элементов, определяемых элементом selector. Если имеется более одного элемента field, сочетание элементов field должно быть уникальным. В этом случае значения одного элемента field могут и не быть уникальными среди выбранных элементов, но сочетание значений всех полей должно быть уникальным. Должен присутствовать как минимум один элемент field. |
Пример
В следующем примере определяется элемент keyref, соответствующий элементу key в данной схеме.
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="namespace1"
xmlns:r="namespace1"
elementFormDefault="qualified">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="A" type="r:A" maxOccurs="unbounded">
<xs:keyref name="dummy" refer="r:pNumKey">
<xs:selector xpath="part"/>
<xs:field xpath="@ref-number"/>
</xs:keyref>
</xs:element>
<xs:element name="B" type="r:B"/>
</xs:sequence>
</xs:complexType>
<xs:key name="pNumKey">
<xs:selector xpath="r:B/r:part"/>
<xs:field xpath="@key-number"/>
</xs:key>
</xs:element>
<xs:complexType name="A">
<xs:sequence>
<xs:element name="part" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="ref-number" type="xs:integer"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="B">
<xs:sequence>
<xs:element name="part" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="key-number" type="xs:integer"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>
Входные данные: key.xml
<root xmlns="namespace1">
<A>
<!-- if the ref-number is not equal to one of the key-number, the validation will give error -->
<part ref-number="1"/>
</A>
<A>
<!-- if the ref-number is not equal to one of the key-number, the validation will give error -->
<part ref-number="2"/>
</A>
<B>
<part key-number="1"/>
<part key-number="2"/>
<part key-number="3"/>
</B>
</root>
Другие ресурсы
Дополнительные сведения см. в документе «Рекомендация W3C по схемам XML, часть 1: структуры» по адресу www.w3.org/TR/2001/REC-xmlschema-1-20010502/\#element-all.