Нечеткое определение строки схемы 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>

Единственная проблема заключается в том, что я не получаю никаких значений перечисления. Я не получу приятный intellesense при использовании Visual Studio для написания моего XML. Следующее даст мне перечисления, но это чувствительно к регистру.

<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" и разрешить ввод нечувствительных к регистру версий.

Ответ 1

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

Ответ 2

Если вы хотите сохранить достоверность без учета регистра, но все еще получаете Intellisense в Visual Studio 2010, вы можете использовать union:

<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

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