如何绕过“xs:group不能放在xs:all里面”的限制?

时间:2009-07-23 14:18:10

标签: xml schema xsd

<xs:group>出现在<xs:all>内,但仅在<xs:sequence>内有什么原因?

我们来看一个例子。比如,有一个标记列表(<a><d><e><f> - 请参阅下面的示例),这些标记没有按任何特定顺序出现,但始终包含在另一个对象(<foo><bar>); <foo> = {<a><b><c><d>}; <bar> = {<e><b><c><f>}:

<foo>
  <a>a1</a>
  <b>b1</b>
  <c>c1</c>
  <d>d1</d>
</foo>

<foo>
  <d>d2</d>
  <b>b2</b>
  <c>c2</c>
  <a>a2</a>
</foo>

<bar>
  <e>e3</e>
  <b>b3</b>
  <c>c3</c>
  <f>f3</f>
</bar>

我想将标记<b><c>提取到xs:group,并在定义<xs:group ref="...">的{​​i> complexType 时使用<foo>和{ XSD中的{1}}。但是,由于上述限制,这是不可能的。

对于给定问题,您会建议什么作为解决方法?机会是,我做了一些愚蠢的事,但又为什么这是不正确的?

2 个答案:

答案 0 :(得分:1)

我不能说为什么存在这种限制,尽管我可以看到功能齐全的<group>(嵌套<choice><all>)在另一个{{{}}内的可能组合1}}对于开发人员来说可能有点混乱(好吧,无论如何),特别是对用户而言。

作为一种解决方法,我会建议您可能已经提出的内容:即为<all><complexType>声明另一个<b>并使用 <c><foo>

<bar>

答案 1 :(得分:0)

确定性内容规则是限制的原因。如果您想要完全理解,请阅读van der Vlist的书或the standard