私はちょうど 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のものも使ってみたのですが、オフラインになっているようです...