Ho un requisito per uno schema xml che accetta una richiesta con il cliente o con l'id cliente. Se l'ID cliente è 0, allora abbiamo bisogno dei dati del cliente, se è> 0, i dati del cliente sono facoltativi (possono presentare ammende). Al momento, la mia XSD ha questo aspetto;Elementi obbligatori condizionali in un XSD
<xs:complexType>
<xs:any>
<xs:element name="UserID" type="xs:string" minOccurs="1"/>
<xs:element name="Password" type="xs:string" minOccurs="1"/>
<xs:element name="ReferenceNumber" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="CustomerId" minOccurs="1" maxOccurs="1" type="xs:integer"/>
<xs:element ref="WhereSigned"/>
<xs:element name="ContactName" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="ContactTelephone" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="ContactFax" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="ContactEmail" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element ref="MainApplicant" maxOccurs="1"/>
<xs:element ref="JointApplicant" minOccurs="0" maxOccurs="1"/>
<xs:element ref="Asset" minOccurs="0" maxOccurs="1"/>
</xs:any>
</xs:complexType>
ho bisogno di qualcosa di un po 'come questo ... (vorrei che fosse questo semplice, ma purtroppo no ..)
<xs:complexType>
<xs:choice>
<xs:any>
<xs:element name="UserID" type="xs:string" minOccurs="1"/>
<xs:element name="Password" type="xs:string" minOccurs="1"/>
<xs:element name="ReferenceNumber" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="CustomerId" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element ref="WhereSigned"/>
<xs:element name="ContactName" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="ContactTelephone" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="ContactFax" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="ContactEmail" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element ref="MainApplicant" maxOccurs="1"/>
<xs:element ref="JointApplicant" minOccurs="0" maxOccurs="1"/>
<xs:element ref="Asset" minOccurs="0" maxOccurs="1"/>
</xs:any>
<xs:any>
<xs:element name="UserID" type="xs:string" minOccurs="1"/>
<xs:element name="Password" type="xs:string" minOccurs="1"/>
<xs:element name="ReferenceNumber" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="CustomerId" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element ref="Asset" minOccurs="0" maxOccurs="1"/>
</xs:any>
</xs:choice>
</xs:complexType>
A nuovi esperti XSD (esistono anche questi ?!) che sono in grado di dare una mano o qualche consiglio?
Molte grazie,
Shaw.
È possibile utilizzare la versione dello schema 1.1? In questo caso, puoi asserzioni - 'xs: assert' (http://www.w3.org/TR/xmlschema11-1/#cAssertions) – potame
Ho esaminato questi e posso vedere che può essere utilizzato per aumentare gli errori dipendenti sul valore degli elementi e dei loro attributi, ma il mio XSD non è abbastanza ottimizzato per essere in grado di vedere come applicare questo alla logica condizionale sulle condizioni dell'elemento ..: s – Shawson