Перевод рекомендации W3C - XML Schema Part 0. Выполнил Г.Е. Берман


Перевод рекомендации W3C - XML Schema Part 0. Выполнил Г.Е. Берман
4.8 Управление созданием и использованием полученными типами
До сих пор мы
имели возможность получать новые типы и использовать их в документах примера
без каких-либо ограничений. В действительности, авторы схем иногда хотят
управлять происхождением отдельных типов, и использовать полученные типы в
примерах.
XML Schema обеспечивает несколько механизмов,
которые управляют происхождением типов. Один из этих механизмов позволяет
автору схемы определять, какие новые типы не могут быть получены из
определенного сложного типа:  (a)
посредством ограничения, (b) посредством расширения, (c) обоими способами. Для
того чтобы это проиллюстрировать, предположим следующее. Мы хотим предотвратить
какое-либо образование из типа Address посредством ограничения, поскольку мы хотели бы, чтобы он только
использовался как основа для расширенных типов, таких как  USAddress и UKAddress. Чтобы предотвратить такого рода образования, мы, следующим
образом, немного изменим первоначальное определение Address:
Предотвращение образования посредством ограничения Address
<complexType name=”Address” final=”restriction”>
<sequence>
<element name=”name” type=”string”/>
<element name=”street” type=”string”/>
<element name=”city” type=”string”/>
</sequence>
</complexType>
Значение restriction атрибута final предотвращает образование посредством
ограничения. Предотвращение образований вообще, или посредством расширения,
обозначено значениями #all и extension,
соответственно. Кроме того, существует дополнительный атрибут finalDefault в элементе schema, значение которого может быть одним из
значений, разрешенных для атрибута final. Эффект определения атрибута finalDefault эквивалентен в схеме определению атрибута final в каждом определении типов и объявлении
элемента.
Другой механизм образования типа
управляет тем,  какие ограничения могут
быть применены при образовании нового простого типа. Когда простой тип
определен, атрибут fixed может быть применен к любому из его
ограничений, чтобы предотвратить образование этого типа, посредством изменения
значения фиксированных ограничений. Например, мы можем определить простой тип Postcode как:
Предотвращение изменений для ограничений простого типа
<simpleType name=”Postcode”>
<restriction base=”string”>
<length value=”7” fixed=”true”/>
</restriction>
</simpleType>
Как только этот простой тип был
определен, мы можем получить новый тип почтового кода, в котором мы применили
ограничения, не фиксированные в основном определении, например:
Правильное образование от Postcode
<simpleType name="UKPostcode">
<restriction base=”ipo:Postcode”>
<pattern value=”[A-Z]{2}\d\s\d[A-Z]{2}”/>
</restriction>
</simpleType>
Однако мы не можем получить
новый почтовый код, в котором мы повторно применяем какое-либо ограничение,
которое было фиксировано в основном определении:
Неправильное образование от Postcode
<simpleType name=”UKPostcode”>
<restriction base=”ipo:Postcode”>
<pattern value=”[A-Z]{2}\d\d[A-Z]{2}”/>
<!-- illegal attempt to modify facet fixed in base type -->
<length value=”6” fixed=”true”/>
</restriction>
</simpleType>
В дополнение к
механизмам, управляющим образованиями типов, XML Schema обеспечивают механизм, который управляет
тем, какие образования и группы замены могут использоваться в документах
примера. В Разделе 4.3, мы описали как образованные типы, USAddress и UKAddress, могли использоваться элементами shipTo и billTo в
документах примера. Эти производные типы могут заменить модель содержания,
обеспеченную типом Address,
поскольку они получены из типа Address. Однако, замещение производными типами может управляться,
используя атрибут block в определении типа. Например, если мы
хотим блокировать какое-либо образование-посредством-ограничения, которое могло
бы использоваться для замены Address (возможно по той же самой причине мы определили Address с final="restriction"), то необходимо изменить первоначальное определение Address следующим образом:
Предотвращение образования посредством ограничения Address в
примере
<complexType name=”Address” block=”restriction”>
<sequence>
<element name=”name” type=”string”/>
<element name=”street” type=”string”/>
<element name=”city” type=”string”/>
</sequence>
</complexType>
В примере значение restriction в атрибуте block препятствует использованию
образования-посредством-ограничения для замены Address. Однако это не предотвратило бы замену Address на UKAddress и USAddress, поскольку они были получены расширением.
В любом случае предотвращение замены образованиями или
образованиями-посредством-расширения, обозначается значениями #all и extension,
соответственно. Как с final, там существует дополнительный атрибут blockDefault в элементе schema, значение которого может быть одним из
значений, разрешенных для атрибута block. Эффект определения атрибута blockDefault эквивалентен определению атрибута block  в
каждом определении типа и объявлении элемента в схеме.

#bn {display:block;}
#bt {display:block;}
содержание | 2 | деньги
Используются технологии uCoz