在XML Schema中禁止元素成为其自身的子元素

时间:2010-03-02 23:33:00

标签: xsd parent-child elements nested

我正在为项目编写XML模式。我无法解决以下问题:

元素不能自己嵌套,例如:

<document>
   <text>
      <b>
         <i>
            <a link="http://wikipedia.org">
               <b />
            </a>
         </i>
      </b>
   </text>
</document>

这个例子不应该被允许,因为b嵌​​套自己。所以我的问题是:“是否有可能禁止一个元素自行嵌套,如果是,那么该过程是什么?”

有利于你!

\MortenMøller

编辑: 到目前为止,我只确定一个元素可以是一个自己的子元素,但不是一个元素不能有一个本身的后代。

<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:xs="http://cs.au.dk/dWebTek/WikiXML"
        targetNamespace="http://cs.au.dk/dWebTek/WikiXML"
        elementFormDefault="qualified">

<element name="wiki">
    <complexType>
            <choice maxOccurs="unbounded">
                <!-- A lot of other element is listed here -->
                <element name="bold" type="xs:boldnest"/> <!-- Missing nest function -->
            </choice>
    <complexType>
</element>

<complexType name="boldnest">
    <choice maxOccurs="unbounded">
        <element name="bold" minOccurs="0" maxOccurs="0" type="xs:boldnest"/>
        <!-- All the other element is copy pasted in here -->
    </choice>
</complexType>

1 个答案:

答案 0 :(得分:0)

你想做的事是不可能的。在XML Schema中,如果使用基于类型的方法,则只能通过内容模型控制元素的子元素,而不是所有可能的后代。

你可能接近你想要做的唯一方法是将document的内容完全定义到最后一级。但是你无法建立一个递归结构,然后将你想到的那种约束放在适当的位置。

在完成XML模式验证后,您需要使用其他一些机制对此进行验证。