如果我有一个xs:复合类型,该类型包含以下内容:
<xs:choice minOccurs='0' maxOccurs='unbounded'>
<xs:any/>
</xs:choice>我理解xs:任何有效的元素,但通常,我不希望我的根元素在任何地方被用作根元素,所以我可以通过说‘除根元素(或任何其他特定的元素)’来阻止吗?
发布于 2011-06-24 13:59:02
我认为一个理想的解决方案是重构模式,以便您有一种类型不包括<xs:any/>,另一种类型带有它的<xs:any/>,也就是说,如果您由于某种原因必须使用if。通常,<xs:any/>是一个非常强大的语句,它将验证抛出窗口,因为它几乎允许任何名称空间中的任何内容,而且您可能需要的是processContents="strict" or processContents="lax"属性,所以:
<xsd:any processContents="strict"/>这意味着对于任何名称空间,它都必须针对模式进行验证,即使模式不存在,或者(对您的情况可能更好):
只有在架构存在时,才需要验证。
因为您正在为您自己的命名空间定义模式,所以这将起作用--也就是说,如果您试图使用您自己/默认名称空间中的根元素--它将根据该命名空间验证它,并告诉您它是不允许的。
有关更多细节,您可以参考W3C规范。
https://stackoverflow.com/questions/6015465
复制相似问题