今天我在想这个问题很多。我正在考虑这个规则如何使XML数据库能够存储具有非结构化“CMS”(如数据)的文档,同时还验证数据。
然后,我想到XHTML允许以任何顺序来非常灵活地安排嵌套元素,以便用来标记页面。
因此,这里是从XHTML 1.1架构的摘录:
<xs:group name="InlForm.class">
<xs:choice>
<xs:element ref="input"/>
<xs:element ref="select"/>
<xs:element ref="textarea"/>
<xs:element ref="label"/>
<xs:element ref="button"/>
</xs:choice>
</xs:group>
<xs:group name="Inline.extra">
<xs:choice/>
</xs:group>
<xs:group name="Ruby.class">
<xs:sequence>
<xs:element ref="ruby"/>
</xs:sequence>
</xs:group>
<!--
Inline.class includes all inline elements,
used as a component in mixes
-->
<xs:group name="Inline.class">
<xs:choice>
<xs:group ref="InlStruct.class"/>
<xs:group ref="InlPhras.class"/>
<xs:group ref="InlPres.class"/>
<xs:group ref="I18n.class"/>
<xs:group ref="Anchor.class"/>
<xs:group ref="InlSpecial.class"/>
<xs:group ref="InlForm.class"/>
<xs:group ref="Ruby.class"/>
<xs:group ref="Inline.extra"/>
</xs:choice>
</xs:group>
<xs:group name="Heading.class">
<xs:choice>
<xs:element ref="h1"/>
<xs:element ref="h2"/>
<xs:element ref="h3"/>
<xs:element ref="h4"/>
<xs:element ref="h5"/>
<xs:element ref="h6"/>
</xs:choice>
</xs:group>
他们基本上是群体巢选择,递归。我想这个写这篇文章的人会在接下来的日子里生活在一个安全的机构里,一天接受几次强制服药。
我希望这会有所帮助。我认为这说明了如何在XSD 1.0中实现超级灵活模式。
编辑 - 它的工作原理!您可以创建所有其他组的“主”组,并使用此示例ListItem
元素定义来允许以任何顺序连续嵌套元素。确保ListItem
也包含在一个组中,以便递归工作。
<xs:element name="ListItem">
<xs:complexType>
<xs:sequence>
<xs:group ref="content:any.mix" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
所以我any.mix
组看起来是这样的:
<xs:group name="any.mix">
<xs:choice>
<xs:group ref="content:item.class" />
<xs:group ref="content:media.class" />
<xs:group ref="content:data.class" />
<xs:group ref="content:list.class" />
</xs:choice>
</xs:group>
而且每个“类”组都包含组的又更多的选择,等等等等,直到他们最终打元素,如果你喜欢的话,叶级别的实际标签。
该组本身不应该有循环引用; “招数”在any.mix
组的无限次出现中,即其具有无限根选择的选择树。
Luke
令人惊叹的解决方案,感谢分享! – 2014-08-22 08:15:39
为了完整起见,我应该添加两点:a)它不是你所有梦想的答案,为了满足上面的所有要求,你可能需要添加额外的包含元素,我花了一个小时,放弃了,所以这个答案是以解决“超灵活”的部分b)如果你知道你的验证器是XSD1.1(稀有),那么'xs:all'现在等同于'xs:sequence'的宽松顺序,即它们删除了糟糕的“只有一个子元素“规则毁了XSD给我们所有人。 – 2014-08-22 09:33:13