Re: Do we need link-catalogs for schemas?

Bill la Forge (b.laforge@jxml.com)
Sun, 11 Oct 1998 18:14:56 -0400


From: Peter Murray-Rust <peter@ursus.demon.co.uk>
>It stands for Generic Identifier and for practical purposes is (I think)
>synonymous with Element Type Name in XML, i.e. <FOO> has a GI of "FOO".

That's what I first thought. But then I began to wonder...

>Question in return, what exactly is delegation and can you give an example.
>[It's been mentioned both in the context of Java classes and link-catalogs].

I think it has to do with aggregation. A client of the aggregate requests a
delegate of the aggregate which supports a particular interface. At least, this
is what I've been assuming...

This is the heart of COM and was to be a part of JavaBeans. It is also the
key to advanced Coin applications, as the CoinsDocument class is part of
an aggregate.

It is important in Java, to get arround single-inheritence. I believe the problem
with the JavaSoft aggregation was that the client specified a Class object,
requiring that the tree of classes ('cause you must include interfaces) had
to be searched for each object in the aggregate collection of objects.

Coins uses a filter object to select the appropriate delegate. This means that
(1) you can simply use the instanceof operator in the filter match method instead
of having to do the class tree search and (2) you can select based on any
criteria, allowing for selection based on role.

(I need to make this package accessable again on the Coins web page. Its freeware.)

Now since there is no standard api (for Java), its kinda hard to give a
simple example, code wise. But lets say that we have a Juggler with two listener
registration interfaces, one for start and one for stop. If the Juggler were a single class,
you would simply cast the Juggler object to the appropriate interface. Unfortunately, that
means that the two interfaces can not have any common methods.

If the registration interfaces for start and stop were seperate objects, but were different
interface types, then you could ask the Juggler aggregate object for, say, an instance of
the startListenerRegistration object.

If role were supported, then the objects supporting the ActionListenerRegistration
interface could be requested as the "start" object or the "stop" object.

Bill