2012-12-20 64 views
3

我有一個屬性只能有兩個值。
使用什麼更好?
模式?模式vs枚舉模式xml

<xsd:attribute name="sex"> 
    <xsd:simpleType> 
     <xsd:restriction base="xsd:string"> 
      <xsd:pattern value="male|female" /> 
     </xsd:restriction> 
    </xsd:simpleType> 
</xsd:attribute> 

或enumetation?

<xsd:attribute name="sex"> 
    <xsd:simpleType> 
     <xsd:restriction base="xsd:string"> 
      <xsd:enumeration value="male"></xsd:enumeration> 
      <xsd:enumeration value="female"></xsd:enumeration> 
     </xsd:restriction> 
    </xsd:simpleType> 
</xsd:attribute> 

如果沒有區別,我會用圖案(一條線以下)

回答

4

都是法律規範XSD,既不似乎有可能造成問題的任何符合甚至部分符合標準的實現XSD簡單類型,我希望它會花費大量的數據和非常精確的測量來檢測它們之間的速度差異。所以問題是「哪個更好?」基本上等同於「閱讀模式的人會更容易理解哪一個問題?」。

這是一個只有你可以回答的問題。

對於它的價值,我會觀察到使用枚舉的公式可以提供關於每個值的含義或預期用法的文檔;可能出於這個原因,我通常在這種情況下使用枚舉。 (「男性」和「女性」這兩個值似乎很直接,但在某些模式中,像這樣的枚舉也需要包含「未知」和「拒絕到狀態」的值,用戶可能需要指導何時使用哪個值。)

+0

+1 for documentation! –

+0

謝謝你的回答 – Snote

0

另外要注意的另一件事(就差別而言)是枚舉可以進一步編碼。也就是說,您可以使用id和value來枚舉enum。如果認爲「價值」與您預計在典型的下拉列表中看到的內容相違背, ID用於識別系統的值。所以每個枚舉都有一個ID-> Value對。

現在考慮一下,如果您使用XSLT快速呈現您的xml作爲屏幕,您可以編寫該xslt,以便它可以相應地解析和設置下拉列表。不管怎樣,如果你使用模式字符串,你將很難分手。最後,我曾與很多應用服務器技術(如WAS/JBOSS,TOMCAT,.NET/C#,Tibco,WMB,WPS,WESB,ALBPM,Datapower等ESB)合作,每個人都有一些細微差別他們如何做xml驗證的差異。注意邊界條件驗證(null與空白值vs,沒有標籤,vs tag + xsi:nil = true)來舉幾個例子。對於某些技術,XML枚舉也屬於這一類。他們只是不支持它(取決於你在談論哪種技術)。例如,在我的經驗中,我發現JBOSS 6.0在模式中驗證基於模式的限制方面存在問題。 (這只是我的經驗,我知道一些JBOSS愛好者會來這裏爭論,但嘿,這不會改變我的經驗,現在它會... :)

我不喜歡關於枚舉或模式是您現在正在架構中定義業務/系統約束。考慮到您將重複使用您的架構來發展架構,如果要添加新的允許值,將會導致對更新現有接口和WSDLS的方式進行大量的返工。我的解決方案通常涉及在我的解決方案的主持人身上進行允許的值驗證。這允許所有的集成層假設通向集成層的消息必須在其內容中有效。

我希望這有助於某人......