Пространства имен позволяют избежать конфликта имен 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>