XML-Know How

Entities in XSD

XSD sieht keine Verwendung von Entities und Parameter-Entities mehr vor. Damit entfällt auch die Möglichkeit, durch Parameter-Entities im Internal Subset Marked Sections zu steuern, und so vom XML-Dokument aus das Strukturmodell zu modifizieren.

Die Funktionen von Parameter-Entities werden bei XSD von Element- und Attribut-Gruppen übernommen (<xs:group> und <xs:attributeGroup>). Verweise auf andere XSD-Dateien ermöglicht das XSD-Element <xs:include>. So können XSDs aus mehreren Teildateien zusammengestellt werden, was die Wiederverwendbarkeit von XSD-Code erleichtert. Im folgenden Beispiel wird durch <xs:include> dem Parser mitgeteilt, dass er an der Stelle, wo dieses Element steht, die Deklarationen aus der XSD-Datei address.xsd heranziehen soll:

<xs:include schemaLocation="address.xsd"/>

Erweiterte Möglichkeiten der Einbeziehung von externen XSD-Modulen bieten die XSD-Elemente <xs:redefine> und <xs:import>.

Anstelle von Entities auf Dokumentebene treten XML-Inclusions, ein W3C-Standard, der die Übernahme von XML- oder anderen Text-Dateien in XML-Dateien durch XML-Mittel regelt. XML-Inclusions stellt dazu standardisierte XML-Elemente zur Verfügung. So wird im folgenden Beispiel das Element <xi:include> verwendet, um die Datei something.xml in ein XML-Dokument einzufügen:

<xi:include href="something.xml"/>

Entities für Sonderzeichen entfallen ebenfalls. An ihre Stelle treten entweder Character References, die in Hexadezimalcode das gewünschte Unicode-Zeichen angeben (z. B. &#x00E4; für »ä«), oder aber Workarounds wie Elemente mit festen Werten, z. B.

<xs:element name="auml" type="xs:token" fixed="ä" />

Bei diesem Workaround muss freilich erst die passende Software gefunden werden.

Das W3C schlägt als weiteren Workaround vor, bei XSD-validierten XML-Dokumenten Entities im Internal Subset einer DOCTYPE-Deklaration unterzubringen. Auch eine DTD, die nur Entity-Deklarationen enthält, ist hier möglich. Theoretisch sollen erst diese Entities aufgelöst werden und dann die XSD zum Einsatz kommen:

<?xml version="1.0" ?>
<!DOCTYPE PurchaseOrder [
<!ENTITY eacute „é">
]>
<purchaseOrder>
<city>Montr&eacute;al</city>
</purchaseOrder>

Die Umsetzung dieses Vorschlags scheitert bei manchen XML-Programmen daran, dass die DOCTYPE-Deklaration als Hinweis auf das Vorhandensein einer »echten« DTD interpretiert wird. Die Software erwartet dann eine komplette DTD und gibt sich mit bloßen Entity-Deklarationen nicht zufrieden.

Allerdings soll ja standardgemäß seit jeher Unicode als Zeichencodierung für XML-Dokumente verwendet werden, was solche Workarounds überflüssig macht.[1] Bis jede relevante Software Unicode unterstützt, wird wohl noch etwas Zeit ins Land gehen (auch wenn es jetzt – 2004 – in dieser Hinsicht schon sehr gut aussieht). Aktuelle XML-Software zeigt mittlerweile Quelltext mit Character References in Hexadezimalcode korrekt an und unterstützt ihre Eingabe per Standardtastatur (&#x00E4; im Quelltext wird in der Bearbeitungsansicht als »ä« dargestellt, Eingabe von »ä« auf der Tastatur ergibt &#x00E4; im Quelltext).


  1.  vgl. Einheitliche Zeichenkodieung – Grundlage der Systemunabhängigkeit