12.4.1 Фасет enumeration, принадлежащий простому определению типа со множеством (variety) atomic, который получается ограничением (прямо или косвенно) xsd:string, не должен быть отображен в ограничении АСН.1. Вместо этого фасет должен быть отображен в "Enumeration" перечислимого типа АСН.1, соответствующего простому определению типа (см. 13.4), как описано в четырех следующих подпунктах.
12.4.1.1 Для каждого элемента значения фасета enumeration "Enumerationltem", который является "identifier", должен быть добавлен к "Enumeration" (с учетом 12.1.2, 12.2.1, 12.3.1 и 12.5.1).
12.4.1.2 Каждый "identifier" должен быть сформирован применением 10.3 к соответствующему элементу значения фасета enumeration.
12.4.1.3 Элементы значения фасета enumeration должны быть отображены в возрастающем лексикографическом порядке, и любые дублирующиеся элементы должны быть отброшены.
12.4.1.4 Если простое определение типа имеет фасет whiteSpace со значением preserve или replace, то перечислимый тип должен быть присвоен по крайней мере одной заключительной команде кодирования TEXT с уточняющей информацией, показывающей один или более "Enumerationltem".
Примечание - Важный пример этого - ограничение xsd:string с фасетом enumeration, которое имеет whiteSpace preserve по умолчанию.
12.4.2 Фасет enumeration, принадлежащий простому определению типа со множеством atomic, который получается ограничением (прямо или косвенно) xsd:integer, не должен быть отображен в ограничении АСН.1. Вместо этого фасет должен быть отображен в "Enumeration" перечислимого типа АСН.1, соответствующего простому определению типа (см. 13.5), как описано в трех следующих подпунктах.
12.4.2.1 Для каждого элемента значения фасета enumeration, "Enumerationltem", который является "NamedNumber", должен быть добавлен к "Enumeration" (с учетом 12.1.2, 12.2.1, 12.3.1 и 12.5.1).
12.4.2.2 "identifier" в каждом "NamedNumber" должен быть сформирован, связывая символьную строку "int" с каноническим лексическим представлением (см. Часть 2, 2.3.1 W3C XML-схемы) соответствующего элемента значения фасета enumeration. "SignedNumber" в "NamedNumber" должно быть нотацией значения АСН.1 для элемента (целое число).
12.4.2.3 Элементы значения фасета enumeration должны быть отображены в возрастающем числовом порядке, и любые дублирующиеся элементы должны быть отброшены.
12.4.3 Любой другой фасет enumeration должен быть отображен в ограничении АСН.1, которое является либо одиночным значением, либо совокупностью одиночных значений, соответствующих элементам значения enumeration.
Примечание - Фасет enumeration применяется к пространству значений базового определения типа (base type definition). Поэтому для enumeration таких XSD-встроенных типов, как xsd:QName или xsd:NOTATION, значение компонента uri [USE-QNAME] ПОСЛЕДОВАТЕЛЬНОСТИ ([USE-QNAME] SEQUENCE), сформированное как одиночное значение ограничения АСН.1, определяется в XML-представлении схемы XSD объявлениями пространства имен, контекст которых включает xsd:QName или xsd:NOTATION, и префиксом (если таковые имеются) xsd:QName или xsd:NOTATION.
Пример 1 - Далее представлено высокоуровневое простое определение типа, которое является ограничением xsd:string с фасетом enumeration: | ||||||
<xsd:simpleType name="state"> | ||||||
<xsd:restriction base="xsd:string"> | ||||||
<xsd:enumeration value="off"/> | ||||||
<xsd:enumeration value="on"/> | ||||||
</xsd:restriction> | ||||||
</xsd:simpleType> | ||||||
Это отображается в присвоении типа АСН.1: | ||||||
State : := [NAME AS UNCAPITALIZED] ENUMERATED {off, on} | ||||||
Пример 2 - Далее представлено высокоуровневое простое определение типа, которое является ограничением xsd:integer с фасетом enumeration: | ||||||
<xsd:simpleType name="integer-0-5-10"> | ||||||
<xsd:restriction base="xsd:integer"> | ||||||
<xsd:enumeration value="0"/> | ||||||
<xsd:enumeration value="5"/> | ||||||
<xsd:enumeration value="10"/> | ||||||
</xsd:restriction> | ||||||
</xsd:simpleType> | ||||||
Это отображается в присвоении типа АСН.1: | ||||||
Integer-0-5-10 : := [NAME AS UNCAPITALIZED] [USE-NUMBER] ENUMERATED {int0 (0), int5 (5), int10 (10)} | ||||||
Пример 3 - Далее представлено высокоуровневое простое определение типа, которое является ограничением xsd:integer с фасетом minlnclusive и maxlnclusive: | ||||||
<xsd:simpleType name="integer-1-10"> | ||||||
<xsd:restriction base="xsd:integer"> | ||||||
<xsd:minlnclusive value="1"/> | ||||||
<xsd:maxlnclusive value="10"/> | ||||||
</xsd:restriction> | ||||||
</xsd:simpleType> | ||||||
Это отображается в присвоении типа АСН.1: | ||||||
Integer-1-10 : := [NAME AS UNCAPITALIZED] INTEGER (1..10) | ||||||
Пример 4 - Далее представлено высокоуровневое простое определение типа, которое является ограничением (с фасетом minExclusive) другого простого определения типа, полученного ограничением xsd:integer с добавлением фасета minlnclusive и maxlnclusive: | ||||||
<xsd:simpleType name="multiple-of-4"> | ||||||
<xsd:restriction> | ||||||
<xsd:simpleType> | ||||||
<xsd:restriction base="xsd:integer"> | ||||||
<xsd:minlnclusive value="1"/> | ||||||
<xsd:maxlnclusive value="10"/> | ||||||
</xsd:restriction> | ||||||
</xsd:simpleType> | ||||||
<xsd:minExclusive value="5"/> | ||||||
</xsd:restriction> | ||||||
</xsd:simpleType> | ||||||
Это отображается в присвоении типа АСН.1: | ||||||
Multiple-of-4 ::= [NAME AS UNCAPITALIZED] INTEGER (5<..10) | ||||||
Пример 5 - Далее представлено высокоуровневое простое определение типа, которое является ограничением (с фасетом minLength и maxLength) другого простого определения типа, полученного ограничением xsd:string с добавлением фасета enumeration: | ||||||
<xsd:simpleType name="color"> | ||||||
<xsd:restriction> | ||||||
<xsd:simpleType> | ||||||
<xsd:restriction base="xsd:string"> | ||||||
<xsd:enumeration value="white"/> | ||||||
<xsd:enumeration value="black"/> | ||||||
<xsd:enumeration value="red"/> | ||||||
</xsd:restriction> | ||||||
</xsd:simpleType> | ||||||
<xsd:minLength value="2"/> | ||||||
<xsd:maxLength value="4"/> | ||||||
</xsd:restriction> | ||||||
</xsd:simpleType> | ||||||
Это отображается в присвоении типа АСН.1: | ||||||
Color ::= [NAME AS UNCAPITALIZED] ENUMERATED {red} |