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

Поскольку в разных языках разметок — реализациях XML — могут встретиться одни и те же имена тегов и их атрибутов, имеющие совершенно разный смысл, а в документе XML их часто приходится смешивать, анализатору надо дать возможность их как-то различать. Для этого имена тегов и атрибутов снабжают префиксом, который отделяется от имени двоеточием. Префикс имени связывается с идентификатором, определяющим пространство имен (namespace). Все имена тегов и атрибутов, префиксы которых связаны с одним и тем же идентификатором, образуют одно пространство имен. Префикс и идентификатор пространства имен определяются атрибутом xmlns следующим образом:

<ntb:notebook xmlns:ntb = "http://some.firm.com/2003/ntbml">

Как видите, префикс ntb только что определен, но его уже можно использовать в имени ntb:notebook. В дальнейшем имена тегов и атрибутов, которые мы хотим отнести к пространству имен http://some.firm.com/2003/ntbml. снабжаются префиксом ntb, например:

<ntb:city ntb:type="поселок”>Горелово</ntb:city>

Имя вместе с префиксом, например, ntb:city, называется расширенным или уточненным именем QName (Qualified Name).

Идентификатор пространства имен должен иметь форму URI. Адрес URI, такой как http://some.firm.com/2003/ntbml, не имеет никакого значения и может не соответствовать никакому действительному адресу. Анализатор документа XML и другие программы, использующие документ, не будут об­ращаться по этому адресу. Там даже нет никакой Web-странички. Просто идентификатор пространства имен должен быть уникальным во всем Ин­тернете, и разработчики рекомендации по применению пространства имен, которую можно посмотреть по адресу http://www.w3.org/TR/I999/REC-xml- names-19990114/,справедливо решили, что будет удобно использовать для него DNS-имя сайта, на котором размешено определение пространства имен. Смотрите на URI просто как на строку символов, идентифицирующую пространство имен. Обычно указывается URL (Universal Resource Locator, адрес универсальных ресурсов) фирмы, создавшей данную реализацию XML, или имя файла с описанием схемы XML.

По правилам SGML и ХМL двоеточие может применяться в именах как обычный символ, поэтому имя с префиксом — это просто фокус, анализатор рассматривает его как обычное имя. Отсюда следует, что в описании DTD нельзя опускать префиксы имен. Некоторым анализаторам надо специально указать необходимость учета пространства имен.

Атрибут xmlns может появиться в любом элементе XML. а не только в корневом элементе. Определенный им префикс можно применять в том эле­менте, в котором записан атрибут xmlns, и во всех вложенных в него эле­ментах. Больше того, в одном элементе можно определить несколько про­странств имен:

<ntb:notebook

xmlns:ntb = "http://some.firm.com/2003/ntbml"

xmlns:bk = "http://some.firm.com/2003/bookral”>

Появление имени тега без префикса в документе, использующем пространство имен, означает, что имя принадлежит пространству имен по умолчанию (default namespace). Например, язык XHTML допускает применение тегов HTML и тегов XML в одном документе. Допустим, мы определили тег с именем title. Чтобы анализатор не принял его за один из тегов HTML, поступаем следующим образом:

<html xmlns = "http://www.w3.org/1999/xhtml”

xmlns:ntb = “http://some.firm.com/2002/ntbml”>

<head>

<title>Моя библиотека</title>

</head>

<body>

<ntb:book>

<ntb:title>Создание Java Web Services</ntb:title>

</ntb:book>

</body>

</html>

В этом примере пространством имен по умолчанию становится про­странство имен XHTML, имеющее общеизвестный идентификатор http://www.w3.org/1999/xhtml, и теги, относящиеся к этому пространству имен, записываются без префикса.

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

Теперь, после того как мы ввели понятие пространства имен, можно обратиться к схеме XML.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: