2008-12-11 53 views
13

我需要在我的XML模式(.xsd)文件中區分大小寫的字符串枚舉類型。通過執行以下操作,我可以忽略大小寫。XML Schema不區分大小寫簡單類型字符串

<xs:simpleType name="setDigitalPointType"> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value="[Oo][Nn]" /> 
     <xs:pattern value="[Oo][Ff][Ff]" /> 
    </xs:restriction> 
</xs:simpleType> 

唯一的問題是我沒有得到枚舉值。使用Visual Studio編寫我的XML時,我不會得到很好的intellesense。以下列舉了枚舉,但區分大小寫。

<xs:simpleType name="setDigitalPointType"> 
    <xs:restriction base="xs:string"> 
     <xs:enumeration value="on" /> 
     <xs:enumeration value="off" /> 
    </xs:restriction> 
</xs:simpleType> 

這會給我我的枚舉,但如果我收到「開」的值,「ON」或「ON」,將無法通過驗證。

我想枚舉「on」,「off」並允許輸入不區分大小寫的版本。

回答

10

IBM developerWorks上有關於如何使用XSLT以自動方式執行的全套枚舉替代品的建設an article。它是作爲一種解決方案來提供的,不存在不區分大小寫的枚舉。

0

嗯,你可以只列出所有的排列爲圖案:)

+0

我可以但對於像「通知」這樣的長枚舉值來說,這並不算優雅,我仍然沒有得到枚舉。枚舉對我來說非常重要。 :) – 2008-12-11 13:44:06

15

如果你既想保持不區分大小寫的驗證,同時仍然在Visual Studio 2010中獲得智能感知,你可以使用一個聯盟:

<xs:simpleType name="setDigitalPointType"> 
    <xs:union> 
     <xs:simpleType> 
      <xs:restriction base="xs:string"> 
       <xs:enumeration value="on" /> 
       <xs:enumeration value="off" /> 
      </xs:restriction> 
     </xs:simpleType> 
     <xs:simpleType> 
      <xs:restriction base="xs:string"> 
       <xs:pattern value="[Oo][Nn]" /> 
       <xs:pattern value="[Oo][Ff][Ff]" /> 
      </xs:restriction> 
     </xs:simpleType> 
    </xs:union> 
</xs:simpleType> 

這工作,因爲它利用了以下事實的Visual Studio 2010只在構建Intellisense數據時在聯合中處理第一個簡單類型。但是,當它驗證一個文檔時,它會同時處理這兩個文檔,這意味着即使它不在枚舉值列表中,「On」仍然是有效的。

相關問題