2.77 .dataselect[attribute]
Mit diesem Attribut werden gleichzeitig das als Index angegebene Datamodel-Attribut und ein als Wert zugewiesenes Selektionsmuster für Knoten eines XML-Dokuments definiert.
Definition
-
Datentyp
string
-
Zugriff
get, set
-
changed-Ereignis
nein
Das definierte Datamodel-Attribut kann dann zur Kopplung mit einer View verwendet werden. Datenänderungen werden über das im Index angegebene Attribut des Doccursors weitergegeben. Das Selektionsmuster beschreibt die Knoten des XML-Dokuments aus denen die Daten geholt bzw. in denen sie gespeichert werden.
Die Syntax des Selektionsmusters entspricht der Musterdefinition für die :select-Methode des Doccursors.
Das Selektionsmuster des .dataselect-Attributs ohne Index definiert Knoten als Ausgangspunkte für die indizierten .dataselect-Attribute. Die Selektionsmuster der indizierten .dataselect-Attribute werden dann als relative IDM-Pfade interpretiert. Sie referenzieren Knoten innerhalb der Teilbäume, deren Wurzeln durch das nicht indizierte .dataselect-Attribut selektiert werden. Die indizierten .dataselect-Attribute greifen in diesem Fall also nicht auf das gesamte XML-Dokument zu, sondern nur auf die Unterknoten jener Knoten, die vom nicht indizierten .dataselect-Attribut selektiert worden sind.
Um eine konsistente Behandlung von optionalen XML-Elementen und ‑Attributen zu ermöglichen, gibt die Selektion eines Datamodel-Attributs einen Leerstring zurück, wenn ein Wert nicht vorhanden ist oder sich nicht innerhalb der vorselektierten Teilbäume befindet.
Mit dem Attribut .dataselectattr kann festgelegt werden, ob das Datamodel-Attribut mit dem Knoteninhalt oder einem Knotenattribut verknüpft ist. Datentyp und Kardinalität des Datamodel-Attributs können mit den Attributen .dataselecttype und .dataselectcount gesteuert werden.
Beispiel
In diesem Beispiel stammen die Daten für eine Liste mit Nobelpreisträgern aus einem XML-Dokument, in dem die Informationen zu jedem Preisträger in einem Knoten prize
stehen.
<?xml version="1.0"?> <nobelprizes> <category id="p">Physics</category> <category id="c">Chemistry</category> <prize year="1" category="p"> <merit>discovery of x-rays</merit> <winner>Wilhelm Conrad Röntgen</winner> </prize> <prize year="11" category="c"> <merit>discovery of radioactivity</merit> <winner>Marie Curie</winner> </prize> <prize year="18" category="p"> <merit>development of the concept of quanta</merit> <winner>Max Planck</winner> </prize> <prize year="70" category="c"> <merit>discovery of sugar nucleotides and their role in the biosynthesis of carbohydrates</merit> <winner>Luis Leloir</winner> </prize> </nobelprizes>
Die XML-Knoten können dann beispielsweise wie folgt über Datamodel-Attribute verknüpft werden:
... document Doc { doccursor DocCur { .dataselect "..prize"; .dataselect[.Winner] ".winner"; .dataselect[.Year] "."; .dataselect[.Discovery] "merit"; .dataselectattr[.Year] "year"; .dataselecttype[.Year] integer; .dataselectcount[.Year] integer; } } ...
Verfügbarkeit
Siehe auch
Attribute .dataselectattr[attribute], .dataselectcount[attribute]