2012-06-22 12 views
7

Tengo un archivo xml y xsd que ambos validan correctamente (probado en http://xsdvalidation.utilities-online.info/).

Sin embargo, el xml no valida con el xsd. Creo que esto se debe a que estoy anidando incorrectamente elementos complexType en el xsd, en comparación con el xml. El elemento exterior de people parece estar causando el problema ...

Aquí es el xml:
¿Cómo se anidan elementos complexType en una xsd?

<?xml version = "1.0"?> 

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

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

... y aquí es el 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> 

Respuesta

10

Agregue maxoccurs="unbounded" al elemento llamado "persona". Es una secuencia de uno o más elementos de persona.

+0

Hey, tienes razón, no haga caso mi respuesta :-) –

+0

Ah, eso es una solución sencilla, gracias por eso! –

2

Pruebe esto para su 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

Por cierto, he agregado algunas restricciones de ejemplo a la cantidad de apariciones de ciertos elementos, pero por supuesto estos pueden ser cambiados u omitidos dependiendo de sus requisitos. –

+0

Esa es una solución interesante @JonoB ... ¿es siempre una mejor práctica agregar una restricción como atributo de un elemento, en lugar de usar '' xs: restricción base = "xs: cadena"> ... 'etiquetas? –

Cuestiones relacionadas