2010-02-06 21 views
5

Tengo un XSD de esta forma:¿Por qué dice XSD que mi elemento no está completo?

<?xml version="1.0" encoding="UTF-8"?> 
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.example.org/example" 
    xmlns:tns="http://www.example.org/example" elementFormDefault="qualified"> 

    <complexType name="bType"> 
    </complexType> 

    <complexType name="aType"> 
     <choice maxOccurs="unbounded"> 
      <element name="a" type="tns:aType" /> 
      <element name="b" type="tns:bType" /> 
     </choice> 
    </complexType> 

    <element name="topelement"> 
     <complexType> 
      <sequence> 
       <element name="a" type="tns:aType" maxOccurs="1" /> 
      </sequence> 
     </complexType> 
    </element> 
</schema> 

Y un archivo XML que espero para que coincidan, por ejemplo:

<?xml version="1.0" encoding="UTF-8"?> 
<topelement xmlns="http://www.example.org/example" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.example.org/example example.xsd "> 
    <a> <!-- Error on this line. --> 
    <a/> 
    <b/> 
    <b/> 
    <a/> 
    </a> 
</topelement> 

Desafortunadamente el XSD dice que esto no es válido con el siguiente error :

cvc-complex-type.2.4.b: The content of element 'a' is not complete. One of '{"http://www.example.org/example":a, "http://www.example.org/example":b}' is expected. example.xml line 5 

Por lo que puedo decir, he hecho todo lo que tengo que hacer para completar la etiqueta. Lo he llenado con una selección ilimitada de etiquetas 'a' y 'b'. ¿Alguien puede ver lo que salió mal?

Para aclarar, quiero que haya solo una etiqueta 'a' bajo topelement, y debajo de eso, una combinación de etiquetas 'a' y 'b'.

Respuesta

1

Lo resolvió ... El error es engañoso porque se está quejando sobre la "a" incorrecta.

Cambie el nombre del más alto nivel 'A' a 'c' y todavía se queja de 'a' en la línea 5.

La solución es añadir minOcurrencias = 0 al elemento de selección de manera que no todos 'una 'los elementos necesitan niños.

3

El error está en el segundo a no el primero a necesita tener una opción debajo de él.

5

Before posting this answer, I hadn't observed your own answer .. Anyway I don't want to let my effort/time-spent go waste .. So I won't delete this post .. Along with the same answer I have also .. written some points please go through ..

ComplexType aType define que siempre tiene cualquiera <a/><b/> o como elementos secundarios .. .. Significa donde aparece <a/> elemento que debe tener un niño o <a/><b/> .. que no es true..as por su entrada XML.

Así que este código XSD que he escrito para superar los errores, (aviso atributo "minOcurrencias" en el código .. porque la ausencia de los que estaban recibiendo errores ..)

<?xml version="1.0" encoding="UTF-8"?> 
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.example.org/example" 
    xmlns:tns="http://www.example.org/example" elementFormDefault="qualified"> 
    <element name="topelement"> 
    <complexType> 
     <sequence> 
     <element name="a" type="tns:aType" minOccurs="0" maxOccurs="1" /> 
     </sequence> 
    </complexType> 
    </element> 


    <complexType name="bType"> 
    </complexType> 

    <complexType name="aType"> 
    <sequence> 
     <choice maxOccurs="unbounded"> 
     <element name="a" type="tns:aType" minOccurs="0"/> 
     <element name="b" type="tns:bType" minOccurs="0"/> 
     </choice> 
    </sequence> 
    </complexType> 
</schema> 

Así que de acuerdo a mi código ... La etiqueta <a/> puede tener o no elementos secundarios.
Si no desea cambiar el archivo XSD .. entonces su XML debe tener <a/> tag o etiqueta <b/> como hijos de <a/> .. algo como esto:

<topelement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.example.org/example" xsi:schemaLocation="http://www.example.org/example example.xsd"> 
    <a> 
    <a> 
     <b/> 
    </a> 
    <b/> 
    <b/> 
    <a> 
     <a> 
     <b/> 
     </a> 
     <b/> 
    </a> 
</topelement> 

Donde ya que esto no es válido:

<topelement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.example.org/example" xsi:schemaLocation="http://www.example.org/example example.xsd"> 
    <a> 
    <a> 
     <b/> 
    </a> 
    <a/><!--this is wrong--> 
    <b/> 
    </a> 
</topelement> 


Rega RDS: infantiles Pro

Cuestiones relacionadas