Поскольку элементы и атрибуты
могут квалифицироваться независимо друг от друга, начнем описание
квалифицирования с локальных элементов. Для того чтобы определить, что все
локально объявленные элементы в схеме должны быть квалифицированы, мы
устанавливаем значение elementFormDefault
равное qualified
:
<schema xmlns=”http://www.w3.org/2001/XMLSchema” xmlns:po=”http://www.example.com/PO1" targetNamespace=”http://www.example.com/PO1” elementFormDefault=”qualified” attributeFormDefault=”unqualified”> <element name=”purchaseOrder” type=”po:PurchaseOrderType”/> <element name=”comment” type=”string”/> <complexType name=”PurchaseOrderType”> <!-- etc. --> </complexType> <!-- etc --> </schema>
В этом экземпляре документа мы
квалифицируем все элементы явно:
<?xml version=”1.0”?> <apo:purchaseOrder xmlns:apo=”http://www.example.com/PO1” orderDate=”1999-10-20”> <apo:shipTo country=”US”> <apo:name>Alice Smith</apo:name> <apo:street>123 Maple Street</apo:street> <!-- etc. --> </apo:shipTo> <apo:billTo country=”US”> <apo:name>Robert Smith</apo:name> <apo:street>8 Oak Avenue</apo:street> <!-- etc. --> </apo:billTo> <apo:comment>Hurry, my lawn is going wild!</apo:comment> <!-- etc --> <</apo:purchaseOrder>
Альтернативно,
мы можем установить явную квалификацию для каждого элемента, который неявно
квалифицирован. Эту возможность обеспечивает пространство имен по умолчанию,
как показано в po2.xml
:
<?xml version=”1.0”?> <purchaseOrder xmlns=”http://www.example.com/PO1” orderDate=”1999-10-20”> <shipTo country=”US”> <name>Alice Smith</name> <street>123 Maple Street</street> <!-- etc. --> </shipTo> <billTo country=”US”> <name>Robert Smith</name> <street>8 Oak Avenue</street> <!-- etc. --> </billTo> <comment>Hurry, my lawn is going wild!</comment> <!-- etc. --> </purchaseOrder>
В po2.xml
, все элементы в экземпляре документа принадлежат
одному пространству имен. Предложение пространства имен объявляет значение
пространство имен по умолчанию и оно применяется ко всем элементам в экземпляре
документа. Следовательно, нет необходимости
в явном префиксе для элементов. В другой раз, в схемах Раздела 5 ,
представлено использование
квалифицированных элементов, когда они все требуют квалификации.
Квалификация атрибутов очень
похожа на квалификацию элементов. Атрибуты в экземплярах документов появляются с префиксом, т.е. квалифицированны,
либо потому что они объявлены глобально, либо потому что
атрибут attributeFormDefault
установлен как qualified
. Пример
квалифицированного атрибута – это атрибут xsi:nil
, который был введен в Разделе 2.9.
Фактически, атрибуты, для которых требуется квалификация, должны иметь явный
префикс, так как спецификация XML-Namespaces не
обеспечивает механизм задания пространств имен по умолчанию для атрибутов.
Атрибуты, для которых не требуется квалификация, представляются в экземплярах документов
без префиксов.
Описанный нами механизм квалификации
применяется к объявлениям локальных элементов и атрибутов в
пределах указанного целевого пространства имен. Также возможно для управления
квалификацией в локульных объявлениях использовать атрибут form
. Например, чтобы потребовать в экземпляре
документа для локально объявленного атрибута publicKey квалификацию, мы выполняем следующее:
<schema xmlns=”http://www.w3.org/2001/XMLSchema” xmlns:po=”http://www.example.com/PO1" targetNamespace=”http://www.example.com/PO1” elementFormDefault=”qualified” attributeFormDefault=”unqualified”> <!-- etc. --> <element name=”secure”> <complexType> <sequence> <!-- element declarations --> </sequence> <attribute name=”publicKey” type=”base64Binary” form=”qualified”/> </complexType> </element> </schema>
Отметим, что значение атрибута form
перекрывает значение атрибута attributeFormDefault
только для атрибута publicKey. Аналогичным способом атрибут form
может быть использован и при объявлении
элемента. Экземпляр документа, соответствующий представленной выше схеме:
<?xml version=”1.0”?> <purchaseOrder xmlns=”http://www.example.com/PO1” xmlns:po=”http://www.example.com/PO1” orderDate=”1999-10-20”> <!-- etc. --> <secure po:publicKey=”GpM7”> <!-- etc --> </secure> </purchaseOrder>