2010-03-03 8 views
5

Ich habe die folgende XML:XSD - Beschränken Attributwerte auf ein anderes Element Attributwert

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

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

mit der folgenden XSD

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

Im XSD, wie kann ich auf das content-Attribut erzählen Die Inhaltselemente von Sequence akzeptieren nur Werte, die im ContentName von Content-Elementen deklariert sind.

Beispiel: Mit dem oben angegebenen XML-Code wird nur contentName1 im Sequenzinhalt akzeptiert.

Antwort

2

Identitätseinschränkungsdefinitionen werden zum Erzwingen der eindeutigen Primärschlüssel- und Fremdschlüsselbeziehungen verwendet. Sie müssen zuerst ein Schlüsselelement für das Inhaltselement definieren und dann eine Schlüsselreferenz im inneren Inhaltselement für den Schema-Validierer verwenden, um die von Ihnen erwähnte Bedingung zu erzwingen.
Siehe den Link unten es auch einige Beispiele hat, auch das Tutorial in xfront für XSD deckt einige Beispiele -

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

-1

ich nicht gut bin auch in XSD, aber vielleicht werden Sie <xs:attribute name="Name" type="xs:string" use="required" /> ändern <xs:attribute name="Name" type="contentNames" use="required" />

und erstellen

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

für

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

contentName1-99, aber nicht wissen, ob Sie <xs:enumeration/> verwenden können, können Sie versuchen,

Verwandte Themen