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

Пример

В следующем фрагменте

>

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

> version="1.0">

> ...

>

элементы >stylesheet и >template имеют различные префиксы, но, несмотря на это, принадлежат одной и той же схеме.

В одном элементе можно определять несколько префиксов пространств имен. Как правило, при использовании множества префиксов, все они определяются в корневом элементе, а затем используются по всему документу.

Пример

>

> xmlns:aaa="http://www.ааа.com"

> xmlns:bbb="http://www.bbb.com"

> xmlns:ccc="http://www.ccc.com">

> ...

>

Весьма удобной является возможность использования пространства имен по умолчанию. Определение пространства имен в виде

><элемент xmlns="URI">

> ...

>элемент>

позволяет опускать префиксы в именах элементов.

Пример

Документ в предыдущем примере может быть переписан следующим образом:

>

> <ссс:element xmlns:ccc="http://www.ccc.com"/>

> ...

>

Обратим внимание, что пространство имен по умолчанию может быть изменено повторным использованием атрибута >xmlns в дочерних элементах.

Пример

Документ

>

>  

>

эквивалентен документу

>

> xmlns:aaa="http://www.aaa.com"

> xmlns:bbb="http://www.bbb.com"

> xmlns:ccc="http://www.ccc.com">

>

Таким образом, пространства имен — это механизм выделения в тексте XML-документа элементов и атрибутов, принадлежащих различным логическим схемам документов. Более того, термин "пространство имен" часто используется как эквивалент логической схеме документа, например, когда говорят "элемент >template принадлежит пространству имен XSLT", подразумевается, что элемент >template определен в языке XSLT и описывается в соответствующей схеме.

Синтаксические правила, которые описывают определения пространств имен, задаются не в спецификации XML, а в другом документе — в технической рекомендации "Namespaces in XML" (пространства имен в XML), которая доступна по адресу http://www.w3.org/TR/REC-xml-names. Для того чтобы отличать эти продукции от продукций языка XML, мы будет давать им номера вида >[NS1], >[NS2] и так далее.

Продукция >NSAttName