XQuery - Prima applicazione

Esempio

Di seguito è riportato un documento XML di esempio contenente i record di una libreria di vari libri.

books.xml

<?xml version="1.0" encoding="UTF-8"?>
<books>
   
   <book category="JAVA">
      <title lang="en">Learn Java in 24 Hours</title>
      <author>Robert</author>
      <year>2005</year>
      <price>30.00</price>
   </book>
   
   <book category="DOTNET">
      <title lang="en">Learn .Net in 24 hours</title>
      <author>Peter</author>
      <year>2011</year>
      <price>70.50</price>
   </book>
   
   <book category="XML">
      <title lang="en">Learn XQuery in 24 hours</title>
      <author>Robert</author>
      <author>Peter</author> 
      <year>2013</year>
      <price>50.00</price>
   </book>
   
   <book category="XML">
      <title lang="en">Learn XPath in 24 hours</title>
      <author>Jay Ban</author>
      <year>2010</year>
      <price>16.50</price>
   </book>
   
</books>

Di seguito è riportato un documento Xquery di esempio contenente l'espressione di query da eseguire sul documento XML precedente. Lo scopo è ottenere gli elementi del titolo di quei nodi XML in cui il prezzo è maggiore di 30.

books.xqy

for $x in doc("books.xml")/books/book where $x/price>30
return $x/title

Risultato

<title lang="en">Learn .Net in 24 hours</title>
<title lang="en">Learn XQuery in 24 hours</title>

Verifica risultato

Per verificare il risultato, sostituire il contenuto di books.xqy (fornito nel capitolo Configurazione dell'ambiente ) con l'espressione XQuery sopra ed eseguire il programma java XQueryTester.

Espressioni XQuery

Cerchiamo di capire ogni parte dell'espressione XQuery sopra.

Uso delle funzioni

doc("books.xml")

doc () è una delle funzioni XQuery utilizzata per individuare l'origine XML. Qui abbiamo passato "books.xml". Considerando il percorso relativo, books.xml dovrebbe trovarsi nello stesso percorso in cui è presente books.xqy.

Uso di espressioni XPath

doc("books.xml")/books/book

XQuery utilizza pesantemente le espressioni XPath per individuare la parte richiesta di XML su cui eseguire la ricerca. Qui abbiamo scelto tutti i nodi del libro disponibili nel nodo libri.

Itera gli oggetti

for $x in doc("books.xml")/books/book

XQuery tratta i dati xml come oggetti. Nell'esempio precedente, $ x rappresenta il nodo selezionato, mentre il ciclo for itera sulla raccolta di nodi.

Applica la condizione

where $x/price>30

Poiché $ x rappresenta il nodo selezionato, "/" viene utilizzato per ottenere il valore dell'elemento richiesto; La clausola "where" viene utilizzata per porre una condizione sui risultati della ricerca.

Restituisci il risultato

return $x/title

Poiché $ x rappresenta il nodo selezionato, "/" viene utilizzato per ottenere il valore dell'elemento richiesto, prezzo, titolo; La clausola "return" viene utilizzata per restituire gli elementi dai risultati della ricerca.