« XQuery-Start

Beispiel: Sprüchesammlung#

../_images/glas.jpg

Lernziel#

Mit XQuery-Syntax,wie mit XSLT kann das gleiche Ergebnis prodzuiert werden. Vergleichen Sie die Lösungsansätze hier, mit den Template-Rule Beispielen.

XQuery#

Kommentare werden mit »(:« begonnen und mit »:)« abgeschlossen.

Beispiele#

Ziel:

  1. Transformation der XML-Struktur zu HTML.

Ausgangspunkt ist die folgende XML-Datei:

 1<?xml version="1.0" encoding="UTF-8"?>
 2<!DOCTYPE spruechesammlung [
 3<!ELEMENT spruechesammlung (spruch)+>
 4<!ELEMENT spruch (kategorie, text, autor, gelebt-von-bis)>
 5<!ELEMENT kategorie (#PCDATA)>
 6<!ELEMENT text (#PCDATA)>
 7<!ELEMENT autor (#PCDATA)>
 8<!ELEMENT gelebt-von-bis (#PCDATA)>
 9]>
10<spruechesammlung>
11<!--erster Datensatz-->
12<spruch>
13  <kategorie>Erziehung</kategorie>
14  <text>
15    Bester Beweis einer guten Erziehung ist die Pünktlichkeit.
16  </text>
17  <autor>Gotthold Ephraim Lessing </autor>
18  <gelebt-von-bis>1729-1781</gelebt-von-bis>
19</spruch>
20<!-- zweiter Datensatz-->
21<spruch>
22  <kategorie>Ordnung</kategorie>
23  <text>
24    Bewahre deine Papiere, deine Schlüssel und alles so,
25    daß du jedes einzelne Stück auch noch im Dunkeln finden
26    kannst. Verfahre noch ordentlicher mit fremden Sachen.
27  </text>
28  <autor>Adolph Freiherr von Knigge</autor>
29  <gelebt-von-bis>1752-1796</gelebt-von-bis>
30</spruch>
31<!-- dritter Datensatz-->
32<spruch>
33  <kategorie>Liebe</kategorie>
34  <text>
35    Der Unterschied zwischen einer Liaison und der
36    ewigen Liebe besteht darin, daß die Liaison im
37    allgemeinen länger dauert.
38  </text>
39  <autor>Karl Schönböck</autor>
40  <gelebt-von-bis>1909-2001</gelebt-von-bis>
41</spruch>
42</spruechesammlung>

XQuery-Abfrage#

Schauen Sie sich zunächst die XQuery-Beispiele an. Die Erklärungen folgen nach dem Code-Beispiel.

 1xquery version "1.0";
 2(:  java -cp saxon9he.jar net.sf.saxon.Query -t -q:spruechesammlung.xq :)
 3<html>
 4<head><title>Spruechesammlung</title></head>
 5<body>
 6{
 7  let $doc := doc("/Users/peter/labs/xslt/sprueche.xml")
 8  for  $x in $doc//spruch
 9  return
10
11  <div>
12    <p style="font-size:18pt;color:#444444;">
13      {data($x/kategorie)}</p>
14    <p style="font-size:12pt;color:green;">
15      {data($x/text)}</p>
16    <p style="font-size:12pt;color:orange;padding-left:20px;">
17      {data($x/autor)}</p>
18    <p style="font-size:12pt;color:black;padding-left:50px;">
19      {data($x/gelebt-von-bis)}</p>
20  </div>
21}
22</body>
23</html>

Transformation mit saxon#

Falls noch nicht installiert, finden Sie unter Werkzeuge Saxon eine Anleitung.

java -cp saxon9he.jar net.sf.saxon.Query -t -q:spruechesammlung.xq

# oder mit Ausgabeumlenkung...

java -cp saxon9he.jar net.sf.saxon.Query -t -q:spruechesammlung.xq > test.html

Das Ergebnis#

Siehe auch:

Aufgabe zur XSL-Transformation

<?xml version="1.0" encoding="UTF-8"?>
<html>
<head>
  <title>Spruechesammlung</title>
</head>
<body>
  <div>
    <p style="font-size:18pt;color:#444444;">Erziehung</p>
    <p style="font-size:12pt;color:green;">
      Bester Beweis einer guten Erziehung ist die Pünktlichkeit.
  </p>
    <p style="font-size:12pt;color:orange;padding-left:20px;">
      Gotthold Ephraim Lessing
    </p>
    <p style="font-size:12pt;color:black;padding-left:50px;">
      1729-1781
    </p>
  </div>
  <div>
    <p style="font-size:18pt;color:#444444;">Ordnung</p>
    <p style="font-size:12pt;color:green;">
      Bewahre deine Papiere, deine Schlüssel und alles so,
      daß du jedes einzelne Stück auch noch im Dunkeln finden
      kannst. Verfahre noch ordentlicher mit fremden Sachen.
  </p>
    <p style="font-size:12pt;color:orange;padding-left:20px;">
      Adolph Freiherr von Knigge
    </p>
    <p style="font-size:12pt;color:black;padding-left:50px;">
      1752-1796
    </p>
  </div>
  <div>
    <p style="font-size:18pt;color:#444444;">Liebe</p>
    <p style="font-size:12pt;color:green;">
      Der Unterschied zwischen einer Liaison und der
      ewigen Liebe besteht darin, daß die Liaison im
      allgemeinen länger dauert.
  </p>
    <p style="font-size:12pt;color:orange;padding-left:20px;">
      Karl Schönböck
    </p>
    <p style="font-size:12pt;color:black;padding-left:50px;">
      1909-2001
    </p>
  </div>
</body>
</html>