Einfache API für XML

SAXOFON (Einfache API für XML) ist ein Ereignis-basierter folgender Zugang parser API, die durch die Adressenliste von XML-DEV für XML Dokumente entwickelt ist. SAXOFON stellt einen Mechanismus zur Verfügung, um Daten aus einem XML Dokument zu lesen, das eine Alternative dazu ist, das von Document Object Model (DOM) zur Verfügung gestellt ist. Wo der DOM auf dem Dokument als Ganzes funktioniert, SAXOFON funktionieren parsers auf jedem Stück des XML Dokumentes folgend.

Definition

Verschieden von DOM gibt es keine formelle Spezifizierung für das SAXOFON. Wie man betrachtet, ist die javanische Durchführung des SAXOFONS normativ.. SAXOFON bearbeitet Dokumentenzustand-abhängig im Gegensatz zu DOM, der für die zustandunabhängige Verarbeitung von XML Dokumenten verwendet wird.

Vorteile

SAXOFON parsers hat einige Vorteile über DOM-artigen parsers. Ein SAXOFON parser muss nur jedes Syntaxanalyse-Ereignis melden, wie es geschieht, und normalerweise fast ganze diese Information verwirft, einmal hat berichtet (es behält wirklich jedoch einige Dinge, zum Beispiel eine Liste aller Elemente, die noch nicht geschlossen worden sind, um spätere Fehler wie Endanhängsel in der falschen Ordnung zu fangen). So ist das minimale Gedächtnis, das für ein SAXOFON parser erforderlich ist, zur maximalen Tiefe der XML Datei (d. h., des XML Baums) und die maximalen Daten proportional, die an einem einzelnen XML Ereignis (wie der Name und die Attribute eines einzelnen Anfang-Anhängsels oder der Inhalt einer in einer Prozession gehenden Instruktion, usw.) beteiligt sind.

Dieses viel Gedächtnis wird gewöhnlich unwesentlich betrachtet. Ein DOM parser baut im Gegensatz normalerweise eine Baumdarstellung des kompletten Dokumentes im Gedächtnis zunächst so mit dem Gedächtnis, das mit der kompletten Dokumentenlänge zunimmt. Das nimmt längere Zeitdauer und Raum für große Dokumente (Speicherzuteilung, und Datenstruktur-Aufbau nehmen Zeit in Anspruch). Der ersetzende Vorteil besteht natürlich darin, der einmal geladen hat, kann auf jeden Teil des Dokumentes in jeder Ordnung zugegriffen werden.

Wegen der Ereignis-gesteuerten Natur des SAXOFONS ist Verarbeitung von Dokumenten allgemein viel schneller als DOM-artiger parsers, so lange die Verarbeitung in einem Pass des Anfangs zum Ende getan werden kann. Viele Aufgaben, wie das Indexieren, die Konvertierung zu anderen Formaten, sehr einfacher Formatierung können und ähnlich dieser Weg erledigt werden. Andere Aufgaben, wie das Sortieren, Umordnen von Abteilungen, Bekommen von einer Verbindung bis sein Ziel, Aufblicken-Information über ein Element, um zu helfen, ein späteres zu bearbeiten, verlangen und ähnlich das Zugreifen auf die Dokumentenstruktur in komplizierten Ordnungen und werden mit DOM viel schneller sein als mit vielfachen SAXOFON-Pässen.

Einige Durchführungen passen keine Kategorie ordentlich: Eine DOM-Annäherung kann seine beharrlichen Daten auf der Platte behalten, klug organisiert für die Geschwindigkeit (tun Redakteure wie Autor/Redakteur von SoftQuad und großes Dokument browser/indexers wie DynaText das); während eine SAXOFON-Annäherung Information für den späteren Gebrauch klug verstecken kann (jedes Bestätigungs-SAXOFON behält parser mehr Information als beschrieben oben). Solche Durchführungen verschmieren die DOM/SAX Umtausche, aber sind häufig in der Praxis sehr wirksam.

Wegen der Natur von DOM verlangt das verströmte Lesen von der Platte Techniken wie faule Einschätzung, geheime Lager, virtuelles Gedächtnis, beharrliche Datenstrukturen oder andere Techniken (wird eine solche Technik in [US-Patent bekannt gegeben 5,557,722]). Die Verarbeitung von XML Dokumenten, die größer sind als Hauptgedächtnis, wird manchmal unmöglich gedacht, weil einige DOM parsers es nicht erlauben. Jedoch ist es nicht weniger möglich als das Sortieren eines datset größeren als Hauptgedächtnis. Speicherplatz als Gedächtnis, um diese Beschränkung auszuweichen.

Nachteile

Das Ereignis-gesteuerte Modell des SAXOFONS ist für die XML-Syntaxanalyse nützlich, aber es hat wirklich bestimmte Nachteile.

Eigentlich verlangt jede Art der XML Gültigkeitserklärung Zugang zum Dokument vollständig. Das trivialste Beispiel ist, dass ein im DTD erklärtes Attribut, des Typs IDREF zu sein, verlangt, dass es ein Element im Dokument gibt, das denselben Wert für ein ID-Attribut verwendet. Um das in einem SAXOFON parser gültig zu machen, muss man alle ID-Attribute nachgehen (irgendwelche von ihnen könnte damit enden, durch ein IDREF-Attribut am wirklichen Ende Verweise angebracht zu werden); sowie jedes IDREF-Attribut, bis es aufgelöst wird. Ähnlich, dieses jedes Element gültig zu machen, hat eine annehmbare Folge von Kinderelementen, Information darüber, welche Kinderelemente für jeden Elternteil gesehen worden sind, muss bis zu den Elternteilenden behalten werden.

Zusätzlich verlangen einige Arten von XML, der einfach in einer Prozession geht, habenden Zugang zum kompletten Dokument. XSLT und XPath müssen zum Beispiel im Stande sein, auf jeden Knoten jederzeit im grammatisch analysierten XML Baum zuzugreifen. Redakteure und Browser müssen ebenfalls im Stande sein, zu zeigen, zu modifizieren, und vielleicht jederzeit gültig wiederzumachen. Während ein SAXOFON parser gut verwendet werden kann, um solch einen Baum am Anfang zu bauen, stellt SAXOFON keine Hilfe für solche Verarbeitung als Ganzes zur Verfügung.

XML, der mit dem SAXOFON in einer Prozession geht

Ein parser, der SAXOFON (d. h., ein SAXOFON Parser) Funktionen als ein Strom parser mit einer Ereignis-gesteuerten API durchführt. Der Benutzer definiert mehrere Rückrufaktionsmethoden, die genannt werden, wenn Ereignisse während der Syntaxanalyse vorkommen. Die SAXOFON-Ereignisse schließen (unter anderen) ein:

  • XML Textknoten
  • XML Element-Anfänge und Enden
  • XML in einer Prozession gehende Instruktionen
  • XML Anmerkungen

Einige Ereignisse entsprechen XML-Gegenständen, die plötzlich wie Anmerkungen leicht zurückgegeben werden. Jedoch können XML Elemente viele andere XML-Gegenstände enthalten, und so vertritt SAXOFON sie, wie XML selbst tut: durch ein Ereignis am Anfang und einen anderen am Ende. Richtig sprechend, befasst sich die SAXOFON-Schnittstelle in Elementen, aber in Anhängseln nicht. SAXOFON-Syntaxanalyse ist Einrichtungs-; vorher grammatisch analysierte Daten können nicht nochmals gelesen werden, ohne die Syntaxanalyse-Operation wieder anzufangen.

Es gibt viele EINEM Saxofon ähnliche Durchführungen in der Existenz. In der Praxis ändern sich Details, aber das gesamte Modell ist dasselbe. Zum Beispiel werden XML Attribute normalerweise zur Verfügung gestellt, wie ein Teil der Daten zu Element-Ereignissen gegangen ist, aber auch als getrennte Ereignisse zur Verfügung gestellt werden kann. Für einen anderen stellen einige Durchführungen "Init" und "Finanz"-Rückrufaktionen für den wirklichen Anfang und Ende der Syntaxanalyse zur Verfügung; andere tun nicht.

Beispiel

In Anbetracht des folgenden XML Dokumentes:

&#b6; ein Text

</FirstElement>

Vorwand-Posttext.

</SecondElement>

</DocumentElement>

</Quelle>

Dieses XML Dokument, wenn durchgeführt, ein SAXOFON parser, wird eine Folge von Ereignissen wie der folgende erzeugen:

  • XML Element-Anfang, genannt DocumentElement, mit einem Attribut param gleich, um "zu schätzen"
  • XML Element-Anfang, genannt FirstElement
  • XML Textknoten, mit Daten, die "&#xb6 gleich sind; ein Text" (Zeichen: Bestimmte weiße Räume können geändert werden)
  • XML Element-Ende, genannt FirstElement
  • Die Verarbeitung des Instruktionsereignisses, mit dem Ziel some_pi und Daten some_attr = "some_value" (der Inhalt nachdem ist das Ziel gerade Text; jedoch ist es sehr üblich, die Syntax von XML-Attributen, als in diesem Beispiel zu imitieren)
,
  • XML Element-Anfang, genannt SecondElement, mit einem Attribut param2 gleich "etwas"
  • XML Textknoten, mit Daten, die "dem Vorwand" gleich
sind
  • XML Element-Anfang, genannt Reihen-
  • XML Textknoten, mit Daten, die dem "Text von Inlined" gleich
sind
  • XML Element-Ende, genannt Reihen-
  • XML Textknoten, mit "dem Posttext" gleichen Daten.
  • XML Element-Ende, genannt SecondElement
  • XML Element-Ende, genannt DocumentElement

Bemerken Sie, dass die erste Linie der Probe oben die XML Behauptung und nicht eine in einer Prozession gehende Instruktion ist; als solcher wird es als ein in einer Prozession gehendes Instruktionsereignis nicht berichtet.

Das Ergebnis kann sich oben ändern: Die SAXOFON-Spezifizierung stellt absichtlich fest, dass eine gegebene Abteilung des Textes als vielfache folgende Textereignisse berichtet werden kann. Viele parsers geben zum Beispiel getrennte Textereignisse für numerische Charakter-Verweisungen zurück. So im Beispiel oben kann ein SAXOFON parser eine verschiedene Reihe von Ereignissen erzeugen, von denen ein Teil einschließen könnte:

XML Element-Anfang, genannt FirstElement
  • XML Textknoten, mit Daten, die "&#xb6 gleich sind;"
  • XML Textknoten, mit Daten, die "Einem Text" gleich
sind XML Element-Ende, genannt FirstElement

Weiterführende Literatur

  • David Brownell: SAX2, O'Reilly, internationale Standardbuchnummer 0-596-00237-8
  • W. Scott Means, Michael A. Bodie: Das Buch des SAXOFONS, Keiner Stärke-Presse, der internationalen Standardbuchnummer 1-886411-77-8

Siehe auch

Links


London (Begriffserklärung) / Oxford (Begriffserklärung)
Impressum & Datenschutz