RE: Removing the DAV:activity and DAV:version-history and DAV:bas eline resource type values

   From: Stefan Eissing [mailto:stefan.eissing@greenbytes.de]

   My experience from implementing basic deltaV features in server and
   client code is that the code often (not always) deals with types of
   resources. "Is this a versioned, plain or version-controlled
   resource?" is a typical question.

   Both server and client code has the same concepts, but they are not
   directly communicated over the wire - only indirectly by properities.

So how is getting the information from DAV:resourcetype "directly
over the wire" while getting the information from DAV:supported-method-set
and DAV:supported-live-property-set "indirect"?  They are just two
properties, each containing a set of values, that the client is going
to look for particular values that are of interest.

And as Tim pointed out, the values we are going to end up putting
in DAV:resourcetype are going to start looking amazingly similar
to the set of values that currently exist in DAV:supported-method-set
and DAV:supported-live-property-set.

   And even for those we try to invent something like allprop/include to
   gain acceptable performance.

There are no performance issues that I am aware of that would
distinguish the performance of accessing DAV:resourcetype from
DAV:supported-xxx.  They are just fixed strings that are associated
with a resource when it is created.

   Since <supported-live-property-set> is rather expensive (and was moved
   out of allprop for that reason, right?)

No, it is not the value of DAV:supported-live-property-set that was
expensive (it is very cheap), but the values of the live properties
themselves which can be expensive.  

   I ask the server for specific
   properties (checked-in, checked-out and version-name) in order to
   deduce that a resource is plain, versioned or version-controlled.

No, you check to see if those values appear in the
DAV:supported-live-property set of the resource (which means the
server doesn't compute any of these property values, it just tells you
that they are supported).

   However that will break immediatly when some other type of resource
   carries a version-name.

What do you mean by "break"?  The DAV:version-name property has 
certain well defined semantics.  If your application wants to do
something that depends on those semantics, it can do those things
on *any* resource that supports that property.  The dependency is
on whether or not the resource supports that property, not whether
or not the resource has a certain "type".

The only things that an interoperable client can "do" on a resource is
perform methods on the resource and access properties.  If a resource
supports a particular method or live property, you are guaranteed
(if the resource is implemented properly) that you can do what that
method says, or what that live property provides, which means it
*won't* break.

   So, I am looking for an airbag and seat belt - I do not want to
   remove any horse power so that it would be safe to drive without any. ;)

But it's important to keep in mind that we are not actually talking
about driving a car, but rather interoperating with web servers (:-).

   I still think that both have their value and purpose. Excuse me
   bringing back Java analogies, but reflection in Java is a very
   powerful feature and you can do lots of useful, flexible things
   with it. However there are also interfaces and it's good that they
   are there for speed and type safety.

Although Java is a closer analogy than ducks, alligators, and 
mother-in-laws (:-), it is still just an analogy, and you can make
an analogy reach any conclusion you want.  For example, you can
make an analogy with Smalltalk.  The reason why Smalltalk is such a good
prototyping language, is that it *does not* require you
to declare types, but rather allows you to invoke a routine on
any object (resource) that supports the method you are invoking.
Like Smalltalk, we want our protocol to continue working even when
the caller (the client) is modified or the callee (the server)
is modified.  The benefits of explicit type definitions is that
it is easier to do separate and efficient compilation.  But we
*don't* compile our HTTP method calls ... we just invoke them,
which is where the Java (and any strongly typed language) analogy
breaks down, but the Smalltalk (and Lisp, and ML, and most other
good prototyping languages) analogy holds.

But there I go again, indulging in analogy games ... (:-).

Cheers,
Geoff

Received on Wednesday, 6 June 2001 11:02:08 UTC