質問
私はXML/XSDを学んでいるだけで、フォルダー構造をモデル化するXMLスキーマの実装に苦労しています。私が念頭に置いていたのは、サブフォルダーを表す追加のフォルダーインスタンスを持つことができるフォルダーの複雑なタイプを定義することでした。 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" />
VALIDATORによって返されるエラーは次のとおりです。
「「フォルダー」という名前を(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のものも使用しようとしましたが、オフラインで撮影されているようです...
解決
これがそれを行う方法だと思います(refを使用しないでください):
<element name="test" type="tns:TestType"></element>
<complexType name="TestType">
<sequence>
<element name="test" type="tns:TestType"></element>
</sequence>
</complexType>
所属していません StackOverflow