fixxion freeware - Quelltext

Annahme ₪ Dichtung ₪ Fantasie ₪ Fiktion ₪ Inspiration ₪ Märchen ₪ Vorstellungskraft
Es gibt für Gewalt keine Rechtfertigung. Man kann immer nach einem anderen Weg suchen.

₪ XML/XSL(T)

XML/XSL Tutorial

Content ManagementDokumenttypdefinitionLayoutDatenimport

Content Management mit XML-Datenstrukturen

Mit XML ist es möglich, Listen komfortabel durch Hinzufügen, Entfernen oder Ändern von Einträgen zu bearbeiten.
Die Einträge können einfach sein oder beliebig verschachtelte Elementstrukturen enthalten.

Um Struktur und Inhalt transparent zu machen, ist es angeraten, eine Dokumenttypdefinition (DTD oder XSD) zu deklarieren.

Ein XSL-Stylesheet legt fest, mit welchem Layout die Elementstruktur im Browser dargestellt wird.
Dabei kann durch die XSL-Transformation zum Beispiel eine neue HTML-Seite ausgegeben werden.
Eine solche, dynamisch generierte Seite kann auch Scripts enthalten wie zentrale Layoutdeklarationen (Cascading Stylesheet/CSS), JavaScript oder anderes.

Zur Vereinheitlichung sollte XHTML statt HTML benutzt werden. Das bedeutet eine etwas veränderte Syntax, denn der gesamte HTML-Code muss dem XML-Schema entsprechen.
1. Bei XML wird zwischen Groß- und Kleinschreibung unterschieden.
2. Inhaltsleere Elemente sind bei XML nicht erlaubt. Anstelle von <br> muss beispielsweise <br /> notiert werden.
Das sind die wesentlichen Unterschiede. Einige weitere Besonderheiten ergeben sich aus der XML-Spezifikation.

Damit kein Wirrwar ("Tag-Suppe") entstehen kann, wird hier das strikte XHMTL-Schema eingehalten, bei dem die Verwendung von Frames und anderes verboten ist, was bei frameset oder transitional erlaubt wäre.

Strukturierte Daten
XML
Dokumentypdefinition
DTD (optional)
Transformation
XSL(T)
Darstellung
(X)HTML
Cascading Stylesheet
CSS (optional)

Spezifikation der Datenstruktur durch Dokumentypdefinition (DTD)

Die Dokumentypdefinition legt den Aufbau der Elementstruktur und die Attribute der einzelnen Elemente fest. Im Vergleich zur objektorientierten Programmierung könnte man die Elemente auch als Objektklassen bezeichnen und die Attribute als deren Eigenschaften.

Die DTD ist nicht zwingend erforderlich, sondern wird für die Dokumentation der Datenstruktur verwendet. Die Spezifikation wird vom Browser auch nur bedingt zur Gültigkeitsprüfung (Validation) der XML-Struktur genutzt. Eine einfache Validation der XML-Datei ist möglich, wenn man versucht, diese im Browser anzuzeigen. Der Browser kann auch erweiterte Meldungen für formale und Syntaxfehler bereitstellen.

Das in diesem Beispiel beschriebene Suchregister soll beliebig groß sein. Alle darin enthaltenen Elemente sollen bestimmte Attribute haben können. Jedes Element beschreibt einen Verweis.
Strukturaufbau und Inhalt der XML-Daten für das Suchregister sind in der Datei register.dtd spezifiziert.
<!ELEMENT reg_page (reg_entry?)*
>
<!ATTLIST reg_page
timestamp CDATA #IMPLIED
>
<!ELEMENT reg_entry (#PCDATA)
>
<!ATTLIST reg_entry
name      CDATA #REQUIRED
href      CDATA #REQUIRED
rubric    CDATA #IMPLIED
timestamp CDATA #IMPLIED
>
Hier werden 2 Elemente und ihre Attribute beschrieben. Jede Deklaration wird in spitze Klammern < ... > eingefasst und beginnt entweder mit !ELEMENT oder !ATTLIST.

Zuerst kommt das Wurzelelement der XML-Struktur reg_page, welches das gesamte darzustellende Suchregister beschreibt.
Die Angabe in Klammern ( ... ) beschreibt die Elemente innerhalb des Wurzelelements, also die Einträge des Suchregisters. Sie müssen vom Typ reg_entry sein.
Das Fragezeichen ? gibt an, dass dieses Element auch ganz fehlen kann.
Der Stern * hinter der Klammer bedeutet, dass deren Inhalt beliebig oft vorkommen darf.

Darauf folgt die Liste der Attribute des Wurzelelements, die nicht vorhanden sein muss.
Attributlisten können beliebig viele Attribute enthalten.
Für jedes Attribut ist eine Typangabe erforderlich. In diesem Beispiel wird immer der Typ CDATA verwendet, es sind aber auch andere Typen erlaubt.
Zusätzlich muss bestimmt werden, ob das Attribut erforderlich(#REQUIRED) oder optional (#IMPLIED) ist. Die Angabe #FIXED ist auch erlaubt, wird aber selten benutzt.
In diesem Fall gibt es in der Liste nur einen Eintrag, und zwar den Zeitstempel des Suchregisters timestamp, der oben auf der HTML-Seite ausgegeben werden soll. Der Parameter CDATA gibt an, dass es sich um eine Zeichenfolge (Character DATA) handelt, und #IMPLIED bedeutet, dass dieses Attribut auch fehlen kann.

Als nächstes kommt die Deklaration des Elements reg_entry, also eines Eintrags des Suchregisters.
Das Schlüsselwort (#PCDATA) gibt an, dass sein Inhalt dem Typ Parsed Character Data entspricht.

Am Ende ist die Liste der Attribute des Elements reg_entry deklariert, also der Eigenschaften eines Registereintrags.
Die Registereinträge haben 4 Attribute: name und href sind erforderlich, da es sich um Titel und URL des mit dem Eintrag verknüpften Verweises handelt. rubric und timestamp müssen nicht bei jedem Eintrag vorkommen, Rubrik und Zeitstempel können also auch fehlen.
<?xml version="1.0" encoding="iso-8859-1"?>

<!DOCTYPE reg_page SYSTEM "./register.dtd">

<?xml-stylesheet type="text/xsl" href="./register.xsl" ?>

<reg_page
timestamp="2004-08-25">
<reg_entry
  name="Alien"
  href="./texts/alien.htm"
  rubric="Text"
  timestamp="2000-10-03">Über Außerirdische um uns herum
</reg_entry>
<reg_entry
  name="BNS · Barry, Norucalem und Sberk"
  href="./bns/chapter000.htm"
  rubric="BNS"
  timestamp="2004-2001">Chronik einer fantastischen Rollenspielrunde
    (etwa 14-tägig)
</reg_entry>

...

</reg_page>
Als erstes kommt der XML-Header mit der Angabe, dass die westeuropäische Zeichentabelle benutzt werden soll. Umlaute und Sonderzeichen sind deshalb erlaubt.
Dann folgt die Angabe des verwendeten Dokumenttyps. Dort steht, dass die XML-Struktur dem in der Datei ./register.dtd spezifizierten Element reg_page entsprechen soll.
Als drittes wird das zu verwendende XSL-Stylesheet angegeben.
Schließlich folgt die eigentliche XML-Datenstruktur.

Layout-Schablonen mit XSL-Stylesheets

Eine XML-Datei enthält immer nur Daten, jedoch keine Layoutinformationen. Dies ist durch Verwenden von XSL-Stylesheets möglich.
<?xml-stylesheet type="text/xsl" href="URL" ?>
Die XSL-Stylesheet-Datei mit der angegebenen URL wird verwendet, um die XML-Daten vor der Ausgabe im Browser zu transformieren. Das Ergebnis einer XSL-Transformation kann beispielsweise eine HTML-Seite oder eine umgewandelte XML-Struktur sein.

XSLT stellt dazu die Transformationsmethoden bereit.
Für die Adressierung von Daten im XML-Strukturbaum wird die Syntax von XPATH benutzt, welche der zur Pfadangabe bei Dateien und Verzeichnissen verwendeten sehr ähnlich ist.

XSL-Beispiel:
<?xml version="1.0" encoding="iso-8859-1"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml" >

...

<xsl:template match="/">                                  <!-- Register... //-->

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
...
</head>

<body>
...
<xsl:value-of select="reg_page/@timestamp"/>
...
</body>

</html>

</xsl:template>                                           <!-- ...Register //-->

</xsl:stylesheet>
In diesem Beispiel wird auf einer HTML-Seite das Datum des Registers ausgegeben.

Ein XSL-Stylesheet muss auch das XML-Format haben. Es beginnt daher mit dem XML-Header.
Das Wurzelelement des XML-Baums muss immer dem Typ xsl:stylesheet entsprechen. Für eine korrekte Darstellung mit verschiedenen Webbrowsern sind hier beide Namensraumangaben erforderlich!

Mit dem XSL-Befehl <xsl:template match="/"> wird die Transformation für das Wurzelelement des XML-Baums implementiert, in diesem Beispiel also für das ganze Suchregister.

Es wird eine XHTML-Seite dargestellt. Die Syntax unterscheidet sich von HTML lediglich beim <html>-Tag durch die zusätzliche Namespace-Angabe. Davon abgesehen kann HTML ohne weitere Einschränkungen verwendet werden.
Nach den Kopfangaben <head> ... </head> wird auf der Seite mit <xsl:value-of select="reg_page/@timestamp"/> der Wert des Attributs timestamp vom Element reg_page angezeigt.

Datenimport

Die Datei mit den Daten
In dieser Datei sind ausschließlich strukturierte Daten gespeichert. Es gibt weder Layout-Angaben noch irgendwelche Anweisungen, die sich auf die Transformation beziehen.
Beispieldatei bookdata.xml:
<?xml version="1.0" encoding="iso-8859-1"?>

<books
timestamp="2005-11-28">
<book_entry rubric="tales">
  <book_author>Gebrüder Grimm</book_author>
  <book_title>Grimms Märchen</book_title>
  Von den Autoren gesammelte Volksmärchen
</book_entry>
<book_entry rubric="tales">
  <book_author>überliefert</book_author>
  <book_title>Märchen aus 1001 Nacht</book_title>
  Scheherazade rettet sich Nacht für Nacht durch die Erzählung eines Märchens
  das Leben
</book_entry>
</books>
Die aufrufende Datei
Diese Datei enthält die Angabe der Datenquelle im XML-Format und die Anweisung zur Transformation.
Beispieldatei booklist.xml:
<?xml version="1.0" encoding="iso-8859-1"?>

<?xml-stylesheet type="text/xsl" href="./booklist.xsl" ?>

<book_source source="./bookdata.xml" />
Die Transformation der Daten
Die Darstellung der Daten im HTML-Format wird durch die XSL-Transformation geregelt.
Beispieldatei booklist.xsl:
<?xml version="1.0" encoding="iso-8859-1"?>

<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns="http://www.w3.org/1999/xhtml" >

<xsl:variable name="book_list" select="document(/book_source/@source)/books" />

<xsl:template match="/">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<title>Bücherliste</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<meta name="author" content="fixxion freeware" />
<link rel="stylesheet" type="text/css" href="../styles.css" />
</head>

<body>
<h1>Bücherliste</h1>
<hr />
<div>
  Zuletzt bearbeitet: <xsl:value-of select="$book_list/@timestamp"/>
</div>
<hr />
<div>
  <dl>
<xsl:for-each select="$book_list/book_entry">
<xsl:sort
  select="./book_title" order="ascending" data-type="text" lang="de"/>
    <dt>
      <strong><xsl:value-of select="./book_title" /></strong>,
      <xsl:value-of select="./book_author" />
    </dt>
    <dd>
      <i><xsl:value-of select="./book_note" /></i>
    </dd>
</xsl:for-each>
  </dl>
</div>
</body>

</html>

</xsl:template>

</xsl:stylesheet>
Erläuterungen
Durch Angabe des Zeichensatzes ist es wohl möglich, Zeichenfolgen mit Umlauten in XML-Datenstrukturen zu speichern.
Dies gilt für den Textinhalt von Elementen, aber nicht für Werte von Attributen. Hier müssen alle Sonderzeichen codiert sein.

Für mögliche Werte von Attributen sollten immer aufzählbare Datentypen verwendet werden.
Mögliche Attributwerte sind Textdarstellungen von ganzen Zahlen. Konstantenbezeichner, z.b. von Aufzählungstypen, kommen auch in Frage. Als Werte kommen außerdem Textdarstellungen von Gleitkommazahlen in Betracht. Bei der Textdarstellung muss die Kodierung von Dezimal- und Tausendtrennzeichen beachtet werden.
Im Beispiel werden eine Datumsangabe und ein Aufzählungstyp als Attributwerte gespeichert.

Frei vom Benutzer definierbare Zeichenfolgen dürfen nicht als Werte von Attributen verwendet werden.
Im Beispiel werden die Namen der Autoren, die Buchtitel und die Beschreibungen deshalb als Inhalt von Elementen gespeichert.
Dies sollte schon beim Entwurf der Datenstruktur berücksichtigt werden.

Das Zeichen ₪ (Nakwách) ist ein Symbol der Hopi für Brüderlichkeit unter den Menschen.
Es wird gebildet, wenn man sich die Hände reicht.