How to support XML structure query

At 12:42 PM 6/30/98 PDT, Saveen Reddy (Exchange) wrote:

Saveen wrote about the problem of forming a query that matched all and only
the  resources that are collections, and proposed four solutions.

Saveen described the source of the problem as

> the value of this property is not a simple string or boolean value,
>it is an arbitrarily complex chunk of XML. None of the operators currently
>defined can be used to evaluate such a value.

And I agree, except that it applies not only to the resourcetype property
(or lockdiscovery) but to many others as well.  My scenario is finding an
author name in a list-valued property such as:

<dc:Creator>
  <x:person>Goland, Y</x:person>
  <x:person>Harding, T</x:person>
  <x:person>Fischer, B</x:person>
</dc:Creator>

(I described this at greater length in other email.)

Saveen provided four possible solutions. 

>1 - create an operator that allows search criteria to deal with arbitrarily
>complex xml

>2 - create an operator that has *some* smarts about XML. Such an operator
>could be called "xmlcontains" and returns true if a property contains as an
>immediate child, some element name

>3 - create an operator whose *sole purpose* is to determine whether a
>resource is a collection or not. 

>4 - create a *dynamic* property whose purpose is to determine whether a
>resource is a collection or not.

Saveen thinks 1 is too hard, and I agree.  3 and 4 work fine for his
problem, but not for mine.  I think solution 2 is best.

Note that this also requires that we allow XML to appear as a literal in
such an operator.

Using the example of an author list, I could then write a query

<where>
 <xmlcontains>
  <prop><dc:creator/></prop>
  <literal><x:author>Harding, T</x:author></literal>
 </contains>
</where>

which finds any document what has "Harding, T" as an author.  

The downside is that it does not allow for pattern match operators WITHIN
the XML literal.  You can't say

<where>
 <xmlcontains>
  <prop><dc:creator/></prop>
  <literal><x:author>Harding, T*</x:author></literal>
 </contains>
</where>

We could also consider generalizing xmlcontains to apply to tags at any
level, not just depth one, but I don't know of any servers that currently
store compound XML as a structured object, so I think we can skip it.

While I was composing this, I thought of two other possible responses.  I
would not call them "solutions" exactly.  I don't like either of them, but
I want to list them anyway so we can say we considered all the options.
But I'll put them in a separate message.

Received on Saturday, 4 July 1998 00:07:35 UTC