Erstellen einer XML-Grammatik mit DTDs

Was als erstes an oben stehenden Definitionen auffällt, ist dass diese sehr lang sind und Wiederholungen enthalten. In einer traditionellen Programmiersprache würde man hier eine Subroutine oder ein Makro verwenden. Glücklicherweise bieten die XML-DTDs eine ähnliche Funktionalität in Form von Entities. Es gibt mehrere unterschiedliche Typen dieser Entities, doch für unsere Zwecke sind nur die Parameter-Entities und die allgemeinen Entities relevant.

Parameter-Entities sind wie Makros für die DTDs. Anstelle der langen Liste von Elementen in jeder Element-Definition können diese wie folgt in eine Entity-Definition eingesetzt werden:


<!ENTITY % Basic "br | pg | sig | b
| i | tt | if | datetime text | freetext
| radiobox | checkbox | repeat" >

% gibt an, dass es sich hier um eine Parameter-Entity und nicht um eine allgemeine Entity handelt. Noch besser wäre eine weitere Klassifizierung der Elemente, etwa wie folgt:


<!ENTITY % Input "text | freetext | radiobox
| checkbox | datetime | repeat" >
<!ENTITY % Format "br | pg | sig | b | i | tt" >
<!ENTITY % Condtl "if" >
<!ENTITY % Basic "%Input; | %Format; | %Condtl;" >

Wie man sieht, wird auf eine Parameter-Entity verwiesen, indem der Entity-Name zwischen „%“ und „;“ gesetzt wird. Die oben stehenden Element-Deklarierungen können nun übersichtlicher dargestellt werden:


<!ELEMENT letter ( #PCDATA | %Basic; | table )* >
<!ELEMENT form ( #PCDATA | %Basic; | table )* >
<!ELEMENT table ( #PCDATA | %Basic; )* >

Diese Methode kann in der gesamten DTD angewandt werden. Beispielsweise verfügen alle Eingabe-Elemente über gemeinsame Attribute. Diese können wie folgt deklariert werden:


<!ENTITY % CommAttr "name ID #IMPLIED
label CDATA #REQUIRED
value CDATA #IMPLIED" >
<!ATTLIST radio %CommAttr; >
<!ATTLIST checkbox %CommAttr set ( yes | no ) "no" >

Interne allgemeine Entities
Allgemeine Entities sind wie Makros für das Dokument selbst. Sie können ganz ähnlich wie die Parameter-Entities für eine DTD eingesetzt werden. Zum Beispiel kommen in nahezu jeder Brief-Vorlage unserer Editor-Anwendung dieselben Text-Komponenten vor: die Anschrift, die Schlussformulierung usw. Die folgende Entity-Definition erstellt beispielsweise einen Textbaustein, der in jedem Brief an entsprechender Stelle eingesetzt werden kann. (Beachten Sie, dass die Definitionen der allgemeinen Entities kein „%“ enthalten.)


<!ENTITY CLOSING
"Sincerely,
<br/><br/><br/><sig/><br/>
<text maxlength='30' label='CS Rep Name' value='
@user.full_nm' /><br/>
Customer Service Representative" >

Auf allgemeine Entities wird im Dokument verwiesen, indem der Entity-Name zwischen „&“ und „;“ gesetzt wird. An den Stellen im Dokument mit der Bezeichnung „&CLOSING;“ zeigt der Parser den durch die Entity festgelegten Text in der Anwendung an.

Page: 1 2 3

ZDNet.de Redaktion

Recent Posts

Google schließt schwerwiegende Sicherheitslücken in Chrome

Betroffen sind Chrome 131 und früher für Windows, macOS und Linux. Angreifer können unter Umständen…

1 Woche ago

Data Analytics: Dienstleister wachsen zweistellig

Marktforscher Lündendonk erwartet für das Jahr 2025 ein durchschnittliches Umsatzwachstum von 14,9 Prozent.

1 Woche ago

Open-Source-Malware auf Rekordniveau

Alarmierender Anstieg von Open-Source-Malware / Seit 2019 haben Sonatype-Analysen mehr als 778.500 bösartige Pakete aufgedeckt

1 Woche ago

Bayerische KI-Agentur bietet KI-KOMPASS

Das KI-Werkzeug "BAIOSPHERE KI-KOMPASS" soll Unternehmen den Einstieg in KI erleichtern.

1 Woche ago

Cloudflare: Weltweiter Internettraffic wächst 2024 um 17,2 Prozent

Das Wachstum konzentriert sich wie im Vorjahr auf das zweite Halbjahr. Google dominiert bei den…

1 Woche ago

Adobe stopft kritische Löcher in Reader und Acrobat

Sie ermöglichen eine Remotecodeausführung. Angreifbar sind Acrobat DC, 2024 und 2020 sowie Reader DC und…

1 Woche ago