Come posso progettare il mio xsd per ignorare la sequenza di elementi?Ignora ordine di elementi usando xs: estensione
<root> <a/> <b/> </root>
<root> <b/> <a/> </root>
devo usare extension
per ragioni di generazione di codice, così ho provato quanto segue usando all
:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.example.com/test"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:t="http://www.example.com/test" >
<xs:complexType name="BaseType">
<xs:all>
<xs:element name="a" type="xs:string" />
</xs:all>
</xs:complexType>
<xs:complexType name="ExtendedType">
<xs:complexContent>
<xs:extension base="t:BaseType">
<xs:all> <!-- ERROR -->
<xs:element name="b" type="xs:string" />
</xs:all>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="root" type="t:ExtendedType"></xs:element>
</xs:schema>
Questo xsd non è valido comunque, th e seguente errore viene riportato in <!-- ERROR -->
:
cos-all-limited.1.2: Un gruppo tutto modello deve apparire in una particella con {verifica min} = {verifica max} = 1, e quella particella deve essere parte di una coppia che costituisce il {tipo di contenuto} di una definizione di tipo complessa.
documentazione di cos-all-limited.1.2 dice:
1,2 il {termine} proprietà di una particella con {verifica max} = 1 che è parte di una coppia che costituisce il {tipo di contenuto} di tipo complesso definizione.
Io non capisco questo (né XSD né inglese madrelingua :)).
sto facendo la cosa sbagliata, sto facendo la cosa giusta sbagliata, o non c'è un modo per raggiungere questo obiettivo?
@Peter Destra, ho perso quella parte. Ecco un aggiornamento. – Bolo
Grazie per il tuo aggiornamento. Sfortunatamente ho bisogno di definire alcuni elementi nel tipo base e alcuni nell'estensione, quindi a meno che non ci sia un altro modo, gli elementi del tipo esteso dovranno sempre essere posizionati dopo gli elementi del tipo base ... –
@Peter In tal caso, poiché "due modelli di contenuto sono trattati come due figli di un gruppo sequenziale", non c'è modo (per quanto posso vedere) di ignorare la sequenza. – Bolo