Tim Berners-Lee
Date: 1998, last change: $Date: 2009/08/27 21:38:07 $
Status: personal view only. Editing status: first draft.
Axioms of Web Architecture: n
Mandatory extensions
There is a common requirement for the design of a language on the web that it should allow for extensions, but it must allow a clear declaration as to whether understanding of an extension is a requirement to understanding of the document or whether it may be ignored. (See Evolvability)
Historically the lack of such a "mandatory field" has led to a complete inabaility to get any particular guaranteed behaviour be clients on the web.
This is essential for partial understanding and the smooth evolution of the web.
A simple requirement on a language is that it not only provide for its own extension, but provides for a way to explain whether a given extension is optional or not. This is a fundamental key to smooth evolution from the language to a new version.
There are manyways in which it can be done. It can be done term by term, or in bulk about a whole new language. It can be specified in the new document, in the schema for the new language.
XML provides in Namespaces a standard way of extending languages. It should also, in my opinion, provide a standard way to specify mandatopry or optional extensions.
I propose two things:
Sublanguages
The simple assertion that language A is a sublanguage of language B means that the writer's intent is preserved if a dpcument in language A is converted into a document in language B just by relabelling every term as being from langauge B. For XML, this means that a receiver of namespace A can simply process it as though the namespace had been delcared as B.
This assertion has got to be simple enough to put into a document for cases where the functionality is needed without the receiver having to dereference a schema.
Optional/Ignoreable/Mandatory flags for elements
In XML there are three simple thiong you can do with an element you don't understand.
- Stop, and conclude you do not understand the document, or the clause in the document; Example : logical NOT
- Ignore the elementand all its contents (including child elements) Example; <Comment>
- Replace the element with its contents (including children). Example: <bold>
The schema langauge needs to be able to specify these very simply, and indeed it would be neatto be able to do it in a document for a given elemnt, or in one fell swoop for all the elements in a given namespace.
Languages which donot use XML should attend to these needs in their own way!