Перевод рекомендации W3C - XML Schema Part 0. Выполнил Г.Е. Берман


Перевод рекомендации W3C - XML Schema Part 0. Выполнил Г.Е. Берман
5.5 Элемент Any, атрибут
Any
В
предыдущих разделах мы рассмотрели ряд механизмов для расширения модели
содержания сложных типов. Например, смешанная модель содержания может включать
произвольные символьные данные в дополнение к элементам. Также модель содержания
может иметь элементы, типы которых импортированы из внешних пространств имен.
Однако эти механизмы обеспечивают очень широкий и очень узкий контроль,
соответственно. Цель данного раздела состоит в том, чтобы описать гибкий
механизм, который дает возможность моделям содержания быть расширенными любыми
элементами и атрибутами, принадлежащими указанному пространству имен.
Для иллюстрации рассмотрим
версию квартального отчета, 4Q99html.xml, в который мы внедрили данные в нотации
HTML, как части данных XML. HTML данные появляются как содержание элемента htmlExample, а пространство имен по умолчанию
изменено в самом первом элементе HTML (table) так, чтобы все элементы HTML
принадлежали пространству имен HTML, http://www.w3.org/1999/xhtml:
Квартальный
отчет с HTML, 4Q99html.xml
<purchaseReport
xmlns="http://www.example.com/Report"
period="P3M" periodEnding="1999-12-31">
<regions>
<!-- part sales listed by zip code, data from 4Q99.xml -->
</regions>
<parts>
<!-- part descriptions from 4Q99.xml -->
</parts>
<htmlExample>
<table xmlns="http://www.w3.org/1999/xhtml"
border="0" width="100%">
<tr>
<th align="left">Zip Code</th>
<th align="left">Part Number</th>
<th align="left">Quantity</th>
</tr>
<tr><td>95819</td><td> </td><td> </td></tr>
<tr><td> </td><td>872-AA</td><td>1</td></tr>
<tr><td> </td><td>926-AA</td><td>1</td></tr>
<tr><td> </td><td>833-AA</td><td>1</td></tr>
<tr><td> </td><td>455-BX</td><td>1</td></tr>
<tr><td>63143</td><td> </td><td> </td></tr>
<tr><td> </td><td>455-BX</td><td>4</td></tr>
</table>
</htmlExample>
</purchaseReport>
Для того чтобы
разрешить появление HTML в документе примера, мы изменили схему отчета, объявив
новый элемент htmlExample, чье содержание определено элементом any. Вообще, элемент any определяет, что любой правильный (well-formed) XML допустим в модели содержания типа. В
примере, мы требуем, чтобы XML принадлежал пространству имен http://www.w3.org/1999/xhtml. Другими словами, он должен быть HTML. В
примере также требуется, чтобы, по крайней мере, один элемент был представлен в
этом пространстве имен, как это указано значениями minOccurs и maxOccurs:
Изменение
объявления purchaseReport для того, чтобы разрешить HTML в примере
<element name="purchaseReport">
<complexType>
<sequence>
<element name="regions" type="r:RegionsType"/>
<element name="parts" type="r:PartsType"/>
<element name="htmlExample">
<complexType>
<sequence>
<any namespace="http://www.w3.org/1999/xhtml"
minOccurs="1" maxOccurs="unbounded"
processContents="skip"/>
</sequence>
</complexType>
</element>
</sequence>
<attribute name="period" type="duration"/>
<attribute name="periodEnding" type="date"/>
</complexType>
</element>
Модификация разрешает некоторым правильным XML, принадлежащим пространству имен  http://www.w3.org/1999/xhtml появляться в элементе htmlExample. Следовательно, 4Q99html.xml является допустимым, поскольку есть один элемент, который (со
своими дочерними) является правильным, элемент появляется внутри
соответствующего элемента (htmlExample), и документ примера утверждает, что элемент и его
содержание принадлежат требуемому пространству имен. Однако HTML фактически не
может быть правильным, т.к. в 4Q99html.xml нет ничего, что бы позволило это гарантировать. Если такая
гарантия требуется, значение атрибута processContents должно быть установлено в strict (значение по умолчанию). В этом случае
обработчик XML обязан
получить схему, связанную с требуемым пространством имен и проверить
правильность HTML, представленного в элементе htmlExample.
В другом примере, мы определяем text тип, который подобен текстовому типу,
определенному в предварительной библиотеке типов XML Schema (см. также Раздел 5.4.1),
и является подходящим для интернационального, доступного для чтения человеком
текста. Текстовый тип позволяет неограниченно смешивать символьное содержание и
содержание элемента из любых пространств имен, например аннотации Ruby, наряду с дополнительным атрибутом xml:lang. Значение lax атрибута
processContents инструктирует обработчик XML на то, чтобы проверить правильность содержания элемента,
основываясь на следующем правиле: “Проверять правильность элементов и
атрибутов, для которых можно получить информацию схемы, но не воспринимать
ситуацию как ошибочную, если нельзя получить какую-либо информацию схемы”.
Текстовый тип
<xsd:complexType name="text">
<xsd:complexContent mixed="true">
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute ref="xml:lang"/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
Пространство
имен может использоваться для того, чтобы разрешить и запретить содержание
элемента различными способами в зависимости от значения атрибута namespace, как показано в Таблице 4:

Таблица 4. Атрибут пространства имен в Any
Значение атрибута пространства имен
Допустимое содержание элемента
##any
Любой
правильный XML из любого
пространства имен (по умолчанию)
##local
Любой правильный
XML, который не квалифицирован,
т.е. не объявлен в пространстве имен
##other
Любой правильный
XML, который не из
целевого пространства имен определяемого типа
"http://www.w3.org/1999/xhtml
##targetNamespace"
Любой правильный
XML, принадлежащий любому
пространству имен в списке (разделенном пробелами); ##targetNamespace это стенография для целевого пространства
имен определяемого типа
В дополнение к
элементу any, который допускает содержание элемента в
соответствие с пространством имен, существует соответствующий элемент anyAttribute, который предоставляет возможность
атрибутам появляться в элементах. Например, мы можем разрешить любому атрибуту
HTML  появиться как часть элемента htmlExample, добавляя anyAttribute к его объявлению:
Изменение
объявления htmlExample, которое позволяет атрибуты HTML
<element name="htmlExample">
<complexType>
<sequence>
<any namespace="http://www.w3.org/1999/xhtml"
minOccurs="1" maxOccurs="unbounded"
processContents="skip"/>
</sequence>
<anyAttribute namespace="http://www.w3.org/1999/xhtml"/>
</complexType>
</element>
Данное объявление разрешает атрибут
HTML, посредством href, появляться в элементе htmlExample. Например:
Атрибут HTML в элементе htmlExample
....
<htmlExample xmlns:h="http://www.w3.org/1999/xhtml"
h:href="http://www.example.com/reports/4Q99.html">
<!-- HTML markup here -->
</htmlExample>
....
Атрибут namespace в элементе anyAttribute может быть установлен для любого из значений элемента any, перечисленных в Таблице 4, и anyAttribute может быть определен с атрибутом processContents. В отличие от элемента any, anyAttribute не может сдержать значение атрибутов, которые могут появиться в
элементе.

#bn {display:block;}
#bt {display:block;}
содержание | 2 | Amway в Тюмени
Используются технологии uCoz