• +49-(0)721-402485-12
Ihre Experten für XML, XQuery und XML-Datenbanken

Elementknoten

Ein Elementknoten repräsentiert ein Element aus XML 1.0. Der textuelle Wert eines Elementknotens ergibt sich aus der Verkettung aller Textknoten, die Nachfolger dieses Elementknotens sind. Darüber hinaus hat ein Element einen getypten Wert, falls es keinen komplexen Inhalt hat, wenn es also nicht ausschließlich Kindelemente besitzt.

Dieser ergibt sich aus der Validierung des textuellen Wertes gegen die Typdefinition gemäß XML Schema (der getypte Wert hat also zum Beispiel den Typ xs:integer, wenn laut Schemadefinition das Element den einfachen Typ xs:integer hat). Hat das Element den Typ xdt:untypedAny (also einen unbestimmten komplexen Typ), so ist der getypte Wert vom Typ xdt:untypedAtomic (dem unbestimmten atomaren Typ).

Zur Erzeugung eines Elementknotens gibt es zwei verschiedene Konstruktoren: den direkten Elementkonstruktor und den berechneten Elementkonstruktor.

Der direkte Elementkonstruktor

Der direkte Elementkonstruktor benutzt die vertraute XML-Notation, also zum Beispiel:

<Arzt ID="Arzt_01">Hans Müller</Arzt>

In Attributwerten und im Elementinhalt sind Referenzen auf vordefinierte Entitäten (zum Beispiel &lt;) und Zeichenreferenzen (zum Beispiel &#x20;) erlaubt, die bei der Konstruktion aufgelöst werden:

<Fähigkeit>Altenbetreuung &amp; Altenpflege</Fähigkeit>

Statt eines konstanten Inhalts kann auch ein Ausdruck angegeben werden, der bei der Konstruktion ausgewertet wird. Damit ein Ausdruck von einem literalen Inhalt unterschieden werden kann, wird er in geschweifte Klammern eingeschlossen. (Die XQuery-Spezifikation spricht hier von einem eingeschlossenen Ausdruck. Dieser signalisiert einen neuen "Auswertungskontext", also nicht eine literale Übernahme, sondern eine Ausdrucksauswertung). So entsteht durch den Konstruktor

<Gehalt>{12*3000}</Gehalt>

das folgende Element:

<Gehalt>36000</Gehalt>

Soll eine geschweifte Klammer ausnahmsweise keinen Ausdruck kennzeichnen, so ist sie zu verdoppeln. Die Auswertung der Ausdrücke in geschweiften Klammern ergibt Sequenzen aus Knoten und atomaren Werten. Entstehen so Attributknoten, dann werden diese zu Attributen des umgebenden Elementes. Allerdings müssen diese Attributknoten vor anderen Knoten stehen, sonst wird ein Fehler gemeldet. Elementknoten werden zu Kindern des umgebenden Elementes.

Weiter verschachtelte CDATA- und Elementkonstruktoren und Konstruktoren für Kommentare und Verarbeitungsanweisungen müssen nicht in geschweiften Klammern stehen, wie das folgende Beispiel zeigt:

<Freiwilliger ID="vol_01"><!-- eingefügt 1.1.2004-->
<Name>
<Vorname>Daniela</Vorname>
<Nachname>Baumann</Nachname>
</Name>
<Adresse>
<Straße>Potsdamer Straße</Straße>
<Hausnr>62</Hausnr>
<Stadt>Berlin</Stadt>
<Staat>D</Staat>
<PLZ>14145</PLZ>
</Adresse>
<Geburtsdatum> {xs:date("1982-07-23")} </Geburtsdatum>
<Telefon>+49 30-234626</Telefon>
<Nummer>07</Nummer>
<Fähigkeit>Altenbetreuung</Fähigkeit>
<Berufsklasse>Pfleger</Berufsklasse>
</Freiwilliger>

Die genaue Syntax des direkten Elementkonstruktors lautet:

DirElemConstructor::=<QName AttributeList (/> | (> ElementContent* </QName>))
ElementContent::=ElementContentChar| {{ | }} | DirElemConstructor
| EnclosedExpr | CdataSection | CharRef
| PredefinedEntityRef | XmlComment | XmlPI
AttributeList::=( QName = AttributeValue )*
EnclosedExpr::={ Expr }

Attributwerte

Ein Ausdruck in geschweiften Klammern ist auch in einem Attributwert erlaubt. Das Ergebnis der Auswertung eines Ausdrucks in einem Attributwert wird durch Atomisierung zu einer Sequenz von atomaren Werten, die wiederum in Werte vom Typ xs:string gewandelt werden. Alle diese Zeichenketten werden verkettet und ergeben den Attributwert. Alle Leerzeichen werden dabei in gewöhnliche Leerräume (U+0020) umgewandelt. So wird zum Beispiel aus dem Konstruktor

<Arzt Gehalt="Jahresgehalt {<Berechnung>
{12*3000}</Berechnung>} Euro"/>

das Element

<Arzt Gehalt="Jahresgehalt 36000 Euro"/>

 

Quelle: "XQuery – Grundlagen und fortgeschrittene Methoden", dpunkt-Verlag, Heidelberg (2004)

<< zurückvor >>