XML Schema поддерживает концепцию списковых
типов, в дополнение к так называемым атомным типам, которые являются наиболее
употребляемыми типами. Атомные типы представлены в Таблице 2. (Атомные типы, списковые типы и объединяемые типы,
описанные в следующем разделе, называются простыми типами.) Значение атомного
типа неделимо в XML Schema. Например, значение с типом NMTOKEN равное US является
неделимым в том смысле, что никакая часть US, например символ «S» не может
рассматриваться отдельно. В противоположенность этому, списковые типы состоят
из последовательности атомных типов. Следовательно, части спискового типа
(«атомы») самостоятельно значимы. Например, NMTOKENS является является типом спискового типа. Элементы данного типа должны
разделяться в списке пробелом: «US UK FR», и каждый из них значим. XML Schema имеет три встроенных типа списков: NMTOKENS, IDREFS, и ENTITIES.
Кроме использования встроенных
списковых типов, можно создавать новые списковые типы из существующих атомных типов.
(Нельзя создавать
списковые типы от существующих списковых типов и от сложных типов.)
Пример. Создадим список
<xsd:simpleType name=”listOfMyIntType”> <xsd:list itemType=”myInteger”/> </xsd:simpleType>
Элемент в экземпляре документа, чье
содержание соответствует listOfMyIntType это:
20003 15037 95977 95945
Для списковых типов
могут применяться следующие ограничители: 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.
Тогда следующий список из трех элементов
правильный:
Asie Europe Afrique
Однако следующий список из 3 элементов
не корректный:
Asie
Несмотря на то,
что "Amérique Latine" может существовать как отдельный
строковый элемент вне списка, когда такая строка включается в список, пробел между Amérique и Latine фактически создает четвертый элемент.
Поэтому последний пример не будет соответствовать списковому типу с 3
элементами.