User extension mechanism for XML-RPC.

Written: 2004-01-16 By Brendan G Bohannon (aka: cr88192).


Purpose

The purpose of this is to allow possibly preserving implementation or extension specific semantics or features in a general way, falling back to the core protocol if it is not possible to preserve such features.

An example I will give is a lisp style typesystem. Though it is possible to drop all language specific semantics and use general primitive types, in no way is this desirable (it makes an ugly mess of otherwise clean data). This is especially true in the case where both ends use the same typesystem, thus transmission involved semantic loss should be minimalized.

For a given set of point to point communications, it is assumed that some info is kept on one end about the other (eg: a set of known namespaces) or otherwise preserved features. This can be used for one end of the link to generally decide how and what data to represent, falling back to the basic protocol if it is not possible to send anything of real use...

The purpose of the system.listExtensionNamespaces function is for retrieving a namespace list, where the idea is that each namespace gives some context as to features supported by the other end. Unknown namespaces have no implied meaning, so are simply ignored.

I believe that 2 major sets of extensions is needed here:
Typesystem extensions, needed for preserving specialized semantics for a language or implementation;
Message extensions, used for representing messages specific to an implementation or such.

The general assumption is that outside the scope of the implementations using an extension, quite likely the extension is irrelevant anyways (this should not add any real cost to the general protocol).
I believe that if possible extensions (or extensibility) should avoid putting too much weight or complexity on the core protocol (I will point at soap wrt this). The core protocol should remain small and not have to worry about the exact complexities or special cases of the various implementations...



Functions

system.listExtensionNamespaces

Gets a list of extension namespaces, returned as an array of strings.
If not supported the implementation will return a fault, otherwise it will return a list of extension namespaces.

system.listNamespaceTags(string ns)
Returns a list of tags supported by a given namespace.

Forms

Some special forms are usable (enabled by such extensions):
<value xmlns=.../>, where ... is the namespace name.
This is used for adding new user types.

<message xmlns=.../>, useful for adding new toplevel message types.

BGB Extension 1: Scheme Like Typesystem
BGB Extension 2: A Few Misc Types