2011-05-16 36 views
1

如果我有一个XS:复杂类型是conatins这样的:如何限制包含xs:any的xs:choice?

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

据我所知,XS:任何米尼任何有效元素,但通常情况下,我不希望在任何地方使用,除非我的根元素根,所以我可以通过说'任何,除了根(或任何其他特定)元素''阻止?

回答

1

我认为一个理想的解决方案是重构模式,以便您拥有一种不包含<xs:any/>的类型,另一种类型包含<xs:any/>,也就是说如果由于某种原因您确实需要使用该类型。 一般<xs:any/>是抛出验证窗外,因为它几乎可以从任意命名什么,说了什么,你这里经过大概是为processContents="strict" or processContents="lax"属性,所以非常强烈的声明:

<xsd:any processContents="strict"/> 

意味着对于任何的命名空间将验证对一个模式,即使方案不存在 或(可能更好地为你的情况):

如果模式存在这将只需要验证。

由于您正在为自己的名称空间定义模式,因此这将起作用 - 即,如果您尝试使用来自您自己/默认namspace的根元素,它将根据该名称空间验证它并告诉您它不被允许。

有关更多详细信息,请参阅W3C Spec