Xml 如何在XSD中定义无限深度层次结构?

Xml 如何在XSD中定义无限深度层次结构?,xml,xsd,Xml,Xsd,我有一个XML,它的一部分如下所示: text数据> TextGroup ID=“Group1”> TextGroup ID=“Group2”> TextGroup ID=GroupN“> 文本ID=SomeID>sometext 因此,在TextData内部,可以有1..N个级别的元素,最低级别的TextGroup必须至少包含一个元素。 我如何在XSD中描述这一点?有可能吗? 到目前为止,我有这个,但是,当然,它只允许我使用2个级别,并且强制使用2个级别,因此不适合我: <xs:elem

我有一个XML,它的一部分如下所示:
text数据>
TextGroup ID=“Group1”>
TextGroup ID=“Group2”>
TextGroup ID=GroupN“>
文本ID=SomeID>sometext

因此,在TextData内部,可以有1..N个级别的元素,最低级别的TextGroup必须至少包含一个元素。
我如何在XSD中描述这一点?有可能吗? 到目前为止,我有这个,但是,当然,它只允许我使用2个级别,并且强制使用2个级别,因此不适合我:

<xs:element name="TextData">
      <xs:complexType>
        <xs:all>
          <xs:element name="TextGroup">
            <xs:complexType>
              <xs:all>
                <xs:element name="TextGroup">
                  <xs:complexType>
                    <xs:all>
                      <xs:element   name="Text"type="xs:string">                             
                      </xs:element>

在某些情况下,您需要使用对已使用名称定义的元素之一的引用,例如使用命名的复杂类型

在每个元素中,使用
,而不是使用
。通过这样做,可以确保另一个级别或字符串元素是任何级别的子元素

这看起来可能类似于以下内容(未经测试,因为我在问题中没有看到完整的XSD,但您明白了):


或者,用不同的词解释:

这与在正式语法中构建一条链时的“诀窍”相同。在链中,您可以选择通过添加另一个非终端来延长链的规则,“循环回到当前状态,从那里可以进一步延长链”(例如,
a->aA
),以及以不规则的东西结束链的规则(例如,
a->b

<xs:element name="TextData" type="myTextDataType"/>

<xs:complexType name="myTextDataType">
    <xs:choice>
        <xs:element name="TextGroup" type="myTextDataType"/>
        <xs:element name="Text" type="xs:string"/>
    </xs:choice>
</xs:complexType>