XSD уникальное ограничение в элементах родственного элемента - PullRequest
0 голосов
/ 01 мая 2020

У меня есть файл ниже XML. Я пытаюсь создать уникальное ограничение в файле XML, чтобы идентификатор библиотеки был уникальным в библиотеке. Я пытался создать его, но смог создать уникальное ограничение внутри группы.

<library>
  <group>
    <groupName>Group 1</groupName>
    <books>
      <book>
        <name>Aa</name>
        <id>11</id>
      </book>
      <book>
        <name>Bb</name>
        <id>12</id>
      </book>
    </books>
  </group>
  <group>
    <groupName>Group 1</groupName>
    <books>
      <book>
        <name>Cc</name>
        <id>11</id>
      </book>
      <book>
        <name>Dd</name>
        <id>14</id>
      </book>
    </books>
  </group>
</library>

В данном файле имя книги 'Cc' имеет идентификатор 11, который совпадает с именем книги 'Aa и, следовательно, проверка должна потерпеть неудачу. Пожалуйста, помогите мне, где я go не так Вот мой файл xsd

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="library">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="group">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="groupName" type="xs:string" />
              <xs:element name="books">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" name="book">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="name" type="xs:string" />
                          <xs:element name="id" type="xs:unsignedByte" />
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
                <xs:unique name="uniqueRegAddr">
                  <xs:selector xpath="book"/>
                  <xs:field xpath="id"/>
                </xs:unique>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

1 Ответ

1 голос
/ 01 мая 2020

Это элемент library, который недопустим, если есть две книги с одинаковым идентификатором, поэтому ограничение уникальности должно быть определено для library. Вы определили ограничение на допустимость элемента books, который слишком узок.

...