Majao: Index erstellen via XML

Hallo,
sicherlich eine Anfängerfrage in Sachen XML: wie ist es möglich, eine Register- bzw. Indexseite zu bauen, die Stichworte aus verschiedenen XML Dateien herausliest und alphabetisch auflistet? Ich stelle mit das so vor, dass die Stichworte auf den Seiten in der Beschreibung  (...stichworte="stichwortA, stichwortB"...) mitgegeben werden. Ich habe mir den SELFHTML-Fachartikel von Thomas J. Sebestyen "Elemente gruppieren durch Referenzierung von ID-Werten" angesehen, dort wird etwas ähnliches umgesetzt, nur mit Werten, die auf einer einzelnen Seite vorhanden sind. Ich bräuchte eine Lösung, die Elemente aus vielen verschiedenen Seiten zusammenfasst ....
Sorry, ich habe versucht, zuerst im Form nach einer Lösung zu suchen, aber keine Lösung gefunden, und der Themenbereich XML scheint in diesem Forum auch nicht sehr benutzt zu sein. Gibt es irgendwo ein gutes Tutorial für Anfänger ? Oder ein gutes Forum mit dem Schwerpunkt XML.
Vielen Dank für Anregungen
majao

  1. Hallo,

    Eine fertige Lösung kann ich Dir leider nicht präsentieren, habe sowas auch noch nicht gemacht, allerdings kannst Du in XSLT/XPath ganz einfach von "ein Dokument" zu "multiple Dokumente" abstrahieren. XPath bietet die Funktion document() an, die ein Dokument lädt und dessen Dokumentknoten zurückgibt (wenn es das Dokument gibt, sonst gibt's einen Fehler).

    Sprich: Du kannst mal als GANZ einfaches Beispiel sowas machen:

    <xsl:for-each select="document('test.xml')//foo">  
      <!-- tu was -->  
    </xsl:for-each>
    

    Du musst unter Umständen mit den Pfaden aufpassen (document erwartet URIs, keine Pfade; unter UNIX funktioniert das mit absoluten Pfadangaben zufälligerweise trotzdem, unter Windows musst Du halt file:///C:/... angeben oder eben doch relativ Angaben nehmen, da musst Du aufpassen, wozu relativ die sein müssen), aber sonst ist das eigentlich ziemlich idiotensicher, wenn man XSLT an sich einigermaßen verstanden hat.

    Vielleicht hilft Dir das ja weiter.

    Viele Grüße,
    Christian

    1. Vielen Dank für die Rückmeldung,
      vielleicht ist es besser, wenn ich beschreibe, wozu ich das ganze brauche. Ich möchte umfangreichere Texte ins Web stellen, die mehrere Kapitel haben, und die über ein Stichwortregister erschlossen werden sollen. Die eine Frage ist, wie man umfangreiche Texte am besten organisiert: was spricht dafür, alle Kapitel in einer grossen XML-Datei abzubilden, und was dafür, die Kapitel in einzelne XML-Dateien aufzuteilen. Ich denke, der zweite Weg ist bei umfangreichen Texten ist der bessere. Dann stellt sich die zweite Frage: wie organisiere ich über mehrere Dateien hinweg das Inhaltsverzeichnis, das Stichwortregister usw., also die Inhalte oder Informationen, die alle Dateien miteinander verbinden. Ich habe die Rubrik XML/DTD hier im Forum durchgesehen und weiss nun, wie man beispielsweise ein Inhaltsverzeichnis anlegt, weiss aber nicht, wie man das über verschiedenen Dateien hinweg macht. Oder ob ein solches Anliegen überhaupt ganz anderen umgesetzt wird.
      Ich habe zwar Erfahrung in HTML und CSS, aber XML ist für mich Neuland, und ich denke, dass es da vielleicht ganz andere Möglichkeiten gibt.

      PS. Wenn ich die Forumsbeiträge filtere, gibt es nur ganz wenig Beiträge, die sich mit dem Thema XML befassen. Ist XML bei Web-Projekten immer noch nicht so verbreitet, oder gibt es einen anderen Grund, weshalb XML hier kein besonders besprochenes Thema ist ?

      Nochmals vielen Dank für Rückmeldungen und Hilfestellungen

      M.

      1. Hallo Majao,

        Die eine Frage ist, wie man umfangreiche Texte am besten organisiert: was spricht dafür, alle Kapitel in einer grossen XML-Datei abzubilden, und was dafür, die Kapitel in einzelne XML-Dateien aufzuteilen.

        Es gibt für beide Ansätze Gründe, die vor allem in der Art der Be- bzw. Verarbeitung liegen und auch für beide Ansätze geeignete Dokumentenstrukturen/-konzepte: DocBook und DITA. Es stehen jeweils umfangreiche XSLT-Stylesheets für unterschiedliche Ausgabeformate einschließlich (X)HTML zur Verfügung. Dabei teilt DITA nicht unbedingt Kapitel in Teile auf, sondern geht von kleinen Informationseinheiten (Topics) aus, welche sich dann zu größeren Einheiten aufbauen lassen (Stichworte Topicmap und neuerdings auch Bookmap).

        Grüße,
        Thomas

        1. Hallo Thomas,

          vielen Dank für die Antwort. Ich bin deinen Infos nachgegangen und habe gesehen, dass sowohl DocBook als auch DITA eher für technische Dokumentationen entwickelt worden sind. Für literarische Projekte gibt es TEI (Text Encoding Initiative) - andere Schwerpunktbildung habe ich bisher nicht in Erfahrung bringen können. Der modulare Aufbau von DITA scheint mir für mein Anliegen richtig zu sein. Aber der technische Schwerpunkt irritiert mich ein wenig, weil ich an einem sozialwissenschaftlichen Projekt arbeiten möchte. Gibt es auch Dokumentenstrukturen/-konzepte für diesen Bereich? Oder geht es erst einmal um die Frage: kapitel-orientiertes Vorgehen (DocBook) oder topic-orientiertes Vorgehen?

          1. Hallo Majao,

            Ich bin deinen Infos nachgegangen und habe gesehen, dass sowohl DocBook als auch DITA eher für technische Dokumentationen entwickelt worden sind.

            Ja, ursprünglich sogar für die Softwaredokumentation, aber mittlerweile werden diese Konzepte universell eingesetzt.

            Der modulare Aufbau von DITA scheint mir für mein Anliegen richtig zu sein. Aber der technische Schwerpunkt irritiert mich ein wenig, weil ich an einem sozialwissenschaftlichen Projekt arbeiten möchte. Gibt es auch Dokumentenstrukturen/-konzepte für diesen Bereich? Oder geht es erst einmal um die Frage: kapitel-orientiertes Vorgehen (DocBook) oder topic-orientiertes Vorgehen?

            Spezielle Konzepte für Sozialwissenschaften kenne ich nicht. Zum Thema DITA: Lade mal das DITA Open Toolkit herunter und probiere es mit ersten Test-Topics aus. Eine hilfreiche Software zur Umsetzung von DITA-Inhalten ist der XMLmind XML Editor.

            Grüße,
            Thomas

            1. Hallo Thomas,
              ich arbeite mit einem Mac und denke, dass oXygen diesselbe Funktion erfüllt wie XMLmind XML Editor. Ist dem so? Und wenn ich es richtig verstanden habe, ist das DITA Open Toolkit implementiert (bin mir aber nicht sicher).
              Ich stehe, wie du meinen Fragen sicherlich ansehen kannst, noch ganz am Anfang, und würde gerne die Prinzipien verstehen, wie Daten via XML miteinander verknüpft werden können. Eigentlich möchte ich nur Stichworte von verschiedenen Textbausteinen in einer Indexseite zusammenfügen, damit ich die Textbausteine zu einem Stichwort auflisten und dann aufrufen kann. Ich denke, dass es sich hier um eine ganz elementare Sache handelt, finde aber kein Tutorial, in dem dies beschrieben wird. Vielleicht hast du ja eine Idee ... :-)
              Vielen Dank nochmals für deine Hinweise, ich werde mich auf DITA einlassen und auf Topic Maps (geht es bei letzterem nur um die Klassifizierung der Inhalte, während die Inhaltserstellung via DITA erfolgt, oder handelt es sich hier um eine analoge Umgebung, die die Erfassung und Erschliessung von Inhalten mit einschliesst)
              Viele Grüsse
              M.

              1. Hallo Majao,

                ich arbeite mit einem Mac und denke, dass oXygen diesselbe Funktion erfüllt wie XMLmind XML Editor. Ist dem so? Und wenn ich es richtig verstanden habe, ist das DITA Open Toolkit implementiert (bin mir aber nicht sicher).

                Kann ich bei diesem Tool nicht genau sagen, aber üblicherweise haben die neueren Versionen von XML-Editoren und auch Software wie FrameMaker 8 das DITA OT bzw. wenigstens die DITA-DTDs integriert.

                Ich stehe, wie du meinen Fragen sicherlich ansehen kannst, noch ganz am Anfang, und würde gerne die Prinzipien verstehen, wie Daten via XML miteinander verknüpft werden können. Eigentlich möchte ich nur Stichworte von verschiedenen Textbausteinen in einer Indexseite zusammenfügen, damit ich die Textbausteine zu einem Stichwort auflisten und dann aufrufen kann.

                DITA kennt Elemente wie keyword bzw. indexterm, die sich bei der Verarbeitung umsetzen lassen (z. B. in die Stichwörter einer Online-Hilfe).

                Vielen Dank nochmals für deine Hinweise, ich werde mich auf DITA einlassen und auf Topic Maps (geht es bei letzterem nur um die Klassifizierung der Inhalte, während die Inhaltserstellung via DITA erfolgt, oder handelt es sich hier um eine analoge Umgebung, die die Erfassung und Erschliessung von Inhalten mit einschliesst)

                Topic-Maps strukturieren die einzelnen Topics im Sinne eines Inhaltsverzeichnisses, z. B. so:

                <?xml version="1.0" encoding="ISO-8859-1"?>  
                <!DOCTYPE map PUBLIC "-//OASIS//DTD DITA Map//EN" "dtd/map.dtd">  
                <map title="Titel" id="ID">  
                  
                  <topicref navtitle="Titel_1" href="topic_1.xml" type="topic"/>  
                  
                  <topicref navtitle="Titel_2" href="topic_2.xml" type="topic">  
                    <topicref navtitle="Titel_2.1" href="topic_21.xml" type="topic"/>  
                    <topicref navtitle="Titel_2.2" href="topic_22.xml" type="topic"/>  
                  </topicref>  
                  
                  <!-- weitere topicref-Elemente -->  
                  
                </map>
                

                Dabei kann topicref einzeln stehen oder mit weiteren topicref-Elementen verschachtelt werden. DITA 1.1 stellt zudem eine spezialisierte Bookmap für Bücher bereit.

                Grüße,
                Thomas

                1. Vielen Dank, ich konnte das Beispiel gut nachvollziehen und habe mich mit oXygen befasst, mit dem man sehr gut DITA und DocBook Projekt edieren kann (soweit ich das als Anfänger überblicke .... )
                  Eigentlich wollte ich über keyword-Elemente "automatisch" eine Indexseite generieren. Und in den DITA Spec's ist auch von einer automatischen Indexierung die Rede: "Specialized elements derived from <keyword> may also have extended processing, such as different formatting or automatic indexing." Aber mir ist immer noch nicht klar, wie eine solche automatische Indexierung angelegt wird.

                  So, wie es in deinem Beispiel aussieht, muss man die Stichworte "manuell" auf einer Indexseite anlegen, und kann erst darüber auf die Stichworte einer Seite zugreifen. Sicherlich macht dieses Vorgehen manchmal Sinn. Aber wie es dann weitergeht, ist mir auch noch nicht klar. Wie wird eine klassische Indexseite angelegt? Als Seiten des Typs "topic"? Oder als Seite des Typs "map"? Und: da ein Stichwort meist auf verschiedenen Seiten vorhanden ist, braucht es neben der Indexseite eine Ergebnisseite, auf der die Fundstellen aufgelistet und mit den entsprechenden Seiten oder Seitenstellen verknüpft sind. Wie wird diese Verknüpfung erstellt?

                  Fragen über Fragen ... ich suche seit Stunden nach einem guten einführenden Tutorial, und ich kann einfach nichts finden .....  :-(((

                  HG M.

                  1. Hallo Majao,

                    So, wie es in deinem Beispiel aussieht, muss man die Stichworte "manuell" auf einer Indexseite anlegen, und kann erst darüber auf die Stichworte einer Seite zugreifen. Sicherlich macht dieses Vorgehen manchmal Sinn. Aber wie es dann weitergeht, ist mir auch noch nicht klar. Wie wird eine klassische Indexseite angelegt?

                    In jedem Topic oder Task werden die entsprechenden Stichwörter eingetragen. Es kommt also beim Prozessieren darauf an, diese Inhalte auszulesen und in einen Index zu übertragen (Bezug Stichwort zu Topic/Task herstellen).

                    Fragen über Fragen ... ich suche seit Stunden nach einem guten einführenden Tutorial, und ich kann einfach nichts finden .....  :-(((

                    Das erstbeste aufgefundene Tutorial sieht doch bereits brauchbar aus. "Keywords and Indexes" werden dort auch behandelt.

                    Grüße,
                    Thomas