Содержание

XML пространства имен

Пространства имен позволяют избежать конфликта имен XML элементов.

Конфликты имен

В XML имена элементов определяет разработчик. Часто это становится причиной конфликта имен при попытке одновременного использования нескольких XML документов от разных XML приложений.

Следующий код XML содержит информацию о HTML таблице:

<table>
   <tr>
      <td>Яблоки</td>
      <td>Бананы</td>
   </tr>
</table>

Следующий код XML содержит информацию о столе (предмет мебели), который по англ. тоже table:

<table>
   <name>Африканский кофейный столик</name>
   <width>80</width>
   <length>120</length>
</table>

Если эти два фрагмента кода XML будут сведены вместе, то возникнет конфликт имен. Так как оба документа содержат элемент <table>, хотя и с разным контентом и значением.

Пользователь или XML приложение не будут знать, каким образом обрабатывать эти различия.

Разрешение конфликта имен при помощи префикса

В XML избежать конфликта имен можно при помощи префикса имени элемента.

Следующий код XML содержит информацию о таблице HTML и о столе:

<h:table>
   <h:tr>
      <h:td>Яблоки</h:td>
      <h:td>Бананы</h:td>
   </h:tr>
</h:table>
<f:table>
   <f:name>Африканский кофейный столик</f:name>
   <f:width>80</f:width>
   <f:length>120</f:length>
</f:table>

В этом примере не будет конфликта имен, так как два элемента <table> имеют разные имена.

Пространства имен XML — Атрибут xmlns

При использовании в XML префиксов необходимо определить пространство имен префикса.

Пространство имен определяется благодаря атрибуту

xmlns в начальном теге элемента.

Декларация пространства имен имеет следующий синтаксис — xmlns:префиксURI«.

URI (англ. Uniform Resource Identifier) — унифицированный (единообразный) идентификатор ресурса. URI — последовательность символов, идентифицирующая абстрактный или физический ресурс.

<root>
   <h:table xmlns:h="http://www.w3.org/TR/html4/">
      <h:tr>
         <h:td>Яблоки</h:td>
         <h:td>Бананы</h:td>
      </h:tr>
   </h:table>
   <f:table xmlns:f="http://www.w3schools.com/furniture">
      <f:name>Африканский кофейный столик</f:name>
      <f:width>80</f:width>
      <f:length>120</f:length>
   </f:table>
</root>

В данном примере, атрибут xmlns в теге <table> определяет префиксам h: и f: квалифицирующее пространство имен.

Когда пространство имен определено для какого-то элемента, то все его дочерние элементы с тем же префиксом ассоциируются с его пространством имен.

Пространства имен могут декларироваться либо непосредственно в самом элементе, либо в корневом элементе XML документа:

<root xmlns:h="http://www.w3.org/TR/html4/" xmlns:f="http://www.w3schools.com/furniture">
   <h:table>
      <h:tr>
         <h:td>Яблоки</h:td>
         <h:td>Бананы</h:td>
      </h:tr>
   </h:table>
   <f:table>
      <f:name>Африканский кофейный столик</f:name>
      <f:width>80</f:width>
      <f:length>120</f:length>
   </f:table>
</root>

Примечание: URI пространства имен не используется парсером для получения какой-либо информации.

Цель всего этого использования URI состоит в том, чтобы дать пространству имен уникальное имя.

Тем не менее, часто компании используют пространство имен, как указатель на веб-страницу с информацией об этом пространстве имен.

Унифицированный идентификатор ресурса (URI)

Унифицированный идентификатор ресурса (URI) это символьная строка, идентифицирующая интернет-ресурс.

В наиболее общей форме URI является единым указателем ресурса (URL), который идентифицирует доменный адрес в интернете. Другой, более частный вид URI — единообразное имя ресурса (URN).

В наших примерах мы будем использовать только URL.

Пространства имен по умолчанию

Определение пространства имен по умолчанию позволяет избежать использования префиксов во всех дочерних элементах. Такое определение имеет следующий синтаксис:

xmlns="URI_пространства_имен"

Следующий код XML содержит информацию о таблице HTML:

<table xmlns="http://www.w3.org/TR/html4/">
   <tr>
      <td>Яблоки</td>
      <td>Бананы</td>
   </tr>
</table>

Следующий код XML содержит информацию о предмете мебели — столе:

<table xmlns="http://www.w3schools.com/furniture">
   <name>Африканский кофейный столик</name>
   <width>80</width>
   <length>120</length>
</table>

Пространство имен в реальной жизни

XSLT — это XML язык, который может использоваться для преобразования документов XML в другие форматы, например, HTML.

В следующем документе XSLT вы можете увидеть, что большинство элементов являются тегами HTML. Те элементы, которые не являются тегами HTML, имеют префикс xsl, идентифицированный пространством имен xmlns:xsl=»http://www.w3.org/1999/XSL/Transform»

:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:template match="/">
      <html>
         <body>
            <h3>Моя коллекция CD</h3>
            <table border="1">
               <tr>
                  <th>Title</th>
                  <th>Artist</th>
               </tr>
               <xsl:for-each select="catalog/cd">
                  <tr>
                     <td><xsl:value-of select="title"/></td>
                     <td><xsl:value-of select="artist"/></td>
                  </tr>
               </xsl:for-each>
            </table>
         </body>
      </html>
   </xsl:template>
</xsl:stylesheet>

Пространства имен (Namespaces)(

Пространства имен (Namespaces)

Данная лекция посвящена одному из очень важных, концептуальных вопросов XML технологии, а именно предназначению и использованию пространств имен (Namespace).

1 Проблема неоднозначности использования имен. 1

2. Понятие пространства имен в XML.. 1

3. Задание элементов и атрибутов в пространстве имен. 2

4. Область действия объявлений пространств имен. 4

5. Пример реализации концепции пространства имен. 6

5.1 Пространство имен action для слова «замок» в смысле действия. 6

5.2 Пространство имен building для слова » замок » в смысле здание. 6

5.3 Пространство имен security для слова » замок » в смысле безопасность. 7

5.4 Главное (main) пространство имен. 7

5.5 XML документ. 8

XML технология практически не накладывает ограничений на названия элементов, атрибутов и типов.

            Поскольку XML документы могут быть составными, использовать несколько схем, спроектированных разными разработчиками, то возможна проблема неоднозначности имен. В одном XML документе не исключено использование элементов и атрибутов с одинаковыми названиями, но несущими разную смысловую нагрузку.

В русском, английском, да и в других языках часто встречаются омонимы, т.е. слова, которые пишутся одинаково, но имеют разный смысл.

Возьмем известную всем скороговорку: «Запер замок на замок, чтобы замок не замок». В данном тексте слово замок употребляется четыре раза в трех совершенно разных смыслах: а) здание; б) устройство, обеспечивающее защиту от несанкционированного доступа в здание; в) результат, наступающий из-за попадания воды. Человек интуитивно чувствует контекст и понимает, в каком смысле

замок используется. Программе, чтобы она разобралась, контекст надо подсказать.

При использовании XML подобные ситуации возникают достаточно часто. Разработчики, за небольшим, оговоренным в XML стандартах количеством комбинаций символов, свободны в выборе названий элементов и атрибутов. Поэтому при объединении XML документов, принадлежащих разным предметным областям возможны конфликты имен.

Чтобы избежать подобные ситуации в XML технологии было введено понятие пространства имен, правила использования которого регламентированы в Рекомендации Namespace in XML 1.0,  разработанной World Wide Web Consortium (W3C). На момент написания данной лекции действует третья редакция от 8 декабря 2009 года. Перевод этой версии Рекомендации можно посмотреть здесь.

Понятие пространства имен не является особенностью XML технологии и появилось значительно раньше. Где бы оно ни использовалось,  общий смысл этого понятия везде примерно один и тот же. Однако принципы задания и «физический» смысл могут существенно отличаться.

Для более четкого понимания принципов задания и использования пространств имен в XML сначала рассмотрим это понятие в программировании, а уже затем снова вернемся к XML.

В программировании способы задания пространства имен в общем случае могут быть двух видов.

Первый способ базируется на представлении предметных областей, связанных в единую иерархическую структуры. В этом случае пространство имен определяет контекстный узел иерархии, а поддерево иерархии, для которого контекстный узел является родителем, и есть текущее пространство имен. Чем ниже мы спускаемся по дереву иерархии, тем более точно задаем пространство имен, уменьшая возможность коллизий из-за возможного совпадения имен. 

Типичным представителем, использующим  такой подход, является иерархия классов .Net при программировании в Windows. Например, для использования классов, обеспечивающих возможности сетевого взаимодействия следует объявить пространство имен System.Net. В нотации языка С# это будет выглядеть следующим образом:

using System.Net;

Если же нам требуется только обмен данными с использованием сокетов, то лучше задать более узкое пространство имен:

using System.Net.Sockets;

Иной способ задания пространств имен используется, когда пространство имен не имеет иерархических взаимосвязей, т. е. представляется плоскими структурами. Такой вид определения пространств имен применяется, например, в языке программирования С++.

Например, чтобы использовать элементы библиотеки STL необходимо в программе объявить пространство имен этой  библиотеки. В нотации языка С++ это будет выглядеть следующим образом:

using namespace std;

В обоих представленных выше способах задания пространств имен вы, как бы, даете разрешение программе на работу с классами (их методами и свойствами), входящими в это пространство имен. Здесь концептуально важно, что за конкретным пространством имен стоит конкретный набор классов.

Теперь вернемся к XML технологии. Согласно определению Рекомендации W3C «Пространство имен XML идентифицируется ссылкой URI [RFC3986]; имена элементов и атрибутов могут размещаться в пространстве имен XML, используя механизмы, описанные в данной спецификации».

Анализируя представленное определение важно отметить следующие моменты:

— в качестве идентификатора пространства имен в XML используется ссылка URI. Не полный путь к контекстному узлу, как в .Net, ни символьный идентификатор, как в С++, а именно ссылка URI;

— ссылка URI это идентификатор характеризующий пространство имен и ничего более, он ни на что не указывает, по его адресу ничего не располагается;

— в .Net и С++ пространства имен включают конкретный набор классов (их методов и свойств).

В XML пространства имен не определяют набор доступных элементов и атрибутов. Это прерогатива схем (DTD, XML Schema). Использование пространств имен в XML позволяет связать имя элемента и атрибута с соответствующим пространством имен, тем самым исключить возможные коллизии имен и подсказать обработчику XML, как правильно интерпретировать XML документ.

Для обеспечения однозначности понимания, используемых в XML документе имен объектов, используется расширенное имя. Расширенное имя представляет собой пару, состоящую из двух имен: имени пространства имен (в виде ссылки URI), идущего впереди, и локального имени элемента или атрибута в этом пространстве имен.

Поскольку ссылки URI могут быть очень длинными и содержать символы, неразрешенные для использования в именах, то обычно вместо расширенных имен используют полные имена. Полное имя также представляется парой, но вместо имени пространства имен  используется префикс пространства имен. При определенных условиях, о чем будет говориться далее, полное имя может не иметь префикса и состоять только из локального имени объекта.

На имя префикса пространства имен накладываются следующие ограничения:

·         не может иметь значение xml, т.к. это значение зарезервировано за префиксом, привязанным к имени пространства имен http://www.w3.org/XML/1998/namespace;

·         не может иметь значение xmlns, т.к. данное имя зарезервировано за атрибутом  объявления пространств имен;

·         не должно начинаться последовательностью трех символов x, m, l (независимо от регистра).

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

Объявление пространств имен выполняется с помощью специально зарезервированного атрибута xmlns. Синтаксис объявления имеет следующий вид:

xmlns[:prefix]=»пространство имен»

где: prefix – префикс, используемый для связывания имен элементов и атрибутов с именем пространства имен;

пространство имен – ссылка URI, идентифицирующая пространство имен.

Например, в представленном ниже примере объявляется пространство имен, идентифицируемое ссылкой URI «http://www.main.ru»  и связанное с префиксом doc.

<?xml version=»1.0″ encoding=»Windiws-1251″?>

<main:document xmlns:doc=»http://www.main.ru»>

            <doc:section>Раздел 1</doc:section>

            <doc:section>Раздел 2</doc:section>

</doc:document>                                            

При объявлении пространств имен следует иметь в виду следующие правила:

·         в элементе может быть задано несколько пространств имен;

·         только одно из них может быть задано как пространство имен по умолчанию. Пространство имен по умолчанию характеризуется тем, что для него не указывается префикс;

·         если элемент, в котором объявляется пространство имен, входит в это пространство имен, то он указывается с объявленным в нем префиксом;

·         объявление пространства имен может выполняться только в начальном теге элемента;

·         конечный тег элемента также указывается с префиксом пространства имен.

Ниже представлен более сложный пример объявления пространств имен, показывающий реализацию всех указанных правил.

<?xml version=»1.0″ encoding=»Windiws-1251″?>

<doc:document xmlns:doc=»http://www.main.ru»

    xmlns:=»http://www.authors.ru»>

            <doc:section>Раздел 1

                        <authors>

                                   <author>Автор 1<.author>

                                   <author>Автор 2<. author>

                        <authors>

</doc:section>

            <doc:section>Раздел 2

                        <authors>

                                   <author>Автор 2<.author>

                                   <author>Автор 3<.author>

                                   <author>Автор 4<.author>

                        <authors>

</doc:section>

</doc:document>                                            

В представленном примере объявляются два пространства имен, причем второе (http://www.authors.ru) определено как пространство имен по умолчанию, без префикса. В XML  документе элементы document и section, входящие в пространство имен http://www.main.ru, указываются с префиксом doc. Элементы authors и author, входящие в пространство имен http://www.authors.ru, указываются без префикса.

            Следует иметь в виду, что значение URI ссылки пространства имен чувствительно к регистру (собственно, как и имена элементов и атрибутов). Поэтому, указанные ниже три ссылки будут определять разные пространства имен:

·         http://www.authors.ru

·         http://www.Authors.ru

·         http://www.AUTHORS.ru

Область действия пространства имен может распространяться:

·         на весь документ, когда оно объявлено в корневом элементе документа;

·          на конкретный контейнер и все включенные в него элементы и атрибуты, когда оно объявлено в элементе верхнего уровня контейнера;

·         на отдельный элемент и его атрибуты, когда оно объявлено непосредственно в данном элементе.

Область действия пространства имен по умолчанию определяется аналогичным образом. При этом необходимо помнить следующее. В XML документе может быть действительным только одно пространство имен по умолчанию. Если в области действия пространства имен по умолчанию задается другое пространство имен по умолчанию, то оно отменяет действие ранее объявленного (первого) пространства имен по умолчанию. По окончанию действия второго пространства имен по умолчанию вновь начинает действовать первое пространство имен по умолчанию.

Ниже представлен пример гипотетического XML документа, иллюстрирующий области действия пространств имен. В примере используется несколько элементов protocol, но в зависимости от его расположения в документе, они будут определены в разных пространствах имен и, соответственно, иметь разный смысловой контекст. (Цифры справа не являются частью примера и служат для идентификации строк.)

<?xml version=»1.0″ encoding=»Windows-1251″?>

 1

<net:network xmlns:net=»http://www.network.com/lan»

 2

                xmlns=»http://www.network.com/server»>

 3

            <softlan>

 4

                        <net:protocol> . .. </net:protocol>

 5

                        <protocol> … </protocol>

 6

                        <frm:organization xmlns:frm=»http://www.network.com/firm»>

 7

                                   <frm:protocol> … </frm:protocol>

 8

                                   <protocol> … </protocol>

 9

                        </frm:organization>

10

            </softlan>

11

            <hardlan xmlns:hrd=»http://www. network.com/hard»

12

                                                 xmlns=»http://www.network.com/hard/firm»>

13

                        <hrd:equipment type=»switch»>

14

                                   <protocol net:lan=»Ethernet»>CSMA/CD</protocol>

15

                        </hrd:equipment>

16

            </hardlan>

17

</net:network>

18

Строки 2 и 3 представляют корневой элемент документа network. В нем определены два пространства имен. Первое идентифицируется префиксом net (в это пространство имен входит и сам элемент net), а второе не имеет префикса, т.е. является пространством имен по умолчанию. Действие обоих пространств имен распространяется на весь документ.

Строки 4 и 11 представляют контейнер, корневой элемент которого (softlan) принадлежит пространству имен по умолчанию http://www.network.com/server, заданному в корневом элементе документа.

Строка 5 представляет элемент protocol, принадлежащий пространству имен http://www.network.com/lan.

Строка 6 представляет элемент protocol, принадлежащий пространству имен по умолчанию http://www.network.com/server.

Строки 7 и10 представляют контейнер, корневой элемент которого (organization) принадлежит пространству имен http://www.network.com/firm, которое объявлено в этом элементе с префиксом frm.

Строка 8 представляет элемент protocol, принадлежащий пространству имен http://www. network.com/firm.

Строка 9 представляет элемент protocol, принадлежащий пространству имен по умолчанию http://www.network.com/server.

Строки 12, 13 и 17 представляют контейнер, корневой элемент которого (hardlan) принадлежит пространству имен по умолчанию http://www.network.com/server. В корневом элементе этого контейнера объявлено два пространства имен. Одно с префиксом hrd, а другое как пространство имен по умолчанию. Поэтому в области действия данного контейнера все элементы и атрибуты без префикса будут принадлежать пространству имен http://www.network.com/hard/firm.

Строки 14 и 16 представляют контейнер, корневой элемента которого (equipment) принадлежит пространству имен http://www.network.com/hard. Атрибут type корневого элемента принадлежит пространству имен по умолчанию xmlns=»http://www.network.com/hard/firm.

Строка 15 представляет элемент protocol, принадлежащий пространству имен по умолчанию xmlns=»http://www. network.com/hard/firm. Его атрибут lan принадлежит пространству имен http://www.network.com/lan.

В первом разделе данной лекции, в качестве примера, мы использовали фразу: «Запер замок на замок, чтобы замок не замок», в которой используются три слова «замок» в качестве а) здания, б) устройства безопасности, в) результата действия.

Для каждого из них сформируем отдельную схему в собственном пространстве имен. Остальные элементы определим в схеме main, которая также представлена в собственном пространстве имен.

В XML документе подключим схемы и объявляем 4 пространства имен. Теперь в XML документе однозначно можно определить смысл каждого слова «замок».

<?xml version=»1.0″ encoding=»Windiws-1251″?>

<xsd:schema targetNamespace=»http://www.action.ru»

elementFormDefault=»qualified» attributeFormDefault=»unqualified»

xmlns:act=»http://www.action.ru»

xmlns:xsd=»http://www.w3.org/2001/XMLSchema»>

<xsd:element name=»действие» type=»act:actionType»/>

 <!— В данном типе задаем несколько возможных действий, в том числе и нужное нам —>

 <xsd:complexType name=»actionType»>

 <xsd:choice>

  <xsd:element name=»высох» type=»xsd:string» minOccurs=»0″ maxOccurs=»unbounded»/>

  <xsd:element name=»замок» type=»xsd:string» minOccurs=»0″ maxOccurs=»unbounded»/>

  </xsd:choice>

 </xsd:complexType>

</xsd:schema>

<?xml version=»1. 0″ encoding=»Windiws-1251″?>

<xsd:schema targetNamespace=»http://www.building.ru»

elementFormDefault=»qualified» attributeFormDefault=»unqualified»

xmlns:bui=»http://www.building.ru»

xmlns:xsd=»http://www.w3.org/2001/XMLSchema»>

<xsd:element name=»здание» type=»bui:buildingType»/>

<!— В данном типе задаем несколько возможных типов зданий, в том числе и нужное нам —>

 <xsd:complexType name=»buildingType»>

 <xsd:choice>

  <xsd:element name=»дом» type=»xsd:string» minOccurs=»0″ maxOccurs=»unbounded»/>

  <xsd:element name=»замок» type=»xsd:string» minOccurs=»0″ maxOccurs=»unbounded»/>

  </xsd:choice>

 </xsd:complexType>

</xsd:schema>

<?xml version=»1.0″ encoding=»Windiws-1251″?>

<xsd:schema targetNamespace=»http://www.security.ru»

elementFormDefault=»qualified» attributeFormDefault=»unqualified»

xmlns:sec=»http://www. security.ru»

xmlns:xsd=»http://www.w3.org/2001/XMLSchema»>

<xsd:element name=»защита» type=»sec:securityType»/>

<!— В данном типе задаем несколько возможных значений в смысле безопасности, в том числе и нужное нам —>

 <xsd:complexType name=»securityType»>

 <xsd:choice>

  <xsd:element name=»запор» type=»xsd:string» minOccurs=»0″ maxOccurs=»unbounded»/>

  <xsd:element name=»замок» type=»xsd:string» minOccurs=»0″ maxOccurs=»unbounded»/>

  </xsd:choice>

 </xsd:complexType>

</xsd:schema>

<?xml version=»1.0″ encoding=»Windiws-1251″?>

<xsd:schema targetNamespace=»http://www.main.ru»

elementFormDefault=»qualified» attributeFormDefault=»unqualified»

xmlns:xsd=»http://www.w3.org/2001/XMLSchema»

xmlns=»http://www.main.ru»

xmlns:act=»http://www.action.ru»

xmlns:bui=»http://www.building.ru»

xmlns:sec=»http://www.security. ru»>

<xsd:import namespace=»http://www.action.ru» schemaLocation=»e:\phrase\action.xsd»/>

<xsd:import namespace=»http://www.security.ru» schemaLocation=»e:\phrase\security.xsd»/>

<xsd:import namespace=»http://www.building.ru» schemaLocation=»e:\phrase\building.xsd»/>

<xsd:element name=»документ» type=»documentType»/>

 <xsd:complexType name=»documentType»>

 <xsd:sequence>

  <xsd:element name=»фраза» type=»mixedType»  minOccurs=»0″ maxOccurs=»unbounded»/>

 </xsd:sequence>

 </xsd:complexType>

 <xsd:complexType name=»mixedType» mixed=»true»>

 <xsd:sequence>

   <xsd:element ref=»bui:здание»/>

   <xsd:element ref=»sec:защита»/>

   <xsd:element ref=»bui:здание»/>

   <xsd:element ref=»act:действие»/>

</xsd:sequence>

</xsd:complexType>

</xsd:schema>

<?xml version=»1.0″ encoding=»Windows-1251″?>

<документ xmlns:xsi=»http://www. w3.org/2001/XMLSchema-instance»

                                                  xmlns=»http://www.main.ru»

                                                  xmlns:act=»http://www.action.ru»

                                                  xmlns:bui=»http://www.building.ru»

                                                  xmlns:sec=»http://www.security.ru»

                                                  xsi:schemaLocation=»http://www.main.ru e:\phrase\main.xsd»>

            <фраза>

                        Запер <bui:здание><bui:замок>замок</bui:замок></bui:здание> на

                        <sec:защита><sec:замок>замок</sec:замок></sec:защита>, чтобы

                        <bui:здание><bui:замок>замок</bui:замок></bui:здание> не

                        <act:действие><act:замок>замок</act:замок></act:действие>.

            </фраза>

</документ>

Пространства имен в XML 1.0 (третье издание)

Статус этого документа

В этом разделе описывается статус этого документа на момент его публикации. Этот документ может быть заменен другими документами. Список текущих публикаций W3C и последняя редакция этот технический отчет можно найти в Указатель технических отчетов W3C на http://www.w3.org/TR/.

Этот документ является продуктом Основная рабочая группа XML как часть XML-активность W3C. Английская версия этой спецификации является единственной нормативной версией. Однако переводы этого документа см. http://www.w3.org/2003/03/Translations/byTechnology?technology=xml-names .

Известные реализации описаны в Отчет о реализации пространств имен 1.1 (все известные реализации пространств имен 1.1 также поддерживают пространства имен 1.0) . Набор тестов также доступен через Набор тестов XML страница.

Это третье издание включает все известные опечатки на дату публикации. Он заменяет предыдущий издание от 16 августа 2006 г.

Это издание широко рецензировалось. Только незначительные редакционные изменения были сделаны после Предложенной отредактированной рекомендации от 6 августа 2009 года.

Пожалуйста, сообщайте об ошибках в этом документе по адресу [email protected]; общественный архивы доступны. Список опечаток для этого документа доступен по адресу http://www.w3.org/XML/2009/xml-names-ошибки .

Этот документ был проверен членами W3C, программным разработчиками, а также другими группами W3C и заинтересованными сторонами, и одобрен директором в качестве рекомендации W3C. Это стабильный документа и может использоваться в качестве справочного материала или цитироваться из другого документ. Роль W3C в разработке Рекомендации заключается в том, чтобы привлечь внимание спецификации и способствовать ее широкому распространению. Этот повышает функциональность и интероперабельность Интернета.

W3C поддерживает общественный список любых патентных раскрытий сделанные в связи с результатами группа; эта страница также содержит инструкции по раскрытию патента. Лицо, имеющее фактические знания о патенте, который данное лицо считает, содержит Существенный Претензии) обязаны раскрывать информацию в соответствии с раздел 6 Патентной политики W3C.

1 Мотивация и резюме

Мы предполагаем применение расширяемого языка разметки (XML), где один XML-документ может содержать элементы и атрибуты (здесь упоминается как «словарь разметки») которые определены и используются несколькими программными модулями. Одной из причин этого является модульность: если такой словарь разметки существует что понятно и для чего есть полезный софт доступная, лучше повторно использовать эту разметку, чем заново изобретать ее.

Такие документы, содержащие несколько словарей разметки, ставят проблемы распознавания и коллизии. Программные модули должны уметь распознавать элементы и атрибуты, на которые они рассчитаны обрабатывать, даже в лицо «коллизий», возникающих, когда разметка предназначена для какого-либо другого программного обеспечения пакет использует то же имя элемента или имя атрибута.

Эти соображения требуют, чтобы конструкции документов должны иметь имена, составленные таким образом, чтобы избежать конфликтов между именами из разных словарей разметки. Эта спецификация описывает механизм, Пространства имен XML , что выполняет это путем присвоения расширенных имен к элементам и атрибутам.

1.1 Примечание по обозначениям и использованию

Где ПОДЧЕРКИВАНИЕ ключевые слова ДОЛЖЕН , НЕ ДОЛЖЕН , ТРЕБУЕТСЯ , СЛЕДУЕТ , НЕ ДОЛЖЕН , МАЯ в этом документе следует интерпретировать, как описано в [Ключевые слова].

Обратите внимание, что многие нетерминалы в постановках в эта спецификация определена не здесь, а в спецификация XML [XML]. Когда определенные здесь нетерминалы имеют те же имена, что и нетерминалы определенные в спецификации XML, продукция здесь во всех случаях соответствует подмножеству строк, соответствующих там соответствующие.

В материалах этого документа NSC — это «ограничение пространства имен», одно из правил, которое документирует соответствие этой спецификации ДОЛЖЕН следовать.

2 Пространства имен XML

2.1 Основные понятия

[Определение: Пространство имен XML идентифицируется ссылка URI [RFC3986]; имена элементов и атрибутов может быть помещен в пространство имен XML с использованием механизмов, описанных в этой спецификации. ]

[Определение: расширенное имя это пара, состоящая из имя пространства имен и местное название. ] [Определение: Для имени N в указанном пространстве имен к URI я , имя пространства имен это я . Для имени N , не входящего в пространство имен, имя пространства имен не имеет значения. ] [Определение: В любом случае местное имя N . ] Это комбинация универсально управляемого пространства имен URI. с локальными названиями словаря, которые эффективно избегают конфликты имен.

URI ссылки могут содержать символы, недопустимые в именах, и часто неудобно длинные, поэтому расширенные имена не используются непосредственно для обозначения элементы и атрибуты в документах XML. Вместо полные имена используются. [Определение: А квалифицированное имя является именем, подлежащим интерпретации пространства имен. ] В документах, соответствующих этой спецификации, имена элементов и атрибутов отображаются как полные имена. Синтаксически они либо имена с префиксом или имена без префиксов. Для привязки префиксов к имена пространств имен и привязать пространство имен по умолчанию, которое применяется к имена элементов без префиксов; эти объявления ограничены элементами, на которых они появляются, так что разные привязки могут применяться в разных частях документа. Процессоры, соответствующие этой спецификации ДОЛЖЕН распознавать и действовать в соответствии с этими объявлениями и префиксами.

2.2 Использование URI как имена пространств имен

Пустая строка, хотя это допустимо URI ссылка, не может использоваться в качестве имени пространства имен.

Использование относительных URI Рекомендации, в том числе ссылки на один и тот же документ в объявлениях пространств имен устарел.

Примечание:

Решение об отказе от относительных ссылок URI было принято Пленарное голосование W3C XML [Устаревание относительного URI]. Он также заявляет, что «более поздние спецификации, такие как DOM, XPath и т. д., не будут определять интерпретация для них».

2.3 Сравнение URI Каталожные номера

URI ссылки, идентифицирующие пространства имен, сравниваются при определении принадлежит ли имя данному пространству имен, и являются ли два имени принадлежат одному и тому же пространству имен. [Определение: Два URI обрабатываются как строки, и они идентичный тогда и только тогда, когда строки идентичны, т. это одна и та же последовательность символов. ] Сравнение чувствительно к регистру, %-экранирование не выполняется и не отменяется.

Следствием этого является то, что URI ссылки, которые не идентичны в этом смысле может разрешить один и тот же ресурс. Примеры включают URI ссылки, которые отличаются только регистром или %-экранированием, или которые во внешних объектах, которые имеют разные базовые URI (но обратите внимание, что родственник URI устарели как имена пространств имен).

В объявлении пространства имен URI ссылка — это нормализованное значение атрибута, поэтому замена символов XML и ссылок на сущности уже было сделано до любого сравнения.

Примеры:

URI все приведенные ниже ссылки различны для целей идентификации пространства имен, так как они различаются в случае:

  • http://www.example.org/вино

  • http://www.Example.org/вино

  • http://www.example.org/Вино

Приведенные ниже ссылки URI также различаются в целях идентификации. пространства имен:

  • http://www.example.org/~уилбур

  • http://www.example.org/%7evilbur

  • http://www.example.org/%7Эвилбур

Из-за риска путаницы между URI это было бы эквивалентно при разыменовании использование экранированных символов % в именах пространств имен запрещено. сильно обескуражен.

3 Объявление пространств имен

[Определение: пространство имен (или, точнее, привязка пространства имен) является объявлено с использованием семейство зарезервированных атрибутов. Имя такого атрибута должно либо быть xmlns или начать xmlns: . Эти атрибуты, как и любые другие атрибуты XML, могут быть предоставлены напрямую или по умолчанию. ]

Имена атрибутов для объявления пространства имен
[1]    NSAttName    ::=    PrefixedAttName
| DefaultAttName
[2]    PrefixedAttName    ::=    9005 3 ‘xmlns:’ NCName [NSC: зарезервированные префиксы и имена пространств имен]
[3] DefaultAttName    ::=    'xmlns'
[4]    NCName    ::=    9 0053 Имя — (Char* ‘:’ Char*) /* XML Имя без «:» */

Атрибут нормализованное значение ДОЛЖЕН быть либо URI ссылка — имя пространства имен определение пространства имен — или пустая строка. Имя пространства имен, чтобы служить его Целевое назначение, СЛЕДУЕТ обладают свойствами уникальности и упорство. Это не цель, чтобы его можно было непосредственно использовать для поиска схемы (если любой существует). Унифицированные имена ресурсов [RFC2141] — это пример синтаксиса, который разработан с учетом этих целей. Однако следует отметить, что обычными URL-адресами можно управлять таким образом, для достижения этих же целей.

[Определение: если имя атрибута соответствует PrefixedAttName, затем NCName дает префикс пространства имен , используется для связывания имен элементов и атрибутов с имя пространства имен в значении атрибута в области элемента, к которому объявление прилагается. ]

[Определение: Если имя атрибута соответствует DefaultAttName, затем имя пространства имен в значение атрибута пространство имен по умолчанию в области элемента, к которому объявление прилагается.] Пространства имен по умолчанию и переопределение объявлений обсуждаются в 6 Применение пространств имен к элементам и атрибутам .

Пример объявления пространства имен, которое связывает префикс пространства имен edi с именем пространства имен http://ecommerce.example.org/schema :

 
  
 

Ограничение пространства имен: зарезервированные префиксы и имена пространств имен

Префикс xml по определению привязан к имени пространства имен. http://www.w3.org/XML/1998/пространство имен . Это МАЯ , но не нужно, быть объявлено, и НЕ ДОЛЖЕН быть привязан к любому другому имени пространства имен. Другие префиксы НЕ ДОЛЖЕН быть привязанным к этому пространству имен имя, и это НЕ ДОЛЖЕН быть объявлено как пространство имен по умолчанию.

Префикс xmlns используется только для объявления привязок пространства имен и определение привязано к имени пространства имен http://www.w3.org/2000/xmlns/. Это НЕ ДОЛЖЕН быть объявленным . Другие префиксы НЕ ДОЛЖЕН быть привязанным к этому пространству имен имя, и это НЕ ДОЛЖЕН быть объявлено как пространство имен по умолчанию. Имена элементов НЕ ДОЛЖЕН иметь префикс xmlns .

Все остальные префиксы, начинающиеся с трехбуквенной последовательности x, m, l, в любом случае комбинация, зарезервированы. Это значит, что:

Хотя они сами по себе не зарезервированы, не рекомендуется использовать префиксные имена, LocalPart которых начинается с букв x, m, l, в любом сочетание случаев, как эти имена были бы зарезервированы, если бы использовались без префикса.

4 Квалифицированные имена

В формате XML документы, соответствующие этой спецификации, некоторые имена (конструкции, соответствующие нетерминальным Имя) ДОЛЖЕН быть дано как квалифицированные имена, определяется следующим образом:

Полное имя
[7]    QName    ::=    PrefixedName
| UnprefixedName
[8]    PrefixedName    ::=    Префикс ':' LocalPart
[9]    UnprefixedName    ::=    Локальная часть
[10]    Префикс    ::=    NCName 900 54
[11]    LocalPart    ::=    NCName

Префикс обеспечивает префикс пространства имен часть квалифицированного имени и ДОЛЖЕН быть связанным с пространством имен URI ссылка в объявление пространства имен. [Определение: LocalPart предоставляет локальная часть квалифицированного имени.]

Обратите внимание, что префикс действует только как в качестве заполнителя для имя пространства имен. Приложения СЛЕДУЕТ используйте имя пространства имен, а не префикс, при построении имена, объем которых выходит за рамки содержащий документ.

5 Использование квалифицированных имен

В документах XML, соответствующих этой спецификации, имена элементов задаются как квалифицированные имена, как следует:

Имена элементов
[12]    STtag    ::=    '<' QName (С Атрибут)* С? '>' [NSC: объявлен префикс]
[13]    ETag    ::=    '' [NSC: объявлен префикс]
[14]    EmptyElemTag    :: =    '<' QName (С Атрибут)* С? '/>' [NSC: Объявленный префикс]

Пример полного имени, используемого в качестве имени элемента:

  
  32,18
 

Атрибуты являются либо пространством имен декларации или их имена указаны как квалифицированные имена:

Атрибут
[15]    Атрибут    ::=    NSAtt Имя уравнение Значение атрибута
| Экв. QName AttValue [NSC: префикс объявлен]
[NSC: префикс не объявлен]
[NSC: уникальные атрибуты]

Пример полного имени, используемого в качестве имени атрибута:

 
  
  Детское питание
 

Ограничение пространства имен: Объявленный префикс

Префикс пространства имен, если он не равен xml или xmlns , ДОЛЖЕН Был объявлено в объявлении пространства имен атрибут либо в начальном теге элемента, где префикс используется или в элементе-предке (т. е. в элементе, в котором содержание префиксная разметка).

Ограничение пространства имен: Нет префикса Не объявлено

В объявлении пространства имен для префикса (т.е. где NSAttName является PrefixedAttName), значение атрибута НЕ ДОЛЖЕН быть пустым.

Это ограничение может привести к трудностям в работе в случае, если предоставляется атрибут объявления пространства имен, а не непосредственно в XML сущность документа, но через атрибут по умолчанию, объявленный во внешнем объекте. Такие заявления не могут быть прочитаны программным обеспечением, основанным на непроверяющий XML-процессор. Многие XML-приложения, предположительно в том числе чувствительные к пространству имен, не требуют проверки процессоров. Если требуется корректная работа с такими приложениями, объявления пространств имен ДОЛЖЕН быть предоставляется либо напрямую, либо через атрибуты по умолчанию, объявленные в внутреннее подмножество DTD.

Имена элементов и атрибутов также задаются как полные имена, когда они появляются в объявлениях в ОТД:

Квалифицированные имена в объявлениях
[16]    doctypedecl    ::=    9 0053 ''
[17]    elementdecl    ::=    ''
[18] CP :: = (Qname | выбор | послед. ) ('?' | '*' | '+')?
[19]    Смешанный    ::=    '(' S? '#PCDATA' (С? '|' С? QName)* С? ')*'
| '(' S? '#PCDATA' S? ')'
[20]    AttlistDecl    ::=    ''
[21] ATTDEF :: = S (QName | NSAttName) S AttType S DefaultDecl

Обратите внимание, что проверка на основе DTD не учитывает пространство имен в следующем смысле: DTD ограничивает элементы и атрибуты, которые могут появляться в документа по их неинтерпретируемым именам, а не по (имени пространства имен, локальному имя) пар. Чтобы проверить документ, использующий пространства имен, на соответствие DTD, в DTD должны использоваться те же префиксы, что и в экземпляре. Однако DTD может косвенно ограничивать пространства имен, используемые в действительном документа, предоставив #FIXED значения для атрибутов, которые объявить пространства имен.

6 Применение пространств имен к элементам и атрибутам

6.1 Область действия пространства имен

Область действия объявления пространства имен, объявляющего префикс, простирается от от начала начального тега, в котором он появляется, до конца соответствующий конечный тег, исключая область любых внутренних объявлений с той же частью NSAttName. В случае пустого тега областью действия является сам тег.

Такое объявление пространства имен применяется ко всем элементам и атрибутам. имена в пределах его области действия, префикс которых совпадает с указанным в декларация.

расширенное имя соответствующий имени элемента или атрибута с префиксом имеет URI к которому префикс связан как его имя пространства имен, и местная часть как его местное название.

  0"?>

  Фробностикация
  Перемещено в
    здесь.
 

Несколько префиксов пространств имен могут быть объявлены как атрибуты одного элемента, как показано в этом примере:

 


    Дешевле на дюжину
    1568491379
 

6.2 Пространство имен по умолчанию

Объем объявление пространства имен по умолчанию простирается от начала начальный тег, в котором он появляется до конца соответствующего конечного тега, исключая область любых внутренних объявлений пространств имен по умолчанию. В случае пустого тега областью действия является сам тег.

Объявление пространства имен по умолчанию применяется ко всем именам элементов без префикса. в его рамках. Объявления пространств имен по умолчанию не применяются непосредственно к именам атрибутов; интерпретация атрибутов без префикса определяется элементом, на котором они появляются.

Если в области действия есть объявление пространства имен по умолчанию, расширенное имя соответствующее имени элемента без префикса, имеет URI принадлежащий пространство имен по умолчанию как его имя пространства имен. Если в области видимости нет объявления пространства имен по умолчанию, имя пространства имен не имеет значения. Имя пространства имен для имени атрибута без префикса всегда не имеет значения. Во всех случаях местное имя местная часть (что, конечно, то же самое, что и само имя без префикса).

 


  Фробностикация
  

Перемещено в здесь.

  0"?>


    Дешевле на дюжину
    1568491379
 

Более крупный пример области видимости пространства имен:

 


    Дешевле на дюжину
    1568491379
    <примечания>
      
      

Это забавная книга!

Значение атрибута в объявлении пространства имен по умолчанию МАЯ быть пустым. Это имеет то же самое эффект в рамках декларации отсутствия дефолта пространство имен.

  0'?>
<Пиво>
  
  <таблица xmlns='http://www.w3.org/1999/xhtml'>
   НазваниеПроисхождениеОписание
   
     
     Охотник
     Бат, Великобритания
     <тд>
       
BitterFuggles Отличный хмель, легкий алкоголь, хорошее летнее пиво Хрупкий; чрезмерная дисперсия между публикациями

6.3 Уникальность атрибутов

Ограничение пространства имен: уникальные атрибуты

В документах XML, соответствующих в соответствии с этой спецификацией, без бирки может содержать два атрибута, которые:

  1. имеют одинаковые имена или

  2. имеют полные имена с одинаковыми местная часть и с префиксы, которые были связаны к именам пространств имен, которые идентичны.

Это ограничение эквивалентно требованию, чтобы ни один элемент не имел двух атрибуты с одинаковыми расширенное имя.

Например, каждый из плохих тегов пустых элементов является недопустимым в следующий:

 

  <плохой а="1" а="2" />
  <плохой n1:a="1" n2:a="2" />
 

Тем не менее, каждое из следующих действий допустимо, второе, потому что по умолчанию namespace не применяется к именам атрибутов:

 

  <хорошо а="1" б="2" />
  <хорошо a="1" n1:a="2" />
 

7 Соответствие документов

Эта спецификация применяется к XML 1.0. документы. Чтобы соответствовать этому спецификация, документ ДОЛЖЕН быть хорошо сформированным в соответствии с Спецификация XML 1. 0 [XML].

В документах XML, соответствующих этой спецификации, элемент и имена атрибутов ДОЛЖЕН соответствовать производству для QName и ДОЛЖЕН удовлетворять «ограничениям пространства имен». Все остальные токены в документ, который ТРЕБУЕТСЯ , для правильности XML 1.0, чтобы соответствовать Создание XML для Имя ДОЛЖЕН соответствует продукции этой спецификации для NCName.

[Определение: Документ имеет правильное пространство имен если он соответствует этой спецификации. ]

Отсюда следует, что в правильно сформированном документе пространства имен:

  • Все имена элементов и атрибутов содержат ноль или единицу двоеточие;

  • Имена сущностей, цели инструкций по обработке или имена нотаций не содержат двоеточий.

Кроме того, правильно сформированный документ пространства имен также может быть допустимым пространством имен.

[Определение: Документ с правильно сформированным пространством имен — допустимое пространство имен если он действителен в соответствии со спецификацией XML 1.0, и все токены кроме имен элементов и атрибутов, которые ТРЕБУЕТСЯ , для валидности XML 1.0, чтобы соответствовать производству XML для Имя соответствует продукции этой спецификации для NCName. ]

Отсюда следует, что в допустимом пространстве имен документе:

8 Соответствие процессоров

Чтобы соответствовать этой спецификации, процессор ДОЛЖЕН отчет нарушения правильности пространства имен, за исключением того, что не является ТРЕБУЕТСЯ чтобы проверить, что имена пространств имен Ссылки URI [RFC3986].

[Определение: Проверяющий XML-процессор, соответствующий этой спецификации. это проверка пространства имен , если в дополнение он сообщает о нарушениях допустимости пространства имен. ]

Использовать пространства имен XML | Microsoft Узнайте

Твиттер LinkedIn Фейсбук Электронная почта

  • Статья

 

В этом разделе представлена ​​основная информация о пространствах имен XML.

Что такое пространство имен XML?

Пространство имен XML — это набор имен, которые можно использовать в качестве имен элементов или атрибутов в документе XML. Пространство имен однозначно определяет имена элементов в Интернете, чтобы избежать конфликтов между элементами с одинаковыми именами. Пространство имен идентифицируется каким-либо универсальным идентификатором ресурса (URI), либо универсальным указателем ресурса (URL), либо универсальным именем ресурса (URN), но не имеет значения, на что оно указывает, если вообще что-либо указывает. URI используются просто потому, что они глобально уникальны в Интернете.

Пространства имен могут быть объявлены явно или по умолчанию. При явном объявлении вы определяете сокращение или префикс для замены полного имени пространства имен. Вы используете этот префикс для уточнения элементов, принадлежащих этому пространству имен. Явные объявления полезны, когда узел содержит элементы из разных пространств имен. Объявление по умолчанию объявляет пространство имен, которое будет использоваться для всех элементов в пределах его области действия, а префикс не используется.

Как объявить явное пространство имен?

Следующее явное объявление объявляет bk и money сокращенными для полных имен их соответствующих пространств имен. Атрибут xmlns — это ключевое слово XML для объявления пространства имен.

 <КНИГИ>
  
    Жуткие ползуны
    22,95
  

 

Как объявить пространство имен по умолчанию?

Пространство имен, объявленное без префикса, становится пространством имен по умолчанию для документа.