XML Схема поддерживает концепцию списковых
типов, в дополнение к так называемым атомным типам, которые составляют
большинство типов, перечисленных в Таблице 2. (Атомные типы, списковые типы и типы объединения,
описанные в следующем разделе, называются простыми типами.) Значение атомного
типа неделимо в XML Schema. Например, значение NMTOKEN
равное US
является
неделимым в том смысле, что никакая часть US
, например символ «S» не может
рассматриваться отдельно. В противоположенность этому, списковые типы состоят
из последовательностей атомных типов, и, следовательно, части
последовательности («атомы») самостоятельно значимы. Например, NMTOKENS
является списковым типом. Элемент этого типа должен быть отделен
пробелом в списке, как здесь показано «US UK FR». XML Schema имеет три встроенных типа списков: NMTOKENS
, IDREFS
, и ОБЪЕКТЫ
.
Кроме использования встроенных
списковых типов, Вы можете создать новые
списковые типы из существующих атомных типов. (Нельзя создавать
списковые типы от существующих списковых типов и от сложных типов.) Например,
создадим список myInteger:
<xsd:simpleType name=”listOfMyIntType”> <xsd:list itemType=”myInteger”/> </xsd:simpleType>
Элемент в документе примера, чье
содержание соответствует listOfMyIntType
это:
Ряд ограничений
может применяться для списковых типов: length
, minLength
, maxLength
и enumeration
. Например, для того, чтобы задать точный
список из шести штатов США (SixUSStates
), мы, во-первых, должны определить новый списковый тип с
именем USStateList
от USState
, и затем вывести SixUSStates,
ограничивая USStateList
только шестью
значениями:
<xsd:simpleType name=”USStateList”>
<xsd:list itemType=”USState”/> </xsd:simpleType> <xsd:simpleType name=”SixUSStates”> <xsd:restriction base=”USStateList”> <xsd:length value=”6”/> </xsd:restriction> </xsd:simpleType>
Элементы, чей тип SixUSStates
должны иметь шесть значений, и каждое из этих
шести значений должно быть единичным (атомным) значением перечисляемого типа USState
, например:
<sixStates>PA NY CA NY LA AK</sixStates>
Отметим, что можно получить
списковый тип из атомного типа string
. Однако, string
может содержать пробелы, а пробелы
разделяют элементы в списковом типе.
Таким образом, необходимо быть внимательным, применяя списковые типы,
основанные на string
. Например, предположим, что мы
определили списковый тип с ограничением length
, равным 3, от исходного типа string.
Тогда следующий список из 3 элементов
правильный:
Asie Europe Afrique
Однако следующий список из 3 элементов
не корректный:
Asie
Даже притом,
что "Amérique Latine" может существовать как единый
строковый элемент вне списка, когда такая строка включается в список, пробел между Amérique и Latine фактически создает четвертый элемент.
Поэтому последний пример не будет соответствовать списковому типу с 3
элементами.