2013-07-09 96 views
0

我在xsd中有此元素。XSD:根據屬性的值更改內部元素的minOccurs

 <xs:element name="OuterElement"> 
      <xs:complexType> 
       <xs:choice maxOccurs="unbounded"> 
        <xs:element name="InnerElement"> 
         <xs:complexType> 
          <xs:attribute name="name" type="xs:string" /> 
          <xs:attribute name="value" type="xs:string" /> 
         </xs:complexType> 
        </xs:element> 
       </xs:choice> 

       <xs:attribute name="enabled" type="xs:boolean" use="required" /> 
      </xs:complexType> 
     </xs:element> 

是否可以以下列方式格式化xsd? ...

if enabled==true { 
    minOccursOfInnerElement=1 
} 
else { 
    minOccursOfInnerElement=0 
} 

回答

1

不,它不是。一個xsd定義了標記的結構,一個屬性的值是標記的。

你可能會做一個選擇元素,一個成員禁用,一個啓用。

+0

是的,你的建議是我認爲對我來說正確的做法。但是可以有兩個同名的元素嗎?也許ref屬性可以解決這個問題? – alkis

+0

不確定是否誠實,但如果不是,請使用您的通用名稱的父元素,然後選擇將提供兩個孩子之一 –

1

一個簡單的方法來看待它是這樣的:你有兩種父母。啓用的父母必須至少有一個內部元素的孩子,而未啓用的父母不需要至少有一個。如果你給他們不同的名字,這個問題是微不足道的,只有當你決定使用同一個名字來完成兩個不同的事情,而不是一個簡單的驗證方法時,它就變得很難了。

+0

它必須是相同的名稱。這就是爲什麼這個屬性在那裏。而且,我無法改變它。我正在爲現有的程序制定一個模式。 – alkis

+1

然後,如果你服務的是真正的和好的,那麼你的任務就是去尋找設計這種格式的程序員,而指定它的經理不能被改變,並且通過他們的內心驅動賭注。 –

+0

你讓我的一天:) – alkis