0

自分で定義したキーの要素または属性として、xml で別の complexType を参照するにはどうすればよいですか? 次の自己参照をモデル化するための正しいアプローチは何ですか? 最初のアプローチは可能ですか、それとも無限の自己参照につながりますか?

<xs:complexType name="Category">
  <xs:sequence>
    <xs:element name="ParentCategory" type="Category" minOccurs="1" maxOccurs="1"></xs:element>
    <xs:element name="ChildCategory" type="Category" minOccurs="0" maxOccurs="unbounded"></xs:element>
  </xs:sequence>
  <xs:attribute name="CategoryName" type="xs:string"></xs:attribute>
</xs:complexType>

また

<xs:complexType name="Category">
  <xs:sequence>
    <xs:element name="ChildCategory" type="Category" minOccurs="0" maxOccurs="unbounded"></xs:element>
  </xs:sequence>
  <xs:attribute name="CategoryName" type="xs:string"></xs:attribute>
  <xs:attribute name="ParentCategory" type="xs:string"></xs:attribute>
</xs:complexType>

オブジェクト指向になりたいのですが、これが XML でどのように見えるかわかりません。ParentCategory を Category 型として参照するには、それ自体が ParentCategory 子要素などを持つ XML で Category 型を再度記述する必要があるのではないでしょうか... 無限の型参照につながります。

4

1 に答える 1

2

タイプ定義の一部として同じタイプの要素を参照しても問題はないため、最初の例はその観点からは問題ありません。親を参照しようとするのは少し奇妙ですが、実際にこれを行う必要はありません... XML は結局のところ階層的です。

<xs:complexType name="Category">
  <xs:sequence>
    <xs:element maxOccurs="unbounded" minOccurs="0" name="ChildCategory" type="Category"/>
  </xs:sequence>
  <xs:attribute name="CategoryName" type="xs:string"/>
</xs:complexType>

Category タイプは自身を再帰的に参照し、0 個以上の ChildCategory 要素を許可します。これで必要な処理が行われるはずです (XML スキーマでの再帰型参照に問題はありません)。

ドキュメントで親カテゴリを参照する必要がある場合は、任意の DOM 実装または XPath で親ノードにチェーンするのは簡単です。

于 2013-06-09T22:18:14.213 に答える