| |
Accessor:
uri : DocNode -> uriReference
children : DocNode -> [ElemNode | PINode | CommentNode]
root : DocNode -> ElemNode
D.h. uri liefert zum DocNode den Wert der URI reference (Quelle des Dokumentes), children liefert
die Knoten und root liefert die Wurzel des Baumes unter dem DocNode.
Ein XML-Dokument wird in dem Datenmodell durch solch einen eindeutigen Dokument-Knoten
(DocNode) von anderen XML-Dokumenten unterschieden. Ein Teil eines XML-Dokuments wird
durch die Nachfahren dieses Knotens beschrieben, welche vom Typ ElemNode, ValueNode, PINode,
or CommentNode sein können. Ein ElemNode kann dabei wiederum ElemNodes beinhalten, womit
auch in dem Datenmodell der hierarchische Aufbau von XML Dokumenten erhalten bleibt.
Eine Instanz des Datenmodells ist nun ein geordneter ([]) oder ungeordneter ({}) Baum von einem
oder mehreren Knoten.
Instance = [ DocNode | ElemNode | ValueNode | PINode
| CommentNode | RefNode ]
| { DocNode | ElemNode | ValueNode | PINode
| CommentNode | RefNode }
Beispiel
Mit einem Beispiel wird nun gezeigt, wie ein XML-Dokument durch das Datenmodell repräsentiert
wird. Zu Grunde liegt ein kleiner Ausschnitt unserer Beispieldatei bib.xml.
<bib>
<item typ=Buch id="1-55860-622-X">
<titel>Data on the Web</titel>
<autor>Abiteboul</autor>
</item>
</bib>
Dieses XML-Dokument wird nun durch folgende accessors und constructors beschrieben und bildet
somit eine Instanz des Datenmodells
children(D1) = [ E1 ]
root(D1) = E1
name(E1) = QNameValue(null,"item", Ref(Def_QName))
children(E1) = [ E2, E3, ]
attributes(E1) = { A1, A2 }
type(E1) = Ref(Def_string)
parent(E1) = D1
name(A1) = QNameValue(null, "typ", Ref(Def_QName))
value(A1) = StringValue("Buch", Ref(Def_string))
parent(A1) = E1
name(A2) = QNameValue(null, "id", Ref(Def_QName))
value(A2) = StringValue("1-55860-622-X", Ref(Def_string))
parent(A2) = E1
name(E2) = QNameValue(null, "titel", Ref(Def_QName))
children(E2) = [ StringValue("Data on the Web",Ref(Def_string)) ]
type(E2) = Ref(Def_string)
parent(E2) = E1
9
|  |
|
| |
|
|