2.3.1 Списковые типы

XML Schema поддерживает концепцию списковых типов, в дополнение к так называемым атомным типам, которые являются наиболее употребляемыми типами. Атомные типы представлены в Таблице 2. (Атомные типы, списковые типы и объединяемые типы, описанные в следующем разделе, называются простыми типами.) Значение атомного типа неделимо в XML Schema. Например, значение с типом NMTOKEN равное US является неделимым в том смысле, что никакая часть US, например символ «S» не может рассматриваться отдельно. В противоположенность этому, списковые типы состоят из последовательности атомных типов. Следовательно, части спискового типа («атомы») самостоятельно значимы. Например, NMTOKENS является является типом спискового типа. Элементы данного типа должны разделяться в списке пробелом: «US UK FR», и каждый из них значим.  XML Schema имеет три встроенных типа списков: NMTOKENS, IDREFS, и ENTITIES.

Кроме использования встроенных списковых типов, можно создавать новые списковые типы из существующих атомных типов. (Нельзя создавать списковые типы от существующих списковых типов и от сложных типов.)

Пример. Создадим список myInteger:

Создание списка myInteger

<xsd:simpleType name=”listOfMyIntType”> <xsd:list itemType=”myInteger”/> </xsd:simpleType>

Элемент в экземпляре документа, чье содержание соответствует listOfMyIntType это:

20003 15037 95977 95945

Для списковых типов могут применяться следующие ограничители: length, minLength, maxLength и enumeration.
Например, для того, чтобы задать точный список из шести штатов США (
SixUSStates), мы, во-первых, должны определить новый списковый тип с именем USStateList от USState, и затем задать SixUSStates, ограничивая USStateList только шестью значениями.

Списковый тип для 6 штатов США

<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 Europe Amérique Latine

Несмотря на то, что "Amérique Latine" может существовать как отдельный строковый элемент вне списка, когда такая строка включается в список, пробел между Amérique и Latine фактически создает четвертый элемент. Поэтому последний пример не будет соответствовать списковому типу с 3 элементами.

Сайт создан в системе uCoz