Ответ 1
IBM developerWorks статью о том, как использовать XSLT для автоматического создания полного набора альтернатив перечисления. Он представлен как обходной путь к отсутствию регистрозависимых перечислений.
Мне нужен тип перечисления строки, нечувствительный к регистру в файле 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" и разрешить ввод нечувствительных к регистру версий.
IBM developerWorks статью о том, как использовать XSLT для автоматического создания полного набора альтернатив перечисления. Он представлен как обходной путь к отсутствию регистрозависимых перечислений.
Если вы хотите сохранить достоверность без учета регистра, но все еще получаете 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" по-прежнему определяется как действительный, даже если он не находится в списке значений перечисления.
Ну, вы можете просто перечислить все перестановки как шаблоны:)