Weitere aktuelle Java-Titel finden Sie bei dpunkt.
 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index


20.5.3

System- und Public-IDs


Die Referenzierung externer Dateien oder auch URLs erfolgt in XML entweder mit System- oder mit Public-IDs.

Eine System-ID wird vom Parser als Pfad-Angabe im lokalen Dateisystem interpretiert. In der DTD könnte man eine Entity mit einer System-ID auf eine Datei Referenz.xml folgendermaßen definieren:
  <!ENTITY REFERENZ SYSTEM "Referenz.xml">
Wenn man dann an einer Stelle im Dokument diese Entity referenziert, wird der Inhalt der bezeichneten Datei inkludiert.

Ein insbesondere bei großen Dokumenten oft vorkommendes Anwendungsbeispiel ist die Einbindung von Teilen des Dokuments in einer Hauptdatei. Bei einem Buch könnte man z.B. jedes Kapitel in einer eigenen Datei speichern. Diese Dateien werden dann in einer Hauptdatei referenziert. Die Zentraldatei dieses Buchs sieht etwa so aus:
  ...
  <!ENTITY BASICS SYSTEM "Basics.sgml">
  <!ENTITY JAVA SYSTEM "Java.sgml">
  <!ENTITY REFERENZ SYSTEM "Referenz.sgml">
  ...

  <BOOK>
    ...
    <BODY>
      <PART>
        <TITLE>Programmierung mit Java</TITLE>
        &BASICS;
        &JAVA;
      </PART>
      <PART>
        <TITLE>Referenz</TITLE>
         &REFERENZ;
      </PART>
    </BODY>
    ...
  </BOOK>
Mit System-IDs werden externe Quellen also direkt bezeichnet. Manchmal ist es aber wünschenswert, die Pfade auf externe Dokumente nicht hart im Dokument zu kodieren, sondern indirekt zu referenzieren. Für diesen Fall gibt es die Public-IDs. Eine Public-ID wird folgendermaßen definiert:
  <!ENTITY DTDREF PUBLIC "BOOK-DTD" "/home/joe/xml/book.dtd">
Dieses Beispiel definiert eine Public-ID DTDREF, die eine externe Datei über den logischen Namen BOOK-DTD referenziert. Für den Fall, dass dieser logische Name nicht aufgelöst werden kann, wird auf die am Schluss angegebene System-ID zurückgegriffen.

Die Indirektion besteht darin, dass dem logischen Namen erst in einer externen Tabelle eine System-ID und damit ein Pfad zu einer Datei zugeordnet wird. Diese Tabelle wird auch Katalog genannt. Auf das obige Beispiel bezogen würde ein Parser beim Antreffen der Entity DTDREF zunächst in seinem Katalog nach einem Eintrag für BOOK-DTD suchen und die dort eingetragene Datei verarbeiten. Findet der Parser keinen entsprechenden Eintrag, benutzt er den in der Entity-Definition angegebenen Ersatzpfad.

Public-IDs können also eingesetzt werden, um die Pfade zu externen Dateien flexibel zu halten. Das Format eines Katalogs ist parserabhängig und wird von der XML-Spezifikation nicht vorgeschrieben. Frei verfügbare binäre SGML- und XML-Parser wie nsgmls oder xmllint verwenden ein Format, bei dem jeder Katalog-Eintrag in einer eigenen Zeile steht:
  PUBLIC "Bezeichner" "Pfad"
Zum Beispiel:
  PUBLIC "BOOK-DTD" "/usr/local/share/xml/book.dtd"
Bei DOM und SAX, den wichtigsten Java-APIs für die Verarbeitung von XML-Dokumenten, wird die Auflösung von Public-IDs vollständig dem Entwickler der XML-Applikation überlassen. DOM- und SAX-konforme Parser benachrichtigen die XML-Applikation lediglich darüber, dass eine Public-ID angetroffen wurde. Je nach Implementierung kann die Umsetzung mit einem externen Katalog oder auch mit fest kodierten Werten erfolgen.


 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index

Copyright © 2002 dpunkt.Verlag, Heidelberg. Alle Rechte vorbehalten.