XQuery and music informatio retrieval

Dear WWW Query list members,

At Recordare we are very interested in using XML for music information
retrieval. We have developed a MusicXML DTD for specifying musical
scores (DTDs and more information are available at
www.musicxml.org/xml.html). We naturally would like to be able to store
the music in a database and search on it.

I have read through the XQuery Use Cases and XQuery 1.0 documents. These
are wonderful introductions to XQuery, and my sincere thanks for giving
us developers such an easy entry into the world of XQuery. I read the
documents this morning and was writing my first successful XQuery's
against my own data this afternoon, using the QuiP prototype from
Software AG.

While I could do some simple queries, I could not however find a way to
do a simple melody query. I have enclosed below a copy of the note that
I posted in one of the Tamino Developer Community bulletin boards. I
hope it is appropriate for this list.

Any pointers that you could provide would also be most appreciated. If
people on the list are interested in more detail about problems in music
information retrieval, there annual Music Information Retrieval
conference in Indiana this October should be most interesting
(http://ismir2001.indiana.edu). 

--------------------------

The W3C's XQuery Use Cases and XQuery 1.0 documents are very helpful for
learning the basics of XQuery (the use cases in particular). However, I
cannot find a simple way to do one of the most fundamental types of
music queries. I would appreciate it if people could tell me either 1)
what I've missed in XQuery or 2) suggestions on how to modify XQuery to
better support this type of query.

Say we are trying to search for "Frere Jacques" sung in the key of C. We
just want to look for a sequence of pitches: C, D, E, C. We do not want
to assume, though, that all these pitches are in the same measure - both
of these XML data should be found (this is not real MusicXML, but
simplified for this example):

<measure number="1">
  <note>C</note>
  <note>D</note>
  <note>E</note>
  <note>C</note>
</measure>

as well as

<measure number="1">
  <rest/>
  <rest/>
  <note>C</note>
  <note>D</note>
</measure>
<measure number="2">
  <note>E</note>
  <note>C</note>
  <rest/>
  <rest/>
</measure>

In both cases, we want to return the 4 notes in sequence, regardless of
whether they are in the same parent or consecutive parents. However, the
following would not match, since there is an F in the middle of the
sequence:

<measure number="1">
  <rest/>
  <rest/>
  <note>C</note>
  <note>D</note>
</measure>
<measure number="2">
  <note>F</note>
  <note>E</note>
  <note>C</note>
  <rest/>
</measure>

I know there are brute force ways to do this, but this is already a
*much* simpler than real-world query example, and needs to be 1) handled
simply and 2) retrieved quickly from an XML database.

Is there some convenient mechanism to specify that I want to match a
sequence of elements that share, not necessarily a common parent, but a
common grandparent, great-grandparent, or arbitrary level ancestor?
Goodness knows there is a lot in XQuery, so please let me know if I have
missed the easy way to handle this type of query.

Thanks for any assistance that you can offer.

--------------------------

Again, congratulations on the outstanding work to date. I have great
hope for XQuery and would like to do what I can to ensure that it is
useful for music retrieval as well as other applications.

Thanks,

Michael Good
Recordare LLC

Received on Wednesday, 18 July 2001 02:18:06 UTC