例如,我们经常会看到一些措辞元素。 (下面的代码是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>
上的阶段组?
答案 0 :(得分:0)
如果您不想允许嵌套的b
元素,那么将其限制为没有b
个子元素也不起作用 - 它仍然可以通过中间b
孙子{ {1}}或i
元素。使用简单的递归语法(如DTD或XSD 1.0)没有解决此问题的一般方法,除非通过为每个嵌套级别设置不同的类型定义来涉及组合复杂性。最好的方法是使用Schematron或XSD 1.1添加断言。流行词汇表中的大多数内容模型都不会尝试限制嵌入式标记的嵌套。