XML-схема без учета регистра перечисления строк простого типа

Мне нужен нечувствительный к регистру тип перечисления строк в моем файле схемы 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. Следующее даст мне перечисления, но это чувствительно к регистру.

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

Это даст мне мои перечисления, но если я когда-либо получу значение «Вкл.», «ВКЛ.» Или «НА», проверка не будет выполнена.

Я хочу перечислить «вкл», «выкл» и разрешить ввод версий без учета регистра.

11.12.2008 13:37:32
3 ОТВЕТА
РЕШЕНИЕ

В IBM developerWorks есть статья о том, как использовать XSLT для автоматического создания полного набора альтернатив перечисления. Он представлен как обходной путь к отсутствию регистронезависимых перечислений.

10
11.12.2008 19:29:07

Ну, вы можете просто перечислить все перестановки в виде шаблонов :)

1
11.12.2008 13:40:07
Я мог бы, но это не элегантно для длинных значений перечисления, таких как «уведомление», и я все еще не получаю свое перечисление. Перечень очень важен для меня. :)
Bobby Cannon 11.12.2008 13:44:06

Если вы хотите сохранить проверку без учета регистра, при этом получая Intellisense в 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. Однако, когда он проверяет документ, он обрабатывает оба, что означает, что «Вкл» по-прежнему определяется как действительный, даже если его нет в списке значений перечисления.

17
16.03.2013 03:51:04