Xs:对Xs:group的限制

  • 本文关键字:Xs group 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>上更有意义地使用Phase group ?

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

最新更新