Philipp Hasenfratz: Ein erster Prototyp zum testen - Komponenten-Beschreibungen

Beitrag lesen

Halihallo Simon und Thomas

Tja, genau das ist ja der springende Punkt: das Inhaltsverzeichnis. Natürlich kann man in XSLT durch Baumstrukturen wandern - aber die Frage ist: wie erstellt man diese in XSLT? In seiner XML-Datei sind die Klassen untereinander aufgelistet und im Enddokument sollen sie hierarchisch dargestellt werden. Als Verbindung dient nur das extends-Attribut. Mir fällt da jetzt auch auf Anhieb keine Lösung ein.

Genau das ist mein Problem. Ich habe noch darüber nachgedacht. Die Verbindung stellt das
extends-Attribut dar, welches als "Foreign Key" (wenn ich das mal so als Analogie
verwenden darf) für eine andere Klasse dient und dessen name-Attribut entspricht. Wenn
man jetzt einen Tree der Vererbungen realisieren möchte, müsste man von diesem @extends
auf die Node der referenzierten Klasse springen und dort das selbe Verfahren iterierend
verwenden. Jetzt ist die Frage, wie man mit XSLT diese Rekursion (das wiederverwendbare
Schema auf referenzierte Knoten anwenden) erstellen kann. Konkreter würde dies so
aussehen:

Input.xml
<component>
   <class name="v1" />
   <class name="v2" extends="v1"/>
   <class name="v3" extends="v2"/>
   <class name="v21" extends="v1"/>
   <class name="v31" extends="v21"/>
</component>

Ausgabe.txt sollte etwa so aussehen:

Klasse v1
  |
  +-- Klasse v2
  |      |
  |      +-- Klasse v3
  |
  +-- Klasse v21
         |
         +-- Klasse v31

pseudo transform.example.xslt

<xsl:template name="vererbung">
   <xsl:value-of select="@extends" />
   <xsl:if test="@extends">
      <xsl:if test="/component/class/@name = ./@extends">
         <xsl:call-template name="vererbung" on="/component/class/@name = ./@extends"/>
      </xsl:if>
   </xsl:if>
 </xsl:template>

das on="..." würde dann einem Selektieren des "Zielbaumes"[1] entsprechen, von wo aus
weitertransformiert werden würde und somit die Rekursion eingeleitet wird, bis in
@extends nichts mehr steht. Die grosse Frage ist: Wie kann man mit XSLT in dem Eingabe-
Baum durch die Knoten des DOM springen? - Die Antwort lautet meiner Meinung nach: Geht
nicht. Deshalb habe ich geschrieben, dass ich mich gerne vom Gegenteil überzeugen lasse,
bzw. für andere Lösungsvorschläge dankbar wäre; kann ja sein, dass ich von einem völlig
falschen Grundkonzept ausgehe und es ganz anders zu machen wäre mit den Mitteln von
XSLT, nur: mir fällt keine ein. Zudem, was ich da oben an Beispiel für eine XSLT ge-
schrieben habe, würde auch nicht ganz dem Ausgabe.txt entsprechen (mal von der Syntax
abgesehen), da der Baum nur für eine Klasse erstellt werden würde und somit eine ganz
einfache Syntax hätte (z. B. v1->v2->v3). Was für eine Klassenübersicht sinnvoll wäre
ist, ein Baum, der alle Klassenvererbungen abbildet und die gleichen Klassen
zusammenfassen würde. Hat jemand eine Idee, wie sich dies realisieren lassen würde?

[1] des Inputs, nicht in den Transformationsregeln und Node des XSLT-Sheets.

Viele Grüsse

Philipp

0 43

Klassenbeschreibungen

Philipp Hasenfratz
  • projektverwaltung
  1. 0

    Klassenbeschreibungen - Beispiele? - Vorlagen?

    Philipp Hasenfratz
    1. 0
      Simon Reinhardt
      1. 0
        Philipp Hasenfratz
  2. 0
    Andreas Korthaus
    1. 0
      Philipp Hasenfratz
  3. 0
    Philipp Hasenfratz
    1. 0
      Simon Reinhardt
      1. 0
        Martin Speiser
  4. 0
    Martin Speiser
    1. 0
      Philipp Hasenfratz
      1. 0
        Martin Speiser
        1. 0
          Philipp Hasenfratz
      2. 0
        Simon Reinhardt
        1. 0
          Philipp Hasenfratz
  5. 0

    Ein erster Prototyp zum testen - Komponenten-Beschreibungen

    Philipp Hasenfratz
    • perl
    1. 0
      Simon Reinhardt
      1. 0
        Philipp Hasenfratz
        1. 0

          Status

          Philipp Hasenfratz
          1. 0
            Simon Reinhardt
            1. 0
              Philipp Hasenfratz
              1. 0
                Simon Reinhardt
                1. 0
                  Philipp Hasenfratz
      2. 0

        XSLT Tranformierung der Componenten-XML-Datei

        Philipp Hasenfratz
        • xsl
        1. 0
          Thomas J.S.
          1. 0
            Philipp Hasenfratz
            1. 0
              Thomas J.S.
              1. 0
                Philipp Hasenfratz
                1. 0
                  Thomas J.S.
    2. 0
      Thomas J.S.
      1. 0
        Philipp Hasenfratz
      2. 0
        Simon Reinhardt
        1. 0
          Thomas J.S.
        2. 0
          Philipp Hasenfratz
          1. 0
            Thomas J.S.
            1. 0
              Philipp Hasenfratz
              1. 0
                Thomas J.S.
                1. 0
                  Philipp Hasenfratz
                  1. 0
                    Thomas J.S.
                    1. 0
                      Philipp Hasenfratz
                      1. 0
                        Thomas J.S.
                        1. 0
                          Philipp Hasenfratz
  6. 0
    Philipp Hasenfratz