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

Рубрика: Язык разметки XML

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


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

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

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

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

Этот XML документ содержит информацию о столе (имеется в виду предмет мебели):

<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".

<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://okITgo.ru/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://okITgo.ru/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 пространства имен не используется парсером для получения информации.

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

Попробуйте зайти на http://www.w3.org/TR/html4/.


Унифицированный Идентификатор Ресурса

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

Наиболее распространенным URI является Унифицированный Указатель Ресурса (Uniform Resource Locator или URL), который определяет доменный адрес Интернета. Другим, не таким распространенным типом URI, является Универсальное Имя Ресурса (Universal Resource Name или 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://okITgo.ru/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 align="left">Название</th>
      <th align="left">Исполнитель</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>

В дальнейшем я более подробно расскажу об XSLT.
Спасибо за внимание! Удачи Вам и до новых встреч на страницах сайта okITgo.ru.