xs:对xs:group的限制?

时间:2016-09-21 02:35:07

标签: xml xsd

例如,我们经常会看到一些措辞元素。 (下面的代码是IMAGE,它不起作用。)

<xs:group name="Phrase">
    <xs:sequence>
        <xs:element ref="b"/>
        <xs:element ref="i"/>
        <xs:element ref="span"/>
        <xs:element ref="sub"/>
        <xs:element ref="sup"/>
        <xs:element ref="u"/>
    </xs:sequence>
</xs:group>

但是,我们不想嵌套<b>。因此,我们将<b>元素定义为:

<xs:group name="b.group">
    <xs:sequence>
        <xs:element ref="i"/>
        <xs:element ref="span"/>
        <xs:element ref="sub"/>
        <xs:element ref="sup"/>
        <xs:element ref="u"/>
    </xs:sequence>
</xs:group>

是的,<i>元素。

<xs:group name="i.group">
    <xs:sequence>
        <xs:element ref="b"/>
        <xs:element ref="span"/>
        <xs:element ref="sub"/>
        <xs:element ref="sup"/>
        <xs:element ref="u"/>
    </xs:sequence>
</xs:group>

<span><sub><sup>元素可能会成为短语组。

<xs:group name="span.group">
    <xs:sequence>
        <xs:group ref="Phrase"/>
    </xs:sequence>
</xs:group>

但同样,我们不想嵌套<u>

<xs:group name="u.group">
    <xs:sequence>
        <xs:element ref="b"/>
        <xs:element ref="i"/>
        <xs:element ref="span"/>
        <xs:element ref="sub"/>
        <xs:element ref="sup"/>
    </xs:sequence>
</xs:group>

<b><i><u>定义对我们来说似乎是多余的,而且可维护性较低。我们如何才能更有意义地使用<b><i><u>上的阶段组?

1 个答案:

答案 0 :(得分:0)

如果您不想允许嵌套的b元素,那么将其限制为没有b个子元素也不起作用 - 它仍然可以通过中间b孙子{ {1}}或i元素。使用简单的递归语法(如DTD或XSD 1.0)没有解决此问题的一般方法,除非通过为每个嵌套级别设置不同的类型定义来涉及组合复杂性。最好的方法是使用Schematron或XSD 1.1添加断言。流行词汇表中的大多数内容模型都不会尝试限制嵌入式标记的嵌套。