Re: XQuery and music information retrieval

mmstefan wrote:
> 
> I'll pitch in with my variants:
> 
> 1.
>     for $p in //part
>     where contains(string($p/note), "CDEC")
>     return $p/note

In the example documents, each <note> is a child of a <measure>, which is
the child of a <part>. Thus, if $p is a <part>, $p/note will not select
anything. Probably you meant $p//note.

> This query assumes that string() takes a sequence of elements.

That's not a big assumption, since it already does in XPath 1.0.
(Specifically, it takes an `object' argument, which can be a nodeset.) The
big assumption is what it *does* with a sequence of elements. In XPath 1.0,
it would return the string-value of only one of the elements, the first in
doc order. In XQuery, it's possible that it will return a sequence
consisting of the string-value of each element. In your query, you appear to
be assuming that it will return a concatenation of those string-values,
which I suspect is unlikely. On the other hand, you could easily insert a
concatSeq() function that did the job.

More seriously, there's no connection between the <note>s that match "CDEC"
and the <note>s that are returned. The query will return *all* <note>s of
each <part> that contains one or more matches. 

> If [string() doesn't take a sequence of elements], just construct
> a dummy element, as in:
> 
>  for $p in //part
>  let $foo := <foo>{$p/note}</foo>
>  where contains(string($foo), "CDEC")
>  return $foo/*

($p/part -> $p//part again.)

This nicely avoids the current uncertainty of what string() will do with a
sequence of elements. However, it still has the problem of returning *all*
notes of each part with a match. 


> 2. for $p in //part
>     let $z := (<note>C</note>,<note>D</note>,<note>E</note>,<note>C</note>)
>     where subseq($z, $p/note)
>     return $p/note
> 
> assuming there is a boolean function subseq() testing inclusion of a
> sequence in another sequence, based on string value comparison.

($p/part -> $p//part again.)

This query also has the problem of returning all notes of each part with a
match. 

-Michael Dyck

Received on Saturday, 21 July 2001 15:13:29 UTC