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>
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top