代码之家  ›  专栏  ›  技术社区  ›  Bobby Cannon

简单类型字符串的不区分大小写的XML架构枚举

  •  16
  • Bobby Cannon  · 技术社区  · 16 年前

    我的XML架构(.xsd)文件中需要不区分大小写的字符串枚举类型。我可以通过以下操作来区分大小写。

    <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”,它将无法验证。

    我要枚举“on”、“off”并允许输入不区分大小写的版本。

    3 回复  |  直到 11 年前
        1
  •  10
  •   joel.neely    16 年前

    IBM developerWorks已经 an article 关于如何使用XSLT以自动化方式执行完整枚举选项集的构造。它是针对缺乏不区分大小写枚举的一种解决方案。

        2
  •  16
  •   Orvid King    11 年前

    如果希望在Visual Studio 2010中保持不区分大小写的验证,同时仍获得IntelliSense,则可以使用联合:

    <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”仍然被确定为有效的,即使它不在枚举值列表中。

        3
  •  1
  •   leppie    16 年前

    好吧,你可以把所有排列都列成模式:)