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>
            <h2>Моя коллекция CD</h2>
            <table border="1">
               <tr>
                  <th style="text-align:left">Title</th>
                  <th style="text-align:left">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>