Технология XSLT (Валиков) - страница 21

Часто случается, что различные логические схемы документов используют одни и те же имена элементов в различных смыслах. Это не является проблемой, если в документе используется только одна схема. Но представьте себе ситуацию, когда в одном и том же документе необходимо использовать элементы нескольких различных схем — будет попросту невозможно определить, какой элемент относится к какой схеме, и, вообще, какие схемы были использованы в документе. Для решения этих проблем в XML используются пространства имен (англ. namespaces).

Чтобы различать схемы документов, каждой из них ставится в соответствие уникальный идентификатор ресурса (URI). Две схемы будут считаться тождественными тогда и только тогда, когда их уникальные идентификаторы будут совпадать, поэтому нужно осторожно выбирать URI для создаваемой схемы документа. Очень часто в качестве URI используются URL различных Web-сайтов. Это совсем не означает, что по указанному адресу должно что-либо находиться, просто такой способ практически гарантирует уникальность — вряд ли кому придет в голову использовать адрес чужого сервера в качестве идентификатора своей схемы.

Пример

Уникальный идентификатор языка XSLT, которому посвящена эта книга, имеет вид:

>http://www.w3.org/1999/XSL/Transform

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

><префикс:элемент xmlns:префикс="URI">

> ...

>префикс:элемент>

Пример

В XSLT чаще всего используется префикс >xsl, который задается, как правило, следующим образом:

>

> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

> version="1.0">

> ...

>

При этом ничто не мешает использовать любой другой префикс. Например, следующий фрагмент документа будет совершенно идентичен предыдущему:

>

> xmlns:www="http://www.w3.org/1999/XSL/Transform"

> version="1.0">

> ...

>

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

Пример

>

>

> <ааа:anotherelement/>

> ...

>

>

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