Beispiel: Sprüchesammlung#
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:
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:
<?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>