2010-11-07 11 views
1

Je prends mes premiers pas dans la terre d'un schéma XML, en utilisant XSD, et je suis en train de comprendre comment ajouter une contrainte telle qu'un attribut (défini avec une valeur fixe) ne peut être présent que sur un élément d'un ensemble illimité d'éléments.Contraindre un attribut fixe telle qu'elle ne peut apparaître sur un élément

Voici un exemple

<Object> 
    <Element>Value1</Element> 
    <Element>Value2</Element> 
    <Element Default="true">Value3</Element> 
    <Element>Value4</Element> 
    <Element>Value5</Element> 
</Object> 

Je voudrais limiter l'Default attribut tel qu'il ne peut apparaître sur plus d'un Element.

Voici le schéma XSD pour ce qui précède:

<xs:element name="Object"> 
    <xs:complexType> 
     <xs:element name="Element" maxOccurs="unbounded"> 
      <xs:simpleContent> 
       <xs:extension base="xs:string"> 
        <xs:attribute name="Default" fixed="true"/> 
       </xs:extension> 
      </xs:simpleContent> 
     </xs:element> 
    </xs:complexType> 
</xs:element> 

J'ai essayé de jouer avec xs:unique, xs:selector et xs:field, mais atteint aucun résultat significatif, pas sûr si c'est la bonne approche.

Merci!

+1

Cette question m'a valu l'insigne Tumbleweed, youpi :) –

Répondre

1

J'ai fait de mon mieux pour concevoir un xsd pour vous. La façon possible d'atteindre l'exigence est de définir l'élément element plus de ceux, mais ce n'est pas autorisé en XSD provoquant une erreur populaire « essayer de faire XSD Ambigu »

Ainsi, votre exigence est certainement impossible à réaliser tout comme .

Je voudrais suggérer de définir différents noms d'éléments.

exemple :: définir DefElement avec attribut et Element sans attribut. Cela fonctionnerait pour vous.

+0

Merci beaucoup pour votre effort :) J'ai accepté la réponse même si elle constitue une solution de rechange. –

1

question ancienne mais regardez ici: XSD Specifying an attribute that can be used only once in the XML

Il y a une solution proche (mais pas complète): définir l'attribut comme une valeur booléenne (seule vraie), en option, aucune valeur par défaut et unique.

(+) - Ne vérifier qu'il n'y a qu'un seul défaut = « true » - Ne vérifier qu'il n'y a qu'un seul attribut par défaut défini

(-) - Ne pas vérifier qu'il existe au moins un attribut par défaut défini