2013-06-04 25 views
-1

我怎麼能實現一個架構驗證,可滿足以下要求如何實現有條件的架構驗證

<test> 
    <e1>abc</e1> 
    <e2> 
    <e21>xxx</e21> 
    <e22>yyy</e22> 
    </e2> 
</test> 

,所以我的要求是,E22不能爲空,如果E21不爲空,那麼,如何設計我的xsd模式

+0

什麼問題?通過說出他們可以包含的內容來聲明你的所有元素。如果'e22'有一個'e21'不共享的約束,請在'e22'的聲明中寫入該約束,而不是在'e21'的聲明中寫入。如果你嘗試過,但它不起作用,你需要向我們展示你的嘗試。 –

+0

您好我可能會問這個問題是錯誤的,所以我的要求是,如果e21不爲空,e22不能爲空。您的洞察力受到讚賞 – remo

回答

1

如果e21不爲空,則要求「e22不能爲空」意思是說,我認爲e21和e22都是空的或者都不是。

如果E21和E22空值由具有元素不存在輸送時,一個簡單的內容模型的伎倆:

<complexType name="e2"> 
    <sequence minOccurs="0" maxOccurs="1"> 
    <element ref="e21"/> 
    <element ref="e22"/> 
    </sequence> 
</complexType> 

這裏任E21和E22兩者都存在的文件中,或者兩者都不是。

如果您還想允許的情況下E21缺失(空),E22是沒有,那麼如果「被空」你的意思是「爲空」的順序改爲

<sequence minOccurs="0" maxOccurs="1"> 
    <element ref="e21" minOccurs="0"/> 
    <element ref="e22"/> 
    </sequence> 

,然後在XSD 1.0中無法強制約束;在XSD 1.1中,您可以使用斷言來表達和執行相對複雜的約束。在XSD 1.1中查找關於共同約束和斷言的Stack Overflow問題。