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]