On Jul 31, 2009, at 1:59 AM, Michael Hausenblas wrote:

Ian,

For example, the use of prefixes

If I understand you correctly, the use of prefixes is a "personal
preferences based on design philosophy" disagreement that you have as you have yet to produce a technical problem with the use of prefixes.
How does that feature break UAs?

I don't understand what you mean by "break UAs".

Prefixes are widely documented to be an antipattern in language design.
For example, see this e-mail:

  http://lists.w3.org/Archives/Member/w3c-archive/2009Jul/0125.html

...where I give a quite detailed analysis of why prefixes are a feature of
poor language design.

With my RDFa TF and DERI AC Rep hat off I must say I don't understand this. I indeed took a look at the provided references (interesting) but fail to
see the deeper problem.

Let me step back.

I'm not talking about prefixes/XMLNS now, but about namespaces in the sense
of [1]. In my understanding *every* 'decentralised' language (be it a
programming language such as Java or a markup language such as XML- based things) needs a mechanism to unambiguously assign global names to locally defined items. This is the context necessary to deal with the decentralised aspect: everyone's free to come up with a 'System' class, e.g., in Java - and you put it in your package, say. org.deri.commons.System, and hence both machines and humans know, which System class you mean. Same holds true for XML, RDF, etc. - this is IMO not poor language design, this is very clever.

The problem is not namespaces as such, but prefixes. Java doesn't require you to make an alias for a namespace identifier (or even allow this as far as I know). You can use either a fully qualified identifier or import a namespace wholesale, with file-wide scope.

The common mistake that both content producers and content consumers make is to assume the namespace *prefix* rather than the namespace *URI* is what carries semantic meaning. This idea may seem simple to an expert, but even intelligent people get hopelessly confused about this.

Furthermore, prefixes have a hierarchical scope rather than document- wide or universal. That means snippets of markup can silently change meaning when moved, not just from document to document, but even from one part of the document to another. CURIEs are particularly bad, because they use prefixes in attribute values, which means that even using the proper DOM APIs can't protect you from the hazards of moving content from one place to another in the document. For attributes or markup, at least using DOM APIs will push you to get the right namespace URI.

This kind of hazard can be mitigated by a convention of always using the same prefix for any given namespace - which seems to be the de facto convention that usually evolves for popular namespaces. But this seems to miss the point of namespaces - it fails to provide actual decentralized extensibility, since there is no control over the prefix namespace, yet at the same time it seems to show decentralized namespace management is not really necessary, since in practice people manage to avoid prefix collisions and indeed have to, to avoid hopeless confusion.

Prefixes are there to work around the deficiency of unwieldy unique identifiers for namespaces. Clearly it would be cruel to force authors to type (or read!) "http://www.w3.org/1999/xhtml/"; over and over, instead of just once per document. But a simpler DNS-based convention, plus a managed registry for prefixes that name well-known vocabularies, would have solved the problem. That way, authors or content consumers who mistakenly thought "xhtml:" or "foaf:" or "rdf:" or "rss:" as a prefix had an intrinsic magic meaning would be right, and could happily go about their lives without having to understand the subtleties of prefix mapping.

For Namespaces in XML, that's water under the bridge. It's too widely deployed to fix. But for RDFa in text/html, or solutions that are similar in spirit, it's not too late to learn and improve.

Regards,
Maciej


Reply via email to