Externe ungeparste Entities und Notationen

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

Nicht alle Daten sind XML. Es gibt viele ASCII-Textdateien auf der Welt, die sich überhaupt nicht um das Schützen von < als &lt; scheren oder die sich mitnichten um all die anderen Zwänge kümmern, denen ein XML-Dokument unterliegt. Vermutlich noch häufiger sind JPEG-Fotografien, GIF-Grafiken, QuickTime-Filme, MIDI-Sounddateien und so weiter. Nichts davon ist wohlgeformtes XML. Dennoch sind sie wichtige Bestandteile vieler Dokumente.

Der Mechanismus, den XML zum Einbetten dieser Dinge in Dokumente vorschlägt, ist das externe ungeparste Entity. Die DTD gibt einen Namen und eine URL für das Entity vor, das die Nicht-XML-Daten enthält. Zum Beispiel verknüpft diese ENTITY-Deklaration den Namen turing_der_aus_dem_bus_steigt mit dem JPEG-Bild unter "http://www.turing.org.uk/turing/pi1/busgroup.jpg":

<!ENTITY turing_der_aus_dem_bus_steigt SYSTEM "http://www.turing.org.uk/turing/pi1/busgroup.jpg" NDATA jpeg>

Notationen

Da die Daten im vorangehenden Code nicht im XML-Format vorliegen, wird die Deklaration NDATA benutzt, um den Datentyp anzugeben. Hier nehmen wir z. B. jpeg. XML erkennt nicht, dass es sich hierbei um ein Bild in einem Format handelt, das von der Joint Photographs Experts Group definiert wurde. Vielmehr ist das einfach der Name einer Notation, die irgendwo in der DTD mit einer NOTATION-Deklaration festgelegt wurde, wie hier gezeigt:

 

<!NOTATION jpeg SYSTEM "bild/jpeg">

Wir haben hier den MIME-Typ bild/jpeg als externen Identifier für die Notation verwendet. Es gibt jedoch absolut keinen Standard, ja, nicht einmal einen Vorschlag, wie genau dieser Identifier aussehen sollte. Die einzelnen Anwendungen müssen ihre eigenen Anforderungen an den Inhalt und die Bedeutung von Notationen definieren.

Ungeparste Entities in Dokumente einbetten

Die DTD deklariert nur die Existenz, den Ort und den Typ eines nicht geparsten Entitys. Um das Entity tatsächlich an einer oder mehreren Stellen im Dokument einzubinden, fügen Sie ein Element mit einem Attribut vom Typ ENTITY ein, dessen Wert der Name des nicht geparsten Entitys ist, das in der DTD deklariert wurde. Sie verwenden keine Entity-Referenz wie &turing_der_aus_dem_bus_steigt;. Entity-Referenzen können nur auf Entities verweisen, die geparst werden.

Nehmen Sie an, das bild-Element und sein quelle-Attribut werden so deklariert:

<!ELEMENT bild EMPTY>
<!ATTLIST bild quelle ENTITY #REQUIRED>

Dann würde dieses bild-Element auf die Fotografie unter "http://www.turing.org.uk/turing/pi1/busgroup.jpg" verweisen:

 

<bild quelle="turing_der_aus_dem_bus_steigt"/>

Wir sollten Sie warnen, dass XML Ihnen kein bestimmtes Verhalten einer Anwendung garantiert, die diese Art ungeparstes Entity entdeckt. Möglicherweise zeigt sie dem Benutzer das Bild gar nicht erst an. Tatsächlich könnte der Parser in einer Umgebung laufen, in der es keinen Benutzer gibt, für den das Bild dargestellt werden könnte. Er versteht vielleicht gar nicht, dass es sich um ein Bild handelt. Der Parser lädt es möglicherweise nicht, oder er stellt ansonsten eine Verbindung zu dem Server her, auf dem das eigentliche Bild liegt. Bestenfalls teilt er der Anwendung, für die er das Parsen durchführt, mit, dass es unter einer bestimmten URL mit einer bestimmten Notation ein ungeparstes Entity gibt, und lässt die Anwendung entscheiden, was sie – falls überhaupt – mit dieser Information anzufangen gedenkt.

Anmerkung: Ungeparste allgemeine Entities stellen nicht die einzige brauchbare Methode dar, um Nicht-XML-Inhalt in XML-Dokumente einzubinden. So ist eine einfache URL, möglicherweise in Verbindung mit einem XLink, für viele Zwecke schon ganz brauchbar, wie das auch in HTML der Fall ist (das ebenfalls ohne ungeparste Entities ganz gut klarkommt). Das Einschließen aller notwendigen Informationen in ein einzelnes leeres Element wie <bild quelle="http://www.turing.org.uk/turing/pi1/busgroup.jpg"/> ist unzweifelhaft besser als das Aufsplitten der gleichen Information zwischen dem Element, in dem sie verwendet wird, und der DTD des Dokuments, in dem sie vorkommt. Das Einzige, was durch ein nicht geparstes Entity wirklich dazukommt, ist die Notation, aber die Notation ist zu wenig Standard und deshalb nicht von großem Nutzen.
Tatsächlich sind viele erfahrene XML-Entwickler der Meinung, dass ungeparste Entities ein komplizierter, verwirrender Fehler sind, der von vornherein nicht in XML hätte aufgenommen werden dürfen. Trotz alledem sind sie nun Teil der Spezifikation und werden deshalb hier beschrieben.

  

<< 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