5

The specification of XML Namespaces explains that the interpretation of unprefixed attributes is determined by the element on which they appear. And that the namespace name for an unprefixed attribute name always has no value:

The namespace name for an unprefixed attribute name always has no value.

How does this rule apply to the namespace of the attribute jid in the following cases.

<query xmlns="jabber:iq:roster"> <item jid="[email protected]"></item> </query> 

If the declaration of the namespace and the attribute in question both don't have an prefix, the attribute jid is in the namespace jabber:iq:roster.

<q:query xmlns:q="jabber:iq:roster"> <q:item q:jid="[email protected]"></q:item> </q:query> 

If both, the declaration of the namespace and the attribute have the same prefix, the attribute jidalso has the namespace jabber:iq:roster:

<q:query xmlns:q="jabber:iq:roster"> <q:item jid="[email protected]"></q:item> </q:query> 

But in which namespace is the attribute if the namespace is declared with an prefix but the attribute doesn't have a prefix? I would assume, that the attribute jid

  1. has the default namespace declared in a parent element,

    <parent xmlns="http://example.com"> <q:query xmlns:q="jabber:iq:roster"> <q:item jid="[email protected]"></q:item> </q:query> </parent> 
  2. or no namespace, if there isn't such a declaration.

Do I get this right?

2 Answers 2

4

The normal interpretation used by XPath and other specs is that an unprefixed attribute is in no namespace.

There are language lawyers who will insist that the namespaces spec doesn't say that. It says that an unprefixed attribute is in whatever namespace the designer of the vocabulary says it is in. But this interpretation isn't very useful in practice; it's what the tools do that matters.

Sign up to request clarification or add additional context in comments.

2 Comments

But if the designer of a vocabulary defines what an unprefixed attribute is, than I have to know the namespace of that unprefixed attribute to know who the designer of the vocabulary is to get the meaning of the unprefixed attribute.
@Tobias The NS of the element where the attribute lies. Not the NS of the attribute since it has no NS.
3

An attribute without prefix is always in the empty name space, i.e. it has no name space. It is doesn't matter whether the enclosing element has a name space or not. That's my reading of the second statement you refer to, and that is the interpretation of all the XML tools I've used.

4 Comments

But if an unprefixed attribute has no namespace, how do I know, that the attribute jid form the first and third example is the attribute jid of the schema jabber:iq:roster? BTW, I know that this is a theoretical discussion. ;-)
You get the knowledge by studying the schema. There are two possibilities. 1) the schema defines it as an attribute local to the element or type declaration, or, 2) the schema allows any attribute at this point.
Now I got it. The explanation in the german Wikipedia also helped me a bit. In all 3 examples above the attribute jid is the expected attribute of the roster item. Only if the namespace of the attribute is not null and differs from the namespace of the element it appears in, it is something different (e.g., <item xmlns="jabber:iq:roster" xmlns:x="example.com" x:jid="[email protected]" />).
The empty NS does not exist. "It has no namespace" is correct but "is always in the empty namespace" is wrong.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.