sensoro: Riesige XML verarbeiten

Ich habe folgendes Problem: Ich habe eine Dokumentation als xml-Datei. Diese ist leider sehr groß (ca. 40.000.000 Zeichen). Die Dokumentation soll im Internet dargestellt werden. Das funktioniert so aber nicht in akzeptabler Zeit. Also denke ich das die Datei in mehre kleine Dateien zerlegt werden sollte.

Ich stelle mir vor das die Datei Kapitelweise aufgeteilt wird und dann auch Kapitelweise durchblättert wird so das auch immer nur der grade benötigte Teil geladen wird.

Nur wie stelle ich das an? Oder gibt es vielleicht auch noch eine Alternative?

  1. Ich habe folgendes Problem: Ich habe eine Dokumentation als xml-Datei. Diese ist leider sehr groß (ca. 40.000.000 Zeichen). Die Dokumentation soll im Internet dargestellt werden. Das funktioniert so aber nicht in akzeptabler Zeit. Also denke ich das die Datei in mehre kleine Dateien zerlegt werden sollte.

    40 Millionen Zeichen sind mindestens 40 Millionen Bytes - also rund 40 MB (tendentiell sogar mehr, je nach Zeichencodierung).

    Das Lesen einer solchen Datei ist für die meisten XML-Parser keine sonderlich schwierige Aufgabe.

    Deine Zeitprobleme wirst du vermutlich dadurch bekommen, dass sie "im Internet" dargestellt werden soll - selbst bei einer 20-MBit-Leitung dauert es ein zeiterl die 40 MB zuzustellen.

    Nur wie stelle ich das an? Oder gibt es vielleicht auch noch eine Alternative?

    Wenn die Datei vernünftig gegliedert ist, kannst du sie problemlos mit einer Abfragesprache wie etwa XPath zerlegen.

    1. Wenn die Datei vernünftig gegliedert ist, kannst du sie problemlos mit einer Abfragesprache wie etwa XPath zerlegen.

      Soweit schon mal Danke, suit.

      Nur, wie stelle ich die Datei dann wieder dar? Mir würde jetzt nur einfallen die Datei über xInclude wieder zu vereinen. Aber da wird doch aus allen Einzelteilen wieder eine Große gemacht, oder?

      1. Nur, wie stelle ich die Datei dann wieder dar?

        Wie machst du es denn jetzt?

        Mir würde jetzt nur einfallen die Datei über xInclude wieder zu vereinen. Aber da wird doch aus allen Einzelteilen wieder eine Große gemacht, oder?

        Warum solltest du sie erst zerlegen und dann wieder zusammenbauen - das ist absurd.

        1. Warum solltest du sie erst zerlegen und dann wieder zusammenbauen - das ist absurd.

          Nein das meinte ich so nicht. Ich möchte sie gar nicht wieder zu einer XML vereinen. Ich möchte mit den Einzeldateien weiterarbeiten.

          Wie machst du es denn jetzt?

          Derzeit werden die Dateien über eine Transformation in eine HTML gewandelt.

          Aber wie mache ich das mit mehreren XML Dateien die alle zusammengehören? Ich muss die ja alle miteinander verlinken. Geht das ebenfalls über XPath und eine Transformation indem ich beispielsweise noch XLink´s einbringe?

          Wie bilde ich die verlinkung dann in der HTML ab?

          Das ist mir nicht klar...

          1. Nein das meinte ich so nicht. Ich möchte sie gar nicht wieder zu einer XML vereinen. Ich möchte mit den Einzeldateien weiterarbeiten.

            Warum? Du kannst mit XPath oder DOM den XML-Baum im Parser dynamisch zusammenstützen.

            Wie machst du es denn jetzt?
            Derzeit werden die Dateien über eine Transformation in eine HTML gewandelt.

            Gut, dann transformierst du halt nur noch einen mittels Abfragesprache isolierten Teil in HTML.

            Wie bilde ich die verlinkung dann in der HTML ab?

            Durch irgend ein Merkmal, anhand welchem du einen Abschnitt identifzieren kannst.

          2. Hallo,

            Aber wie mache ich das mit mehreren XML Dateien die alle zusammengehören? Ich muss die ja alle miteinander verlinken. Geht das ebenfalls über XPath und eine Transformation indem ich beispielsweise noch XLink´s einbringe?

            Wie bilde ich die verlinkung dann in der HTML ab?

            Das geht alles. Das ist also nicht die Frage.
            Frage ist: was wählst du und wie viel Zeit/Aufwand kannst du dafür verwenden?

            Bzw. wenn du bereits einzelne HTML-Dateien erzeugst, sehe ich das Problem nicht. Oder meintest du: derzeit ist ein großes XML = ein großen HTML?

            XLink: würde auch gehen, brauchst aber entsprechende Parser dazu.
            Andere Lösung: ähnlich wie wir es für SELFHTML 9 machen:
            Eine index-Datei in der die "Links" auf die einzelne XML-Dateien stehen.
            Dann kannst du mit XSLT 2.0 von dieser Datei ausgehend die einzelne XMLs abarbeiten und aus denen einzelne HTML-Dateien erzeugen. Für die Verlinkung musst du ebenfalls mittels XSLT die entsprechenden Templates bzw. Funktionen schreiben.

            Wenn das ganze nicht immer on-the-fly passieren muss, kannst du dir zumindest den Servlet etc. auf dem Server sparen, dann reicht ja, wenn lokal irgendwo das HTML erzeugt und hochgeladen wird.

            Grüße
            Thomas