0

好的,所以我使用 XML 模式来验证以下类型的 xml 文件:(假设括号实际上是尖括号)。

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

非常简单-> 除了要注意的是我还想要一个评论元素,它可以以任何顺序出现无数次(前提是它不是另一个评论中的评论)。所以下面的代码示例也是有效的:

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

最初,我在初始树上施加了一个刚性结构 - 即 B 和 C 必须出现一次,并且 B 必须先出现。我无法想出这种规模来处理更复杂的例子。有任何想法吗?

非常感谢

4

1 回答 1

0

You could use extensions, as in the following example, but that would only let you add comments at the beginning of each element. If you want comments everywhere, I don't see any way to preserve the sequence order without referencing comments in every sequence in the schema...

<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>
于 2010-09-09T13:54:42.883 回答