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
элементами.