2010-04-06 14 views
8

Ho un documento XML come:Descrivere i nodi XML ripetuti nello schema XML W3C?

<Root> 
    <Bravo /> 
    <Alpha /> 
    <Charlie /> 
    <Charlie /> 
    <Delta /> 
    <Foxtrot /> 
    <Charlie /> 
</Root> 

L'ordine dei nodi non importa. Ogni nodo può apparire zero o una volta, ad eccezione di Charlie. Charlie può apparire zero, uno o arbitrariamente molte volte. Il modo più semplice per esprimere questo concetto in XSD è:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="Root"> 
     <xsd:complexType> 
      <xsd:all> 
       <xsd:element name="Alpha" minOccurs="0" maxOccurs="1" /> 
       <xsd:element name="Bravo" minOccurs="0" maxOccurs="1" /> 
       <xsd:element name="Charlie" minOccurs="0" maxOccurs="unbounded" /> 
       <xsd:element name="Delta" minOccurs="0" maxOccurs="1" /> 
       <xsd:element name="Echo" minOccurs="0" maxOccurs="1" /> 
       <xsd:element name="Foxtrot" minOccurs="0" maxOccurs="1" /> 
      </xsd:all> 
     </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 

Ma questo non funziona, perché xsd: tutto non permette di maxOccurs maggiore di 1. Dal momento che non posso usare xsd: tutto, che cosa devo usare?

+0

La mia domanda è molto simile alla versione modificata di "XSD - come consentire gli elementi in qualsiasi ordine un numero qualsiasi di volte?". Nessuno è stato in grado di fornire una risposta XSD per questo. – NotMyName

risposta

2

Schematron. :)

Non sono sicuro al 100%, ma penso che questo modello non possa essere espresso in XML Schema.

+0

E 'possibile esprimere questo in XSD 1.0, ma scomodo: in sostanza devi calcolare tutti gli ordini possibili per gli elementi, e quindi lasciare il fattore di espressione regolare per evitare problemi con le regole del determinismo. In XSD 1.1 i vincoli su tutti i gruppi sono in qualche modo rilassati; in particolare 'maxOccurs' non deve più essere 1. –

1

È possibile utilizzare xsd: sequenza, ma l'ordine sarebbe importante che non è garantito.

Guardando a: http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/structures.html#element-group sembra che non ci sia un gruppo di modelli che è possibile utilizzare, anche se forse è possibile definirli in complexType senza utilizzare un gruppo di contenuti?

+0

Ci deve essere un indicatore: sequenza, scelta, tutto. Eppure nessuno di quelli che sono in grado di eguagliare quello di cui ho bisogno. – NotMyName