Question

Je suis en train d'apprendre XML / XSD et je luttais avec la mise en œuvre d'un schéma XML qui modélise une structure de dossier. Ce que j'avais à l'esprit consiste à définir complexType pour le dossier qui peut avoir des instances de dossiers supplémentaires qui représentent les sous-dossiers. En utilisant le schéma xsd validateur renvoie toujours que le schéma est incorrect.

J'ai essayé de définir la complexType avant et puis en utilisant la ref mot-clé pour les sous-dossiers:

<xs:complexType name="tFolder">
 <xs:sequence>
  <xs:element name="Path" type="tFolderType" msdata:Ordinal="0" />                    
  <xs:element ref="Folder" minOccurs="0" maxOccurs="unbounded" />
  <xs:element name="File" nillable="true" minOccurs="0" maxOccurs="unbounded">
    <xs:complexType>
      <xs:simpleContent msdata:ColumnName="File_Text" msdata:Ordinal="0">
        <xs:extension base="xs:string">
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>                              
 </xs:sequence>
<xs:attribute name="Type" type="tFolderType" />

En ce qui concerne l'élément lui-même:

<xs:element name="Folder" type="tFolder" />

L'erreur renvoyée par le validateur est:

"ne peut pas résoudre le nom 'dossier' à un (n) 'déclaration d'élément' composant".

et l'erreur se produit sur la ligne

<xs:element ref="Folder" minOccurs="0" maxOccurs="unbounded" />

Définir le complexType dans l'élément lui-même donne exactement la même erreur:

<xs:element name="Folder">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="Path" type="tFolderType" msdata:Ordinal="0" />
      <xs:element ref="Folder" minOccurs="0" maxOccurs="unbounded" />                          
      <xs:element name="File" nillable="true" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:simpleContent msdata:ColumnName="File_Text" msdata:Ordinal="0">
            <xs:extension base="xs:string">
            </xs:extension>
          </xs:simpleContent>
        </xs:complexType>
      </xs:element>                              
    </xs:sequence>
    <xs:attribute name="Type" type="tFolderType" />
  </xs:complexType>
</xs:element>

Ce que j'ai lu, ce genre de récursion devrait travailler avec ref .

Quelqu'un peut-il me dire ce que je l'ai fait de mal? Peut-être que le validateur xsd est juste défectueuse? Si oui, est-ce que quelqu'un sait une meilleure alternative? Je l'ai essayé d'utiliser l'un de w3.org aussi, mais il semble être mis hors ligne ...

Était-ce utile?

La solution

Je pense que c'est la façon de le faire (ne pas utiliser ref):

<element name="test" type="tns:TestType"></element>

<complexType name="TestType">
    <sequence>
        <element name="test" type="tns:TestType"></element>
    </sequence>
</complexType>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top