josef stebegg: alphabetische Ausgabe (3)

Hallo.

Einen letzten Wunsch habe ich noch zur alphabetischen Ausgabe

...
 <fam><name>Nf</name>
  <gat><name>H.</name>
   <art>Holunder</art>
  </gat>
 </fam>

<fam><name>Bf</name>
  <gat><name>K.</name>
   <art>Karde</art>
  </gat>
  <gat><name>S</name>
   <art>Wiesensalbei</art>
   <art>Gartensalbei</art>
  </gat>
  <gat><name>D</name>
   <art>Distel</art>
  </gat>
 </fam>
 ...

...
<xsl:for-each select="fam"><xsl:sort select="." /><div class="fam"><xsl:value-of select="name"/>
<xsl:for-each select="gat"><xsl:sort select="." /><div class="gat"><xsl:value-of select="name"/>
<xsl:for-each select="art"><xsl:sort select="." /><div>
<xsl:attribute name="class">
 xsl:choose
  <xsl:when test="@arte = '1'">art1</xsl:when>
  xsl:otherwiseart</xsl:otherwise>
 </xsl:choose>
</xsl:attribute>
<xsl:value-of select="."/>
</div></xsl:for-each>
</div></xsl:for-each>
</div></xsl:for-each>
...

Das ergibt  :
 Bf
   D
     Distel
   K
     Karde
   S
     Gartensalbei
     Wiesensalbei
 Nf
   H
     Holunder

Wie kann ich nun die <fam> (familien) ausschalten damit die alphabetische Ordung wieder stimmt :

D
      Distel
   H
      Holunder
   K
      Karde
   S
      Gartensalbei
      Wiesensalbei

schöne Grüße
  Josef

  1. Hallo,

    Einen letzten Wunsch habe ich noch zur alphabetischen Ausgabe

    Wie kann ich nun die <fam> (familien) ausschalten damit die alphabetische Ordung wieder stimmt :

    Das ist mehr oder weniger so nicht machbar: wo soll denn eine Familie dargestellt werden, wenn sie zwar mehre Gattungen hat, aber es eine andere Familie gibt, die nach deiner gewünschten Sortierung dazwischen kommen müsste?

    Denn dann müsste zwangsläufig so etwas rauskommen:

    Bf
       D
         Distel
     Nf
       H
         Holunder
     Bf
       K
         Karde
       S
         Gartensalbei
         Wiesensalbei

    Grüße
    Thomas

    1. Bf
         D
           Distel
      Nf
         H
           Holunder
      Bf
         K
           Karde
         S
           Gartensalbei
           Wiesensalbei

      Danke für die Antwort. Wahrscheinlich habe ich schlecht formuliert. Bis jetzt ist ja mit Deiner (und Andreas) Hilfe genau das erwartete herausgekommen:

      Bf
         D
           Distel
         K
           Karde
         S
           Gartensalbei
           Wiesensalbei
       Nf
         H
           Holunder

      Wie man auch unter http://stebegg.nit.at/bienenpflanzen.xml sehen kann

      In der css Datei könnte man die <fam> hidden schalten und gleich danach (wegen der Verschachtelung) die <gat> visible.

      das ergibt aber:

      D
           Distel
         K
           Karde
         S
           Gartensalbei
           Wiesensalbei
         H
           Holunder

      und dann sind aber die Gattungen <gat> (an erster Stelle) nicht mehr alphabetisch.

      Wenn die bienenpflanzen (und ähnliche Dateien) ein abgeschlossenes System wären, würde ich die <fam> (und darüberliegende Stufen) einfach herauslöschen und eine neue xml datei machen.

      schöne Grüße
        Josef

      1. Hallo,

        Danke für die Antwort. Wahrscheinlich habe ich schlecht formuliert. Bis jetzt ist ja mit Deiner (und Andreas) Hilfe genau das erwartete herausgekommen:

        Bf
           D
             Distel
           K
             Karde
           S
             Gartensalbei
             Wiesensalbei
        Nf
           H
             Holunder

        Wie man auch unter http://stebegg.nit.at/bienenpflanzen.xml sehen kann

        Hast du mal das mit Firefox angeschaut?

        In der css Datei könnte man die <fam> hidden schalten und gleich danach (wegen der Verschachtelung) die <gat> visible.

        das ergibt aber:

        D
             Distel
           K
             Karde
           S
             Gartensalbei
             Wiesensalbei
           H
             Holunder

        und dann sind aber die Gattungen <gat> (an erster Stelle) nicht mehr alphabetisch.

        Ja und da sind wie beim selben Problem:
        Wie soll H zwischen D und K hineinkommen, wenn dafür die Familie geteilt werden muss? Die Struktur des XMLs ist anders und die Ausgabe ist ebenfalls anders strukturiert (die divs).
        Wenn die ausgabe anders aufgebaut werden kann, ist es möglich, da kann man nach <gat> gruppieren, aber sonst geht das nicht, bzw. die <fam> muss dann in der Ausgabe geteilt werden (heisst <div>fam 1 <div>gat A</div></div> <div>fam 2<div>gat B</div></div><div>fam 1<div>gat C</div></div>)

        Grüße
        Thomas

        1. Hast du mal das mit Firefox angeschaut?

          habe selber leider nur ie6, kann mir aber den Salat vorstellen. Wenn ich mit der Datei fertig bin werde ich sie sowieso mit saxon in eine html umwandeln.

          Ja und da sind wie beim selben Problem:
          Wie soll H zwischen D und K hineinkommen, wenn dafür die Familie geteilt werden muss? Die Struktur des XMLs ist anders und die Ausgabe ist ebenfalls anders strukturiert (die divs).

          Jetzt verstehe ich Dein Argument.
           Ich habe mir das zu einfach vorgestellt. Wenn ich aus dem Musterbeispiel Bf und Nf herauslösche dann bekomme ich ja
             D
               Distel
             H
               Holunder
             K
               Karde
             S
               Gartensalbei
               Wiesensalbei

          und dacher habe ich mir gedacht es muß doch in xsl auch etwas geben was das gleiche bewirkt.
          Danke jedenfalls für Deine Hilfe.

          schöne Grüße
            Josef

          1. Hallo,

            Wie soll H zwischen D und K hineinkommen, wenn dafür die Familie geteilt werden muss? Die Struktur des XMLs ist anders und die Ausgabe ist ebenfalls anders strukturiert (die divs).

            Jetzt verstehe ich Dein Argument.
            Ich habe mir das zu einfach vorgestellt. Wenn ich aus dem Musterbeispiel Bf und Nf herauslösche dann bekomme ich ja

            [...]

            und dacher habe ich mir gedacht es muß doch in xsl auch etwas geben was das gleiche bewirkt.

            Geben ja, aber dann passiert eben das, was ich am Ende meines vorherigen Postings geschrieben habe (der Teil mit den divs, jedenfalls so fern diese div-Struktur beibehalten werden soll.

            Grüße
            Thomas

            1. Geben ja, aber dann passiert eben das, was ich am Ende meines vorherigen Postings geschrieben habe (der Teil mit den divs, jedenfalls so fern diese div-Struktur beibehalten werden soll.

              Dann habe ich das doch nicht richtig verstanden.

              Wenn die ausgabe anders aufgebaut werden kann ... ist das nicht eigentlich das Problem ?
              (das kann ja nur durch die xsl gehen)

              Wenn du von <div> schreibst, meinst du damit eine html Ausgabe (saxon) ?

              Die xml könnte ich noch anders aufbauen.

              <fam><name>Nf</name>
                <gat><name>H.</name>
                 <art>Holunder</art>
                </gat>
               </fam>

              <fam><name>Bf</name>
                <gat><name>K.</name>
                 <art>Karde</art>
                </gat>
               </fam>

              <fam><name>Bf</name>
                <gat><name>S</name>
                 <art>Wiesensalbei</art>
                 <art>Gartensalbei</art>
                </gat>
               </fam>

              <fam><name>Bf</name>
                <gat><name>D</name>
                 <art>Distel</art>
                </gat>
               </fam>

              dann kommt aber (wenn auch die fam angezeigt werden sollen) das heraus:
              bf
                 D
                    Distel
              nf
                 H
                    Holunder
              bf
                 K
                    Karde
              bf
                 S
                    Gartensalbei
                    Wiesensalbei

              schöne Grüße
                Josef

              1. das ist richtiger:

                bf
                   D
                      Distel
                bf
                   K
                      Karde
                bf
                   S
                      Gartensalbei
                      Wiesensalbei
                nf
                   H
                      Holunder

                1. Hallo,

                  bf
                     D
                        Distel
                  bf
                     K
                        Karde
                  bf
                     S
                        Gartensalbei
                        Wiesensalbei
                  nf
                     H
                        Holunder

                  Ja, aber jetzt kannst du die Familien so sortieren:
                  <xsl:for-each select="fam"><xsl:sort select="gat" />

                  Grüße
                  Thomas

                  1. Ja, aber jetzt kannst du die Familien so sortieren:
                    <xsl:for-each select="fam"><xsl:sort select="gat" />

                    Danke das geht doch tatsächlich. Und wenn ich die fam übergehe
                    habe ich auch das erhoffte Ergebnis:

                    D
                          Distel
                       H
                          Holunder
                       K
                          Karde
                       S
                          Gartensalbei
                          Wiesensalbei

                    Da habe ich wieder etwas gelernt, aber im konkreten Fall habe ich das Problem nur verlagert.
                    Das Ziel ist ja nur eine ! xml datei zu haben.
                    Wenn ich nun mit dem neuen xml Aufbau die fam auch anzeigen möchte dann bekomme ich nicht mehr wie es sein soll :

                    bf
                       D
                          Distel
                       K
                          Karde
                       S
                          Gartensalbei
                          Wiesensalbei
                    nf
                       H
                          Holunder

                    sondern :

                    bf
                       D
                          Distel
                    bf
                       K
                          Karde
                    bf
                       S
                          Gartensalbei
                          Wiesensalbei
                    nf
                       H
                          Holunder

                    schöne Grüße
                      Josef

                    1. Hallo,

                      Da habe ich wieder etwas gelernt, aber im konkreten Fall habe ich das Problem nur verlagert.
                      Das Ziel ist ja nur eine ! xml datei zu haben.

                      Du kannst ja nur eine XML-Datei haben, die muss nur anders aufgebaut sein.

                      Wenn ich nun mit dem neuen xml Aufbau die fam auch anzeigen möchte dann bekomme ich nicht mehr wie es sein soll :
                      sondern :

                      [...]

                      Das ist logisch.

                      Aber machen wir es anders:

                      1. Was genau möchtest du anzeigen? (bisher war es mal die Famileie, mal die Gattung) Was genau soll also in der Ausgabe stehen?
                      2. welche Informationen genau stehen im XML. Die Aufbau ist dabei jetzt egal: es geht nur daraum welche Informationen es im XML abgebildet werden sollen.

                      Grüße
                      Thomas

                      1. Das soll eine Seite über die Systematik der Pflanzen werden die für Bienen wichtig sind.

                        Ich habe das geändert was vielleicht bei Firefox gestört hat. http://stebegg.nit.at/bienenpflanzen.xml

                        Die wesentliche Struktur (vereinfacht) schaut jetzt jedenfalls so aus:

                        <klassen>
                          <klasse>DREIFURCHENPOLLEN - ZWEIKEIMBLÄTTRIGE
                            <unterklasse><name>(noch) ohne Unterklasse</name>
                              <ordnung><name>Silberbaumartig</name>
                                <fam><name>Platanengewächse</name>
                                  <gat><name>Platanen</name>
                                    <art>Die ahornblättrige (gewöhnliche) Platane [Platanus x acerifolia]</art>
                                  </gat>
                                </fam>
                              </ordnung>
                              <ordnung><name>Buchsbaumartige</name>
                                <fam><name>Buchsbaumgewächse</name>
                                  <gat><name>Buchsbäume</name>.
                                    <art>Der gewöhnliche Buchsbaum [Buxus sempervirens]</art>
                                  </gat>
                                </fam>
                                <fam><name>...</name>
                                  <gat><name>...</name>.
                                    <art>...</art>
                                  </gat>
                                </fam>
                              </ordnung>
                            </unterklasse>
                                ...
                                usw.
                            <unterklasse>
                          </klasse>
                        </klassen>

                        ---

                        <xsl:template match="klassen">
                        <xsl:for-each select="klasse"><xsl:sort select="." /><div class="klasse"><xsl:value-of select="child::text()"/>
                        <xsl:for-each select="unterklasse"><xsl:sort select="." /><div><xsl:value-of select="name"/>
                        <xsl:for-each select="ordnung"><xsl:sort select="." /><div class="ordnung"><xsl:value-of select="name"/>
                        <xsl:for-each select="fam"><xsl:sort select="." /><div class="fam"><xsl:value-of select="name"/>
                        <xsl:for-each select="gat"><xsl:sort select="." /><div><xsl:value-of select="name"/>
                        <xsl:for-each select="art"><xsl:sort select="." /><div><xsl:value-of select="."/>
                        </div></xsl:for-each>
                        </div></xsl:for-each>
                        </div></xsl:for-each>
                        </div></xsl:for-each>
                        </div></xsl:for-each>
                        </div></xsl:for-each>
                        </xsl:template>

                        (die vereinfachte xsl wird nicht genau stimmen, ich habe schon sehr viele Varianten)

                        Damit es übersichtlicher wird will ich die Ausgabe (mindestens) ein Mal teilen. Ein Mal bis Familien und ein Mal ab Familien.
                        Im Prinzip habe ich ja alles. Im ersten Fall muß ich in der css Datei die Gattungen und Arten hidden schalten und im zweiten Fall muß ich in einer eigenen xml Datei alle klasse, unterklasse und ordnungen herauslöschen. Und wenn ich nur die Gattungen und Arten ausgeben will auch die Familien (So stimmt jedenfalls die alphabetische Rangordnung und nichts ist doppelt).

                        Das ist aber nicht sehr elegant. Da immer wieder neue Pflanzen dazu kommen auch arbeitsaufwendig und fehleranfällig.

                        schöne Grüße
                          Josef

                        1. Hallo,

                          Das soll eine Seite über die Systematik der Pflanzen werden die für Bienen wichtig sind.

                          Ich habe das geändert was vielleicht bei Firefox gestört hat. http://stebegg.nit.at/bienenpflanzen.xml

                          Es stört ihm, dass das XSL vom Server mit "Content-Type: text/plain" ausgeliefert wird.
                          Aber das ist egal, wenn du das HTML dann lokal mit Saxon erzeugst.
                          Den Rest schaue ich mir dann in Ruhe an.

                          Grüße
                          Thomas

                          1. Aber das ist egal, wenn du das HTML dann lokal mit Saxon erzeugst.
                            Den Rest schaue ich mir dann in Ruhe an.

                            ja Danke

                            schöne Grüße
                            josef

                            1. Hallo,

                              Aber das ist egal, wenn du das HTML dann lokal mit Saxon erzeugst.
                              Den Rest schaue ich mir dann in Ruhe an.

                              Jetzt habe ich die Zeit gefunden ...
                              ----------------------------------
                              Damit es übersichtlicher wird will ich die Ausgabe (mindestens) ein Mal teilen. Ein Mal bis Familien und ein Mal ab Familien.
                              [...] Und wenn ich nur die Gattungen und Arten ausgeben will auch die Familien (So stimmt jedenfalls die alphabetische Rangordnung und nichts ist doppelt).
                              Das ist aber nicht sehr elegant. Da immer wieder neue Pflanzen dazu kommen auch arbeitsaufwendig und fehleranfällig.
                              ------------------------------------

                              Normalerweise tut das wenig zur Sache, aber hier hätte ich mir gewünscht, dass du etwas weniger sparsam mit den Kommatas gewesen wärst.

                              Also ... Ausgabe einmal bis Familien. Du hast:
                              reich
                              -abteilung
                               klassen
                                  klasse
                                     unterklasse
                                        ordnung
                                           fam(ilie)
                                              gat(tung)

                              Das ist auf alle Fälle eine ganz andere Aufbau, als das, was bisher aus deinen XML-Fragmenten zu herauslesen war.

                              Es wird mir leider noch immer nicht klar was du eigentlich machen möchtest. (Ich bemühe mich dabei aber wirklich!) Willst du eine HTML-Seite in der alles drinn steht, oder willst du aus dem einen XML, am Ende mehrere HTML-Seiten produziert haben.

                              Aber die Ausgabe bis Familie kann ich noch nachvollziehen: angezeigt wird die Abteilung, dann wird es nach (Über-)Klassen sortiert, darin wird es nach Klassen sortiert, darin wird es nach (vielleicht noch nach Unterklassen und darin noch nach Ordnung?, aber auf alle fälle nach:) Familien sortiert.
                              d.h. die letze ausgegebene Information ist der Name der Familie.

                              Aber ab hier verstehe ich dann (noch immer) nicht.
                              Wie soll es denn innerhalb von Familien bzw. bei Gattung sortiert werden, wenn dies deine Struktur ist:
                              reich
                              -abteilung
                               klassen
                                  klasse
                                     unterklasse
                                        ordnung
                                           fam(ilie)
                                              gat(tung)

                              Du kannst natürlich nach wie vor alle bisherigen Sortierkriterien unsichtbar behalten. Aber dann hast du eben _keine_ Sortierung wo alle Gattungen nach dem ABC sortiert sind, sie werden dann nur innerhalb der Familie so sortiert.

                              Was du defintiv nicht haben kannst ist eine Ausgabe wo:

                              1. die Familie angezeigt wird _und_ dann die Sortierung ungeachtet der Familie nach Gattung erfolgt _wobei_ die Anzeige der Familie nicht geteilt wird. Das kann du auch bei einer anderen XML-Struktur nicht haben.
                                "Bildlich": es geht folgendes nicht:

                              <div>
                                   Familie A:
                                   <div>Gattung A</div>
                                   <-div>Gattung B</div->
                                   <div>Gattung C</div>
                                   <-div>Gattung D</div->
                                   <div>Gattung E</div>
                              </div>

                              wobei Gattung B und Gattung D aus Familie B und Familie C Stammen.
                              Sowas kannst du nur so haben:

                              <div>
                                   Familie A:
                                   <div>Gattung A</div>
                              </div>

                              <div>
                                   Familie B:
                                   <div>Gattung B</div>
                              </div>

                              <div>
                                   Familie A:
                                   <div>Gattung C</div>
                              </div>

                              <div>
                                   Familie C:
                                   <div>Gattung D</div>
                              </div>

                              <div>
                                   Familie A:
                                   <div>Gattung E</div>
                              </div>

                              Was du haben kannst ist:

                              <div>
                                  Gattung A (Familie A)
                              </div>

                              <div>
                                  Gattung B (Familie B)
                              </div>

                              <div>
                                  Gattung C (Familie A)
                              </div>

                              <div>
                                  Gattung D (Familie C)
                              </div>

                              <div>
                                  Gattung E (Familie A)
                                  Gattung F
                                  Gattung G
                              </div>

                              <div>
                                  Gattung H (Familie B)
                              </div>

                              <div>
                                  Gattung I (Familie C)
                                  Gattung J
                              </div>

                              Das ist alles was du haben kannst. Das hat aber weder mit XML noch mit XSL noch mit CSS zu tun, sondern nur damit, dass du größere Einheiten nicht in die in ihnen erhaltenen kleinere Einheiten stopfen kannst. (Sprich du kannst die Eischale nicht in das Eigelb stopfen, so dass die Schale unversehrt ist und das Eigelb auch noch immer enthaltet)

                              Grüße
                              Thomas

                              1. Jetzt habe ich die Zeit gefunden ...

                                Danke für Deinen großen Aufwand. Ich befürchte zuletzt umsonst. Alles kann man mit xml/xsl auch nicht machen.

                                Normalerweise tut das wenig zur Sache, aber hier hätte ich mir gewünscht, dass du etwas weniger sparsam mit den Kommatas gewesen wärst.

                                Durch fehlende Kommatas sind wahrscheinlich neue Mißverständnisse entstanden.

                                Also ... Ausgabe einmal bis Familien. Du hast:
                                reich
                                -abteilung
                                klassen
                                    klasse
                                       unterklasse
                                          ordnung
                                             fam(ilie)
                                                gat(tung)

                                Das ist auf alle Fälle eine ganz andere Aufbau, als das, was bisher aus deinen XML-Fragmenten zu herauslesen war.

                                In der praktischen Anwendung sind noch zwei Etagen (Kaskaden) mehr, aber das ändert ja nichts am Prinzip. Noch dazu bin ich nicht sicher ob ich überhaupt erst bei der Klasse anfangen soll.

                                Es wird mir leider noch immer nicht klar was du eigentlich machen möchtest. (Ich bemühe mich dabei aber wirklich!) Willst du eine HTML-Seite in der alles drinn steht, oder willst du aus dem einen XML, am Ende mehrere HTML-Seiten produziert haben.

                                Ja ich will (wollte) aus einer ! xml mehrere html Seiten produzieren.

                                Aber die Ausgabe bis Familie kann ich noch nachvollziehen: angezeigt wird die Abteilung, dann wird es nach (Über-)Klassen sortiert, darin wird es nach Klassen sortiert, darin wird es nach (vielleicht noch nach Unterklassen und darin noch nach Ordnung?, aber auf alle fälle nach:) Familien sortiert.
                                d.h. die letze ausgegebene Information ist der Name der Familie.

                                a wie Du auch schreibst hier kann ich die gat und art unsichtbar machen.
                                (http://stebegg.nit.at/bienenpflanzen1.xml)

                                Aber ab hier verstehe ich dann (noch immer) nicht.
                                Wie soll es denn innerhalb von Familien bzw. bei Gattung sortiert werden, wenn dies deine Struktur ist:
                                reich
                                -abteilung
                                klassen
                                    klasse
                                       unterklasse
                                          ordnung
                                             fam(ilie)
                                                gat(tung)

                                Hier habe ich auch geschrieben das ich alles ab Ordnungen (unterkl. etc.) in einer eigenen xml (Bienenpflanzen2) lösche !
                                (http://stebegg.nit.at/bienenpflanzen2.xml)
                                Wenn auch die Seite nicht richtig angezeigt wird, so kann man es im Quelltext sehen.

                                schöne Grüße
                                josef

                                p.s.
                                Muß mich beeilen sonst fliege ich wieder aus der Leitung

                                1. Hallo,

                                  Danke für Deinen großen Aufwand. Ich befürchte zuletzt umsonst. Alles kann man mit xml/xsl auch nicht machen.

                                  Tja ...

                                  Ja ich will (wollte) aus einer ! xml mehrere html Seiten produzieren.

                                  OK, aber das kannst du immer noch.
                                  Du muss sie Sachen nicht löschen, so eine Seite wie jetzt das b...2.xml produziert kannst du ja auch so haben.
                                  Es bedarf nur andere Templates (mit mode) die du dann entsprechend aufrufst. Wenn du mit Saxon arbeitest, könntest du dauch xsl2 verwenden, dann könntest du die verschiedene Ausgaben direkt aus dem XSL steuern und so mehrere HTML-Seiten erstellen.
                                  Geht auch ohne, nur muss du dann halt das mode-Wechsel selbst manuell im XSL machen und dann eine erneute Transformation auslösen.

                                  Grüße
                                  Thomas

                                  PS: Wenn du schon Zwetschke (heisst übringens Zwetschge mit "g") erwähnst solltest du auch Weichsel erwähnen ;-)

                                  1. OK, aber das kannst du immer noch.
                                    [.....] manuell im XSL machen und dann eine erneute Transformation auslösen.

                                    Da habe ich momentan keine Vorstellung.
                                    Jetzt hast Du dir aber eine Pause verdient. Danke nochmals und frohe Ostern.

                                    PS: Wenn du schon Zwetschke (heisst übringens Zwetschge mit "g") erwähnst solltest du auch Weichsel erwähnen ;-)

                                    Ich mache sowieso zwei Ausführungen, eine österreichische und eine deutsche (incl. Weichseln).

                                    schöne Grüße (bis zu alphabetische Ausgabe (4))
                                      Josef