Sql-und-Xml - Home

Xml lernen

Weitere Elemente wohlgeformter XML-Dokumente

  • Kommentare werden wie in Html dargestellt - sie beginnen mit <!-- und enden mit -->. Die folgende Zeile stellt einen gültigen Xml-Kommentar dar:
    <!-- Das ist ein XML-Kommentar / Comment -->
    Kommentare dürfen nicht geschachtelt sein. Der folgende Ausdruck erzeugt deshalb einen Parserfehler:
    <!-- Das ist der erste Kommentar <!-- innerer Kommentar --> --> 
  • Xml-Dokumente können mit einer Xml-Declaration beginnen:
    <?xml version='1.0' encoding='UTF-8' ?>
    Ist die Datei im ANSI-Format gespeichert, so kann für encoding einer der ISO-8859-? - Klassifikationen eingesetzt werden - ISO-8859-1 für die deutschen Umlaute usw.
    Wird die Datei als Unicode (UTF-8 oder UTF-16) gespeichert, so können diese Werte hier eingetragen werden. Für die Version sind die Werte '1.0' und '1.1' erlaubt (siehe Xml 1.1 - Unicode - Erweiterungen). Die meisten Parser verarbeiten derzeit nur die Version '1.0' und weisen '1.1' zurück (Fehlermeldung bsp. 'Ungültige Versionsnummer'). Wenn eine Xml-Declaration verwendet wird, so muß sie am Anfang der Datei stehen.
  • Eine Xml-Declaration kann zusätzlich das Attribut standalone mit den gültigen Werten yes und no aufweisen. standalone='yes' teilt dem Parser mit, daß es für dieses Dokument keine externe Markup-Declaration gibt, daß also keine externen Verweise aufgelöst werden müssen, um weitere Element- oder Entity-Deklarationen zu finden. Dies schließt nicht aus, daß es interne Entity-Declarations gibt, deren Ersetzungstext extern ist; wesentlich ist, daß die Deklaration bereits intern zugänglich ist. Um zu ermitteln, daß das Xml-Dokument wohlgeformt / well-formed ist, muß der Parser also keine weiteren, externen DTD's oder über Parameter-Entities eingebundenen Definitionen suchen und verarbeiten. Der Wert 'no' teilt mit, daß die document type definition externe Verweise enthalten kann, ohne daß sie solche Verweise zwingend enthalten muß.
  • Das Xml-Dokument kann weitere processing instruction-Anweisungen enthalten. Dies sind Ausdrücke der Form
    <?NAME Attributes-List ?>
    Sie stehen in der Regel am Beginn des Dokumentes, zwischen der Xml-Declaration und der document type definition bzw. dem Wurzelelement. Mit ihnen können an jedes verarbeitende Programm zusätzliche Kombinationen aus Attributen und Werten übergeben werden. Innerhalb von Xml ist nicht definiert, wie das verarbeitende Programm diese auswertet. Gängig ist derzeit eine processing instruction für die Verknüpfung mit einer eXtensible-Stylesheet-Transformation-Language - Datei, welche das Xml-Dokument in einen anderen Dokumentbaum umformt.
    <?xml-stylesheet type='text/xsl' href='../www.sql-und-xml.de.xsl' ?>
  • CDATA-Section: Dies sind Abschnitte, die mit <![CDATA[ beginnen und mit ]]> beendet werden. In diesen können <, > und & verwendet werden, ohne daß diese maskiert werden. Dies kann nützlich sein, falls die Ausgabe bsp. einen Block JavaScript enthält und man für Vergleichsoperationen < benötigt.
    Ein kleines Beispiel (xml-cdata-javascript.xml und xml-cdata-javascript.xsl):
    <?xml version='1.0'?>
    <?xml-stylesheet type='text/xsl'
    	href='http://www.sql-und-xml.de/xml-samples/xml-cdata-javascript.xsl'?>
    <html id='CDATA-and-JavaScript' >
    <head>
    <script lang='JavaScript'><![CDATA[
    function write_last_update() {
    	var last = new Date(document.lastModified);
    	var y = last.getYear();
    	/* Netscape gibt 2000 mit Null aus */
    	if (y < 10) { y = "200" + y}
    	else {if (y < 100) { y = "20" + y}
    		else {if (y < 1000)
    			{ y = "20" + (((y % 100) < 10) ? "0" : "") + (y % 100)}
    		}
    	}
    
    	document.write("Letzte Aktualisierung: " +
    		((last.getDate() < 10) ? "0" : "") + last.getDate() + "." +
    		((last.getMonth() < 9) ? "0" : "") + (last.getMonth() + 1) + "." +
    		y + ", " +
    		((last.getHours() < 10) ? "0" : "") + last.getHours() + ":" +
    		((last.getMinutes() < 10) ? "0" : "") + last.getMinutes())
    }
    ]]>
    </script>
    </head>
    
    <body>
    	<script lang='JavaScript'> write_last_update() </script>
    </body>
    </html>
    
  • White-space-handling: White spaces sind zunächst die von Html her bekannten Zeichen Leerzeichen (#x20), Tabulator (#x9), Carriage Return (#xD) und Line feed (#xA). Da auf verschiedenen Betriebssystemen verschiedene Konventionen bezüglich des Zeilenwechsels gelten, muß der Xml-Parser alle Ausdrücke #xD#xA sowie alle einzelnen #xD auf ein einzelnes #xA normalisieren. Sind im Content eines Elements mehrere aufeinanderfolgende white spaces notiert, so werden diese beim Parsen unverändert an die Anwendung weitergegeben. Mit normalen Browsern ist der Effekt allerdings nicht beobachtbar, da diese - den Html-Regeln folgend - white spaces zusammenziehen.
    Eine Besonderheit gibt es, falls im Content eines Elements direkt ein Unterelement folgt und zwischen den Spitzklammern von Element und Unterelement white spaces liegen. Solche Zeichen werden regelmäßig eingefügt, um bsp. den Quelltext lesbar zu gestalten. Das Standardhandling für diesen Fall sieht vor, solche white spaces zwischen schließender und öffnender Spitzklammer zu löschen. Man kann jedoch ein spezielles Attribut, 'xml:space' verwenden, welches das Standardverhalten aufhebt:
    <!ATTLIST myXml
    	xml:space (default | preserve) 'preserve'>
    Wenn Sie den Online-Xml-Trainer nutzen, können Sie die obige Zeile in den DTD-Abschnitt des Xml-Dokumentes, unterhalb der Deklaration des myXml-Elements, einfügen. Ein anschließendes Matching verdeutlicht, daß die beiden Return nach <myXml> und <myHead> nun im Output erscheinen. Das Zurücksetzen des Attributes auf 'default' entfernt diese Zeilenwechsel im Output.
    Dieses Attribut muß für jedes Element definiert werden, für welches es gewünscht wird. Ansonsten wäre das Xml-Dokument zwar wohlgeformt, jedoch nicht valide.

Beispiel zu den bisherigen Begriffen

Das folgende Beispiel xml-other-sample.xml enthält die bisherigen Begriffe.
<?xml version='1.0' encoding='UTF-16' standalone='yes' ?>
<!--
	<?xml-stylesheet type='text/xsl'
		href='/xml-samples/xml-other.xsl'?>
-->

<!DOCTYPE myཀਈŴʝऑಊ僿.end [
	<!ELEMENT myཀਈŴʝऑಊ僿.end (#PCDATA) >
]>

<myཀਈŴʝऑಊ僿.end>

	Obwohl eines der hier zufällig herausgesuchten Unicode-
	Zeichen im InternetExplorer nur reduziert mit Quadraten
	dargestellt wird, handelt es sich doch um ein korrektes
	Xml-Dokument.

	Hier steht der innere, zu wünschende Text.
	<!-- Dieser Text wird von XSL nicht bearbeitet -->

	&#x0F40;
	&#x11D4;
	&#x0F4D;

	<![CDATA[ Im CDATA-Bereich können <, >
		und & unmaskiert genutzt werden ]]>

</myཀਈŴʝऑಊ僿.end>
Die processing instruction, welche die Verknüpfung zur XSL-Datei beschreibt, wurde auskommentiert. Das Wurzelelement enthält einige zufällig gesammelte Unicode-Zeichen. Da es außer dem Wurzelelement keine weiteren Elemente mehr gibt, ist die document type definition vollständig. Es handelt sich nicht nur um ein wohlgeformtes, sondern sogar um ein valides Xml-Dokument.

© 2003-2016 Jürgen Auer, Berlin.