XML-схема без учета регистра перечисления строк простого типа - PullRequest
16 голосов
/ 11 декабря 2008

Мне нужен нечувствительный к регистру тип перечисления строк в моем файле 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>

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

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

Ответы [ 3 ]

16 голосов
/ 16 марта 2013

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

10 голосов
/ 11 декабря 2008

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

1 голос
/ 11 декабря 2008

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

...