2012-12-21 61 views
11

在下面這個例子中,XML模式:選擇的minOccurs

 <xs:complexType> 
     <xs:choice minOccurs="3" maxOccurs="unbounded"> 
      <xs:element ref="Start"/> 
      <xs:element ref="Center"/> 
      <xs:element ref="End"/> 
      <xs:element ref="PI" minOccurs="0"/> 
      <xs:element ref="Feature" minOccurs="0" maxOccurs="unbounded"/> 
     </xs:choice> 
     </xs:complexType> 

時選擇具有的minOccurs> 1,會發生什麼?這是否意味着元素「開始」可能發生3次?

+0

對於獨特而有效的問題+1! –

回答

12

當選擇minOccurs> 1時會發生什麼?這是否意味着元素「開始」可能發生3次?

<Start>可以發生3次或更多次!由於多於1允許元素集多次出現或不同元素多次出現,所以選擇minOccurs。

詳細說明: 在上面的例子中,你已經申請了<Choice>的minOccurs爲3和maxOccurs爲無界!這意味着..在<Choice>下列出的子元素,其中任何三個或重複三次的任何標籤都應顯示在其父項下!示例XML列舉如下:

我們假設這些集合的標籤出現了一個名爲<parent>節點下,則:

<parent> 
    <Start>Start1</Start> 
    <Center>Center1</Center> 
    <End>End1</End> 
    </parent> 

-------- -------- OR

<parent> 
    <Center>Start1</Center> 
    <Center>Center1</Center> 
    <Feature>End1</Feature> 
    </parent> 

-------- -------- OR

<parent> 
    <Start>Start1</Start> 
    <Start>Start1</Start> 
    <Start>Start1</Start> 
    <Start>Start1</Start> 
    </parent> 

上述所有組合都有效!

BUT你還定義的minOccurs =「0」爲「PI」和「功能」 ..

該添加導致驗證程序通過母體沒有子元素。即:

<parent> 
    </parent> 

如果從這些兩個元素刪除的minOccurs然後驗證迫使你以包括3個標籤最小被列入父。

另有maxOccurs="unbounded"代替Feature元素是沒用的!如果添加它或把它關閉的行爲不會改變..

+0

如果您想允許子元素(如果出現)只出現一次,該怎麼辦? – peco

+0

@peco,在問題的模式中編輯:''。 0或1個孩子可以出現 –

+0

但是那麼只有一個孩子可以發生嗎?不是'

'和''。我希望他們中的至少一個被挑選出來。 – peco

4

在可讀的正則表達式的語法,而不是尖括號的冗長的羣衆,你有

(開始|中心|末頁| PI?|特徵*){3,}

這意味着括號內的任何內容3次或更多次,並且它不必每次都是相同的項目。鑑於有可替代的選擇 - PI?和特徵* - 在選項中,整個表達式也是可以爲空的,這意味着包括零在內的任意數量的零也將滿足約束條件。

要回答您的具體問題,是的,「開始」可能發生三次(或更多次)。事實上,它可以發生多次。