Alle in SGML geschriebenen DTDs haben bestimmte gemeinsame Eigenschaften. Das ist nicht verwunderlich, da sich die hinter SGML stehende Idee unweigerlich bemerkbar macht. Zwei der markantesten Merkmale dieser Idee sind die Begriffe Inhalt und Element.
Von einem Dokument, unabhängig, ob es sich um eine einzelne Webseite oder ein langes Buch handelt, wird angenommen, dass es einen wie auch immer gearteten Inhalt hat. Dieser lässt sich selbst wiederum in Teilelemente aufspalten, die ebenso zerlegbar sind. Durch die Aufnahme von Auszeichnungselementen in einen Text, werden diese einzelnen Elemente eindeutig benannt und voneinander abgegrenzt.
Nimmt man zum Beispiel ein typisches Buch, so kann man es auf der obersten Ebene als ein Ganzes, als ein Element betrachten. Dieses „Buch“-Element enthält nun Kapitel, die wiederum selbst als Elemente bezeichnet werden können. Jedes einzelne Kapitel enthält weitere Elemente. So gibt es beispielsweise Absätze, Zitate und Fußnoten. Jeder Absatz kann wiederum selbst Elemente enthalten, die helfen, den Absatzinhalt als direkte Rede oder als Namen eines der Protagonisten einer Geschichte zu identifizieren.
Wenn man möchte, kann man sich das als „Unterteilung“[3] des Inhalts vorstellen. Auf der obersten Ebene gibt es ein Element: das Buch selbst. Schaut man ein wenig tiefer, findet man weitere Teilelemente: die einzelnen Kapitel. Diese sind wiederum unterteilt in Absätze, Fußnoten, Namen und so weiter und so weiter.
Anzumerken ist an dieser Stelle, dass das eben gesagte ohne weiteres auf jeden Inhaltstyp angewandt werden kann, auch ohne dass von SGML die Rede ist. Man könnte beispielsweise einfach verschiedene Stifte nehmen und einen Ausdruck dieser Fibel vor sich hinlegen und dann mit verschiedenen Farben die einzelnen Abschnitte des Buchinhalts markieren.
Leider gibt es keinen elektronischen Stift, um das zu tun. Deshalb muss ein anderer Weg gewählt werden, um zu bestimmen, zu welchem Element die einzelnen Inhalte gehören. In SGML-basierten Auszeichnungssprachen wie HTML und DocBook werden dafür so genannte Tags eingesetzt.
Mit einem solchen Tag wird eindeutig festgelegt, wo ein bestimmtes Element beginnt und wo es endet. Allerdings gehört der Tag selber nicht zum Element. Er legt lediglich die Grenzen des Elements fest. Da jede DTD mit dem Ziel entwickelt wurde, einen speziellen Inhaltstyp auszuzeichnen, wird jede DTD verschiedene Elemente kennen, die daher natürlich auch unterschiedlich benannt sein werden.
Der Starttag für ein imaginäres Element mit dem
Namen elementname
ist
<
.
Sein Gegenstück, der schließende Endtag, ist
elementname
></
.elementname
>
HTML kennt das Element p
, um
festzulegen, dass ein bestimmter abgegrenzter Bereich
einen Absatz darstellt. Dieses Element hat sowohl einen Start-
als auch einen Endtag.
Elemente müssen nicht notwendigerweise einen Endtag haben. Ebenso ist es nicht notwendig, dass Elemente einen Inhalt haben. Beispielsweise kann in HTML-Dokumenten mittels eines speziellen Elements festgelegt werden, dass eine horizontale Linie an einer bestimmten Stelle erscheinen soll. Da dieses Element offensichtlich keinen Inhalt hat, wird auch kein Endtag benötigt.
In HTML kann man mit dem Element hr
festlegen, dass an einer bestimmten Stelle eine
horizontale Linie angezeigt werden soll. Da dieses Element
keinen Inhalt umschließt, hat es nur einen
Starttag.
Elemente können andere Elemente enthalten. Im anfangs erwähnten Buch enthielt das Buch-Element alle Kapitel-Elemente, die wiederum alle Absatz-Elemente enthielten und so fort.
em
Welche Elemente andere Elemente enthalten können und welche das sind, wird innerhalb der DTD eines Dokuments festgelegt.
Viele Leute sind oft verwirrt, wenn es um die richtige Benutzung der Begriffe Tag und Element geht. Im Ergebnis werden sie oft so genutzt, als wären sie austauschbar. Allerdings sind sie das nicht.
Ein Element ist ein konzeptioneller Teil eines Dokuments und hat einen festgelegten Anfang und ein festgelegtes Ende. Ein Tag hingegen markiert die Stelle, an der ein Element beginnt und endet.
Wenn in diesem Dokument vom „Tag p
“
gesprochen wird, ist damit der Text
gemeint, der aus den drei Zeichen <
,
p
und >
besteht. Wird
hingegen von dem „Element p
“
gesprochen, ist damit das gesamte Element gemeint.
Diese Unterscheidung ist sicherlich subtil. Trotzdem sollte man sie sich vergegenwärtigen.
Elemente können selber Attribute haben, die aus einem Namen und einem Wert bestehen. Die Attribute haben die Aufgabe, dem Element zusätzliche Informationen hinzuzufügen. Denkbar sind hier Festlegungen über die Darstellung, Bezeichner, über die das Element eindeutig identifiziert werden kann, oder beliebige andere Informationen.
Elementattribute werden in den Starttag
eingefügt und haben die Form
.Attributename
="Wert
"
Bei einigen HTML-Versionen kennt das Element
p
das Attribut align
, mit
dessen Hilfe die Textausrichtung eines Absatzes bestimmt werden
kann.
align
akzeptiert einen von vier
vorgegebenen Werten: left
,
center
, right
und
justify
. Ist align
nicht
angegeben, wird vom Standardwert left
ausgegangen.
Einige Attribute akzeptieren nur bestimmte Werte, wie
beispielsweise left
oder
justify
. Andere akzeptieren jeden beliebigen
Wert. Enthält Attributwert doppelte Anführungszeichen
("
), wird der Wert in einfachen
Anführungszeichen eingeschlossen.
Manchmal können die Anführungszeichen um den Attributwert weggelassen werden. Allerdings sind die Regeln, die festlegen wann dies zulässig ist, sehr spitzfindig. Am besten schließen Sie Attributwerte immer in Anführungszeichen ein.
Die Informationen über Attribute, Elemente und Tags
sind in SGML-Katalogen abgelegt und werden von den verschiedenen
Werkzeugen des Dokumentationsprojektes genutzt, um die
geschriebenen Dokumente zu validieren. Die Programme die durch
textproc/docproj
installiert
werden, bringen ihre eigenen Katalogvarianten mit, zudem pflegt
das FDP seine eigenen Kataloge. Beide Katalogarten müssen
von allen Programmen gefunden werden können.
Damit die Beispiele dieser Fibel ausgeführt werden können, ist es notwendig, dass einige Programme auf dem Rechner installiert sind und das eine Umgebungsvariable korrekt gesetzt wird.
Der erste Schritt ist die Installation des Ports
textproc/docproj
über das FreeBSD-Portsystem. textproc/docproj
ist ein
Metaport, der alle vom FDP
benötigten Programme und Daten aus dem Netz laden und
installieren sollte.
Anschließend muss in den Shellkonfigurationsdateien die
Variable SGML_CATALOG_FILES
[4] gesetzt werden.
Damit die Änderungen wirksam werden, meldet man sich ab und anschließend wieder an – oder man führt die obigen Anweisungen direkt in der Shell aus und setzt so die benötigten Umgebungsvariablen.
Nun sollte man eine Datei
beispiel.xml
anlegen, die den
folgenden Text enthält:
Nachdem die Datei abgespeichert wurde, kann sie mit Hilfe eines SGML-Parsers validiert werden.
Bestandteil von textproc/docproj
ist onsgmls
- ein validierender Parser.
onsgmls
liest ein Dokument entsprechend einer SGML-DTD
ein und gibt anschließend ein Element-Structure-Information-Set
(ESIS) aus. Allerdings ist das an dieser Stelle nicht weiter
wichtig.
Wird onsgmls
mit der Option -s
aufgerufen, werden nur Fehlermeldungen ausgegeben. Dadurch
kann leicht geprüft werden, ob ein Dokument gültig
ist oder nicht.
So prüft man mit onsgmls
, ob die neuangelegte
Beispieldatei gültig ist:
%
onsgmls -s beispiel.xml
Sofern das Beispiel korrekt abgetippt wurde, wird sich
onsgmls
ohne jegliche Ausgabe beenden. Das bedeutet,
dass das Dokument erfolgreich validiert werden konnte
und somit gültig ist.
Jetzt sollten die Tags title
und
/title
aus dem Dokument gelöscht
und das Dokument erneut validiert werden:
%
onsgmls -s beispiel.xml
onsgmls:beispiel.xml:5:4:E: character data is not allowed here
onsgmls:beispiel.xml:6:8:E: end tag for "HEAD" which is not finishedDie Fehlermeldungen, die von onsgmls
ausgegeben werden, sind in durch Doppelpunkte getrennte
Spalten unterteilt.
Spalte | Bedeutung |
---|---|
1 | Der Name des Programms, das den Fehler
meldet. Hier wird immer onsgmls
stehen. |
2 | Der Name der fehlerhaften Datei. |
3 | Die Zeilennummer des Fehlers. |
4 | Die Spaltenummer des Fehlers. |
5 | Ein einbuchstabiger Code, der über die
Art des Fehlers informiert. I
steht für eine informelle Meldung,
W für eine Warnung und
E für Fehler[a] und X für
einen Querverweis. Bei den oben stehenden Ausgaben
handelt es sich also um Fehlermeldungen. |
6 | Die Meldung. |
[a] Nicht immer besteht eine Meldung aus
fünf Spalten. Die Ausgabe von
|
Durch das Weglassen des Tags title
sind zwei unterschiedliche Fehler entstanden.
Der erste Fehler besagt, dass Inhalt (in diesem
Falle Zeichen anstatt eines Starttags) an einer Stelle
gefunden wurde, an der der Parser etwas anderes erwartet
hat. Genauer gesagt wurde der Starttag eines Elements
erwartet, das innerhalb von head
auftreten kann.
Der zweite Fehler wurde dadurch verursacht, dass
das Element head
ein
Element title
enthalten
muss und onsgmls
nicht berücksichtigt, dass dieser Fehler auf dem
vorhergehenden beruht. Es wird lediglich festgestellt,
dass der Endtag von head
auftritt,
obwohl nicht alle notwendigen Elemente vorhanden sind.
Zum Schluss sollte der Tag
title
wieder in die Beispieldatei
eingefügt werden.
Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an
<de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an
<de-bsd-translators@de.FreeBSD.org>.