2010-03-03 10 views
5

ho il seguente codice XML:XSD - Limitazione valori degli attributi ad un altro elemento di valore di attributo

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

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

con il seguente 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> 

Nel XSD, come posso dire all'attributo ContentName di gli elementi di contenuto di Sequence accettano solo il valore dichiarato negli elementi ContentName of Content?

ad esempio: con l'XML fornito sopra, solo ContentName1 sarà accettato nel Contenuto della sequenza.

risposta

2

Le definizioni dei vincoli di identità vengono utilizzate per applicare la relazione univoca, primaria e esterna. è necessario prima definire un elemento chiave per l'elemento di contenuto e quindi utilizzare un elemento chiave nell'elemento di contenuto interno per lo strumento di convalida dello schema per far rispettare la condizione menzionata.
consultare sul link qui sotto ha alcuni esempi così, anche il tutorial in xfront per XSD copre alcuni esempi -

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

-1

Io non sono bravo in XSD troppo, ma forse cambierete <xs:attribute name="Name" type="xs:string" use="required" /> a <xs:attribute name="Name" type="contentNames" use="required" />

e creare

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

per

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

contentName1-99 ma non so se è possibile utilizzare <xs:enumeration/> troppo, si può provare

Problemi correlati