2009-09-19 3 views
1

Je suis en train de constituer un schéma XML pour les éléments suivants:Problème de schéma Xml - impossible de savoir comment utiliser la clé!

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

Je voudrais que mon schéma pour se plaindre que Steve est là deux fois, mais je ne peux pas le faire fonctionner.

J'ai cela sous l'élément tagset dans le fichier de schéma:

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

... mais je l'ai clairement pas compris le droit, car cela ne fonctionne pas. Quelqu'un repère-t-il mon erreur?

Merci :)

Répondre

3

Il n'y a rien d'incorrect dans votre définition de clé xs: key. Avez-vous correctement référencé le XSD dans votre fichier XML?

Je copier vos données XML dans un document:

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

Alors j'ai écrit simple XSD avec vos xs: clé inclus:

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

Et il se plaint de la clé en double 'Steve' bien. Si cet exemple ne vous aide pas à trouver le problème, pourriez-vous poster plus de détails sur votre schéma et votre fichier XML?

+0

Merci - J'étais flemmard et j'utilisais Visual Studio pour créer un schéma, puis j'y ajoutais la clé. On dirait que VS a réussi à écraser la référence de l'espace de noms - ça fonctionne maintenant. –

1

Avez-vous essayé:

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

?

Questions connexes