Поделиться через


Элемент <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.

    Обязательный.

Сведения об элементе

Количество вхождений

Без ограничений

Родительские элементы

элемент

Описание

annotation, field, selector

Примечания

Элемент 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.

См. также

Ссылки

Справочник по XML-схемам (XSD)

Элементы XML-схемы