Semistructured data, XML en querytalen > XML Querytalen > Vergelijking van de querytalen > Selection and extraction
In dit voorbeeld wordt een query gebouwd die uit het XML document alle titels van boeken haalt, die gepubliceerd zijn door Addison-Wesley na 1991. Hierbij hoeft geen rekening gehouden te worden met de volgorde waarin het resultaat wordt teruggegeven.
CONSTRUCT <bib> {
WHERE
<bib>
<book year=$y>
<title>$t</title>
<publisher><name>Addison-Wesley</name></publisher>
</book>
</bib> IN "www.bn.com/bib.xml,
$y > 1991
CONSTRUCT <book year=$y><title>$t</title></book>
} </bib>
De patterns en filters bevinden zich bij XML-QL in de WHERE clausule en de constructor in de CONSTRUCT. Het resultaat wordt vervolgens gevormd door een <bib> element (de buitenste CONSTRUCT) en voor elk gevonden boek, dat aan de restricties voldoet, een <book> element.
select xml(bib:{
(select xml(book:{@year:y, title:t})
from bib.book b, b.title t, b.year y
where b.publisher = "Addison-Wesley and y > 1991)})
Bij Lorel staat de constructor in de SELECT clausule, de patterns in de FROM clausule en zowel de filters en de patterns staan in de WHERE clausule. In the FROM clausule worden de variabelen geïnitialiseerd en in de WHERE clausule worden de elementen geselecteerd die voldoen aan de gestelde eisen. In de SELECT clausule tenslotte wordt het resultaat weggeschreven.
document("http://www.bn.com")/bib{
book[publisher/name = "Addison-Wesley" and @year > 1991]{
@year | title
}
}
Met behulp van de document clausule wordt het document en de top-level tag geselecteerd. De pattern clausule staat tussen de accolades en de filter clausule tussen de vierkante haken. XQL heeft geen constructor clausule. Het resultaat wordt bepaald door de pattern clausule. Er vind dus geen herstructurering plaats maar meer een projectie van het XML-document: er worden geen nieuwe tags aangemaakt maar de originele tags worden 'hergebruikt' bij het wegschrijven van het resultaat.
| << vorige | volgende >> | Robert Bouma, 19-04-2002 |