<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//DE">
<HTML>
<HEAD>
 <META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <META NAME="GENERATOR" CONTENT="lfparser_2.17">
 <META NAME="LFCATEGORY" CONTENT="Applications">
<!-- this is used be a number of tools:
 =LF=AUTHOR: Egon Willighagen
 =LF=CAT___: Applications
 =LF=TITLE_: Benutzen von XML und XSLT zum Bauen von LinuxFocus.org(/Nederlands)
 =LF=NUMBER: 206
 =LF=ANAME_: article206.shtml
 -->
 <TITLE>lf206, Applications: Benutzen von XML und XSLT zum Bauen von LinuxFocus.org(/Nederlands)</TITLE>
<!-- stylesheet added by lfparser: --> 
<style type="text/css">
<!--
 td.top {font-family: Arial,Geneva,Verdana,Helvetica,sans-serif; font-size:12 }
 pre { font-familiy:monospace,Courier }
 p.cl { color:#EE9500 }
 a.nodec { text-decoration:none }
 p.trans { font-size:8pt; text-align:right }
 p.clbox { width:50%; alignment:center; background-color:#FFD700; border-style:none; border-width:medium; border-color:#FFD700; padding:0.5cm ;  text-align:center }
 p.foot { background-color:#AAAAAA; color:#FFFFFF; border-style:none; border-width:medium; border-color:#AAAAAA; padding:0.5cm ; margin-top:0.1cm; margin-right:1cm; margin-left:1cm; text-align:center }
-->
</style>
 
</HEAD>
<BODY bgcolor="#ffffff" text="#000000">
 <!-- this is generated html code. NEVER use this file for your
 translation work. Instead get the file with the same article number
 and .meta.shtml in its name. Translate this meta file and then
 use lfparser program to generate the final article -->
 <!-- lfparser can be obtained from http://www.linuxfocus.org/~guido/dev/lfparser.html -->

<!-- 2pdaIgnoreStart -->

<!-- start navegation bar -->
 <!-- top navegation bar -->
 <TABLE cellspacing="0" cellpadding="0" border="0" align="center" width="90%">
   <TR bgcolor="#2e2292">
     <TD class="top"><TABLE cellspacing="0" cellpadding="0" border="0" width=
       "100%">
         <TR><TD width="144"><IMG src="../../common/images/logolftop.gif"
           alt="[LinuxFocus-icon]" width="350" height="45" align="left" 
           border="0"></TD>

           <TD class="top">
             <TABLE width="100%">
               <TR align="right">
                 <TD class="top"><A class="nodec" href="../index.shtml"><FONT color=
                 "#DDDDDD">Home</FONT></A> &nbsp;|&nbsp; <A class=
                 "nodec" href="../map.html"><FONT color=
                 "#DDDDDD">Plan</FONT></A> &nbsp;|&nbsp; <A class=
                 "nodec" href="../indice.html"><FONT color=
                 "#DDDDDD">Index</FONT></A> &nbsp;|&nbsp; <A class="nodec" href="../Search/index.html"><FONT color=
                 "#DDDDDD">Suchen</FONT></A> </TD>
               </TR>

               <TR align="right">
                 <TD class="top">
                   <HR width="100%" noshade size="1">
                 </TD>
               </TR>
             </TABLE>
           </TD>
         </TR>
       </TABLE>
     </TD>
   </TR>
 </TABLE>
 <!-- end top navegation bar -->
 <!-- blue bar -->
 <TABLE cellspacing="0" cellpadding="0" border="0" align="center"
 width="90%">
   <TR bgcolor="#00ffff">
     <TD><IMG src="../../common/images/transpix.gif" width="1" height=
     "2" alt=""></TD>
   </TR>
 </TABLE>
 <!-- end blue bar -->
 <!-- bottom navegation bar -->
 <TABLE cellspacing="0" cellpadding="0" border="0" align="center"
 width="94%">
   <TR bgcolor="#000000">
     <TD>
       <TABLE cellspacing="0" cellpadding="1" border="0" width=
       "100%">
         <TR align="center">
           <TD><A class="nodec" href="../News/index.shtml"><FONT color=
           "#FFFFFF">Nachrichten</FONT></A> </TD>
           <TD><FONT color="#FFFFFF">|</FONT> </TD>
           <TD><A class="nodec" href="../Archives/index.html"><FONT color=
           "#FFFFFF">Archiv</FONT></A> </TD>
           <TD><FONT color="#FFFFFF">|</FONT> </TD>
           <TD><A class="nodec" href="../Links/index.shtml"><FONT color=
           "#FFFFFF">Links</FONT></A> </TD>
           <TD><FONT color="#FFFFFF">|</FONT> </TD>
           <TD><A class="nodec" href="../aboutus.html"><FONT color=
           "#FFFFFF">&Uuml;ber uns</FONT></A> </TD>
         </TR>
       </TABLE>
     </TD>
   </TR>
 </TABLE>
 <!-- end bottom navegation bar -->
<!-- stop navegation bar -->

<!-- SSI_INFO -->

<!-- tr_staticssi include virtual -->
<!-- tr_staticssi exec cmd -->
<!-- addedByLfdynahead ver 1.5 --><TABLE ALIGN="right" border=0><TR><TD ALIGN="right"><FONT SIZE="-1" FACE="Arial,Helvetica">Dieses Dokument ist verf&uuml;bar auf: <A href="../../English/September2001/article206.shtml">English</a> &nbsp;<A href="../../Castellano/September2001/article206.shtml">Castellano</a> &nbsp;<A href="../../Deutsch/September2001/article206.shtml">Deutsch</a> &nbsp;<A href="../../Francais/September2001/article206.shtml">Francais</a> &nbsp;<A href="../../Italiano/September2001/article206.shtml">Italiano</a> &nbsp;<A href="../../Nederlands/September2001/article206.shtml">Nederlands</a> &nbsp;<A href="../../Portugues/September2001/article206.shtml">Portugues</a> &nbsp;<A href="../../Russian/September2001/article206.shtml">Russian</a> &nbsp;<A href="../../Turkce/September2001/article206.shtml">Turkce</a> &nbsp;</FONT></TD></TR></TABLE><br>
 

<!-- 2pdaIgnoreStop -->

<!-- SHORT BIO ABOUT THE AUTHOR -->
<TABLE ALIGN=LEFT BORDER=0 hspace=4 vspace=4 WIDTH="30%" >
<TR>
<TD>

<!-- 2pdaIgnoreStart -->
<!-- PALM DOC -->
<TABLE BORDER=0 hspace=4 vspace=4> <TR> <TD>
<font size=1> <img src="../../common/images/2doc.gif" width=34 align=left border=0 height=22 alt="convert to palm"><a href="http://cgi.linuxfocus.org/cgi-bin/2ztxt">Convert to GutenPalm</a><br>or <a href="http://cgi.linuxfocus.org/cgi-bin/2pda">to PalmDoc</a></font>
</TD> </TR> </TABLE>
<!-- END PALM DOC -->
<!-- 2pdaIgnoreStop -->
<br>
<IMG src="../../common/images/EgonWillighagen.jpg" alt="[Photo of the Author]" height="102" width="79">
<BR>von  <A href="mailto:egonw&#64;linuxfocus.org">Egon Willighagen</A>
<BR><BR>
<I>&Uuml;ber den Autor:</I><BR>
<P>Egon erh&auml;lt dieses Jahr seinen Masters und wird dann mit seiner
    Doktorarbeit in Chemie beginnen. Ansonsten mag er Basktball
    sowie LinuxFocus und Linux im allgemeinen.

    
<BR><i>Inhalt</i>:
<UL>
  <LI><A HREF="#206lfindex0">Einf&uuml;hrung</A></LI>
  <LI><A HREF="#206lfindex1">Die Document Type Definition</A></LI>
  <LI><A HREF="#206lfindex2">&lt;database&gt;</A></LI>
  <LI><A HREF="#206lfindex3">&lt;themes&gt;</A></LI>
  <LI><A HREF="#206lfindex4">&lt;issues&gt;</A></LI>
  <LI><A HREF="#206lfindex5">&lt;persons&gt;</A></LI>
  <LI><A HREF="#206lfindex6">&lt;articles&gt;</A></LI>
  <LI><A HREF="#206lfindex7">Automatisches Hervorzaubern von Webseiten</A></LI>
  <LI><A HREF="#206lfindex8">Lokale Anpassung</A></LI>
  <LI><A HREF="#206lfindex9">Zukunftspl&auml;ne</A></LI>
  <LI><A HREF="http://cgi.linuxfocus.org/cgi-bin/lftalkback?anum=206&lang=en">Talkback f&uuml;r diesen Artikel</A></LI>
</UL>

</TD></TR></TABLE>
<!-- HEAD OF THE ARTICLE -->
<br>&nbsp;
<H2>Benutzen von XML und XSLT zum Bauen von LinuxFocus.org(/Nederlands)</H2>
 <IMG src="../../common/images/illustration206.jpg" alt="[Illustration]" hspace="10" width="102" height="38">
<!-- ABSTRACT OF THE ARTICLE -->
<P><i>Zusammenfassung</i>:
<P>

      Dieser Artikel enth&auml;lt die Pr&auml;sentation, die Egon w&auml;hrend des Libre
      Software Meetings in Bordeaux gegeben hat. Er erkl&auml;rt die XML Datenbank,
      die f&uuml;r die automatische Generierung der LinuxFocus.org(/Nederlands)
      Webseite benutzt wird.

    </P>
<HR size="2" noshade align="right"><BR>
<!-- BODY OF THE ARTICLE -->


    <A NAME="206lfindex0">&nbsp;</A>
<H2>Einf&uuml;hrung</H2>


    <p>Das f&uuml;r die Dokumentations- und &Uuml;bersetzungsverwaltung benutzte System
      beim LinuxFocus Projekt besteht aus einigen ASCII Dateien, einschlie&szlig;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&uuml;gbar sind, zu verwalten.
    </p>

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

    <p>Die Wahl f&uuml;r XML war ein bi&szlig;chen willk&uuml;rlich. Es gab Vorschl&auml;ge, eine
    relationale Datenbank zu benutzen, aber ich hatte Erfahrung in XML und
    bevorzugte ein System mit textbasierten Dateien. Es zeigte sich bald, da&szlig;
    ein neues Nummerierungsschema n&uuml;tzlich sein w&uuml;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&szlig;chen Inhalt war f&uuml;r Testzwecke in der Datenbank. Mit dem neuen
    einheitlichen Nummerierungsschema war die Zeit gekommen, um die Datenbank
    mit Inhalt zu laden. Nachdem ungef&auml;hr 20 Artikel hinzugef&uuml;gt worden waren,
    wurde klar, da&szlig; dies ein enormes Projekt war. Es war m&ouml;glich, Skripte zu
    schreiben, um die alten Dateien zu benutzen, aber nicht alle Informationen,
    die die neue Datenbank aufnehmen konnte, waren verf&uuml;gbar und, wie erw&auml;hnt,
    waren die verf&uuml;gbaren Informationenn &uuml;ber mehrere Dateien verteilt.
    Gl&uuml;cklicherweise kam Floris Lambrechts dazu und ich habe ihm tief zu danken
    f&uuml;r das Hinzuf&uuml;gen des meisten Inhalts zu der Datenbank. Ohne seine Hilfe
    w&auml;re das System nicht das, was es heute ist.
    </p>

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

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

    <A NAME="206lfindex1">&nbsp;</A>
<H2>Die Document Type Definition</H2>


    <p>XML ist zuerst einmal eine Syntaxspezifikation f&uuml;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&auml;rt, da&szlig; ein Dokument ein Wurzelelement hat und da&szlig; 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&szlig; 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&uuml;r einen leeren tag
<pre>
&lt;br/&gt;
</pre>

    <p>Au&szlig;er Syntax enthalten Sprachen auch Semantik. Diese beschreibt, wie sich
    bestimmte Elemente zueinander verhalten. Die Semantik von HTML erkl&auml;rt, da&szlig; der
    &lt;body&gt; tag im &lt;html&gt; Element enthalten sein soll und nicht
    umgekehrt. Die Semantik beschreibt auch, da&szlig; 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
      &uuml;berstanden hat, wird es ein <i>wahres</i> Dokument genannt. Man mu&szlig; mit XML sehr
      aufpassen, da seine &Uuml;berpr&uuml;fung sehr strikt ist.
    </p>

    <p>Jetzt, wo wir wissen, was eine DTD ist, la&szlig;t uns einen Blick auf die
    <a href="../../common/src/article206/xml/dtd/lfdb.dtd">XML
    Datenbank DTD von LinuxFocus</a> werfen. F&uuml;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>

    <A NAME="206lfindex2">&nbsp;</A>
<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&szlig; das "?" bedeutet, da&szlig; das Kindelement 0 oder einmal auftreten
    darf.
    Auf diese Weise kann die Datenbank Informationen &uuml;ber die Themen, Personen, Ausgaben
    und
    Artikel
    von LinuxFocus haben. Da dies sehr eindeutig ist, gehe ich jetzt zu einem
    interessanteren Beispiel.
    </p>

    <A NAME="206lfindex3">&nbsp;</A>
<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&uuml;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&szlig; konform
      zum  <a href="http://www.everything2.org/index.pl?node_id=781276">ISO 3166
      Standard</a> f&uuml;r
      den L&auml;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>

    <A NAME="206lfindex4">&nbsp;</A>
<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&ouml;ffentlichte Ausgaben. Die n&auml;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 die Dateilokation zu bestimmen.

    <p>Ein Beispiel (beachte, da&szlig; 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>

    <A NAME="206lfindex5">&nbsp;</A>
<H2>&lt;persons&gt;</H2>


    <p>Informationen &uuml;ber Autoren und &Uuml;bersetzer sind in den
    &lt;person&gt; Elementen gespeichert. Jede Person mu&szlig; 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 &Uuml;bersetzerteam geh&ouml;rt,
    f&uuml;gen wir
    ein &lt;team&gt; Element hinzu.
    Zum Beispiel bedeutet die folgende Zeile im &lt;person&gt; Element, da&szlig; Floris zum
    holl&auml;ndischen Team &lt;team xml:lang="nl"/&gt; geh&ouml;rt.
    Schlie&szlig;lich kann jede Person eine Beschreibung haben, die z.B. zus&auml;tzliche Weblinks
    enth&auml;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>

    <A NAME="206lfindex6">&nbsp;</A>
<H2>&lt;articles&gt;</H2>


    <p>Die Artikel sind nat&uuml;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&uuml;r jede Sprache. Das
    &lt;file&gt; Element kann dazu benutzt werden, um die Speicheradresse des Artikels
    anzugeben,
    f&uuml;r beide, das META Format und die HTML Version (siehe Beispiel unten).
    In F&auml;llen, wo keine META oder HTML Version verf&uuml;gbar ist, k&ouml;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&szlig; sie
    dazu
    benutzt werden kann, um Indexwebseiten zu erstellen.

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

    <p>Ein Artikel geh&ouml;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&szlig; eine eigene ID, die ID der dazugeh&ouml;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&szlig;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&szlig; diese &Uuml;bersetzung f&uuml;r eine &Uuml;bersetzung zu einem bestimmten Datum
    reserviert
    ist, aber auch zum Korrekturlesen. In allen F&auml;llen ist die Person, die die Arbeit
    gemacht hat,
    mit den &lt;personref&gt; Elementen verlinkt.

    <p>F&uuml;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&auml;ndische angepa&szlig;te Datenbank</a>
    </ul>

  <A NAME="206lfindex7">&nbsp;</A>
<H2>Automatisches Hervorzaubern von Webseiten</H2>


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

  <p>Zuerst ein bi&szlig;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&uuml;r
  DOM sind
  jedoch sehr langsam, zumindest langsamer als das alternative
  Simple Application interface f&uuml;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&uuml;tzt. Vor einiger Zeit gab es einen LinuxFocus
  Artikel <a href="../July2000/article156.shtml"> Einf&uuml;hrung in das PERL XML::XSLT
  Modul</a>.
  Seit der Ver&ouml;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&szlig;. Das andere ist das XSLT Stylesheet, das die Umformung definiert. F&uuml;r
  Generationen von
  LinuxFocus Webseiten sind die folgenden
  XSLT Stylesheets verf&uuml;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&ouml;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 &uuml;ber den &Uuml;bersetzungsstatus.
    <li><a href="../../common/src/article206/xml/stylesheets/previssues.xslt">previssues.xslt</a><br>
      Eine Liste aller Ausgaben, die ver&ouml;ffentlicht wurden.
    <li><a href="../../common/src/article206/xml/stylesheets/recently_translated.xslt">recently_translated.xslt</a><br>
      Die 10 zuletzt &uuml;bersetzten Artikel.
    <li><a href="../../common/src/article206/xml/stylesheets/rss.xslt">rss.xslt</a><br>
      Generiert eine RSS Datei mit den 10 zuletzt &uuml;bersetzten Artikeln.
    <li><a href="../../common/src/article206/xml/stylesheets/theme.xslt">theme.xslt</a><br>
      Dieses Stylesheet generiert die Indexseite f&uuml;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&uuml;r eine bestimmte Sprache &uuml;bersetzten Artikel.
  </ul>
  Beachte, da&szlig; diese Stylesheets nicht die letzte Version sind. Sprich mich oder einen der Editoren
  im holl&auml;ndischen &Uuml;bersetzerteam an, um eine topaktuelle Version zu bekommen.

  <p>Um z.B. die mainindex.html Seite zu generieren, l&auml;&szlig;t das holl&auml;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&auml;tzlichen Parameter:

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

  <p>Die holl&auml;ndische <a href="../../Nederlands/index.shtml">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&szlig; 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&szlig;
  nach &lt;!-- macro xslt [stylesheet] --&gt; Befehlen sucht und die Datenbank mit diesem Befehl
  analysiert. Beachte, da&szlig; die .xslt Erweiterung weggelassen wurde. Unser
  <a href="../../Nederlands/WorkSpace/Index/Makefile">Makefile</a> enth&auml;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.

  <A NAME="206lfindex8">&nbsp;</A>
<H2>Lokale Anpassung</H2>


  <p>Um dieses Sytem in anderen Sprachen zu benutzen, mu&szlig;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&szlig;chen ungl&uuml;cklich. Im Prinzip mu&szlig; nur der Text in der Ausgabe
  angepa&szlig;t werden, aber die Stylesheets haben bisher noch keine Anpassungseigenschaften. Die ist
  aber m&ouml;glich und ich w&uuml;rde es gerne implementiert sehen.

  <p>Ich empfehle, einen DTD bewu&szlig;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&auml;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&uuml;gen kann. (Dank an Jaime Villate f&uuml;r seinen exellenten Vortrag auf der
  <a href="http://lsm.abul.org/">LSM Konferenz</a>
  in Bordeaux dieses Jahr.)

  <p>Eine weitere gro&szlig;e Hilfe ist die holl&auml;ndische lokale Anpassung der
  XML Datenbank. Wenn Probleme bei dir auftauchen, kannst du diese Datei konsultieren. Auch wenn
  der Inhalt &uuml;berwiegend auf Holl&auml;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&szlig;chen trickreich. Text ist
  vermischt mit XSLT Befehlen. Die letzteren mu&szlig;t du nicht anfassen (au&szlig;er, du wei&szlig;t, was du tust),
  um seine Funktionalit&auml;t zu erhalten. Ich plane, die Stylesheets in Zukunft lokal anzupassen, was
  bedeutet, da&szlig; du dann nur eine Datei editieren mu&szlig;t, die deine &Uuml;bersetzungen beinhalten und keine
  XSLT Befehle, aber das ist noch nicht gemacht.

  <A NAME="206lfindex9">&nbsp;</A>
<H2>Zukunftspl&auml;ne</H2>


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

  


<!-- 2pdaIgnoreStart -->
<A NAME="talkback">&nbsp;</a>
<h2>Talkback f&uuml;r diesen Artikel</h2>
Jeder Artikel hat seine eigene Seite f&uuml;r Kommentare und R&uuml;ckmeldungen. Auf dieser Seite kann jeder eigene Kommentare abgeben und die Kommentare anderer Leser sehen:
<center>
<table border="0"  CELLSPACING="2" CELLPADDING="1">
 <tr BGCOLOR="#C2C2C2"><td align=center>
  <table border="3"  CELLSPACING="2" CELLPADDING="1">
   <tr BGCOLOR="#C2C2C2"><td align=center>
    <A href="http://cgi.linuxfocus.org/cgi-bin/lftalkback?anum=206&lang=en"><b>&nbsp;Talkback Seite&nbsp;</b></a>
   </td></tr></table>
</td></tr></table>
</center>

<HR size="2" noshade>
<!-- ARTICLE FOOT -->
<CENTER><TABLE WIDTH="95%">
<TR><TD ALIGN=CENTER BGCOLOR="#9999AA">
<A HREF="../../common/lfteam.html">Der LinuxFocus Redaktion schreiben</A>
<BR><FONT COLOR="#FFFFFF">&copy; Egon Willighagen, <a href="../../common/copy.html">FDL</a> <BR><a href="http://www.linuxfocus.org">LinuxFocus.org</a></FONT>
<BR><a href="http://cgi.linuxfocus.org/cgi-bin/lfcomment?lang=de&article=article206.shtml" target="_TOP">Einen Fehler melden oder einen Kommentar an LinuxFocus schicken</A><BR></TD>
<TD BGCOLOR="#9999AA"><!-- TRANSLATION INFO -->
<font size=2>Autoren und &Uuml;bersetzer:</font><TABLE>
<tr><td><font size=2>en</font></td>
    <td><font size=2>-&gt;</font></td>
    <td><font size=2>--</font></td>
    <td><font size=2><a href="mailto:egonw&#64;linuxfocus.org"><FONT COLOR="#FFFFFF">Egon Willighagen</FONT></a></font></td>
</tr>
<tr><td><font size=2>en</font></td>
    <td><font size=2>-&gt;</font></td>
    <td><font size=2>en</font></td>
    <td><font size=2><a href="mailto:sherm_pbody&#64;yahoo.com"><FONT COLOR="#FFFFFF">Lorne Bailey</FONT></a></font></td>
</tr>
<tr><td><font size=2>en</font></td>
    <td><font size=2>-&gt;</font></td>
    <td><font size=2>de</font></td>
    <td><font size=2><a href="mailto:katja&#64;linuxfocus.org"><FONT COLOR="#FFFFFF">Katja Socher</FONT></a></font></td>
</tr>
</TABLE></TD>
</TR></TABLE></CENTER>
<p><font size=1>2001-09-02, generated by lfparser version 2.17</font></p>
<!-- 2pdaIgnoreStop -->
</BODY>
</HTML>