XSD non mi permette di avere sconfinato dentro tutto indicatore
-
23-09-2019 - |
Domanda
Sto cercando di fare elenco non ordinato di variabili var1 si verifica due volte e var2 verifica infinite volte (Caso d'uso nel mio progetto è diverso). L'elemento non mi permette di utilizzare maxOccurs.
C'è qualche lavoro in giro per quello che sto cercando di fare?
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="testcomment">
<xs:complexType>
<xs:all>
<xs:element name="var1" type="xs:string" maxOccurs="2" />
<xs:element name="var2" type="xs:integer" maxOccurs="unbounded" />
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
Soluzione
Quello che stai cercando di fare suoni come il tipo di un elemento nella vostra lista potrebbe essere ambiguo senza leggere-avanti, nel qual caso non c'è lavoro in giro in XSD a causa delle classi di linguaggi si può descrivere.
Puoi inviare una parte rilevante della vostra XSD?
Aggiornamento: No, non è possibile farlo con XSD. Le regole su ciò che si può mettere in un elemento <xs:all>
sono elencati per esempio qui . Questo vincolo ha un nome - l'UPA, o un vincolo unico Particle Attribution. E 'tutto a che fare con l'ambiguità e il sito web di Microsoft ha una buona spiegazione del perché è esiste qui .
è possibile modificare il layout del documento per rimuovere la necessità di questo tipo di dichiarazione o di guardare ad un linguaggio di schema più espressivo come RelaxNG .
Altri suggerimenti
Mi sono imbattuto lo stesso problema e c'è una soluzione! Check out questa risposta:
https://stackoverflow.com/a/3827606/637142
<xs:element name="A">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element ref="B"/>
<xs:element ref="C"/>
</xs:choice>
</xs:complexType>
</xs:element>
facile, basta use<xs:choice maxOccurs="unbounded">
invece di <xs:all>
. Questo vi darà l'effetto che si sta cercando.