Diskussion:Simple API for XML
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)
SAX vs. DOM
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?
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)
- Ich bin zwar kein SAX-Anwender, geschweige denn Experte für SAX, kann aber vielleicht einige klärende Hinweise geben:
- 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.
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.- Ob wir außerhalb der Elemente
titel
oderkapitel
Nur-Text akzeptieren wollen, hängt von uns ab. - Wir könnten sagen, dass wir Nicht-Whitespace nur als Inhalt der untersten Kind-Elemente akzeptieren wollen.
- Nicht-Whitespace außerhalb der Kind-Elemente wäre ein Fehler (sonst über DTD geregelt).
- Nur-Whitespace außerhalb der Kind-Elemente würde wie hier nur der optischen Verdeutlichung für menschliche Leser dienen und soll ignoriert werden.
- 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)
- 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
- Einrückungsstil:
- Auf meiner Benutzerseite oute ich mich aus ebendiesen Gründen als
- Soviel als Nachtrag --PerfektesChaos 10:12, 15. Feb. 2012 (CET)
- Das Beispiel sollte dahingehend verbessert werden, dass oben wie unten zum Einrücken jeweils genau zwei oder drei Leerzeichen benutzt werden.