eXist Workshop bei der Edirom School 2024 in Paderborn
XQuery (XML Query Language) ist eine Abfragesprache, die speziell für die Verarbeitung von XML-Dokumenten entwickelt wurde. Sie ermöglicht es, komplexe Abfragen auf XML-Datenbanken oder Dokumenten durchzuführen, ähnlich wie SQL für relationale Datenbanken.
Über die doc()
Funktion werden einzelne XML-Dokumente eingelesen.
doc('/db/apps/WeGA-data/letters/A0400xx/A040000.xml')
Die collection()
Funktion adressiert ein ganzes Verzeichnis, in dem XML-Dateien abgelegt sind.
collection('/db/apps/WeGA-data/letters')
Bevorzugte Variante (allen selektierten Elementen muss das Präfix ‘tei:’ vorangestellt werden:
declare namespace tei="http://www.tei-c.org/ns/1.0";
Alternative Variante
declare default element namespace "http://www.tei-c.org/ns/1.0";
Das Herzstück von XQuery sind die FLOWR-Ausdrücke (flower). Sie ermöglichen komplexe Ausdrücke um Informationen aus Dateien und Sammlungen abzufragen und neu zu ordnen.
xquery version "3.1";
declare namespace tei="http://www.tei-c.org/ns/1.0";
collection("/db/apps/WeGA-data/letters/A0400xx")//tei:correspAction[@type='sent']//tei:persName
xquery version "3.1";
declare namespace tei="http://www.tei-c.org/ns/1.0";
for $letter in collection("/db/apps/WeGA-data/letters/A0400xx")//tei:correspAction
where $letter/@type = 'sent'
return
$letter//tei:persName
xquery version "3.1";
declare namespace tei="http://www.tei-c.org/ns/1.0";
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>Brieftitel</title></head>
<body>
<ul>
{
for $letter in collection('/db/apps/WeGA-data/letters')
let $id := $letter/tei:TEI/@xml:id => string()
let $title := $letter//tei:title[@level='a'][1] => normalize-space()
order by $title
return
if($id != "" and $title != "")
then
<li>{$title}</li>
else()
}
</ul>
</body>
</html>
<lb/>
in Titel durch Leerzeichen ersetzen, Verlinkung auf Einzelbriefexquery version "3.1";
(:
: Namespace declarations
:)
declare namespace tei="http://www.tei-c.org/ns/1.0";
(:~
: Returns an HTML list of the letter's titles.
:)
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Auflistung der Brieftitel</title>
<link rel="stylesheet" href="tei.css" media="screen"></link>
</head>
<body>
<ul>
{
for $letter in collection('/db/apps/WeGA-data/letters')
let $id := $letter/tei:TEI/@xml:id => string()
let $title := $letter//tei:title[@level='a'][1]
let $string := string-join(
for $node in $title/node()
return if ($node/name() = 'lb') then ' ' else string($node), ''
)
order by $string
return
if ($id != "" and $string != "")
then
<li xmlns="http://www.w3.org/1999/xhtml"><a href="/exist/apps/WeGA-data/tei2html.xq?id={$id}">{$string}</a></li>
else()
}
</ul>
</body>
</html>
Es kursieren zwar verschiedene Dateiendungen für XQueries (.xql
, .xqm
, .
xquery
, .xq
), durch das Buch von Siegel/Retter haben sich aber die folgenden
beiden als Norm herauskristallisiert:
.xq
für ausführbare XQueries.xqm
für XQuery-Library-Module