Проблема XML-схемы - не получается понять, как использовать ключ! - PullRequest
1 голос
/ 20 сентября 2009

Я пытаюсь создать схему XML для следующего:

<tagSet>
  <Structure>
    <tag>
      <name>Steve</name>
    </tag>
    <tag>
      <name>Bob</name>
    </tag>
    <tag>
      <name>Steve</name>
    </tag>
  </Structure>
</tagSet>

Я бы хотел, чтобы моя схема жаловалась, что Стив там дважды, но я не могу заставить его работать.

У меня есть это под элементом tagSet в файле схемы:

<xs:key name="key" >
      <xs:selector xpath="Structure/tag" />
      <xs:field xpath="name" />
    </xs:key>

... но я явно не правильно понял, так как это не работает. Кто-нибудь заметит мою ошибку?

Спасибо:)

Ответы [ 2 ]

3 голосов
/ 20 сентября 2009

В вашем определении ключа xs: нет ничего неправильного. Правильно ли вы ссылались на XSD в своем XML-файле?

Я скопировал ваши XML-данные в документ:

<?xml version="1.0" encoding="utf-8" ?>
<tagSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="test.xsd">
  <Structure>
    <tag>
      <name>Steve</name>
    </tag>
    <tag>
      <name>Bob</name>
    </tag>
    <tag>
      <name>Steve</name>
    </tag>
  </Structure>
</tagSet>

Тогда я написал простой XSD с вашим ключом xs:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="tagSet">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Structure" type="Structure-type" />
      </xs:sequence>
    </xs:complexType>

    <xs:key name="key">
      <xs:selector xpath="Structure/tag" />
      <xs:field xpath="name" />
    </xs:key>
  </xs:element>

  <xs:complexType name ="Structure-type">
    <xs:sequence>
      <xs:element name ="tag" type="tag-type" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="tag-type">
    <xs:sequence>
      <xs:element name="name" type="xs:string" />
    </xs:sequence>
  </xs:complexType>

</xs:schema>

И он жалуется на дубликат ключа «Стив» в порядке. Если этот пример не помогает вам найти проблему, не могли бы вы опубликовать более подробную информацию о вашей схеме и XML-файле?

1 голос
/ 20 сентября 2009

Вы пробовали:

<xs:key name="key" >
  <xs:selector xpath=".//Structure/tag" />
  <xs:field xpath="name" />
</xs:key>

...