Перечисление простого типа String без учета регистра в XML-схеме

StackOverflow https://stackoverflow.com/questions/359359

Вопрос

Мне нужен тип перечисления строк без учета регистра в моем файле XML schema (.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>

Это выдаст мне мои перечисления, но если я когда-либо получу значение "Вкл", "ВКЛ" или "ВКЛ", проверка завершится неудачей.

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

Это было полезно?

Решение

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top