4.4 Получение сложных типов посредством ограничений

В дополнение к способу получения новых сложных типов посредством расширения модели содержания, можно получить новые типы, ограничивая модели содержания существующих типов. Ограничение сложных типов концептуально подобно ограничению простых типов. Отличие в том, что более предпочтительно основывать ограничение сложных типов за счет включения объявлений типов, а не допустимых диапазонов значений, как для простых типов. Сложный тип, полученный посредством ограничения очень похож на исходный тип, за исключением того, что его объявления больше ограничены, чем соответствующие объявления в исходном типе. Фактически, значения, представленные новым типом являются подмножеством значений, представленных исходным типом (как и в случае с ограничением простых типов). Другими словами, приложение, которое понимает значения исходного типа, нормально будет воспринимать и значения с ограниченным типом.

Например, предположим, что мы хотим модифицировать наше определение списка items в международном счете на покупку так, чтобы он мог содержать, по крайней мере, один item в счете. Схема, показанная в ipo.xsd, позволяет элемент items представлять без каких-либо дочерних  элементов item. Для того чтобы создавать наш новый тип ConfirmedItems, мы определяем новый тип обычным образом, указываем, что он получен посредством ограничения от исходного типа Items, и обеспечиваем новое (с более сильным ограничением) значение для минимального количества появляющихся элементов item. Обратите внимание, что типы, полученные посредством ограничения должны повторять все компоненты определения исходного типа, которые включаются в наследуемый тип:

Получение ConfirmedItems посредством ограничения Items

<complexType name=”ConfirmedItems”> <complexContent> <restriction base=”ipo:Items”> <sequence> <!-- item element is different than in Items --> <element name=”item” minOccurs=”1” maxOccurs=”unbounded”> <!-- remainder of definition is same as Items --> <complexType> <sequence> <element name=”productName” type=”string”/> <element name=”quantity”> <simpleType> <restriction base=”positiveInteger”> <maxExclusive value=”100”/> </restriction> </simpleType> </element> <element name=”USPrice” type=”decimal”/> <element ref=”ipo:comment” minOccurs=”0”/> <element name=”shipDate” type=”date” minOccurs=”0”/> </sequence> <attribute name=”partNum” type=”ipo:SKU” use=”required”/> </complexType> </element> </sequence> </restriction> </complexContent> </complexType>

Это изменение, требуемое, по крайней мере, для одного дочернего элемента, сужает допустимое количество дочерних элементов от минимума, равного 0, к минимуму, равному 1, является более предпочтительным, чем допускать ноль или несколько дочерних элементов. Отметим, что все элементы типа ConfirmedItems также будут приемлемы как элементы типа Item.

Далее проиллюстрируем это ограничение. В Таблице 3 показы несколько примеров того, как объявления элементов и атрибутов внутри определений типов могут быть ограничены (в таблице показан синтаксис элементов, первые три примера  являются одинаковыми с точки зрения правильности ограничений атрибутов).

Таблица 3. Примеры ограничений

Основа

Ограничение

Замечания

 

default="1"

задание значения по умолчанию, в случае, когда ничего предварительно не было определено

 

fixed="100"

задание фиксированного значения, в случае, когда ничего предварительно не было определено

 

type="string"

задание типа, в случае, когда ничего предварительно не было определено

(minOccurs, maxOccurs)

(minOccurs, maxOccurs)

 

(0, 1)

(0, 0)

исключение дополнительной компоненты; это может также быть достигнуто, опуская объявление компоненты от ограниченного определения типа

(0, неограниченно)

(0, 0) (0, 37)

 

(1, 9)

(1, 8) (2, 9) (4, 7) (3, 3)

 

(1, неограниченно)

(1, 12) (3, неограниченно) (6, 6)

 

(1, 1)

-

не может ограничить minOccurs или maxOccurs

 


Вип Каталог | Оптимальный каталог | Скрипт каталога | Каталог недвижимости | Мебельный каталог | Русский каталог | Рубрикатор | Каталог сайтов | Каталог Рунета | Поиск в Рунете | Оптимизируем.ру | Спортивный каталог | Каталог РуНета | Строительный каталог | Каталог производителей | РуЛист
Используются технологии uCoz