Verarbeitungsanweisungen und anderer Markup

(Auszug aus "Perl & XML" von Erik T. Ray & Jason McIntosh)

Neben den Elementen gibt es auch andere syntaktische Objekte, die die Verarbeitung von XML erleichtern sollen. Die Processing Instructions (PIs) oder Verarbeitungsanweisungen werden benutzt, um einen speziellen XML-Prozessor zu steuern. Eine Verarbeitungsanweisung besitzt einen Parameter target, der den Prozessor identifiziert, gefolgt von einem optionalen Parameter data. Jedes Programm, dem diese Tags unbekannt sind, wird sie einfach ignorieren. Hier ist ein Beispiel, das wirklich aus der Erfahrung gewachsen ist, ein O’Reilly-Buch zu hacken:

<?file-breaker start chap04.xml?><chapter>
<title>Ein langer Titel,<?lb?>der gar kein Ende zu nehmen scheint</title>
<?xml2pdf vspace 10pt?>

Die erste PI hat ein Target namens file-breaker, ihre Daten sind chap04.xml. Ein Programm, das dieses Dokument liest und nach einer PI mit diesem Target sucht, wird auf diese Daten reagieren. In diesem Fall soll eine neue Datei angelegt werden, in der das folgende XML abzuspeichern ist.

Die zweite Verarbeitungsanweisung hat nur ein Target, nämlich lb. Wir haben dieses Beispiel tatsächlich in Dokumenten gesehen, dabei hatte es die Aufgabe, die Einfügung eines Zeilenendes (Line Break) durch den XML-Prozessor zu erzwingen. Dieses Beispiel ist problematisch. Zum einen wird die PI als Ersatz für ein Leerzeichen verwendet. Jedes Programm, das mit der PI nicht umgehen kann, wird an dieser Stelle kein Leerzeichen zwischen den zwei Wörtern einfügen und sie als eines behandeln. Das könnte man natürlich durch ein Leerzeichen vor oder nach der PI beheben. Zum anderen ist das Ziel eine Anweisung (dafür ist eher der Parameter data gedacht) und kein Programmname. Ein eindeutiger Name wie der in der nächsten Verarbeitungsanweisung (xml2pdf) wäre besser.

Verarbeitungsanweisungen (PIs) sind bequem für Entwickler. Es gibt keine festen Regeln über die Wahl von Target und Daten, außer daß das Target sehr spezifisch sein sollte und die Daten eher kurz.

Diejenigen, die bereits einmal Dokumentation in Perls eingebauter Mini-Markup-Sprache POD (Plain Old Documentation (Anmerkung: Die genauen Details finden Sie in Kapitel 26 von Programmieren mit Perl oder in der Manpage perlpod)) verfaßt haben, bemerken möglicherweise eine Ähnlichkeit zwischen den Verarbeitungsanweisungen und gewissen POD-Anweisungen. Wir denken dabei an die =for-Abschnitte und die =begin/=end-Blöcke. Innerhalb dieser Abschnitte und Blöcke ist es erlaubt, dem speziellen POD-Prozessor kleine Nachrichten mit einem Ziel und Argumenten (oder einem beliebigen Textstring) zu übergeben.

Ein anderes nützliches Markup-Objekt ist der XML-Kommentar. Ein Kommentar ist ein Textabschnitt, den der XML-Prozessor komplett ignoriert. Im Kommentar findet man Anmerkungen und Informationen, die wirklich nur für menschliche Augen gedacht sind. Der Autor will damit vielleicht sich selbst oder seine Mitarbeiter an etwas erinnern. Man kann sie auch benutzen, um einen gewissen Abschnitt vorübergehend auszublenden. Das ist gelegentlich ein ganz praktischer Trick, wenn die Verarbeitung eines XML-Dokuments Probleme verursacht, ohne daß man genau weiß, welcher Teil dafür verantwortlich ist. Hier ist ein Beispiel:

<!-- Dieser Text ist für den Parser unsichtbar. -->
Dieser Satz dagegen enthält absolut sichtbare XML-Textdaten.
<!--
  <para>Dieser Absatz war früher einmal ein Teil des Dokuments - jetzt ist er
    es nicht mehr.</para>
-->

Beachten Sie, daß diese Kommentare wie die entsprechenden HTML-Gegenstücke aussehen und funktionieren.

Das einzige, was man in einen Kommentar nicht einbetten darf, ist ein anderer Kommentar. Mehr noch, selbst der String -- ist innerhalb eines Kommentars verboten, weil ihn der Parser als Kommentarende interpretieren würde.

Die letzte syntaktische Annehmlichkeit, die wir uns anschauen wollen, ist der CDATA-Abschnitt . CDATA bedeutet Character Data, also Zeichendaten. In XML ist damit Text gemeint, der vom XML-Parser nicht weiter interpretiert wird, also keinen Markup enthält. Mit anderen Worten: Der XML-Prozessor behandelt einen CDATA-Abschnitt als ein einziges großes Stück Text, selbst wenn er Dinge enthält, die wie Markup aussehen. Das ist sehr angenehm, wenn man zum Beispiel die Zeichen <, > und & in einem Abschnitt häufiger verwenden will. Man könnte zwar die entsprechenden Entityreferenzen verwenden, aber irgendwann würde das unbequem.

Zum Beispiel:

<codelisting>
<![CDATA[if( $val > 3 && @lines ) {
    $input = <FILE>;
}]]>
</codelisting>

Alles zwischen <![CDATA[ und ]]> Stehende wird als Text ohne Markup behandelt. Aus diesem Grund kann man hier nach Belieben mit Markup-Zeichen arbeiten. Wir benutzen CDATA-Abschnitte eher selten, weil das in unseren Augen unübersichtlich wird. Die XML-Verarbeitung wird damit etwas komplexer. Aber lassen Sie sich dadurch nicht abhalten. (Anmerkung: Tatsächlich haben wir CDATA innerhalb des von DocBook angehauchten XML, aus dem dieses Buch besteht, laufend verwendet. Alle Quelltexte und XML-Beispieldokumente sind mit CDATA-Abschnitten gemacht, um die Entityreferenzen für < und & zu umgehen.)

  

  

<< zurück vor >>

 

 

 

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

Copyright © 2003 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 "Perl & XML" 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