prev up next

Previous: Anwendung der DTD in XML-Beispielen Up: Anwendung der DTD in XML-Beispielen Next: Reflexion der DTD-Entwicklung

XML-Kurzeinfüehrung

Dieses Kapitel beinhaltet keine ausführliche Beschreibung der Sprache XML, sondern nennt nur die Punkte, die für das Schreiben einer X3D-Szene mit Hilfe unserer DTD notwendig sind. Die Beispiele sind dabei auf unsere DTD abgestimmt.
Eine XML-Datei ist streng gegliedert, wobei die Gliederung der verwendeten DTD zu entnehmen ist. In der DTD wird mittels
<!ELEMENT name ...>
ein Element definiert, das in der XML-Datei als Tag <name> verwendet wird. Dabei gilt, dass ein geöffnetes Tag auch immer mit </name> geschlossen werden muss. Innerhalb eines Tags können weitere Tags stehen, sofern die DTD dies zulässt.
Beispiel:

DTD:
<!ELEMENT CoordIndex (Polyline*)>
<!ELEMENT Polyline (#PCDATA)>

Beispiel-XML-Datei:
<CoordIndex>
<Polyline> 1 3 4 5 </Polyline>
</CoordIndex>

Wenn jemand das Tag <Polyline> benutzen will, so ist es durch <CoordIndex> einzurahmen. Umgekehrt ist in dem Tag <CoordIndex> nur <Polyline> erlaubt.
Neben eingeschlossenen Elementen sind Attribute möglich, die etwas anders aufgerufen werden.
Beispiel:
DTD:
<!ELEMENT CoordinateVector (Point*)>
<!ELEMENT Point EMPTY>
<!ATTLIST Point
x %Float; #REQUIRED
y %Float; #REQUIRED
z %Float; #REQUIRED>

Beispiel-XML-Datei:
<CoordinateVector>
<Point x=''1'' y=''0'' z=''0''> </Point>
<Point x=''1'' y=''1'' z=''0''/>
</CoordinateVector>

Die Attribute werden innerhalb der Klammern aufgeführt. Zwischen öffnendem und schließendem Tag <Point> dürfen keine weiteren Element stehen, da in der DTD das Wort EMPTY eingetragen ist. In solchen Fällen kann das schließende Tag weggelassen werden, indem das öffende mit /> beendet wird.

Eine XML-Datei beginnt mit einem Prolog, der zumindest <?xml version=''1.0''?> beinhalten sollte, er kann aber auch leer sein. Sollen noch Informationen über die Codierung des Textes hinzukommen, kann die erste Zeile auch so aussehen: <?xml version=''1.0'' encoding=''UTF-8''?>. Nach dem Prolog sollte die DTD eingebunden werden, dies beispielsweise durch den Aufruf <!DOCTYPE X3DScene SYSTEM ''X3D.dtd''>.
Nach diesem Vorspann folgt die eigentliche XML-Datei, die nach der von der DTD vorgeschriebene Syntax verfasst werden muss. Dabei existieren innerhalb der DTD verschiedene Symbole und Bezeichnungen mit folgender Bedeutung:

Elemente betreffend:


?:Objekt ist optional, kann also null oder einmal auftreten.

* : Das Objekt ist optional, kann aber beliebig oft auftreten.
+ : Das Objekt muss mindestens einmal auftreten.
| : ''Oder'', d.h. ein Element aus mehreren kann gewählt werden.
Ist kein Zeichen hinter dem Element angegeben, so muss das Element genau einmal verwendet werden.

Attribute betreffend :


CDATAZeichenketten

ID Die ID muss im gesamten Dokument einmalig sein,
damit jede ID eindeutig ein Element identifiziert.
Deshalb kann eine ID nur #REQUIRED oder #IMPLIED sein.
IDREF IDREF muss eine Zeichenkette sein, die irgendwo
im Dokument eine ID ist, also quasi auf diese verweisen.
Mit ID und IDREF können also zwei unterschiedliche Elemente
einander zugeordnet werden.

REQUIREDAttribut muss gesetzt werden.

IMPLIED Dieses Attribut kann gesetzt werden.
''x'' x wird als Default-Wert genommen, wenn das
zugehörige Element ohneAngabe eines Attributs genutzt wird.
Beispiel-Dateien
1. Kugel
XML
<?xml version=''1.0'' encoding=''UTF-8''?>
<!DOCTYPE X3DScene SYSTEM ''X3D.dtd''>

     <X3DScene>

<Group>
<Translation x=''1'' y=''3'' z=''4''/><!- transl. of thesphere->
<Shape>
<Material>
<DiffuseColor r=''0'' g=''121'' b=''0''/><!- green material->
</Material>
<Sphere/><!- sphere (radius=1 ->
</Shape>
</Group>
</X3DScene>
VRML

     #169#>0.5cm#VRML V2.0 utf8

#kugel.wrl: # gruene, stark reflektierende Kugel mit Radius 1.5
Transform { # Plaziere
translation 0 00 # im Ursprung
children [
Shape { # eine Gestalt
geometry Sphere { # von der Form einer Kugel
radius 1.5 # mit Durchmesser 1.5
}
appearance Appearance { # in der Erscheinung
material Material { /> # mit Materialbeschaffenheit
diffuseColor 0 1 0 # gruene Farbe
shininess 0.9 # stark reflektierend
}
}
}
]
}
XML-PARSER
Nachdem ein XML-Dokument geschrieben worden ist, muss ein Parser über die Datei laufen. Dieser Parser ''liest'' das Dokument einmal durch und stellt die enthaltenen Informationen darüberliegenden Schichten der Anwendung zur Verfügung. Es werden zwei Arten von Parsern unterschieden: SAX (Simple API for XML) und DOM (Document Object Model). Die DOM API ist einfacher zu benutzen und liefert einen relativ einfachen Baum von Objekten. Dafür muss ein höherer Speicherbedarf und eine stärkere CPU-Belastung in Kauf genommen werden. Da bei den einfachen Testdateien, die wir geschrieben haben diese Nachteile nicht ins Gewicht fielen, haben wir uns wegen der einfacheren Handhabung für den DOM-Parser entschieden. Ein einfacher DOM-Parser zum Testen befindet sich im Anhang.//


prev up next
Previous: Anwendung der DTD in XML-Beispielen Up: Anwendung der DTD in XML-Beispielen Next: Reflexion der DTD-Entwicklung