
- •Лекция 4-04
- •4.2.7. Объявление атрибутов в схеме xml
- •4.2.7.1. Формат элементаattribute
- •4.2.7.2. Встроенные объявления атрибутов
- •4.2.8. Объявление элементов в схемеXml
- •4.2.8.1. Формат объявления элементаelement
- •4.2.8.2. Элементыunique,selectorиfield
- •4.2.8.3. Элементыkeyиkeyref
- •4.2.9. Определение комплексного типа в схемеXml
- •4.2.9.1. Формат определения элементаcomplexType
- •4.2.9.2. Элементы sequence, any, choice, all и group
- •4.2.9.3. ЭлементыattributeGroupиanyAttribute
- •4.2.9.4. ЭлементsimpleContent
- •4.2.9.5. ЭлементcomplexContent
- •4.2.10. Объявление нотации в схемеXml
- •4.2.11. Структура схемы
- •4.2.11.1. Элементschema
- •4.2.11.2. Включение внешних фрагментов в схему
- •4.2.11.3. Включение схемы в документXml
4.2.11. Структура схемы
4.2.11.1. Элементschema
Схема представляется в XMLкак один или более документов схемы, т.е. одним или более информационных элементовschema. Каждый документ схемы содержит определения типов и объявления элементов, которые имеет общее пространство имен. Документ схемы, который имеет один или более элементовimport, соответствует схеме, компоненты которой имеют более одного целевого пространства имен.
Элемент schemaимеет следующий формат:
<префикс:schema
attributeFormDefault = (qualified | unqualified) : unqualified
elementFormDefault = (qualified | unqualified) : unqualified
blockDefault = (#all | List (extension | restriction |
substitution)) : ''
finalDefault = (#all | List (extension | restriction)) : ''
xmnls[:префикс] = anyURI
targetNamespace = anyURI
id = ID
version = token
xml:lang = language
>
((include | import | redefine | annotation)*,
(((simpleType | complexType | group | attributeGroup) |
element | attribute | notation), annotation*)*)
</префикс:schema>
Атрибут attributeFormDefaultуказывает, должны ли в объявлениях атрибутов использоваться имена с префиксом пространства имен. Если значение этого атрибутаunqualified, то все объявления локальных атрибутов не должны иметь префиксов пространства имен, а если значение равноqualified, то все объявления атрибутов в схеме должны содержать префиксы пространства имен. Если атрибут не указан, то его значение по умолчанию равноunqualified.
Атрибут elementFormDefaultдействует аналогично атрибутуattributeFormDefault, но по отношению к объявлениям элементов в схеме.
Атрибут blockDefaultзапрещает замену элементов в схеме элементами их групп подстановки (значениеsubstitution) или запрещает замену элементов их производными типами (значениеrestriction) или запрещает замену элементов, элементами тех типов, для которых данные типы являются производными (значениеextension), если же задано значение#all, то блокируются все приведенные выше замены.
Атрибут finalDefaultдействует аналогично атрибутуblock, но блокирует только замены типаrestrictionи/илиextension.
Атрибут xmnlsзадает одно или более пространство имен, используемое в этой схеме. Обычно в качестве префикса берется значениеxs илиxsd, а в качестве значения атрибута –URIописания элементов схемы на сайтеW3:
"http://www.w3.org/2001/XMLSchema".
Если префикс не задан, элементы схемы можно использовать без префикса пространства имен.
Атрибут targetNamespaceзадает идентификатор целевого пространства имен, т.е. элементы в этой схеме определены в пространстве имен по адресуURI. Если параметр не указан, то пространство имен, для документа XML, сформированного в соответствии с данной схемой, не определено.
Необязательные атрибуты id,versionиxml:langзадают соответственно идентификатор элемента, версию и язык схемыXML.
4.2.11.2. Включение внешних фрагментов в схему
Включение в схему XMLвнешнего фрагмента с тем же целевым пространством имен выполняется с помощью элементаinclude, который имеет следующий формат:
<префикс:include
id = ID
schemaLocation = anyURI
>
(annotation?)
</префикс:include>
Атрибут idприсваивает элементу уникальное имя (необязательный параметр), а атрибутschemaLocationзадает местоположение вставляемого фрагмента, например:
<xsd:include schemaLocation="LibraryBook.xsd"/>
Если необходимо вставить в схему XMLвнешний фрагмент с другим целевым пространством имен, то эта операция выполняется с помощью элементаimport, который имеет следующий формат:
<префикс:import
id = ID
namespace = anyURI
schemaLocation = anyURI
>
(annotation?)
</префикс:import>
Помимо атрибутов idиschemaLocation, имеющих тот же смысл, что и для элементаinclude, задается атрибутnamespace, указывающий местонахождение ресурса для пространства имен, например:
<import namespace="http://www.w3.org/1999/xhtml"
schemaLocation="myHTML.xsd"/>
Для переопределения существующих компонент компонентами внешнего фрагмента используется компонент redefine, имеющий следующий формат:
<префикс:redefine
id = ID
schemaLocation = anyURI
(annotation | (simpleType | complexType | group | attributeGroup))*
</префикс:redefine>
Атрибуты idиschemaLocation, имеют тот же смысл, что и для элементаinclude.
Пример:
<xs:redefine schemaLocation="v1.xsd">