2011-05-16 44 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