Согласно спецификации, вы правильно считаете, что пространство имен attrib
в первом примере пустое.Однако здесь есть одна тонкость, которая может быть не очевидна.
Рассмотрим этот пример ниже в спецификации элемента с двумя атрибутами с одинаковым именем (один с префиксом, а другой без префикса).
<!-- This is OK, even though an element cannot have two attributes
with the same name -->
<x xmlns:n1="http://www.w3.org"
xmlns="http://www.w3.org" >
<good a="1" n1:a="2" />
</x>
Это соответствует, потому что два атрибута действительно находятся в двух разных пространствах имен:
n1:a
принадлежит http://www.w3.org
пространству имен (которое является пространством имен good
а также a
обрабатывается и относится к недоступному пространству имен http://wwww.w3.org > good
(и отличается от пространства имен good
).
Обратите внимание, что http://wwww.w3.org > good
пространство имен не существует;например, вы не можете запрашивать атрибуты в этом пространстве имен с помощью XPath.Если вы попросите namespace-uri(\\good\a)
, оно будет пустым.Чтобы конкретизировать идею отдельного пространства имен элемента, я создал пространство имен, которое имеет пространство имен и имя элемента вместе с разделителем (>
в любом случае не разрешается экранирование в значениях атрибута).
Теперь, вместо того чтобы сказать, что два атрибута находятся в двух разных пространствах имен, более правильно сказать, что они принадлежат двум разным разделам пространства имен :
Вот соответствующая часть спецификации, с которой связан Porges:
A.2 Разделы пространства имен XML
Для поддержки цели создания обоихквалифицированные и неквалифицированные имена, полезные для достижения их предполагаемой цели, мы идентифицируем имена, появляющиеся в пространстве имен XML, как принадлежащие к одному из нескольких непересекающихся традиционных (то есть структурированных) пространств имен, называемых разделами пространства имен.Разделы:
Раздел Все типы элементов Все типы элементов в пространстве имен XML появляются в этом разделе.У каждого есть уникальная местная часть;комбинация имени пространства имен и локальной части однозначно идентифицирует тип элемента.
Раздел глобальных атрибутов Этот раздел содержит имена всех атрибутов, которые определены в этом пространстве имен какГлобальный.Единственной обязательной характеристикой глобального атрибута является то, что его имя должно быть уникальным в разделе глобального атрибута.Эта спецификация не делает никаких утверждений относительно правильного использования таких атрибутов.Комбинация имени пространства имен и имени атрибута однозначно идентифицирует глобальный атрибут.
Разделы по типам элементов Каждый тип в разделе Все типы элементов имеет ассоциированное пространство имен, в котором отображаютсяимена неквалифицированных атрибутов, которые предоставляются для этого элемента.Это традиционное пространство имен, потому что появление дублированных имен атрибутов в элементе запрещено XML 1.0.Комбинация имени атрибута с типом элемента и именем пространства имен однозначно идентифицирует каждый неквалифицированный атрибут.
В документах XML, соответствующих этой спецификации, имена всех квалифицированных (префиксных) атрибутов присваиваются разделу глобального атрибута,и имена всех неквалифицированных атрибутов назначаются соответствующему разделу для каждого типа элемента.