2013-05-09 43 views
0

是否有任何內聯的複數complexTypes的確定標準與單獨定義它們?是否優先爲多個單數元素定義一個單獨的複數complexType

詳細說明:當定義一些XML模式時,我經常遇到這樣的情況,我希望一個元素包含同一單一類型的多個子元素。例如,描述數據庫中的表格的模式具有fields元素,其可以包含一個或多個field元素。我可以創建多個fields元件的定義範圍內的內聯的complexType:

<xs:element name="fields" minOccurs="1" maxOccurs="1"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="field" type="table-field" 
        minOccurs="1" maxOccurs="unbounded" /> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

或者我可以單獨定義瑣碎fields類型,並使用該:

<xs:element name="fields" type="table-field-collection" minOccurs="1" maxOccurs="1"> 

<!-- Elsewhere: --> 
<xs:complexType name="table-field-collection"> 
    <xs:sequence> 
    <xs:element name="field" type="table-field" minOccurs="1" maxOccurs="unbounded" /> 
    </xs:sequence> 
</xs:complexType> 

第一種方法產生了稍微更凌亂的標記與匿名類型,而第二個創建大量額外的trivial complexTypes。關於哪種方法更受歡迎有共識嗎?

回答

2

實際上並沒有確定的標準。實際上有三種選擇:

  1. 「田」必須定義爲一個複雜類型和再利用(如上表場收集)
  2. 「田」是一個匿名子類型的元素
  3. 沒有字段元素。相反,「字段」只是在父元素內重複。

我已經爲許多公司指定了建模準則,並使用了所有這些模式。最近,我趨向於第三個 - 封裝fields元素沒有任何語義含義,除了在某些圖形工具中查看文檔時做出很好的分組。如果你要使用JAXB之類的東西來處理這個,你可能會感到惱火,fields就在那裏 - 還有一件事情可能是空的。

如果你想從技術的角度問自己一個相關的問題,那麼它是這樣的:你是否希望能夠繼承表格字段集合並使用xsi:type覆蓋它,或者重用它?如果是的話,去複雜的類型。如果不是,那就選擇你喜歡的風格。

相關問題