Поскольку элементы и атрибуты
могут квалифицироваться независимо друг от друга, начнем описание
квалифицирования с локальных элементов. Для того чтобы определить, что все
локально объявленные элементы в схеме должны быть квалифицированы, мы
устанавливаем значение 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>