2012-11-07 30 views
3

請確認(或反駁)此模式定義(.xsd文件)中的枚舉是多餘的(由於第二個simpleType只允許長度爲5個字符或更少):XML Schema中的枚舉定義是多餘的

<simpleType name="decision"> 
    <annotation> 
     <documentation>It will decide the flow</documentation> 
    </annotation> 
    <union> 
     <simpleType> 
      <restriction base="string"> 
       <enumeration value="yes"/> 
       <enumeration value="no"/> 
       <enumeration value="maybe"/> 
      </restriction> 
     </simpleType> 
     <simpleType> 
      <restriction base="string"> 
       <maxLength value="5"/> 
      </retriction> 
     </simpleType> 
    </union> 
<simpleType> 

我們已經在我們的應用程序中獲得了很多這些東西,所以我們應該優化它。

+0

即使存在具有該聯盟沒有*技術*的優勢,這是*至少*文件,這三個值(' yes','no'和'maybe')具有特殊意義。 –

+0

除了3個值是關於期望值的「文檔」之外......它是爲了真實而做任何事情,還是讓任何5個字符或更少的字符串通過?這是個問題 –

回答

1

您所看到的僅僅是XSD作者用來爲我所謂的「可擴展枚舉」提供前向/後向兼容性的模式。

對於某些這是一個矛盾。對我來說,這意味着人們必須準備好執行這個合同優雅處理值以外的列出的。

合同設計人員決定,對於這些特定類型,由於某些消費者可能沒有圍繞枚舉值的業務邏輯,因此應該沒有「快速」拒絕(通常由XSD驗證程序完成),而其他其他可能是。當然,它最終似乎確實是一種「令人困惑」的文檔方式......想象一下,XSD代碼實現(如.NET的xsd.exe,svcutil.exe或Java JAXB)會非常聰明(他們又不是),作爲對靜止創建枚舉類型,具有yesnomaybe,和其他與後者是一個捕獲所有對於所有其它的值。我想知道是否假設上述情況,你仍然認爲這是多餘的?代碼覆蓋的專家會喜歡它...

1

如果您只使用模式進行驗證,這是多餘的。

如果您使用模式進行數據綁定,或者支持模式感知的XSLT/XQuery處理,文檔,生成實例或生成表單,那麼這種設計有時可能會有用。它有時也會使您的模式更具可擴展性/可定製性。 (但這些都是關於工會基本點,我不知道您的具體情況是非常有用的。)