Channels ▼
RSS

Database

XQuery

Source Code Accompanies This Article. Download It Now.


Sam is a developer at Harmonia. He can be contacted at ssaammee@gmail.com. Paul is a lead developer at Harmonia. He can be contacted at paul@tremblett.ca.


Widespread use of XML has established it as a lingua franca. The choice of XML to represent ever-increasing amounts of data led to the need for a query language that uses the structure of XML intelligently to express queries across the diverse kinds of data XML can be used to represent. W3C has developed a formal specification of such a query language; it is called XQuery.

The best approach to learning XQuery is one that comes naturally to developers—examine a few examples and start writing queries. The eXist open-source native XML database (http://exist.sourceforge.net) comes with a sandbox that makes such an approach easy; see Figure 1. In the upper window, the query doc("musicians.xml")/musicians/musician searches the document contained in the file "musicians.xml" (Listing One) for all musician nodes that are children of the node named musicians. The results of the query are displayed in the lower window.

[Click image to view at full size]

Figure 1: eXist XML database sandbox.

<?xml version="1.0" encoding="UTF-8"?>
<musicians>
 <musician uid="1111">
  <nickname>Slash</nickname>
  <name>Saul Hudson</name>
     <instrument>Lead Guitar</instrument>
     <birthDate>1965-07-23</birthDate>
     <birthLocation>Hampstead, England</birthLocation>
 </musician>
 <musician uid="2222">
     <nickname>Axl Rose</nickname>
     <name>William Bruce Rose, Jr.</name>
     <instrument>Vocals</instrument>
     <birthDate>1962-02-06</birthDate>
     <birthLocation>Lafayette, Indiana, USA</birthLocation>
 </musician>
 <musician uid="3333">
     <nickname>Duff "Rose" McKagan</nickname>
     <name>Michael Andrew McKagan</name>
     <instrument>Bass Guitar</instrument>
     <birthDate>1964-02-05</birthDate>
     <birthLocation>Seattle, Washington, USA</birthLocation>
 </musician>
 <musician uid="4444">
     <name>Matt Sorum</name>
     <instrument>Drums</instrument>
     <birthDate>1960-11-19</birthDate>
     <birthLocation>Mission Viejo, California, USA</birthLocation>

 </musician>
 <musician uid="5555">
     <name>Izzy Stradlin</name>
     <instrument>Rhythm Guitar</instrument>
     <birthDate>1962-04-08</birthDate>
     <birthLocation>Lafayette, Indiana, USA</birthLocation>
 </musician>
 <musician uid="6666">
     <name>Scott Weiland</name>
     <instrument>Vocals</instrument>
     <birthDate>1967-10-27</birthDate>
     <birthLocation>Santa Cruz, California, USA</birthLocation>
 </musician>
 <musician uid="7777">
     <name>Dean DeLeo</name>
     <instrument>Lead Guitar</instrument>
     <birthDate>1961-08-23</birthDate>
     <birthLocation>Point Pleasant, New Jersey, USA</birthLocation>
 </musician>
 <musician uid="8888">
     <name>Robert Emile DeLeo</name>
     <instrument>Bass Guitar</instrument>
     <birthDate>1966-02-02</birthDate>
     <birthLocation>Montclair, New Jersey, USA</birthLocation>
 </musician>
</musicians>
Listing One


Related Reading


More Insights






Currently we allow the following HTML tags in comments:

Single tags

These tags can be used alone and don't need an ending tag.

<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags

These require an ending tag - e.g. <i>italic text</i>

<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task. However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

 
Disqus Tips To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy.
 

Video