2012-06-22 11 views
7

Ho un file xml e xsd che entrambi convalidano correttamente (testato su http://xsdvalidation.utilities-online.info/).

Tuttavia, l'xml non viene convalidato rispetto a xsd. Penso che questo sia dovuto al fatto che sto incoraggiando in modo errato elementi complexType in xsd, rispetto all'xml. L'elemento esterno di people sembra essere la causa del problema ...

Ecco il xml:
Come si annidano gli elementi complexType in un xsd?

<?xml version = "1.0"?> 

<people> 
    <person> 
     <firstname>Joe</firstname> 
     <lastname>Schmoe</lastname> 
    </person> 

    <person> 
     <firstname>Cletus</firstname> 
     <lastname>Jenkins</lastname> 
    </person> 
</people> 

... e qui è il xsd:

<?xml version = "1.0"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name = "people"> 
     <xs:complexType> 
      <xs:sequence> 

       <xs:element name = "person"> 
        <xs:complexType> 
         <xs:sequence> 

          <xs:element name = "firstname" type = "xs:string" /> 
          <xs:element name = "lastname" type = "xs:string" /> 

         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 

      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 

</xs:schema> 

risposta

10

Aggiungi maxoccurs="unbounded" all'elemento denominato "persona". È una sequenza di uno o più elementi di una persona.

+0

Ehi, hai ragione, ignorare la mia risposta :-) –

+0

Ah, questa è una soluzione semplice, grazie per questo! –

2

Prova questo per il vostro XSD:

<?xml version = "1.0"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="people" type="people"/> 

    <xs:complexType name="people"> 
     <xs:sequence> 
      <xs:element name="person" type="person" maxOccurs="unbounded" minOccurs="0"/> 
     </xs:sequence> 
    </xs:complexType> 

    <xs:complexType name="person"> 
     <xs:sequence> 
      <xs:element name="firstname" type="xs:string" maxOccurs="1" minOccurs="1"/> 
      <xs:element name="lastname" type="xs:string" maxOccurs="1" minOccurs="1"/> 
     </xs:sequence> 
    </xs:complexType> 

</xs:schema> 
+0

A proposito, ho aggiunto alcune limitazioni di esempio al numero di occorrenze di alcuni elementi, ma ovviamente questi possono essere modificati o omessi a seconda delle esigenze. –

+0

Questa è una soluzione interessante @JonoB ... è sempre una pratica migliore aggiungere una restrizione come attributo di un elemento, invece di usare ' ... tag? –

Problemi correlati