Diskussion:Simple API for XML

aus Wikipedia, der freien Enzyklopädie
Letzter Kommentar: vor 9 Jahren von GiftBot in Abschnitt Defekter Weblink
Zur Navigation springen Zur Suche springen

Es ist Quatsch, dass die "Simple API for XML" eine Bibliothek ist. Dies wird auch klar, wenn man nur die ersten Absätze des im Artikel angeführten SAX2-Buches von O'Reilly liest. Daher benötigt der Wikipedia-Artikel eine Überarbeitung. (16.12.04) -- (nicht signierter Beitrag von 217.226.205.190 (Diskussion) 23:44,15. Dezember 2004)

-- Habe den Artikel daher jetzt selbst mal notdürftig geändert. -- (nicht signierter Beitrag von 217.84.182.100 (Diskussion) 01:31, 30. Januar 2005)

In diesem Artikel wir die sequentielle Abarbeitung eines Zeichendatenstroms im Gegensatz zum vollständigen Parsen einer Datei aus meiner Sicht nicht genügend gewürdigt.

DOM und SAX haben beide Vor- und Nachteile. Ohne jetzt im Buch für Compilerbau oder formale Sprachen nachzusehen (ich gehe von den extremen Implementierungsmöglichkeiten aus):

DOM baut i.W. zuerst einen vollständigen Syntaxbaum auf:
+ Eine Validierung der gesamten Datei ist möglich. Dadurch werden nur korrekte XML Dokumente bearbeitet. Es können keine Aktionen entstehen, die aufgrund eines Syntax-Fehlers zurückgesetzt etc. werden müssen
+ Da der Baum im Speicher vorliegt, kann er schnell vor- und rückwärts navigiert werden.
- Ein solcher Baum belegt entsprechend Speicher.
- Die Erstellung des Baums kostet Rechenzeit (die erste Anfrage kann erst "spät" erfolgen).

SAX gibt (ähnlich einem lexikalischen Analyzer) erkannte Tokens sofort an entsprechende Funktionen weiter:
+ Schnelle Vorwärtsabarbeitung des XML-Stroms ist möglich.
+ Niedriger Speicherbedarf.
- Syntaxfehler werden erst spät erkannt. Die Anwendung muss also ein entsprechendes Fehlermodell unterstützen. Es sollten vorher keine Aktionen ausgelöst werden, die nicht kompensiert und zurückgenommen werden können (bzw. es ist eigentlich egal, ob Aktionen ausgelöst wurden).
- Eine Rückwärtsnavigation ist an sich nicht möglich, außer das Ergebnis wurde zwischengespeichert.

Wie im Artikel angedeutet, sind auch hybride Ansätze implementiert, die ein bischen von beidem machen.

Letztlich muss man aufgrund der Anwendung und dem Umfang/Qualität der vorliegenden XML-Parser entscheiden, welchem Paradigma man dem Vorzug geben will. -- (nicht signierter Beitrag von Frankao (Diskussion | Beiträge) 15:29,03. Juni 2007)

Abschnitt "Ereignisse in SAX": character-Ereignis?

[Quelltext bearbeiten]

Das Beispiel im Abschnitt "Ereignisse in SAX" ist für mich nicht ganz nachvollziehbar. Und zwar wegen der Zeilen mit den "character("\n ")":

  • Warum gibt es an genau diesen Stellen ein character("\n ")?
    • Meine Vermutung: Wenn ein XML-Element keine Zeichenkette als Inhalt hat (anders als bspw. "<titel>DOM,..</titel>") dann wird in SAX ein character("\n ")-Ereignis aufgerufen, um genau das anzuzeigen. Wenn das so ist, sollte man das aber bitte zum besseren Verständnis noch erläutern.
  • Warum sind da verschieden viele Leerzeichen nach dem ("\n ?
  • Tippfehler? laut [1] gibt es zwar eine Methode "characters(..)" aber keine "character(..)"-Methode. Oder habe ich an der falschen Stelle geguckt?

Bitte um Klärung! -- GGShinobi 23:01, 14. Feb. 2012 (CET)Beantworten


Ich bin zwar kein SAX-Anwender, geschweige denn Experte für SAX, kann aber vielleicht einige klärende Hinweise geben:
  1. Bei der Anzahl der Leerzeichen handelt es sich um 8 bzw. 16. Das deutet darauf hin, dass man uns einen Tabulator verdeutlichen wollte. Durch irgendwelche Umstände ist das im Beispielcode unterschiedlich umgesetzt worden.
  2. character() möchte uns informieren, dass innerhalb des <seminararbeit> ein Nur-Text gefunden wurde. Hier ist es einer mit Nur-Whitespace: einem Zeilenumbruch und einem Tabulator.
  3. Ob wir außerhalb der Elemente titel oder kapitel Nur-Text akzeptieren wollen, hängt von uns ab.
  4. Wir könnten sagen, dass wir Nicht-Whitespace nur als Inhalt der untersten Kind-Elemente akzeptieren wollen.
  5. Nicht-Whitespace außerhalb der Kind-Elemente wäre ein Fehler (sonst über DTD geregelt).
  6. Nur-Whitespace außerhalb der Kind-Elemente würde wie hier nur der optischen Verdeutlichung für menschliche Leser dienen und soll ignoriert werden.
  7. Ansonsten hat uns der Parser aber ganz brav darüber informiert, was er in dem Datenstrom vorgefunden hat.
HGZH --PerfektesChaos 10:02, 15. Feb. 2012 (CET)Beantworten
Das Beispiel sollte dahingehend verbessert werden, dass oben wie unten zum Einrücken jeweils genau zwei oder drei Leerzeichen benutzt werden.
  • Auf meiner Benutzerseite oute ich mich aus ebendiesen Gründen als
    Einrückungsstil: 3SPC, 1TBS, 0Tabs
Soviel als Nachtrag --PerfektesChaos 10:12, 15. Feb. 2012 (CET)Beantworten


So, ich hab mich jetzt mal "schlaugemacht":
  • whitespace characters zwischen Elementen werden von einem SAX-Parser ebenfalls ausgegeben. Das bedeutet, das Beispiel ist nicht ganz korrekt, da noch einige Whitespaces fehlen.
  • Gleichzeitig erklärt das aber auch die unterschiedlich vielen Leerzeichen. D.h. PerfektesChaos, Du hattest Recht mit Deiner Annahme bezüglich der Tabulatoren :)
  • es ist tatsächlich ein Tippfehler und muss characters heißen
Das Beispiel unten mit den SAX-Parser-Ereignissen einzurücken würde ich aber an dieser Stelle nicht empfehlen, da es den falschen Eindruck erwecken würde, der SAX-Parser würde ebenfalls "eingerückte" Ereignisse werfen.
Ich werde mal versuchen, das Beispiel zu verbessern indem ich es korrigiere, vervolständige und noch ein bisschen ausführlicher erkläre. --GGShinobi (Diskussion) 09:04, 22. Mär. 2012 (CET)Beantworten
Sehr hübsch geworden! Gefällt mir. Lob!
  • (Bist du sicher, dass da ["value="1""] herauskommt und nicht ["value='1'"] – mein schädelinterner Parser schmiert ab?)
Die whitespace characters zwischen Elementen müssen auch gemeldet werden; siehe HTML:
Dieses '''fette''' <i>kursive</i> sind zwei Wörter.
<pre>\n\n   eingerückte neue Zeile nach Leerzeile</pre>
<h3>   <i>Anfang der Überschrift</i></h3>
Die könnten bedeutungstragend sein; darf der Parser nicht einfach weglassen, und die Anwendung muss dann entscheiden, was damit geschehen soll (etwa mehrfacher WS gleichbedeutend mit einem Leerzeichen, oder WS zwischen zwei öffnenden Tags ignorieren).
Liebe Grüße --PerfektesChaos 20:26, 22. Mär. 2012 (CET)Beantworten
[Quelltext bearbeiten]

GiftBot (Diskussion) 22:44, 27. Nov. 2015 (CET)Beantworten