Semistructured data, XML en querytalen > XML Querytalen > Vergelijking van de querytalen > Regular-path expressions
In sommige queries kan het handig zijn als het zoekpad door de boomstructuur enigszins gereguleerd wordt. Hiervoor zijn regular-path expressions te gebruiken. De volgende query maakt hiervan gebruik. In dit voorbeeld maken we gebruik van de volgende DTD:
<!ELEMENT chapter (title, section*)> <!ELEMENT section (title, section*)> <!ELEMENT title (#PCDATA)>
Deze DTD heeft een recursief element section. In de volgende query wordt gezocht naar alle hoofdstuk- en paragraaftitels (op elk willekeurige niveau) die het woord XML bevatten.
CONSTRUCT <results> {
WHERE
<chapter.(section)*>
<title>$t</title>
</> IN "books.xml",
$t LIKE '*XML*'
CONSTRUCT
<title>$t</title>
} </results>
In dit stukje code is chapter.(section)* een voorbeeld van een regular-path expression. In dit geval komt het overeen met een chapter element gevolgd door nul of meer section elementen. De operatoren die gebruikt mogen worden met regular-path expressions zijn alteration (|), concatenation (.) en de Kleene-star (*).
select xml(results:
(select xml(title:t)
from chapter(.section)* s, s.title t
where t like "*XML*"))
In dit voorbeeld wordt op dezelfde manier gebruik gemaakt van regular-path expressions als in het voorbeeld van XML-QL.
XQL ondersteunt geen regular-path expressions maar heeft wel aan andere manier om deze query uit te voeren. In XQL is het namelijk mogelijk om directe kinderen of verdere afstammelingen te bevragen. Dit kan met behulp van respectievelijk de / en de // operatoren.
document("books.xml")->results {
chapter[title contains "XML" ] { title } |
.//section[title contains "XML" ] { title }
}
| << vorige | volgende >> | Robert Bouma, 19-04-2002 |