2

私はちょうど XML/XSD を学んでいて、フォルダー構造をモデル化する XML スキーマの実装に苦労しています。私が念頭に置いていたのは、サブフォルダーを表す追加のフォルダー インスタンスを持つことができるフォルダーの complexType を定義することでした。ここで xsd スキーマ バリデータを使用すると、常にスキーマが無効であることが返されます。

事前にcomplexTypeを定義してから、サブフォルダーにrefキーワードを使用してみました:

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

要素自体については:

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

バリデータによって返されるエラーは次のとおりです。

「'Folder' という名前を (n) '要素宣言' コンポーネントに解決できません。」

エラーは行で発生します

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

要素自体で complexType を定義すると、まったく同じエラーが発生します。

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

私が読んだこと、この種の再帰はrefを使用して機能するはずです。

誰が私が間違ったことを教えてもらえますか? たぶん xsd バリデーターに問題があるのでしょうか? もしそうなら、誰かがより良い代替手段を知っていますか? w3.orgのものも使ってみたのですが、オフラインになっているようです...

4

1 に答える 1

2

私はこれがそれを行う方法だと思います(refを使用しないでください):

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

<complexType name="TestType">
    <sequence>
        <element name="test" type="tns:TestType"></element>
    </sequence>
</complexType>
于 2011-01-25T20:39:07.367 に答える