Xsd 是否引用另一个XML父complexType?

Xsd 是否引用另一个XML父complexType?,xsd,complextype,Xsd,Complextype,我应该如何引用xml中的另一个complexType,将其作为元素或属性引用到自己定义的键上?建立以下自我参照模型的正确方法是什么?第一种方法是可能的,还是会导致无限的自我参照 <xs:complexType name="Category"> <xs:sequence> <xs:element name="ParentCategory" type="Category" minOccurs="1" maxOccurs="1"></xs:elem

我应该如何引用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>



我有点困惑——因为我想要面向对象,但不确定这在XML中会是什么样子。ParentCategory作为类别类型的引用不需要我在XML中再次编写一个类别类型,它本身有一个ParentCategory子元素,等等。。。导致无限类型引用。

作为类型定义的一部分引用相同类型的元素没有问题,因此从这个角度来看,您的第一个示例很好。尝试引用父对象有点奇怪,你不应该真的需要这样做。。。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>

类别类型递归地引用自身,允许0个或多个ChildCategory元素。这应该满足您的需要(XML模式中的递归类型引用没有错)


如果您需要在文档中引用父类别,那么在任何DOM实现中或使用XPath链接到父节点都很容易。

最后,我还删除了父引用。我的理由是,当我将XML解析到我的对象模型时,可以在树上导航。现在,我将通过遍历树来实现对象模型中的父引用,而不是直接从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>