具有任意数量注释的XML序列

时间:2010-09-08 22:54:41

标签: xml xsd sequence choice

好吧,所以我使用XML模式来验证以下类型的xml文件:(只是假装parens实际上是有角度的括号)。

<root>
   <A>
      <B></B>
      <C></C>
   </A>
</root>

非常简单 - &gt;除了catch之外,我还想要一个注释元素,它可以以任何顺序出现无限次数(假设它不是另一个注释中的注释)。所以下面的代码示例也是有效的:

<root>
   <comment />
   <A>
      <comment />
      <B>
         <comment />
      </B>
      <comment />
      <C></C>
      <comment />
   </A>
      <comment />
</root>

最初我对初始树施加了严格的结构 - 即B和C必须出现一次,B必须先出现。我没有办法做这个比例来处理更复杂的例子。任何想法?

非常感谢

1 个答案:

答案 0 :(得分:0)

您可以使用扩展名,如下例所示,但这只会让您在每个元素的开头添加注释。如果你想在任何地方都有意见,我没有看到任何方法来保留序列顺序而不引用模式中每个序列中的注释......

<xs:element name="comment" type="xs:string"/>
<xs:complexType name="commentable">
    <xs:sequence>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="comment"/>
    </xs:sequence>
</xs:complexType>
<xs:element name="root">
    <xs:complexType>
        <xs:complexContent>
            <xs:extension base="commentable">
                <xs:sequence>
                    <xs:element ref="A"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
</xs:element>
<xs:element name="A">
    <xs:complexType>
        <xs:complexContent>
            <xs:extension base="commentable">
                <xs:sequence>
                    <xs:element ref="B"/>
                    <xs:element ref="C"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
</xs:element>
<xs:element name="B">
    <xs:complexType mixed="true">
        <xs:complexContent>
            <xs:extension base="commentable"/>
        </xs:complexContent>
    </xs:complexType>
</xs:element>
<xs:element name="C">
    <xs:complexType mixed="true">
        <xs:complexContent>
            <xs:extension base="commentable"/>
        </xs:complexContent>
    </xs:complexType>
</xs:element>