Eine DTD, die nur globale Entities enthält und die bsp. für die Firma typisch sind | ||
↙ | ↓ | ↘ |
DTD-Abt.1 | DTD-Abt.2 | DTD-Abt.3 |
↙↓↘ | ↙↓↘ | ↙↓↘ |
XmlDocs-1 | XmlDocs-2 | XmlDocs-3 |
< < > > & & " " ' 'Diese können jederzeit verwendet werden, jeder Xml-Parser muß diese Entities kennen.
Diese Techniken funktionieren auch in Html. Neu in Xml ist, daß die Dateien auch als UTF-8 oder UTF-16, also als Unicode, gespeichert werden können. Unterstützt das Eingabeprogramm (Notepad) Unicode-Tastatureingaben direkt, so können die Sonderzeichen direkt über die Tastatur eingegeben werden. In diesem Fall wird die am Datei-Anfang stehende Xml-Declaration ergänzt:
<?xml version='1.0' encoding='UTF-8'?>Deshalb sind für Xml all jene aus Html bekannten Entities wie ä für ä, ü für ü usw. nicht mehr notwendig. Es genügt eine Speicherung als UTF-8 sowie die direkte Verwendung.
<!ENTITY ENTITY-NAME "ERSETZUNGSTEXT">Beispiel:
<!ENTITY myName "© Max Mustermann">myName ist der selbstgewählte Name dieser Entity, der die üblichen Regeln für Namen erfüllen muß. Der folgende Ausdruck in Hochkommata ist der Ersetzungstext, der selbst Entities enthalten kann und der, nachdem er geparst wurde, schließlich ausgegeben wird. Die Verwendung ist wie bei Html, also &myName;.
<!ENTITY % allowedElements "b u a">Parameter-Entities können verwendet werden, um bei großen DTD's wiederholt benötigte Ausdrücke durch Makros zu ersetzen. Verwendung: %allowedElements;
<!ENTITY my-external-entity SYSTEM "my-external-entity-sample.txt">Erstellen Sie sich eine Datei my-external-entity-sample.xml mit dem folgenden Inhalt:
<?xml version='1.0' encoding='ISO-8859-1'?> <!DOCTYPE my-sample [ <!ENTITY my-external-entity SYSTEM "my-external-entity-sample.txt"> <!ELEMENT my-sample (#PCDATA)> ]> <my-sample>&my-external-entity;</my-sample>Erstellen Sie zusätzlich eine Datei my-external-entity-sample.txt. In diese Textdatei notieren Sie beliebigen Text ohne Markup-Zeichen oder korrekte Xml-Fragmente. Öffnen Sie nun das Dokument my-external-entity-sample.xml bsp. mit einem Browser, der auf Wohlgeformtheit überprüft. Dann werden Sie beobachten, daß nicht die Entity, sondern sofort der Ersetzungstext aus der externen Datei angezeigt wird.
<!ENTITY % xhtml-lat1 SYSTEM 'http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent'> %xhtml-lat1;Die erste Anweisung referenziert die offizielle Liste der lat1-Entities, diese enthält u.a. die Entity-Definitionen für die Namen der deutschen Umlaute, die in Html ohne zusätzliche Definition genutzt werden können. Die zweite Zeile verwendet diese Parameter-Entity einmal, so daß sämtliche in der externen Entity stehenden zusätzlichen Entity-Definitionen nun lokal zur Verfügung stehen.
<!NOTATION myImage SYSTEM "image/gif"> <!ENTITY myCoffee SYSTEM "Coffee-Bean.gif" NDATA myImage> <!ELEMENT my_picture EMPTY> <!ATTLIST my_picture thisLink ENTITY #REQUIRED>Die NOTATION-Definition ordnet dem innerhalb der DTD damit festgelegten Namen 'myImage' den innerhalb der aktuellen Umgebung identifizierbaren Bezeichner 'image/gif' zu. Ob dieser Bezeichner innerhalb der aktuellen Umgebung bekannt oder sinnvoll zugeordnet ist, wird nicht überprüft. Dann wird, wie im obigen Beispiel der eingebundenen Textdatei, eine Entity 'myCoffee' definiert. Diese verweist auf die Datei 'Coffee-Bean.gif', die nachfolgende NDATA teilt mit, daß es sich um eine nicht zu parsende Entity vom Typ 'myImage' handelt. Anschließend wird ein Element mit einem Attribut definiert, das Attribut ist vom Typ ENTITY und kann nun so verwendet werden:
<my_picture thisLink="myCoffee"/>
<!ENTITY unser-Firmenname "Firma Max Mustermann GmbH"> <!ENTITY unsere-Anschrift "Musterstrasse 32, 12 000 Berlin">Jede Abteilung, hier die Abteilung-1, definiert sich eine Datei max-mustermann-abteilung-1.dtd
<!ENTITY % max-mustermann-entity-definitions SYSTEM "max-mustermann-entity-definitions.dtd"> <!-- Weitere Definitionen, welche diese Abteilung nutzt --> <!-- Einmaliges Aufrufen der definierten Entity --> %max-mustermann-entity-definitions;Ein Dokument der Abteilung-1 kann nun wie folgt aussehen:
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE abteilung-1 SYSTEM "max-mustermann-abteilung-1.dtd"> <abteilung-1> Herzlichen Glückwunsch, daß Sie sich zum Besuch der &unser-Firmenname; entschieden haben. Unsere Anschrift: &unser-Firmenname; &unsere-Anschrift; </abteilung-1>Damit der Aufruf des Beispiels funktioniert, müssen alle Dateien in einem Verzeichnis liegen, da alle Verweise relativ sind. Zur Verwendung können Sie natürlich die Datei max-mustermann-entity-definitions.dtd bsp. nach http://Ihr-Firmenserver/entities/ verschieben und den Verweis in der Datei max-mustermann-abteilung-1.dtd korrigieren auf
<!ENTITY % max-mustermann-entity-definitions SYSTEM "http://Ihr-Firmenserver/ent/max-mustermann-entity-definitions.dtd">