>
> version="1.0">
> ...
>
Префиксы, которые были определены в некотором элементе, могут быть использованы в его собственном имени, а также в именах всех элементов, которые включены в него.
Пример
>
>
>
> <ааа:anotherelement/>
> ...
>
>
Принадлежность элементов той или иной схеме определяется не префиксами, а тем, какие уникальные идентификаторы поставлены этим префиксам в соответствие. То есть два элемента с разными префиксами, заданными одинаковыми идентификаторами, будут считаться принадлежащими одной схеме.
Пример
В следующем фрагменте
>
> 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
описывает имена атрибутов, декларирующих пространства имен:
>[NS1] NSAttName ::= PrefixedAttName | DefaultAttName
>[NS2] PrefixedAttName ::= 'xmlns:' NCName
>[NS3] DefaultAttName ::= 'xmlns'
Имя >NCName
, которое использовалось в правиле >PrefixedAttName
, — это имя префикса, который будет использоваться для обозначения принадлежности элементов определенному пространству имен. Это имя отличается от имен, которые отвечают продукции >Name
тем, что оно не может содержать двоеточия:
>[NS4] NCName ::= (Letter | '_') (NCNameChar)*
>[NS5] NCNameChar ::= Letter | Digit | '.' | '-' | '_'
> | CombiningChar | Extender