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. ä 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é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 (ä im Quelltext wird in der Bearbeitungsansicht als »ä« dargestellt, Eingabe von »ä« auf der Tastatur ergibt ä im Quelltext).


