Features und Properties von SAX

(Auszug aus "XML in a Nutshell" von Elliotte Rusty Harold & W. Scott Means)

Die Properties und Features von SAX haben Namen, die mit absoluten URIs angegeben werden. Features haben Boolesche Werte, d.h., sie stehen immer auf true oder false. Properties haben dagegen Objekte als Wert. SAX 2.0 definiert sechs Features und zwei Properties, die Parser kennen, aber nicht unbedingt implementieren müssen. SAX 2.0.2 fügt neun weitere hinzu. Außerdem fügen die meisten Parser dieser Liste eigene Features und Properties hinzu.

SAX-Core-Features

Alle SAX-Parser sollten die folgenden sechs Features kennen. Zwei von diesen Features, nämlich "http://xml.org/sax/features/namespaces" und "http://xml.org/sax/features/namespace-prefixes" müssen implementiert sein, damit ein Parser als SAX2-konform bezeichnet werden darf. Die anderen vier sind optional und müssen nicht unbedingt implementiert sein.

"http://xml.org/sax/features/namespaces"

Wenn dieses Feature auf true steht, gibt es an, dass die Methoden startElement() und endElement() Namensraum-URIs und lokale Namen für Elemente und Attribute liefern. Der Wert false bedeutet dagegen, dass der Parser Elemente und Attribute mit Namensraum-Präfixen an die Methoden startElement() und endElement() übergibt. Falls der Parser etwas nicht übergibt, was er auch nicht unbedingt übergeben muss, wird der Wert dieses Features auf den Leer-String gesetzt. In den meisten Fällen unterstützen die Parser aber alle drei Werte (URI, lokaler Name und Präfix-Name), und zwar unabhängig vom Wert dieses Features. Der Default-Wert des Features ist true.

"http://xml.org/sax/features/namespace-prefixes"

Steht dieses Feature auf true, sollen die Attribute xmlns und xmlns: prefix in der Attributliste an die Methode startElement() übergeben werden. Der Wert false bedeutet dagegen, dass diese Attribute zu unterdrücken sind. Darüber hinaus übergibt der Parser die Präfix-Namen der Elemente und Attribute, wenn dieses Feature auf true steht. Der Default-Wert ist false, es sei denn, "http://xml.org/sax/features/namespaces" ist false. In diesem Fall ist der Default-Wert dieses Features true. Sie können beide, d.h. "http://xml.org/sax/features/namespaces" und "http://xml.org/sax/features/namespace-prefixes" auf true setzen, um sicherzustellen, dass lokale Namen, Namensraum-URIs und Präfix-Namen verfügbar sind.

"http://xml.org/sax/features/string-interning"

Der Wert true bedeutet bei diesem Feature, dass alle Elementnamen, Präfixe, lokale Namen, Attributnamen und Namensraum-URIs durch Aufruf der Methode intern() von java.lang.String vorzubehandeln sind, so dass man sie also untereinander mit == vergleichen kann.

"http://xml.org/sax/features/validation"

Ist dieses Feature auf true gesetzt, validiert der Parser das Dokument anhand seiner DTD. Ist es auf false gesetzt, tut er das nicht. Bei den meisten Parsern ist es standardmäßig auf false gesetzt. Wenn Sie dieses Feature anschalten, sollten Sie vielleicht auch einen ErrorHandler beim XMLReader registrieren, damit Sie über Gültigkeitsfehler informiert werden.

"http://xml.org/sax/features/external-general-entities"

Der Wert true bedeutet in diesem Fall, dass der Parser allgemeine, externe, vom Parser zu ersetzende Entities selbst auflösen soll. Der Parser unterlässt dies, wenn das Feature auf false steht. Bei den meisten Parsern steht dieser Wert auf true, sofern sie die Auflösung externer Entities unterstützen. Bei validierenden Parsern hat dieses Attribut immer den Wert true, weil diese sonst nicht die Einhaltung der Gültigkeitsregeln prüfen können.

"http://xml.org/sax/features/external-parameter-entities"

Ist dieser Wert true, soll der Parser Parameter-Entities selbst auflösen. Bei false unterlässt er dies. Bei validierenden Parsern steht dieses Attribut immer auf true, weil diese sonst nicht die Einhaltung der Gültigkeitsregeln prüfen können.

 

SAX 2.0.2 fügt dem acht weitere Standard-Features hinzu. Allerdings müssen Parser diese ebenso wenig unterstützen wie die SAX 2.0-Features:

"http://xml.org/sax/features/lexical-handler/parameter-entities"

Ist dieses Feature auf true gesetzt, meldet der Parser über die Methoden startEntity() und endEntity() die Grenzen von Parameter-Entities an den LexicalHandler. Das Standard-Verhalten ist implementierungsspezifisch.

"http://xml.org/sax/features/is-standalone"

Gibt an, ob in der XML-Deklaration standalone="yes" deklariert wurde. Dieses Feature ist nur-lesbar und kann nur eingesehen werden, nachdem die Ausführung von startDocument() abgeschlossen ist und bevor der Parser das Lesen des Dokuments beendet hat.

"http://xml.org/sax/features/resolve-dtd-uris"

Wenn dieses Feature auf true gesetzt ist, werden relative URIs, die in den Deklarationen von Notationen, ungeparsten Entities und externen Entities auftauchen, in absolute URIs umgewandelt, bevor sie an die Methoden von DTDHandler und DeclHandler gemeldet werden. Ist es auf false gesetzt, werden keine absoluten URIs für relative URIs ermittelt. Der Standardwert ist true. Relative URIs werden nie in absolute URIs umgewandelt, bevor sie an die Methoden von LexicalHandler oder EntityResolver übergeben werden.

"http://xml.org/sax/features/unicode-normalization-checking"

Ist dieses Feature auf true gesetzt, prüft der Parser, ob der Textinhalt dem Unicode Normalization Form C-Standard entspricht, wie es die XML 1.1-Spezifikation empfiehlt. Alle angetroffenen Normalisierungsprobleme werden über die nicht-fatale error()-Methode an den registrierten ErrorHandler gemeldet. Der Standardwert ist false. Dann erfolgt keine Prüfung der Normalisierung.

"http://xml.org/sax/features/use-attributes2"

Wenn dieses Feature auf true gesetzt ist, kann das an startElement() übergebene Attributes-Objekt in ein Attributes2-Objekt umgewandelt werden. Das ist eine Unterklasse von Attributes, die zusätzliche Methoden besitzt, mit denen festgestellt werden kann, ob ein Attribut in der DTD deklariert wurde, in der Dokument-Instanz angegeben wurde oder ob beides erfolgt ist.

"http://xml.org/sax/features/use-entityresolver2"

Wenn dieses Feature auf true gesetzt ist, verwendet der Parser die zusätzlichen Methoden, die in EntityResolver2 definiert werden, wenn Sie ein EntityResolver2-Objekt an setEntityResolver() übergeben.

"http://xml.org/sax/features/use-locator2"

Wenn dieses Feature auf true gesetzt ist, kann das an setLocator() übergebene Locator-Objekt in ein Locator2-Objekt umgewandelt werden, das zusätzliche Methoden besitzt, mit denen die Zeichenkodierung und die XML-Version eines Entitys oder Dokuments ermittelt werden können.

"http://xml.org/sax/features/xmlns-uris"

Wenn dieses Feature auf true gesetzt ist, gibt es an, dass der Parser sich an eine rückwärtskompatible Version der Namensraum-Spezifikation hält, die das xmlns-Präfix an den Namensraum-URI "http://www.w3.org/2000/xmlns/" bindet. Der Standardwert ist false. Dann wird das Präfix xmlns an keinen Namensraum-URI gebunden.

 

SAX-Core-Properties

SAX definiert vier Kern-Properties, die die Implementierungen allerdings nicht unterstützen müssen:

"http://xml.org/sax/properties/declaration-handler"

Der Wert dieses Propertys ist ein org.xml.sax.ext.DeclHandler-Objekt, dem der Parser ELEMENT-, ATTLIST- und geparste ENTITY-Deklarationen meldet, die in der DTD des Dokuments auftauchen.

"http://xml.org/sax/properties/lexical-handler"

Der Wert dieses Propertys ist ein org.xml.sax.ext.LexicalHandler-Objekt, dem der Parser Kommentare sowie Grenzen von CDATA-Abschnitten und Entities meldet.

"http://xml.org/sax/properties/dom-node"

Der Wert dieses Propertys ist ein org.w3c.dom.Node-Objekt, das den aktuellen Knoten repräsentiert, in dem sich der Parser gerade befindet.

"http://xml.org/sax/properties/xml-string"

Der Wert dieses Propertys ist ein java.lang.String-Objekt, das die Zeichen enthält, die der Ursprung des aktuellen Dokuments sind. Mitte 2004 gab es noch keinen Parser, der dieses Property implementiert.

 

SAX 2.0.2 fügt ein weiteres Standard-Property hinzu:

"http://xml.org/sax/properties/document-xml-version"

Der Wert dieses Propertys ist ein java.lang.String, der die XML-Version des Dokuments enthält. In der Regel sollte das entweder 1.0 oder 1.1. Dieses Property ist nur-lesbar.

 

  

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema XML bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

  


Copyright © 2005 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XML in a Nutshell" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O’Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de