copyright (c)2003-2005   useGroup
XSLT

66151@usegroup.de

Einführung in XML/XSLT

Grundkenntnisse

nach untenWas Sie erwartet

nach untenwell-formed

nach untenvalid

nach untenImport-Präzedenz

nach untenNamespaces

nach untenNavigation im XML-Dokument

nach unten//

nach unten|

nach unten.

nach unten@

nach unten@*

nach untenself::tagname

nach untenpreceding-sibling::

nach untenfollowing-sibling::

nach untenparent::

nach untenancestor::

nach untenchild::

nach untendescendant::

Was Sie erwartet

nach obenWas Sie erwartet 

In dieser Datei werden XML-Begriffe geklärt und die Navigation in einem XML-Dokument aufgezeigt. Diese Navigation sollte Ihnen bei den XSLT-Kapiteln besonders hilfreich sein.



well-formed

nach obenwell-formed 

Ein Document ist dann "well-formed", also als XML zu erkennen wenn es den XML-Gesetzen in der Weise gehorcht, dass



valid

nach obenvalid 

Ein Dokument ist dann valid, also gültig, wenn es wellformed ist und dem DTD und/oder dem Schema gehorcht, der/das/die im Dateikopf angegeben wurde/n. (Ein Dokument kann sowohl einem DTD als auch einem Schema gehorchen müssen)



Import-Präzedenz

nach obenImport-Präzedenz 

Sollte zwei gleichermaßen zutreffende Tags gefunden werden,


    <!-- für Tag b ist definiert -->
    <xsl:template match="b">
    Wird angewendet
    </xsl:template>
    <!-- und -->
    <xsl:template match="u|i|b">
    Wird in dem Fall für b nicht angewendet
    </xsl:template>
    
  
entscheidet die Import-Präzedenz darüber, welches Template zur Ausführung kommt. Das ist in der Regel das oberste, wobei bei eingebundenen (xsl:include) oder importierten (xsl:import) Templates das Importierte gegenüber dem in der Datei definierte immer das Nachsehen hat.
Wenn Sie z.B. an einer Stelle hinter einem
  <xsl:template match="bsp">
  <b>
    <xsl:apply-templates/>
  </b>
  </xsl:template>
  
ein Include oder Import verwenden, die ebenfalls für bsp eine Transformation z.b. als kursiv definieren, wird bsp trotzdem immer nur fett angezeigt. Wenn Sie in einer anderen Datei zuerst ein Import ausführen das bsp kursiv macht und dann ein Include, das es fett mcht, wird es wiederum fett, weil Include eben eine höhere Präzedenz hat.



Namespaces

nach obenNamespaces 

Namensräume (Namespaces) sind die XML-Empfehlun wie man verschiedene XML-Formate in einem Dokument verwenden kann (man schreibt einfach den Namespace prefix, z.b. xsl mit einem Doppelpunkt vor das verwendete Kommando).
Der Eintrag in einer XSL-Datei

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns="http://www.w3.org/TR/REC-html40">

Bedeutet z.B. der Namespace xsl (xmlns:xsl) wird für XSLT-Befehle benutzt. Theoretisch ist auch ein anderer Wert als XSL möglich, dann müssten die Befehle auch anders aufgerufen werden (anstelle xsl:apply-templates z.b. xslt:apply-templates).
XSL ist allerdings für den XSLT-Namespace zu einem de-facto-Standard geworden.



Navigation im XML-Dokument

nach obenNavigation im XML-Dokument 

Eine XML-Datei wird oft mit einem Baum verglichen, wobei jedes Tag einen weiteren Ast vom aktuellen Ast abspaltet abspaltet - der wiederung weitere Äste haben kann. Die Wurzel, also das höchste Tag und gleichzeitig der erste Ast ist /.
Die Elemente werden ähnlich wie Verzeichnisse auf einem Linux-Computer angesprochen (Unterschiede zu Windows-Verzeichnissen: es wird auf Groß/Kleinschreibung geachtet und man trennt nicht durch \ sondern durch /). Man kann alle Elemente absolut und lokal ansprechen. /datei/abschnitt/satz spricht z.B. nur die Berliner an:

<datei>
<satz inhalt="kein berliner">
Ich bin kein Berliner
</satz>

<abschnitt>
<satz inhalt="berliner">
Ich bin ein Berliner
</satz>
<satz>
Ich bin auch ein Berliner
</satz>
</abschnitt>
</datei>

Außerdem ist es möglich, gezielt jedes Vatertag anzusprechen (siehe z.B. Parent), das bestimmten Bedingungen genügt, jedes Kind-Tag usw.. Ein möglicher Stammbaum an dem man die Bennenung der Elemente sehr gut ersehen kann ist:



//

nach oben// 

//satz spricht jeden Satz, egal in welchem Tag an, also alle drei Sätze.



|

nach oben| 

Der vertikale Strich bedeutet soviel wie ein "oder". Um im Beispiel zu bleiben bedeutet ein satz|abschnitt, dass sowohl Sätze, als auch Abschnitte mit diesem Template behandelt werden (passt zu Satz oder Abschnitt).



.

nach oben. 

Der Punkt spricht das lokale Element an. Bsp:

<xsl:value-of select="."/>
gibt das lokale Element aus.



@

nach oben@ 

Der Klammeraffe spricht die Attribute an, /datei/satz/@inhalt z.B. "kein Berliner". Beim lokalen Element reicht "@attributname", ein Punkt ist hier nicht nötig.



@*

nach oben@* 

Bedeutet: Selektiere sowohl alle Attribute als auch den Taginhalt. Praktisch ist das z.B. beim Kopieren von Elementen.



self::tagname

nach obenself::tagname 

Entspricht dem Tagnamen des aktuell selektierten Elements.

<xsl:apply-templates select="*[not(self::s)]"/>
Wendet alle Templates an, die nicht den Tag "s" verarbeiten.



preceding-sibling::

nach obenpreceding-sibling:: 

Wählt das vorhergegangene gleichrangige (sibling=Geschwister)-Tag aus.

<xsl:apply-templates select="*[not(preceding-sibling::s)]"/>
Wendet alle Templates auf Tags an, die nicht NACH den Tag "s" verarbeitet werden.



following-sibling::

nach obenfollowing-sibling:: 

Wählt das nachkommende gleichrangige (sibling=Geschwister)-Tag aus.

<xsl:apply-templates select="*[not(following-sibling::s)]"/>
Wendet alle Templates auf Tags an, die nicht VOR den Tag "s" verarbeitet werden.



parent::

nach obenparent:: 

Wählt das Tag eine Ebene höher aus.

<xsl:apply-templates select="*[not(parent::s)]"/>
Wendet alle Templates auf Tags an, die nicht als direktes Kind zu einem "s"-Tag definiert wurden.
Wollen Sie ein Attribut des höheren Tags ansprechen, sollten Sie ../@ATTRIBUTNAME verwenden.



ancestor::

nach obenancestor:: 

Wählt das Tag mindestens eine Ebene höher aus.

<xsl:apply-templates select="*[not(ancestor::s)]"/>
Wendet alle Templates auf Tags an, die nicht als direktes Kind zu einem "s"-Tag oder einem dessen Untertags (... den Untertags der Untertags ...) definiert wurden.



child::

nach obenchild:: 

Wählt das Tag eine Ebene tiefer aus.

<xsl:apply-templates select="*[not(child::s)]"/>
Wendet alle Templates an, die nicht ein direktes "s"-Tag als Kind haben.



descendant::

nach obendescendant:: 

Wählt das Tag mindestens eine Ebene tiefer aus.

<xsl:apply-templates select="*[not(descendant::s)]"/>
Wendet alle Templates an, die nicht ein "s"-Tag als Kind oder Kind eines Kindes (...) haben.



copyright (c)2003-2005   useGroup