2010-03-03 3 views
5

je le code XML suivant:XSD - La limitation des valeurs d'attribut à un autre élément valeur de l'attribut

<Content name="contentName1"> 
    <!-- Some sub elements here --> 
</Content> 

<Sequence Name="sequenceName1"> 
    <Content name="contentName1" /> 
    <!-- Some sub elements here --> 
</Sequence> 

avec le XSD suivant

<xs:element maxOccurs="unbounded" name="Content"> 
    <xs:complexType> 
     <xs:attribute name="Name" type="xs:string" use="required" /> 
     <!-- other definitions here --> 
    </xs:complexType> 
</xs:element> 

<xs:element maxOccurs="unbounded" name="Sequence"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element maxOccurs="unbounded" name="Content"> 
       <xs:complexType> 
        <xs:attribute name="ContentName" type="xs:string" use="required" /> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
     <xs:attribute name="Name" type="xs:string" use="required" /> 
    </xs:complexType> 
</xs:element> 

Dans le XSD, comment puis-je dire à l'attribut ContentName de les éléments Content de Sequence n'acceptent que la valeur déclarée dans les éléments ContentName of Content? Par exemple: avec le XML fourni ci-dessus, seul ContentName1 sera accepté dans le contenu de la séquence.

Répondre

2

Les définitions de contraintes d'identité sont utilisées pour appliquer les relations de clé primaire et étrangère uniques. Vous devez d'abord définir un élément clé pour l'élément de contenu, puis utiliser un élément clé dans l'élément de contenu interne pour que le validateur de schéma applique la condition que vous avez mentionnée.
Reportez-vous le lien ci-dessous présente quelques exemples aussi bien, aussi le tutoriel en xfront pour xsd couvre quelques exemples -

http://www.w3.org/TR/xmlschema11-1/#Identity-constraint_Definition_details
http://www.xfront.com/files/xml-schema.html

-1

je ne suis pas bon dans xsd aussi, mais peut-être vous changerez <xs:attribute name="Name" type="xs:string" use="required" /> à <xs:attribute name="Name" type="contentNames" use="required" />

et créer

<xs:simpleType name="contentNames" > 
    <xs:restriction base="xs:token"> 
     <xs:enumeration value="contentName1"/> 
     <xs:enumeration value="contentName2"/> 

     <xs:pattern value="contentName[1234567890][1234567890]"/> 
     <xs:enumeration value="contentName1"/> 
    </xs:restriction> 
    </xs:simpleType> 

pour

<xs:pattern value="contentName[1234567890][1234567890]"/> 

contentName1-99 mais ne sais pas si vous pouvez utiliser <xs:enumeration/> aussi, vous pouvez essayer

Questions connexes