Перевод рекомендации W3C - XML Schema Part 0. Выполнил Г.Е. Берман
Перевод рекомендации W3C - XML Schema Part 0. Выполнил Г.Е. Берман
5.4 Импортирование типов
Схема отчета, report.xsd, использует простой тип xipo:SKU, который
определен в другой схеме и в другом целевом пространстве имен. Для его
повторного вызова мы использовали include так, чтобы схема в ipo.xsd могла
использовать определения и объявления из address.xsd. Однако здесь мы не можем использовать include, потому что он может только применяться
в определениях и объявлениях схемы, целевое пространство имен которой то же
самое, что и целевое пространство имен включаемой схемы. Следовательно, элемент
include не идентифицирует пространство имен (хотя
он требует schemaLocation). Механизм импортирования, описываемый в
этом разделе, является важным механизмом, который дает возможность компонентам
схемы из различных целевых пространств имен использоваться вместе, и,
следовательно, обеспечивает проверку правильности схемы содержания примера,
определяемой в области нескольких пространств имен.
Для того чтобы импортировать тип
SKU и использовать его в схеме отчета, мы
идентифицируем пространство имен, в котором SKU определен, и связываем это пространство имен для использования в
схеме отчета с префиксом. Конкретно, мы используем элемент import, чтобы идентифицировать целевое
пространство имен SKU, http://www.example.com/IPO, и связать пространство имен с префиксом
xipo, используя стандартное объявление пространства имен. На
простой тип SKU, определенный в пространстве имен http://www.example.com/IPO, можно затем ссылаться как xipo:SKU в любом
определений и объявлении схемы отчета.
В нашем примере, мы
импортировали один простой тип из одного внешнего пространства имен, и
использовали его для объявления атрибутов. Фактически, XML Schema разрешает нескольким компонентам схемы
быть импортированным из нескольких пространств имен, и на них можно ссылаться и
в определениях и в объявлениях. Например, в report.xsd мы
могли дополнительно многократно использовать элемент comment, объявленный в ipo.xsd ссылаясь
на тот элемент в объявлении:
<element ref="xipo:comment"/>
Однако отметим, что мы не можем
многократно использовать элемент shipTo из po.xsd, и следующее не правильно,
поскольку только глобальные компоненты
схемы могут быть импортированы:
<element ref="xipo:shipTo"/>
В ipo.xsd, comment объявлен как глобальный элемент, другими
словами он объявлен как элемент schema. Напротив, shipTo объявлен локально, другими словами он является элементом,
объявленным в определении сложного типа, заданного типом PurchaseOrderType.
Сложные типы также могут быть
импортированы, и они могут использоваться как исходные типы для получения новых
типов. Только именованные сложные типы могут быть импортированы, а локальные,
анонимно определенные типы не могут. Предположим, что мы хотим включить в наш
отчет имя аналитика, наряду с контактной
информацией. Мы можем многократно использовать (глобально определенный) сложный
тип USAddress из address.xsd, и расширить его для того, чтобы
определить новый тип с именем Analyst, добавляя новые элементы phone и email:
Определение Analyst посредством расширения USAddress
<complexType name="Analyst">
<complexContent>
<extension base="xipo:USAddress">
<sequence>
<element name="phone" type="string"/>
<element name="email" type="string"/>
</sequence>
</extension>
</complexContent>
</complexType>
Используя этот новый тип, мы объявляем элемент с именем analyst как часть объявления элемента purchaseReport (объявления не показаны) в схеме отчета. Тогда, следующий документ примера
соответствовал бы модифицированной схеме отчета:
Пример
документа, соответствующий схеме отчета с типом Analyst
<purchaseReport
xmlns="http://www.example.com/Report"
period="P3M" periodEnding="1999-12-31">
<!-- regions and parts elements omitted -->
<analyst>
<name>Wendy Uhro</name>
<street>10 Corporate Towers</street>
<city>San Jose</city>
<state>CA</state>
<zip>95113</zip>
<phone>408-271-3366</phone>
<email>uhro@example.com</email>
</analyst>
</purchaseReport>
Когда
компоненты схемы импортированы из нескольких пространств имен, каждое
пространство имен должно быть определено с отдельным элементом import. Элементы import сами должны представляться как первые
дочерние элементы элемента schema. Кроме того, каждое пространство имен должно
быть связано с префиксом, используя стандартное объявление пространства имен, и
этот префикс применяется для того, чтобы квалифицировать ссылки к любым
компонентам схемы, принадлежащим этому пространству имен. Наконец, элементы import могут содержать необязательный атрибут schemaLocation для того, чтобы помочь определить местонахождение ресурсов,
связанных с пространством имен. Мы обсудим атрибут schemaLocation более подробно позднее.
#bn {display:block;}
#bt {display:block;}
содержание | 2 | Изображения
Используются технологии
uCoz