DTDs und XSDs verstehen – Teil 1

Komplexe DTDs

Nun kommt es gerade in komplexeren DTDs vor, dass immer wieder die gleichen Teilelemente benötigt werden. Würde man diese jeweils komplett beschreiben, wäre die DTD noch deutlich länger, als sie in solchen Fällen ohnehin wird. Daher können Entities zur Beschreibung von Informationen verwendet werden. Der häufigste Einsatz ist die Definition von Makros, beispielsweise bei

<!ENTITY % note.types "
note |
document |
profiledocument |
%design.elements;
">'

In diesem Fall wird ein Element definiert. Dieses Element besteht aus mehreren anderen Elementen, von denen eines vorkommen muss. Innerhalb wird wiederum mit einem Makro gearbeitet, weil die Designelemente an anderer Stelle definiert sind.

Genutzt wird das beispielsweise bei

<!ELEMENT database ( databaseinfo?, acl?, fulltextsettings?,
launchsettings?, ( %note.types; )* )>

Stattdessen könnte der Eintrag auch die Form

<!ELEMENT database ( databaseinfo?, acl?, fulltextsettings?,
launchsettings?, ( note | document | profiledocument
| %design.elements )* )>

haben. Da %design.elements wiederum ein Platzhalter ist, gibt es auch dafür eine Entity-Definition, in diesem Fall lautet sie:

<!ENTITY % design.elements "
form |
subform |
page |
frameset |
view |
folder |
sharedfield |
sharedactions |
imageresource |
appletresource |
agent |
agentdata |
scriptlibrary |
databasescript |
helpusingdocument |
helpaboutdocument |
dataconnection
">