2010-02-06 6 views
5

J'ai un XSD de cette forme:Pourquoi XSD dit-il que mon élément n'est pas complet?

<?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> 

Et un fichier XML que je pense à faire correspondre, par exemple:

<?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> 

Malheureusement, le XSD dit que ce n'est pas valide avec l'erreur suivante :

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 

Pour autant que je sache, j'ai fait tout ce que je devais faire pour que l'étiquette soit complète. Je l'ai rempli avec un choix illimité de 'a' et 'b' tags. Quelqu'un peut-il voir ce qui ne va pas?

Pour clarifier, je veux qu'il n'y ait qu'une seule balise 'a' sous le topelement, et en dessous, un mélange de balises 'a' et 'b'.

Répondre

1

A travaillé ... L'erreur est trompeuse parce qu'elle se plaint du mauvais 'a'.

Renommez le haut niveau « a » à « c » et il se plaint encore de « a » à la ligne 5.

Le correctif est d'ajouter minOccurs = 0 à l'élément de choix afin que tous « un Les éléments ont besoin d'enfants.

3

L'erreur est à la seconde a pas la première a doit avoir un choix ci-dessous.

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 définit qu'il a toujours soit <a/> ou <b/> éléments enfants .. Cela signifie .. où l'élément apparaît <a/> il doit avoir un enfant <a/> ou <b/> .. qui n'est pas true..as par votre entrée XML.

Donc, ce code XSD je l'ai écrit pour surmonter les erreurs, (avis attribut « minOccurs » dans le code .. parce que l'absence dont vous receviez des erreurs ..)

<?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> 

Ainsi, selon mon code .. L'étiquette <a/> peut avoir ou non des éléments enfants.
Si vous ne voulez pas changer le fichier XSD .. alors votre XML doit avoir balise <a/> ou <b/> tag comme des enfants de <a/> .. quelque chose comme ceci:

<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> 

Où que ce est invalide:

<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: infantile Pro

Questions connexes