- From: Babich, Alan <ABabich@filenet.com>
- Date: Sun, 27 Sep 1998 21:16:39 -0700
- To: "'DASL'" <www-webdav-dasl@w3.org>
BEGIN PROPOSAL: (1) Add an optional operator, "proppath": <!ELEMENT proppath ( ANY ) > This parallels the definition of "prop" by the WebDAV draft, which, unfortunately, uses "ANY". So we have to state that the "ANY" stands for one or more property names, i.e., XML elements with empty content. You can think of there being implicit dots between each of the properties. (2) Add alternatives to the existing operators (e.g., "gt", etc.) where "prop" is replaced by "proppath". For example, "gt" becomes <!ELEMENT gt ( prop, literal | proppath, literal ) > END PROPOSAL -- That's it. Elegant and simple. EXAMPLE: The hierarchical "lockdiscovery" property is defined by WebDAV thusly: <!ELEMENT lockdiscovery (activelock)*> <!ELEMENT activelock (lockscope, locktype, depth, owner?, timeout?, locktoken?> <!ELEMENT lockscope (exclusive | shared)> <!ELEMENT exclusive EMPTY> <!ELEMENT shared EMPTY> <!locktype (write)> <!write EMPTY> <!ELEMENT depth (#PCDATA)> -- 0, infinity -- <!ELEMENT owner ANY> <!ELEMENT timeout (#PCDATA)> <!ELEMENT locktoken (href+)> <!ELEMENT href (#PCDATA)> Consider a query for all the resources locked by "Alan". Conceptually, ' activelock.owner = "Alan" '. In XML the DASL "where" clause would be <D:eq> <D:proppath><D:activelocks/><D:owner/></D:proppath> <D:literal>Alan</D:literal> </D:eq> The query where we were looking only for collection resources that Alan has exclusively locked is conceptually ' resourcetype.collection IS NOT NULL AND activelock.owner="Alan" AND activelock.lockscope.exclusive IS NOT NULL '. The XML for DASL would be <D:AND> <D:ne> <D:proppath> <D:resourcetype/><D:collection/> </D:proppath> <D:literal/> </D:ne> <D:eq> <D:proppath> <D:activelock/><D:owner/> </D:proppath> <D:literal>Alan</D:literal> </D:eq> <D:ne> <D:proppath> <D:activelock/><D:lockscope/><D:exclusive/> </D:proppath> <D:literal/> </D:ne> </D:AND> Actually, I have slipped another proposal into this example that is a proposal Jim Davis made recently (thanks, Jim): The "isnull" operator in the draft was misnamed, so we recently renamed it to the "isdefined" operator and adjusted the sense of the explanatory text. That left us with no "isnull" operator. Instead of adding an "isnull" operator to DASL: (1) use a DAV literal with no content; (2) treat "eq" and "ne" as "isnull" and "isnotnull"; and (3) for the other four relationals, treat a property with no value as if it had a value that collated before any actual value. Therefore "<D:gt><D:X><D:literal/></D:gt>" evaluates to TRUE if the property X has a value for the resource under scan, and FALSE if it does not; ge is always TRUE; "lt" is FALSE for all resources; and "le" is FALSE if the property has a value and TRUE if it does not. To find all ordinary resources locked by Alan, conceptually: ' resourcetype IS NULL AND activelock.owner="Alan" ' The XML for DASL would be <D:AND> <D:eq> <D:proppath><D:resourcetype/></D:proppath> <D:literal/> </D:eq> <D:eq> <D:proppath><D:activelock/><D:owner/> </D:proppath> <D:literal>Alan</D:literal> </D:eq> </D:AND> Alan Babich
Received on Monday, 28 September 1998 00:17:47 UTC