<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0.1 Transitional//EN">
<html>
  <head>
    <title>Benutzen von XML und XSLT zum Bauen von LinuxFocus.org(/Nederlands)</title>
  </head>
  <body>
    <h1>Benutzen von XML und XSLT zum Bauen von LinuxFocus.org(/Nederlands)</h1>

    <h4>ArticleCategory: [Artikel Kategorie]</h4>
    Applications

    <h4>AuthorImage:[Bild des Autors]</H4>
    <IMG src="../../common/images/EgonWillighagen.jpg" alt="[Photo of the Author]" height="102" width="79">
 
    <h4>TranslationInfo:[Author and translation history]</h4>
    <P>original in en <A href="mailto:egonw@linuxfocus.org">Egon Willighagen</A></P>
<P>en to en <A href="mailto:sherm_pbody@yahoo.com">Lorne Bailey</A></P>
 <P>en to de <A href="mailto:katja@linuxfocus.org">Katja Socher</A></P>
 
    <h4>AboutTheAuthor:[&Uuml;ber den Autor]</h4>
    <P>Egon erhält dieses Jahr seinen Masters und wird dann mit seiner
    Doktorarbeit in Chemie beginnen. Ansonsten mag er Basktball
    sowie LinuxFocus und Linux im allgemeinen.
 
    <h4>Abstract:[Zusammenfassung]</h4>
      Dieser Artikel enthält die Präsentation, die Egon während des Libre
      Software Meetings in Bordeaux gegeben hat. Er erklärt die XML Datenbank,
      die für die automatische Generierung der LinuxFocus.org(/Nederlands)
      Webseite benutzt wird.
 
    <h4>ArticleIllustration:[Titelbild des Artikels]</h4>
    <IMG src="../../common/images/illustration206.jpg" alt="[Illustration]" hspace="10" width="102" height="38">
 
    <H4>ArticleBody:[Der eigentliche Artikel]</H4>
    
    <h2>Einführung</h2>

    <p>Das für die Dokumentations- und Übersetzungsverwaltung benutzte System
      beim LinuxFocus Projekt besteht aus einigen ASCII Dateien, einschließlich
      <i>resdb.txt</i>, <i>issuedb.txt</i> und <i>maindb.txt</i>.
      Diese Dateien haben ein festes Format und sie werden benutzt, um Webseiten
      zu generieren. Sie sind jedoch schwierig zu erweitern und die getrennte
      Natur der Daten macht es schwierig, alle Informationen, die zu einem
      Artikel verfügbar sind, zu verwalten.
    </p>

    <p>
      LinuxFocus hat nicht viel Webinhalt automatisch generiert als ich mit der
      neuen Datenbank anfing. Als Redaktuer des holländischen Teams wollte ich
      unbedingt die index.html Dateien auf der Webseite dynamisch generieren.
      Jedes Mal einige HTML Dateien editieren zu müssen, wenn ein neuer Artikel
      übersetzt war, verschlang eine Menge Zeit und verursachte viele
      zerbrochene Links. Deshalb wollte ich ein neues System, zu dem ich
      Informationen leicht hinzufügen konnte und von dem aus ich auf einfache Weise
      Indexseiten für die Webseite erzeugen konnte. Ich begann im Sommer 2000
      daran zu arbeiten.
    </p>

    <p>Die Wahl für XML war ein bißchen willkürlich. Es gab Vorschläge, eine
    relationale Datenbank zu benutzen, aber ich hatte Erfahrung in XML und
    bevorzugte ein System mit textbasierten Dateien. Es zeigte sich bald, daß
    ein neues Nummerierungsschema nützlich sein würde, da die Datenbank dann
    einen ID Typ benutzen konnte, statt der 2 oder 3 Schematas, die dann in
    Gebrauch waren. Guido Socher machte all die Umnummerierungen, was einiges an
    Arbeit war (vielen Dank!).
    </p>

    <p>Die Document Type Definition (DTD) war bereits in Entwicklung und ein
    bißchen Inhalt war für Testzwecke in der Datenbank. Mit dem neuen
    einheitlichen Nummerierungsschema war die Zeit gekommen, um die Datenbank
    mit Inhalt zu laden. Nachdem ungefähr 20 Artikel hinzugefügt worden waren,
    wurde klar, daß dies ein enormes Projekt war. Es war möglich, Skripte zu
    schreiben, um die alten Dateien zu benutzen, aber nicht alle Informationen,
    die die neue Datenbank aufnehmen konnte, waren verfügbar und, wie erwähnt,
    waren die verfügbaren Informationenn über mehrere Dateien verteilt.
    Glücklicherweise kam Floris Lambrechts dazu und ich habe ihm tief zu danken
    für das Hinzufügen des meisten Inhalts zu der Datenbank. Ohne seine Hilfe
    wäre das System nicht das, was es heute ist.
    </p>

    <p>Mit dem neuen Format kam die Möglichkeit, neue Informationen
    hinzuzufügen. Und während des vergangenen Jahres wurden einige neue Arten von
    Daten zu der Datenbank hinzugefügt. Frühe Erweiterungen waren eine Tabelle
    mit Autoren, Übersetzern, Editoren und anderen Leuten, die bei LinuxFocus
    mitmachen sowie Dateispeicherorte. Der Grund für das Hinzufügen des letzten
    war, daß es seit Beginn von Linuxfocus einige Dateibenennungsschemata gab.
    Während der Umnummerierung wurden sie auf zwei Schemata reduziert. Einige
    Dateien benutzen Server Side Includes und benutzen die Erweiterung .shtml,
    während ältere Artikel die Erweiterung .html benutzen. Der &lt;file&gt; tag
    kann benutzt werden, um eine Standardeinstellung zu überschreiben. (Die
    aktuelle Standardeinstellung benutzt das Format 
      "article" + article number (Artikelnummer) + ".shtml". Dies kann ein
      optionales ".meta" enthalten für den Fall, daß die Datei im meta Format
      von LinuxFocus vorliegt.)
    </p>

    <p>Jetzt, wo die Datenbank eine kritische Masse erreicht hatte, konnte ich
    schließlich die Performance der Software, die ich geschrieben hatte,
    überprüfen. Die jetzigen XSLT Stylesheets sind nicht die erste
    Implementation. Voraus ging ein auf Perl basierender Code. Aber mit der
    wachsenden Größe der Datenbank wurde die Performance wichtig. Der erste
    Versuch war einfach nicht gut genug. Aber bevor ich die Werkzeuge erkläre,
    werde ich das Datenbankformat erklären.
    </p>

    <h2>Die Document Type Definition</h2>

    <p>XML ist zuerst einmal eine Syntaxspezifikation für markup Sprachen.
      XML definiert, wie das Markup aussehen soll. Die Syntax beschreibt die
      Folge von Zeichen, die in "gut geformten" XML Dokumenten erlaubt sind. Es
      erklärt, daß ein Dokument ein Wurzelelement hat und daß ein Element aus
      einem start
      tag, Inhalt  (Text, Kindelemente oder beides) besteht und einem Endetag.
      Diese tags bestehen aus einem "&lt;" Zeichen gefolgt von einem Namen und am
      Ende einem "&gt;" Zeichen. 
      Der Endetag muß noch ein "/" vor dem Namen stehen haben. Leere tags, wie
      HTML's &lt;br&gt;, haben ein "/" nach dem Namen. 
      Ein start tag darf Attribute enthalten und diese haben auch eine bestimmte
      Syntax. 
      XML tags sehen so aus:     
    </p>

<pre>
&lt;greeting&gt;Hello, world!&lt;/greeting&gt;
</pre>
oder für einen leeren tag
<pre>
&lt;br/&gt;
</pre>

    <p>Außer Syntax enthalten Sprachen auch Semantik. Diese beschreibt, wie sich
    bestimmte Elemente zueinander verhalten. Die Semantik von HTML erklärt, daß der
    &lt;body&gt; tag im &lt;html&gt; Element enthalten sein soll und nicht
    umgekehrt. Die Semantik beschreibt auch, daß das &lt;img&gt; Element leer ist
    genauso wie das &lt;br&gt; Element.
      Wenn diese Semantik in einer formalen Schreibweise gegeben wird, kann sie mit
      einem Programm analysiert und dazu benutzt werden, die Dokumente, die
      diese Semantik benutzen, zu <i>validieren</i>. Eine dieser formalen Schreibweisen
      wird Document Type
      Definition, oder kurzr DTD, genannt. Wenn ein Dokument den Validationsprozess
      überstanden hat, wird es ein <i>wahres</i> Dokument genannt. Man muß mit XML sehr
      aufpassen, da seine Überprüfung sehr strikt ist.
    </p>

    <p>Jetzt, wo wir wissen, was eine DTD ist, laßt uns einen Blick auf die 
    <a href="../../common/src/article206/xml/dtd/lfdb.dtd">XML
    Datenbank DTD von LinuxFocus</a> werfen. Für mehrere der Spezifikationen werden wir
    ein Beispiel geben. Beim Untersuchen dieser Beispiele wirst du eine Idee davon
    bekommen, wie die Informationen in der XML Datenbank von LinuxFocus erhalten werden. 
    </p>

    <h2>&lt;database&gt;</h2>

    <p>Das Wurzelelement in der LinuxFocus XML Datenbank oder eine ihrer Erweiterungen 
    oder
    Lokalisationen ist das &lt;database&gt; Element.
    </p>

    <pre>
&lt;!ELEMENT database    (themes?, persons?, issues?, articles?)&gt;
    </pre>
  
    <p>Zuerst beachte, daß das "?" bedeutet, daß das Kindelement 0 oder einmal auftreten 
    darf.
    Auf diese Weise kann die Datenbank Informationen über die Themen, Personen, Ausgaben 
    und 
    Artikel
    von LinuxFocus haben. Da dies sehr eindeutig ist, gehe ich jetzt zu einem 
    interessanteren Beispiel.
    </p>

    <h2>&lt;themes&gt;</h2>

    <p>Die Themen sind innerhalb des &lt;themes&gt; Elements enthalten, die ein 
    Kindelement
    &lt;database&gt; sind. Jedes Thema hat eine eigene ID, einen Titel und optional eine
    Zusammenfassung und ein Bild.
    </p>

    <pre>
&lt;!ELEMENT themes      (theme+)&gt;
  &lt;!ELEMENT theme       (title*, desc?, img?)&gt;
    &lt;!ELEMENT title       (#PCDATA)&gt;
    &lt;!ELEMENT desc       (#PCDATA)&gt;
    &lt;!ELEMENT img         (EMPTY)&gt;
    </pre>

    <p>Einige dieser Elemente müssen Attribute besitzen. Sie werden auch in der DTD 
    angegeben.
    Jeder textliche Inhalt ist in einem Element mit dem 
      xml:lang Attribut enthalten. Der Wert dieses Attributs kann jedes Zeichen sein,
       daß konform
      zum  <a href="http://www.everything2.org/index.pl?node_id=781276">ISO 3166 
      Standard</a> für
      den Ländercode ist. 
      Beispiele sind
      "en", "fr" und "nl". Beide Attribute, das id und  das xml:lang Attribut sind in der 
      Original
      XML Spezifikation spezifiziert und Teil der XML Syntax.
    </p>

    <pre>
&lt;!ATTLIST theme       id            ID            #REQUIRED&gt;
&lt;!ATTLIST title       xml:lang      NMTOKEN       #REQUIRED&gt;
&lt;!ATTLIST desc        xml:lang      NMTOKEN       #REQUIRED&gt;
&lt;!ATTLIST img         src           CDATA         #REQUIRED&gt;
    </pre>

    <p>Eine Beispieldatenbank sieht z.B. so aus::
    </p>

    <pre>
&lt;database&gt;
  &lt;themes&gt;
    &lt;theme id="hw"&gt;
      &lt;title xml:lang="en"&gt;Hardware&lt;/title&gt;
      &lt;img src="Hardware.jpg"/&gt;
    &lt;theme&gt;
  &lt;themes&gt;
&lt;/database&gt;
    </pre>

    <h2>&lt;issues&gt;</h2>

    <p>Die Ausgaben sind immer im &lt;issues&gt; Element enthalten. Wie die Themen so hat 
    auch jede
    Ausgabe eine eigene ID.
    </p>

    <pre>
&lt;!ELEMENT issues      (issue+)&gt;
  &lt;!ELEMENT issue       (title+, published?, file*)&gt;
    &lt;!ELEMENT title       (#PCDATA)&gt;
    &lt;!ELEMENT published   (EMPTY)&gt;
    &lt;!ELEMENT file        (#PCDATA)&gt;
    </pre>

    <p>Das Element &lt;published&gt; markiert schon veröffentlichte Ausgaben. Die nächste 
    Ausgabe
    und die SomeLanguage2Eng pseudo Ausgaben enthalten dieses Element nicht. Das
    &lt;title&gt; Element hat wiederum ein @xml:lang Attribut. Das &lt;file&gt;
    Element bedeutet das Verzeichnis, in dem sich die Ausgabe befindet. Es darf nicht auf 
    index.html zeigen, da es dazu benutzt wird, um den Ort im Dateisystem zu bestimmen.

    <p>Ein Beispiel (beachte, daß wir das @code Attribut zum Sortieren benutzen):

<pre>
    &lt;issue id="ToBeWritten" code="999996"&gt;
      &lt;title xml:lang="en"&gt;Not yet written articles&lt;/title&gt;
    &lt;/issue&gt;
    &lt;issue id="September2001" code="200109"&gt;
      &lt;title xml:lang="en"&gt;September2001&lt;/title&gt;
    &lt;/issue&gt;
</pre>

    <h2>&lt;persons&gt;</h2>

    <p>Informationen über Autoren und Übersetzer sind in den 
    &lt;person&gt; Elementen gespeichert. Jede Person muß eine eigene ID besitzen.

    <pre>
 &lt;!ELEMENT persons (person+)&gt;
 &lt;!ELEMENT person 
              ((name|email)*,(homepage|nickname|desc|team)*)&gt;
 &lt;!ELEMENT email (#PCDATA)&gt;
 &lt;!ELEMENT name (#PCDATA)&gt;
 &lt;!ELEMENT homepage (#PCDATA)&gt;
 &lt;!ELEMENT nickname (#PCDATA)&gt;
 &lt;!ELEMENT desc (#PCDATA|%html-els;)*&gt;
 &lt;!ELEMENT team EMPTY&gt;
    </pre>

    <p>Jede Person kann die folgenden Informationen besitzen: einen Namen, eine 
    Emailadresse (oder
    mehrere), Homepage(s) und Spitznamen. Wenn die Person auch zum Übersetzerteam gehört, 
    fügen wir
    ein &lt;team&gt; Element hinzu. 
    Zum Beispiel bedeutet die folgende Zeile im &lt;person&gt; Element, daß Floris zum
    holländischen Team &lt;team xml:lang="nl"/&gt; gehört.
    Schließlich kann jede Person eine Beschreibung haben, die z.B. zusätzliche Weblinks 
    enthält.

    <p>Ein Beispiel:

<pre>
    &lt;person id="nl-ew"&gt;
      &lt;name&gt;Egon Willighagen&lt;/name&gt;
      &lt;email&gt;egonw@linuxfocus.org&lt;/email&gt;
      &lt;team xml:lang="nl"/&gt;
    &lt;/person&gt;
</pre>

    <h2>&lt;articles&gt;</h2>

    <p>Die Artikel sind natürlich der interessanteste Teil der Datenbank.

    <pre>
  &lt;!ELEMENT articles    (article+)&gt;
    &lt;!ELEMENT article     (title+, 
        (file|personref|abstract|issueref|themeref|
         nometa|nohtml|translation|proofread)*)&gt;
      &lt;!ELEMENT abstract    (#PCDATA)&gt;
      &lt;!ELEMENT nohtml      EMPTY&gt;
      &lt;!ELEMENT nometa      EMPTY&gt;
      &lt;!ELEMENT translation 
                   (personref*, (reserved|finished|proofread)*)&gt;
      &lt;!ELEMENT reserved    (#PCDATA)&gt;
      &lt;!ELEMENT finished    (#PCDATA)&gt;
      &lt;!ELEMENT proofread   (personref*, (reserved|finished)*)&gt;
&lt;!ATTLIST article     id            ID            #REQUIRED
                      xml:lang      NMTOKEN       #IMPLIED
                      type          (article|coverpage)
                                                  "article"
                      next          IDREF         #IMPLIED
                      prev          IDREF         #IMPLIED&gt;
&lt;!ATTLIST file        xml:lang      NMTOKEN       #REQUIRED
                      type          (target|meta) "target"&gt;
&lt;!ATTLIST translation from          NMTOKEN       #REQUIRED
                      to            NMTOKEN       #REQUIRED&gt;

    </pre>

    <p>Jeder Artikel hat zumindestens einen Titel, einen für jede Sprache. Das
    &lt;file&gt; Element kann dazu benutzt werden, um die Speicheradresse des Artikels 
    anzugeben,
    für beide, das META Format und die HTML Version (siehe Beispiel unten).
    In Fällen, wo keine META oder HTML Version verfügbar ist, können die optionalen 
    Elemente
    &lt;nohtml/&gt; und &lt;nometa/&gt; benutzt werden. Jeder Artikel kann eine 
    Zusammenfassung
    haben. Wenn sich die Zusammenfassung in der Datenbank befindet, bedeutet das, daß sie 
    dazu
    benutzt werden kann, um Indexwebseiten zu erstellen.

    <p>Das &lt;article&gt; Element hat fünf Attribute: die erforderliche @ID, ein 
    optionales
    Attribut  xml:lang, um die Sprache, in der er ursprünglich geschrieben worden ist, 
    anzugeben,
    ein  @type Attribut, das für die Titelseiten benutzt wird, die für 
    Übersetzungszwecke genauso
    wie Artikel behandelt werden. Und schließlich zwei weitere optionale Attribute, 
    @next und 
    @prev, um Artikel aus einer Serie zusammenzuhalten.

    <p>Ein Artikel gehört zu einer Ausgabe und zu einem Thema mit den
    &lt;issueref&gt; und &lt;themeref&gt; Elementen, beide haben ein @href
    Attribut. Der Wert dieses Attributs muß eine eigene ID, die ID der dazugehörigen 
    Ausgabe oder
    des Themas sein.

    <p>Ein Beispiel:

<pre>
&lt;article id="article206" xml:lang="en"&gt;
  &lt;title xml:lang="en"&gt;Using XML and XSLT to build 
    LinuxFocus.org(/Nederlands)&lt;/title&gt;
  &lt;personref href="nl-ew"/&gt;
  &lt;issueref href="ToBeWritten"/&gt;
  &lt;themeref href="appl"/&gt;
  &lt;abstract xml:lang="en"&gt;
This article shows you how parts of the Dutch web site of LinuxFocus is 
generated with XSLT tools from the XML database. It compares this with 
the (very) much slower DOM tools in Perl.
  &lt;/abstract&gt;
&lt;/article&gt;
</pre>

    <p>Ein lokal angepaßtes &lt;article&gt; Element sieht wie folgt aus:

<pre>
&lt;article id="52"&gt;
  &lt;title xml:lang="nl"&gt;Enlightenment&lt;/title&gt;
  &lt;file xml:lang="nl"&gt;Nederlands/July1998/article52.html&lt;/file&gt;
  &lt;translation from="en" to="nl"&gt;
    &lt;personref href="nl-tu"/&gt;
    &lt;reserved&gt;2000-09-06&lt;/reserved&gt;
    &lt;finished&gt;2000-10-04&lt;/finished&gt;
    &lt;proofread&gt;
      &lt;personref href="nl-fl"/&gt;
      &lt;reserved&gt;2000-10-04&lt;/reserved&gt;
      &lt;finished&gt;2000-10-04&lt;/finished&gt;
    &lt;/proofread&gt;
  &lt;/translation&gt;
  &lt;abstract xml:lang="nl"&gt;
Enlightenment is een Linux window-manager met
uitgebreide mogelijkheden.  Dit artikel bespreekt
ze, samen met de installatie en de instelling
van E.  Dit alles is niet voor beginners daar
E op het moment nog in beta-stadium
verkeert.
  &lt;/abstract&gt;
&lt;/article&gt;
</pre>

    <p>Beachte, daß diese Übersetzung für eine Übersetzung zu einem bestimmten Datum 
    reserviert
    ist, aber auch zum Korrekturlesen. In allen Fällen ist die Person, die die Arbeit 
    gemacht hat,
    mit den &lt;personref&gt; Elementen verlinkt. 

    <p>Für alle Elemente ist das beste Tutorium die aktuelle Datenbank selbst:
    <ul>
      <li><a href="../../common/src/article206/xml/db/lfdb.en.xml">Englische Datenbank</a>
      <li><a href="../../common/src/article206/xml/db/lfdb.nl.xml">Holländische angepaßte Datenbank</a>
    </ul>

  <h2>Automatisches Hervorzaubern von Webseiten</h2>

  <p>Einer der Gründe für das Erstellen dieses neuen Formats war das automatische 
  Erzeugen von
  Webindizes davon. Jetzt, wo wir das Datenbankformat verstehen (?), laßt uns anschauen, 
  wie wir es
  benutzen können, um Webseiten zu generieren.

  <p>Zuerst ein bißchen Geschichte. Die erste Implementation benutzte Perlmodule als 
  Schnittstelle
  zur Datenbank. Auch wenn die Schnittstelle sehr sauber war, war die Implementation sehr 
  langsam.
  Die Informationen wurden in einem  XML
  container namens Document Object Model (DOM) erhalten. Die meisten Implementationen für 
  DOM sind
  jedoch sehr langsam, zumindest langsamer als das alternative
  Simple Application interface für XML (SAX).

  <p>Aber wenn die Aufgabe darin besteht, einfach nur Webseiten zu generieren, scheint 
  eine dritte
  Alternative das beste zu sein: <a href="http://www.w3.org/TR/xslt">XSLT</a>. Dies ist 
  eine auf
  XML basierende Umwandlungssprache. Viele XSLT Prozessoren existieren heutzutage und die 
  meisten
  Programmiersprachen werden unterstützt. Vor einiger Zeit gab es einen LinuxFocus
  Artikel <a href="../July2000/article156.shtml"> Einführung in das PERL XML::XSLT 
  Modul</a>. 
  Seit der Veröffentlichung dieses Artikles sind mehrere Implementationen herausgekommen 
  und es
  gibt ein paar, die ich empfehle:
  <ul>
    <li><a href="http://www.gingerall.com/">Sablotron</a>
    <li><a href="http://jakarta.apache.org/">Xalan</a>
    <li><a href="http://xmlsoft.org/XSLT/">Xsltproc</a>
  </ul>
  Die Beispiele im restlichen Artikel benutzen Sablotron.

  <p>Ein XSLT Prozessor nimmt zwei Dateien als Eingabe. Einer ist die XML source, die 
  umgewandelt
  werden muß. Das andere ist das XSLT Stylesheet, das die Umformung definiert. Für 
  Generationen von
  LinuxFocus Webseiten sind die folgenden
  XSLT Stylesheets verfügbar:
  <ul>
    <li><a href="../../common/src/article206/xml/stylesheets/issues.xslt">issues.xslt</a><br>
      Dieses Stylesheet generiert eine Liste der Ausgaben mit ihren dazugehörigen Artikeln.
    <li><a href="../../common/src/article206/xml/stylesheets/issuetoc.xslt">issuetoc.xsl</a><br>
      Dieses generiert das Inhaltsverzeichnis einer bestimmten Ausgabe.
    <li><a href="../../common/src/article206/xml/stylesheets/issuetoc_full.xslt">issuetoc_full.xslt</a><br>
      Wie das vorhergehende, aber mit weiteren Informationen.
    <li><a href="../../common/src/article206/xml/stylesheets/mainindex.xslt">mainindex.xslt</a><br>
      Generiert eine Liste von Artikeln mit Informationen über den Übersetzungsstatus.
    <li><a href="../../common/src/article206/xml/stylesheets/previssues.xslt">previssues.xslt</a><br>
      Eine Liste aller Ausgaben, die veröffentlicht wurden.
    <li><a href="../../common/src/article206/xml/stylesheets/recently_translated.xslt">recently_translated.xslt</a><br>
      Die 10 zuletzt übersetzten Artikel.
    <li><a href="../../common/src/article206/xml/stylesheets/rss.xslt">rss.xslt</a><br>
      Generiert eine RSS Datei mit den 10 zuletzt übersetzten Artikeln.
    <li><a href="../../common/src/article206/xml/stylesheets/theme.xslt">theme.xslt</a><br>
      Dieses Stylesheet generiert die Indexseite für ein bestimmtes Thema.
    <li><a href="../../common/src/article206/xml/stylesheets/themes_index.xslt">themes_index.xslt</a><br>
      Generiert einen Index aller Themen.
    <li><a href="../../common/src/article206/xml/stylesheets/vertaald.xslt">vertaald.xslt</a><br>
      Zeigt alle für eine bestimmte Sprache übersetzten Artikel.
  </ul>
  Beachte, daß diese Stylesheets nicht die letzte Version sind. Sprich mich oder einen der Editoren
  im holländischen Übersetzerteam an, um eine topaktuelle Version zu bekommen.

  <p>Um z.B. die mainindex.html Seite zu generieren, läßt das holländische Team den folgenden
  Befehl laufen:

<pre>
sabcmd stylesheets/mainindex.xslt db/lfdb.nl.xml > ../mainindex.html
</pre>

  <p>Die Stylesheets wissen, wo sich die englische Wurzeldatenbank befindet und brauchen nur die
  lokale Datenbank als XML Eingabe. Einige Sheets brauchen einen zusätzlichen Parameter:

<pre>
sabcmd stylesheets/theme.xslt db/lfdb.nl.xml '$theme=appl' > ../Themes/appl.html
</pre>

  <p>Die holländische <a href="../../Nederlands/">index.html</a> Seite wird auch von der
  Datenbank erzeugt, benutzt aber ein etwas komplexeres Setup. Die index.html Seite wird mit Guidos
   <a href="http://main.linuxfocus.org/~guido/dev/#lfpagecomposer">lfpagecomposer</a> von einem Set
   vorbearbeiteter Eingabedateien gemacht. Und diese vorbearbeiteten Eingabedateien werden von
   einem Set von
  .pre Dateien wie folgt generiert :
<pre>
&lt;H2>Vorige nummers&lt;/H2>
 
&lt;p>Dit zijn de uitgaven van LinuxFocus in het Nederlands:
&lt;ul>
&lt;!-- macro xslt previssues -->
&lt;/ul>
</pre>

<pre>
&lt;H2&gt;Recent vertaalde artikelen&lt;/H2&gt;
&lt; macro xslt recently_translated --&gt;
<!-- macro xslt recently_translated -->
</pre>

  Diese Dateien sind einfach HTML Fragmente mit einem Makro, daß das Stylesheet auf deine lokale
  Datenbank anwendet. Die Bearbeitung geschieht mit einem Programm namens
  <a href="../../common/src/article206/xml/bin/apply_stylesheets.pl">apply_stylesheets.pl</a>, daß
  nach &lt;!-- macro xslt [stylesheet] --&gt; Befehlen sucht und die Datenbank mit diesem Befehl
  analysiert. Beachte, daß die .xslt Erweiterung weggelassen wurde. Unser
  <a href="../../Nederlands/WorkSpace/Index/Makefile">Makefile</a> enthält:

<pre>
%.shtml: %.pre
        @echo "Making $*..."
        @../../xml/bin/apply_stylesheets.pl $*.pre
</pre>

  <p>Die resultierenden *.shtml Dateien werden von dem lfpagecomposer Skript benutzt. Die
  Stylesheets, die zum Erzeugen der index.html Seite benutzt werden, sind:
  issuetoc.xslt, previssues.xslt und recently_translated.xslt.

  <h2>Lokale Anpassung</h2>

  <p>Um dieses Sytem in anderen Sprachen zu benutzen, mußt du das folgende machen:
  <ol>
    <li>die XML Datenbank (wie lfdb.nl.xml) lokal anpassen
    <li>die Stylesheets anpassen
  </ol>

  <p>Der zweite Schritt ist ein bißchen unglücklich. Im Prinzip muß nur der Text in der Ausgabe
  angepaßt werden, aber die Stylesheets haben bisher noch keine Anpassungseigenschaften. Die ist
  aber möglich und ich würde es gerne implementiert sehen.

  <p>Ich empfehle, einen DTD bewußten XML Editor zu benutzen. In Emacs kann man zum Beispiel den
  <a href="http://www.lysator.liu.se/projects/about_psgml.html">psgml</a>
  major mode benutzen. Dies gibt dir die Fähigkeit, das Dokument zu validieren 
  (mit <a href="http://www.jclark.com/sp/nsgmls.htm">nsgmls</a>).
  Dies ist sehr hilfreich, um Fehler zu vermeiden. In Emacs kann man dann auch durch rechten
  Mausklick die Elemente und Attribute sehen, die man an dieser speziellen Stelle in die 
  XML Datei einfügen kann. (Dank an Jaime Villate für seinen exellenten Vortrag auf der 
  <a href="http://lsm.abul.org/">LSM Konferenz</a>
  in Bordeaux dieses Jahr.)

  <p>Eine weitere große Hilfe ist die holländische lokale Anpassung der
  XML Datenbank. Wenn Probleme bei dir auftauchen, kannst du diese Datei konsultieren. Auch wenn
  der Inhalt überwiegend auf Holländisch ist, kannst du sehen, wie die Datenbankelemente
  organisiert sind. wenn das nicht hilft, kannst du mir jederzeit
  <a href="mailto:egonw@linuxfocus.org">emailen</a>.

  <p>Das lokale Anpassen der Stylesheets ist wahrscheinlich ein bißchen trickreich. Text ist
  vermischt mit XSLT Befehlen. Die letzteren mußt du nicht anfassen (außer, du weißt, was du tust),
  um seine Funktionalität zu erhalten. Ich plane, die Stylesheets in Zukunft lokal anzupassen, was
  bedeutet, daß du dann nur eine Datei editieren mußt, die deine Übersetzungen beinhalten und keine 
  XSLT Befehle, aber das ist noch nicht gemacht.

  <h2>Zukunftspläne</h2>

  <p>OK, dies sollte genügen, damit du anfangen kannst: Das meiste kannst du von den holländischen
  Dateien kopieren und pasten. Alle Dateien sind FDL und GPL. Im nächsten Jahr sind dies meine
  Pläne für das System:
  <ul>
    <li>lokales Anpassen der Stylesheets
    <li>neue Stylesheets hinzufügen (für top_authors.html, top_translaters.html
        und andere Dinge, die wir als Webseiten sehen möchten)
    <li>möglicherweise eine Schnittstelle zu einer daemon basierten relationalen Datenbank, wie 
    MySQL.
    <li>Integrieren des Systems mit anderen LinuxFocus Werkzeugen (wie getticket etc)
  </ul>

  </body>
</html>