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