3 XML, HTML und XSL – die Ausgabe

Werbung
3
XML, HTML und XSL –
die Ausgabe
XML und VBA lernen
ISBN 3-8273-1952-8
Nun, nachdem eine wohlgeformte oder eine gültige XML-Datei erstellt
worden ist, stellt sich die Frage, was mit ihr geschieht. Die Anzeige im
Internet Explorer ist zur reinen Informationsvermittlung okay, allerdings wenig brauchbar, da die Benutzer von Browsern anderes gewöhnt
sind. Die Daten sollen auf vernünftige, das heißt ansehnliche Weise veröffentlicht werden. Und genau hier greift HTML.
Eine einfache Möglichkeit, XML-Dokumente anzuzeigen, sind Style
Sheets
3.1 Style Sheets
So wie Dokumente in Textverarbeitungsprogrammen nicht „hart“, sondern mit Formatvorlagen formatiert werden sollten, stellen viele Browser die Möglichkeit zur Verfügung, mit CSS (Cascading Style Sheets) zu
arbeiten. Diese Technik wurde vom World Wide Web Consortium 1996
entwickelt und im Netscape 4.0 und Internet Explorer 4.0 vollständig
implementiert.
Der dahinter liegende Grundgedanke ist die Trennung von Information
und Gestaltung. CSS ist lediglich für das Aussehen eines Dokumentes
zuständig; in ihm sind keinerlei Informationen über die Struktur des
Dokuments verzeichnet. Verzichtet man auf CSS, kann ein aufgeblähter
und unübersichtlicher Code entstehen. Mit CSS können kürzere Ladezeiten erreicht werden. Und schließlich ist die Pflege der Formate leichter, wenn CSS verwendet wird.
Ein CSS-Dokument ist eine Datei, in der die Stile für andere HTMLSeiten festgelegt werden. Sie wird als Textdatei mit der Endung *.css abgespeichert und könnte beispielsweise folgende Gestalt haben:
Style Sheets
91
<HTML>
<HEAD>
<TITLE>Verwendete Stile</TITLE>
<STYLE>
H1
{ font-family: Arial; font-size: 14pt; color:
#FF0000; font-weight: bold; margin-top: 0; margin-bottom: 6pt }
P
{ font-family: Arial; font-size: 12pt; line-height:
120%; margin-top: 0; margin-bottom: 6pt }
TABLE
{ font-family: Arial; font-size: 12pt }
TBODY
{ font-family: Arial; font-size: 12pt }
SPAN
{ font-family: Arial; font-size: 12pt;
list-style-type: disc }
UL
{ font-family: Arial; font-size: 12pt;
list-style-type: disc }
</STYLE>
</HEAD>
<BODY>
</BODY>
</HTML>
Wird diese Stilvorlage von einem anderen Dokument verwendet, so
wird in diese der Befehl
<LINK REL="stylesheet" HREF="RenesFormate01.css" TYPE="text/css">
eingefügt. Dieser Befehl wird im Kopfteil (HEAD) untergebracht.
Wie das obige Beispiel verdeutlicht, besteht ein CSS aus zwei Teilen: einem Selektor, beispielsweise H1, und der Deklaration, die in geschweiften Klammern geschrieben wird. Die Deklaration wiederum besteht aus
zwei Teilen: den Eigenschaften, wie zum Beispiel Größe und Farbe, und
dem Wert (Tag), beispielsweise 14 pt und Rot.
Solche Deklarationen können vererbt werden (deshalb der Name
„cascading“). Wird beispielsweise für das <BODY>-Tag die Farbe per CSS
bestimmt, hat der <LI>-Tag automatisch die gleiche Farbe, wenn diese
dort nicht definiert ist.
Selbstverständlich könnten nun direkt im Quellcode Befehle eingegeben werden, die vom vorgegebenen Design abweichen:
<H1
style="letter-spacing:30;" >Überschrift</h1>
Die folgende Tabelle liefert die wichtigsten CSS-Befehle:
92
XML, HTML und XSL – die Ausgabe
Befehl
Bedeutung
weitere mögliche Angaben
font-family
Schriftart
Arial, Times New Roman etc.
font-size
Schriftgröße
numerischer Wert in pt (Punkt),
mm oder cm
color
Schriftfarbe
red, green, white usw. oder
HTML Farbangabe
Schrift
background-color
Hintergrundfarbe
font-variant
Schriftvariante
normal, small-caps
font-weight
Schriftgewicht
normal, bold, bolder, lighter
font-style
Schriftstil
normal, oblique, italic
float
Position des umfließenden Textes
left, right oder none, wenn Text
ein Element umfließen soll
text-align
Textausrichtung
left, right, center, justify (Blocksatz)
line-height
Zeilenabstand (Durchschuss)
numerischer Wert in pt (Punkt),
mm oder cm
text-decoration
Textgestaltung
underline, overline, linethrough, blink
word-spacing
Wortabstand
numerischer Wert in pt (Punkt),
mm oder cm
letter-spacing
Zeichenabstand
numerischer Wert in pt (Punkt),
mm oder cm
text-indent
Texteinrückung
numerischer Wert in pt (Punkt),
mm oder cm
text-transform
Textart
capitalize, uppercase, lowercase, none
vertical-align
vertikale Textausrichtung
baseline, sub, super, top, texttop, middle, bottom oder textbottom
margin-left
absoluter Abstand zum
linken Seitenrand
numerischer Wert in pt (Punkt),
mm oder cm
margin-right
absoluter Abstand zum
rechten Seitenrand
numerischer Wert in pt (Punkt),
mm oder cm
margin-bottom
absoluter Abstand zum
unteren Seitenrand
numerischer Wert in pt(Punkt)
mm oder cm
margin-top
absoluter Abstand zum
oberen Seitenrand
numerischer Wert in pt(Punkt)
mm oder cm
Link
fast alle CSS-Befehle anwendbar
Textgestaltung
Seitenränder
Links
A:link
Tabelle 3.1: Die wichtigsten CSS-Befehle
Style Sheets
93
Befehl
Bedeutung
weitere mögliche Angaben
A:visited
Besuchter Link
fast alle CSS-Befehle anwendbar
A:active
Angeklickter Link
fast alle CSS-Befehle anwendbar
A:hover
Link beim Überfahren mit
Maus
fast alle CSS-Befehle anwendbar
background
Hintergrundfarbe
red, green, white usw. oder
HTML-Farbangabe
background-image
Hintergrundbild
none, URL
background-repeat
Kachel
repeat, repeat-x, repeat-y, norepeat
border-top-width
Dicke der Rahmenlinie
thin, medium, thick oder
numerischer Wert
border-bottomwidth
Dicke der Rahmenlinie
thin, medium, thick oder
numerischer Wert
border-left-width
Dicke der Rahmenlinie
thin, medium, thick oder
numerischer Wert
border-right-width
Dicke der Rahmenlinie
thin, medium, thick oder
numerischer Wert
border-style
Rahmentyp
none, dotted, dashed, solid,
double, groove, ridge, inset,
outset
border-color
Rahmenfarbe
Farbname oder Hex.
padding-top
Tabellenabstand oben
Prozent oder numerischer Wert.
Bilder
Ränder
padding-bottom
Tabellenabstand unten
Prozent oder numerischer Wert.
padding-right
Tabellenabstand rechts
Prozent oder numerischer Wert.
padding-left
Tabellenabstand links
Prozent oder numerischer Wert.
width
Rahmenbreite
Auto, Prozent, numerischer Wert
height
Rahmenhöhe
Auto, Prozent, numerischer Wert
Tabelle 3.1: Die wichtigsten CSS-Befehle (Forts.)
Und sehr viel mehr gibt es zu XML auch nicht zu sagen. Die XML-Datei
sieht folgendermaßen aus:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet href="RenesFormate02.css" type="text/css"?>
<!DOCTYPE Artikel [
<!ELEMENT Artikel (Buch*)>
<!ELEMENT Buch (Nummer, Titel, Gruppe, Preis?)>
<!ELEMENT Nummer (#PCDATA)>
<!ELEMENT Titel (#PCDATA)>
<!ELEMENT Gruppe (#PCDATA)>
]>
<Artikel>
94
XML, HTML und XSL – die Ausgabe
<Buch>
<Nummer>12039</Nummer>
<Titel>Wie man mit einem Lachs verreist</Titel>
<Gruppe>Unterhaltung</Gruppe>
</Buch>
<Buch>
<Nummer>20048</Nummer>
<Titel>Baudolino</Titel>
<Gruppe>Unterhaltung</Gruppe>
</Buch>
</Artikel>
Über den Tag
<?xml-stylesheet href="RenesFormate02.css" type="text/css"?>
wird das Stylesheet „RenesFormate02.css“ eingebunden. Diese Zeile
wird auch „Verarbeitungsanweisung“ („Processing Instruction“) genannt. Der Speicherordner ist der gleiche wie derjenige, in dem sich die
XML-Datei befindet. Er kann absolut oder relativ sein (wie in diesem
Fall). Mit dem type ist die Art des Stylesheets gemeint – "text/css" entspricht CSS. Während in HTML ein internes Stylesheet möglich ist (vergleichbar mit internen DTD bei XML-Dokumenten), so muss bei XML
das Stylesheet außerhalb liegen.
Die CSS-Datei „RenesFormate02.css“ sieht dann folgendermaßen aus:
Nummer
{
font-family: Arial;
font-size: 40pt;
color: FF0000;
font-weight: bold;
margin-top: 0;
margin-bottom: 6pt
}
Titel
{
font-family: Times;
font-size: 14pt;
color:blue;
font-weight: bold;
}
Gruppe
{
font-family: Times;
font-size: 12pt;
list-style-type: disc
}
Style Sheets
95
Preis
{
font-family: Arial;
font-size: 12pt;
list-style-type: disc
}
Abbildung 3.1: An das XML-Dokument wird eine css-Datei gebunden.
Damit kann die Ausgabe gestaltet werden.
Im Unterschied zur CSS-Datei, die in HTML verwendet wird, müssen in
HTML die Stilklassen von HTML verwendet werden. In XML werden eigene Stilklassen benutzt: die Namen der XML-Elemente.
Die Formatierungen sind die gleichen wie in HTML, wie sie in obiger Tabelle beschrieben worden sind.
Will man die einzelnen Elemente untereinander stellen und nicht als
Fließtext hintereinander laufen lassen, so muss das Attribut
display: block;
hinzugefügt werden. Die css-Datei sieht dann wie folgt aus:
Nummer
{
display: block;
font-family: Arial;
font-size: 40pt;
color: FF0000;
font-weight: bold;
96
XML, HTML und XSL – die Ausgabe
margin-top: 0;
margin-bottom: 6pt
}
Titel
{
display: block;
font-family: Times;
font-size: 14pt;
color:blue;
font-weight: bold;
}
Gruppe
{
display: block;
font-family: Times;
font-size: 12pt;
list-style-type: disc
}
Preis
{
display: block;
font-family: Arial;
font-size: 12pt;
list-style-type: disc
}
Es können auch mehrere Selektoren gruppiert werden. Dazu werden sie
durch ein Komma getrennt, hintereinander aufgelistet:
Nummer
{
display: block;
font-family: Arial;
font-size: 40pt;
color: FF0000;
font-weight: bold;
margin-top: 0;
margin-bottom: 6pt
}
Titel, Gruppe
{
font-family: Times;
font-size: 14pt;
color:blue;
font-weight: bold;
}
Preis
Style Sheets
97
{
font-family: Arial;
font-size: 12pt;
list-style-type: disc
}
Abbildung 3.2: Das gleiche Dokument – anders gestaltet
3.1.1 Farben
In den letzten Beispielen wurde sowohl die Farbe „red“ als auch
„FF0000“ verwendet. Es stellt sich die Frage, welche Farben zur Verfügung stehen und wie sie ausgedrückt werden.
Alle Farben, die im Internet dargestellt werden, setzen sich aus den drei
Grundfarben Rot, Grün und Blau zusammen. Dieses additive Farbmodell wird überall bei Ausgabequellen mit Licht verwendet: Bildschirm,
Beamer, LCD-Display, ... Dieses Modell wird RGB-Farbmodell genannt:
red, green und blue.
Jede Farbe kann einen Wert zwischen 0 und 255 annehmen. Nimmt man
den höchsten Wert, erhält man die reine Farbe. So ist Rot dann 255 rot, 0
grün, 0 blau. Weiß ist 255, 255, 255 und Schwarz das Gegenteil 0, 0, 0.
Eine Farbe, hier Rot, wird in der Regel wie folgt angegeben:
color="#FF0000"
98
XML, HTML und XSL – die Ausgabe
Eigentlich müsste doch eine neunstellige Zahl dastehen. Allerdings werden die Werte hexadezimal angegeben. Jedoch unterstützt jedes bessere
HTML-Tool die Umwandlung. In den meisten HTML-Editoren können
Sie direkt aus den Farben auswählen und bekommen dann die Hexadezimalzahlen.
Dezimal
0
1
2
...
9 10
11
12
13
14
15
16
17
18
...
255
Hexadezimal
0
1
2
...
9 A
B
C
D
E
F
10
11
12
...
FF
Der Aufbau der Farbnummer ist im Hexadezimalsystem immer wie
folgt:
#000000
Die ersten beiden Ziffern stehen für den Rot-Anteil, die nächsten für
den Grün-Anteil und die hinteren beiden für den Blau-Anteil.
Farben können auch über ihre englischen Namen angegeben werden.
Achtung: Obwohl Browser eine große Anzahl von vordefinierten Farbnamen unterstützen, können in einer css-Datei lediglich 16 Farben verwendet werden:
Farbname
Bedeutung
Farbname
Bedeutung
Aqua
Blaugrün
Navy
Marineblau
Black
Schwarz
Olive
Olivgrün
Blue
Blau
Purple
Violett
Fuchsia
Fuchsin
Red
Rot
Gray
Grau
Silver
Silber
Green
Grün
Teal
Braun
Lime
Zitronengelb
White
Weiß
Maroon
Kastanienbraun
Yellow
Gelb
Tabelle 3.2: Die vom CSS-Standard unterstützten Farben
Die nächste Abbildung zeigt einen HTML-Editor, bei welchem lediglich
eine Farbe angeklickt werden muss. Der Editor berechnet den zugrunde
liegenden Farbwert und fügt ihn in das HTML-Dokument ein. Die folgende Abbildung zeigt den HTML-Editor Phase 5, der kostenlos von der
Seite http://www.meybohm.de heruntergeladen werden darf.
Style Sheets
99
Abbildung 3.3: Viele HTML-Editoren helfen bei der Umwandlung der Farbe in den
hexadezimalen Code (hier: rechts außen)
3.1.2 Klassen
Sollen nicht alle Elemente einer Liste gleich gestaltet werden, so können
sie mit Hilfe des Attributs CLASS formatiert werden. Von der oben verwendeten css-Datei werden die Elemente Titel und Gruppe um zwei
Klassen („Rot“ und „Schwarz“) erweitert:
Nummer
{
display: block;
font-family: Arial;
font-size: 40pt;
color: FF0000;
font-weight: bold;
margin-top: 0;
margin-bottom: 6pt
}
Titel, Gruppe
{
font-family: Times;
font-size: 14pt;
font-weight: bold;
}
.Blau
{
color:blue;
}
.Schwarz
{
color:black;
}
100
XML, HTML und XSL – die Ausgabe
In das Tag werden nun das Attribut CLASS und seine Werte („Blau“ oder
„Schwarz“) eingefügt:
<Artikel>
<Buch>
<Nummer>12039</Nummer>
<Titel CLASS="Blau">Wie man mit einem Lachs verreist</Titel>
<Gruppe CLASS="Blau">Unterhaltung</Gruppe>
</Buch>
<Buch>
<Nummer>20048</Nummer>
<Titel CLASS="Schwarz">Baudolino</Titel>
<Gruppe CLASS="Schwarz">Unterhaltung</Gruppe>
</Buch>
</Artikel>
Wenn Sie mit einer DTD arbeiten, so beachten Sie, dass Sie diese ebenfalls erweitern müssen:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet href="RenesFormate04.css" type="text/css"?>
<!DOCTYPE Artikel [
<!ELEMENT Artikel (Buch)*>
<!ELEMENT Buch (Nummer, Titel, Gruppe, Preis)>
<!ELEMENT Nummer (#PCDATA)>
<!ELEMENT Titel (#PCDATA)>
<!ATTLIST Titel CLASS CDATA #IMPLIED>
<!ELEMENT Gruppe (#PCDATA)>
<!ATTLIST Gruppe CLASS CDATA #IMPLIED>
]>
Die Regeln zum Erstellen einer Klasse sind offensichtlich: In der cssDatei wird vor den Namen ein Punkt gestellt. Sie gehört zu der Klasse,
die ihr direkt vorangestellt ist. Das Attribut CLASS kann nun in den entsprechenden Elementen verwendet werden, muss allerdings in der DTD
deklariert werden.
Style Sheets
101
Abbildung 3.4: Das Dokument wird mit Klassen gestaltet
3.1.3 Bilder
Befinden sich im XML-Dokument Bilder, das heißt existiert dort ein Tag
<IMG>, so muss dieser mit dem Attribut versehen werden, welches die
Quelle des Bildes angibt:
<Buch>
<Nummer>123</Nummer>
<HTML:IMG SRC="Bildband_Wolff.gif"></HTML:IMG>
<Titel>Wolff</Titel>
<Gruppe>Autobiografie</Gruppe>
</Buch>
<Buch>
<Nummer>124</Nummer>
<HTML:IMG SRC="Bodycheck.gif"></HTML:IMG>
<Titel>Bodychek</Titel>
<Gruppe>Ratgeber</Gruppe>
</Buch>
Der Namensraum wird selbstverständlich im Wurzelelement deklariert:
<Artikel xmlns:HTML="http://www.w3.org/TR/REC-html40">
In den Processing-Instructions wird erneut auf eine css-Datei verwiesen:
<?xml-stylesheet href="RenesFormate05.css" type="text/css"?>
102
XML, HTML und XSL – die Ausgabe
Dort wird deklariert:
Nummer
{
display: block;
font-family: Arial;
font-size: 40pt;
color: FF0000;
font-weight: bold;
margin-top: 0;
margin-bottom: 6pt
}
Titel, Gruppe
{
font-family: Times;
font-size: 14pt;
font-weight: bold;
position: relative;
top: -55
}
Die Veränderung der Position war nötig, damit der Text ordentlich neben den Bildern zu stehen kommt.
Abbildung 3.5: Ein XML-Dokument mit Bildern
Style Sheets
103
Herunterladen