2009-09-19 3 views
1

Пытаюсь составляет схему XML для следующих целей:Проблема с схемой Xml - не может решить, как использовать ключ!

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

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

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

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

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

Спасибо :)

ответ

3

В коде 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 с вашим хзом: ключ в комплекте:

<?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> 

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

+0

Спасибо. Я был ленив и использовал Visual Studio, чтобы создать мне схему, а затем добавил ключ. Похоже, что VS удалось смять ссылку на пространство имен - теперь она работает. –

1

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

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

?