3.2 Квалифицированные локальные элементы и атрибуты

Поскольку элементы и атрибуты могут квалифицироваться независимо друг от друга, начнем описание квалифицирования с локальных элементов. Для того чтобы определить, что все локально объявленные элементы в схеме должны быть квалифицированы, мы устанавливаем значение elementFormDefault равное  qualified:

Изменения в  po1.xsd для квалифицированных локальных элементов

<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:

Счет на покупку с квалифицированными по умолчанию элементами, 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>

 

Сайт создан в системе uCoz