4. Element and namespace declaration and syntax

[S] How would one indicate the MathML namespace using only a reversed domain name? We have a number of existing namespaces. Let's transform those to reverse-dns dotted-on forms. This is slightly more verbose, but it would work: org.w3.www.1998.Math.MathML

[S] Permit an element to be closed without its "prefix". It's something I've wished for in XML, for that matter:



<com.example..project>la, la</project>
 

I can't imagine a situation in which this is ambiguous. Even in XML, using QNames and prefixes:

<a:element> 
 <b:element> 
   <c:element>
   </element> 
 </element> 
</element>

... is perfectly clear and unambiguous; and changes nothing about well-formedness. Call it namespace minimization.

[S]. Namespaces in XML specification might be improved by the addition of one word: "is a URI" becomes "is not a URI".

[S] Why not just make a clean break with namespaces and do extensibility with java-style dot-separated pathnames? It's trivially easy to understand and offers distributed extensibility for free. Trying to shoehorn it onto existing namespace-aware APIs is going to be awkward and may not buy much.

[S]If I wanted to publish a little XML vocabulary for donkey genetics, all the elements would have names like <org.tbray.donkeys.father> and <org.tbray.donkeys.birth-date> and so on. And if this were being used by IETF when we did atom, the tags would be like <org.ietf.atom.feed> and <org.ietf.atom.entry>. That's all. Distributed extensibility, and you can mix & match without asking anyone.

[S] One thought is some prefix/suffix that maps to "http://" or possibly the all-too-common "http://www.w3.org/" yielding names like w3.1998.Math.MathML. A more grandiose thought is something Tantek has talked about often, of making a unified W3C namespace. This is partial grandfathering of the year portions of the URL strings (which would need to be stored in a table somewhere) and combined with the above, could yield names like w3.Math.MathML

[S] Here's a proposal that has a hint of DNS and perhaps a hint of e-mail address resolution.

1) fully qualified names should have the form:

local_name:namespace

2) A name without a namespace belongs to the namespace of the elements nearest ancestor that does have a namespace.

3) A name can also be specified using a partial namespace, e.g.:

local_name:partial_namespace

4) Unless a name ends with a . or :, on encountering a (possibly) partial namespace, a search is made to see if an ancestor element has a namespace that starts with that partial namespace. If one is found, the namespace becomes that of the full namespace. For example, if an ancestor element has the name:

myName:proposal.example.com

then a name of:

anotherName:proposal

is treated as:

anotherName:proposal.example.com

If 'proposal' really is the full namespace, and an ancestor has a namespace of 'proposal.example.com' then you can prevent the expansion by doing:

anotherName:proposal.

Trailing .s and :s are obviously removed when selecting the namespace part.

5) For the purposes of HTML5, the HTML5 namespace can be considered to be in-scope prior to the start of parsing so that documents can start simply as:

<html ... 

I think this is simple and allows brevity without having to remember a lot of syntax. It puts the burden on the tools rather than on the document authors.