Externe geparste allgemeine Entities

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

Das Beispiel mit dem Footer stellt in etwa die Grenze dessen dar, was Sie bequem in einer DTD unterbringen können. In der Praxis wird sich wiederholender Inhalt bei Websites wie in diesem Beispiel in externen Dateien gespeichert und mittels PHP, serverseitigen Ergänzungen oder ähnlichen Mechanismen in die Seite geladen. XML unterstützt diese Technik durch externe allgemeine Entity-Referenzen, obwohl in diesem Fall der Client anstelle des Servers für die Integration der unterschiedlichen Teile des Dokuments in ein zusammenhängendes Ganzes verantwortlich ist.

Eine externe geparste allgemeine Entity-Referenz wird mittels einer ENTITY-Deklaration in der DTD deklariert. Anstelle des eigentlichen Ersetzungstextes werden jedoch das Schlüsselwort SYSTEM und eine URL auf den Ersetzungstext angegeben, z. B.:

 

<!ENTITY footer SYSTEM "http://www.oreilly.com/boilerplate/footer.xml">

Natürlich werden stattdessen auch häufig relative URLs verwendet:

 

<!ENTITY footer SYSTEM "/boilerplate/footer.xml">

Der Parser kann beim Auftreten der allgemeinen Entity-Referenz &footer; in den Zeichendaten des Elements die Referenz durch das Dokument ersetzen, das unter "http://www.oreilly.com/boilerplate/footer.xml" bzw. in der Datei /boilerplate/footer.xml zu finden ist. Referenzen auf externe geparste Entities sind in Attributwerten nicht erlaubt. Das sollte eigentlich selten ein großes Problem darstellen, da Attributwerte im Allgemeinen klein genug sind, um sie leicht in interne Entities einzufügen.

Beachten Sie, dass wir geschrieben haben, dass der Parser die Entity-Referenz durch das Dokument unter der URL ersetzen könne, nicht, dass er es tun muss. In diesem Bereich haben die Parser noch einigen Freiraum, wie viel sie von der XML-Spezifikation umsetzen. Ein validierender Parser muss ein solches externes Entity ersetzen. Ein nicht-validierender Parser kann sich jedoch auch dagegen entscheiden.

Außerdem können nicht alle Textdateien als externe Entities dienen. Um durch eine externe Entity-Referenz geladen werden zu können, muss das Dokument potenziell wohlgeformt sein, wenn es in ein existierendes Dokument eingefügt werden soll. Das heißt nicht, dass das externe Entity selbst wohlgeformt sein muss. Vor allem muss es kein eigenes Wurzelelement besitzen. Falls jedoch ein Wurzelelement um das externe Entity herumgepackt wird, muss das daraus entstehende Dokument wohlgeformt sein. Das heißt beispielsweise, dass alle Elemente, die innerhalb des Entitys beginnen, auch innerhalb des gleichen Entitys enden müssen. Sie dürfen nicht innerhalb eines anderen Entitys enden. Darüber hinaus besitzt das externe Entity keinen Prolog und kann deshalb auch keine XML-Deklaration oder Dokumenttyp-Deklaration enthalten.

Text-Deklarationen

Anstelle einer XML-Deklaration könnte ein externes Entity auch eine Text-Deklaration enthalten. Diese sieht nahezu wie eine XML-Deklaration aus. Der Hauptunterschied besteht darin, dass in einer Text-Deklaration die Deklaration der Kodierung erforderlich ist, während das Attribut version optional ist. Es gibt außerdem keine standalone-Angabe. Die wichtigste Aufgabe einer Text-Deklaration ist es, dem Parser zu sagen, welche Zeichenkodierung das Entity verwendet. Dies ist eine gebräuchliche Text-Deklaration:

 

<?xml version="1.0" encoding="MacRoman"?>

Sie könnten aber auch eine solche Text-Deklaration ohne Versions-Attribut einsetzen:

 

<?xml encoding="MacRoman"?>

Das folgende Beispiel zeigt ein wohlgeformtes externes Entity, das mit Hilfe einer externen allgemeinen Entity-Referenz aus einem anderen Dokument heraus eingefügt werden könnte.

<?xml encoding="ISO-8859-1"?>
<hr size="1" noshade="true"/>
<font CLASS="footer">
   <a href="index.html">O'Reilly Home</a> |
   <a href="sales/bookstores/">O'Reilly Bookstores</a> |
   <a href="order_new/">How to Order</a> |
   <a href="oreilly/contact.html">O'Reilly Contacts</a><br>
   <a href="http://international.oreilly.com/">International</a> |
   <a href="oreilly/about.html">About O'Reilly</a> |
   <a href="affiliates.html">Affiliated Companies</a>
</font>
<p><font CLASS="copy">Copyright 2004, O'Reilly Media, Inc.<br/><a href="mailto:webmaster@oreilly.com">webmaster@oreilly.com</a></font></p>

Code-Beispiel: Ein externes geparstes Entity

  

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