Frage

Ich lerne nur XML/XSD und kämpfe mit der Implementierung eines XML-Schemas, das eine Ordnerstruktur modelliert. Was ich im Sinn hatte, war, einen Komplextyp für den Ordner zu definieren, der zusätzliche Ordnerinstanzen haben kann, die Unterordner darstellen. Verwenden des XSD -Schema -Validators hier Gibt immer zurück, dass das Schema ungültig ist.

Ich habe versucht, den Komplextyp vorne zu definieren und dann die zu verwenden Ref Schlüsselwort für Unterordner:

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

Was das Element selbst betrifft:

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

Der vom Validator zurückgegebene Fehler lautet:

"Kann den Namen 'Ordner' nicht in eine (n) 'Element Deklaration' -Komponente auflösen."

und der Fehler tritt an der Linie auf

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

Das Definieren des Komplextyps innerhalb des Elements selbst ergibt genau den gleichen Fehler:

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

Was ich gelesen habe, sollte diese Art von Rekursion verwenden Ref.

Kann mir jemand sagen, was ich falsch gemacht habe? Vielleicht ist der XSD -Validator nur fehlerhaft? Wenn ja, kennt jemand eine bessere Alternative? Ich habe auch versucht, die von W3.org zu verwenden, aber es scheint offline zu genommen ...

War es hilfreich?

Lösung

Ich denke, das ist der Weg, es zu tun (verwenden Sie Ref nicht):

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

<complexType name="TestType">
    <sequence>
        <element name="test" type="tns:TestType"></element>
    </sequence>
</complexType>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top