如何限制包含xs:any的xs:choice?

时间:2011-05-16 09:35:42

标签: xsd

如果我有一个包含此内容的xs:complexType:

<xs:choice minOccurs='0' maxOccurs='unbounded'>
   <xs:any/>
</xs:choice>

我理解xs:任何有效的元素,但通常情况下,我不希望我的root元素在除root之外的任何地方使用,所以我可以通过说'any <来阻止它em>除了根(或任何其他特定的)元素'?

1 个答案:

答案 0 :(得分:2)

我认为一个理想的解决方案是重构架构,以便你有一个不包含<xs:any/>的类型和另一个包含<xs:any/>的类型,即如果你真的必须使用if某些原因。 一般来说,<xs:any/>是一个非常强大的语句,它将验证抛出窗口,因为它几乎允许来自任何命名空间的任何内容,并且说过你可能在此之后的内容是processContents="strict" or processContents="lax"属性,所以:

<xsd:any processContents="strict"/>

意味着对于任何命名空间,即使架构不存在,它也必须针对架构进行验证 或者(可能更适合您的情况):

如果架构存在,这只需要验证。

因为您正在为自己的命名空间定义一个模式,所以这将起作用 - 即如果您尝试使用自己/默认namspace中的根元素 - 它将针对该命名空间验证它并告诉您不允许它。

您可以参考W3C Spec了解更多详情。