# 1

Mario Blättermann
mario.blaettermann@gmail.com 2010
Christian Kirbach
Christian.Kirbach@googlemail.com 2010, 2011, 2016.

# Die XML-Syntax der Datenverwaltung

Der Wurzelknoten des XML-Baums muss `<data>` sein, wobei hier noch eine oder mehrere Datenquellendefinitionen enthalten sein können. Jede Datenquelle wird durch `<query>`- oder `<table>`-Knoten angegeben, gefolgt von diesen optionalen Attributen:

»id« zum Angeben einer Kennung in Form einer Datenquellen-Zeichenkette. Dies wird benutzt, wenn Datenquellen miteinander verknüpft werden sollen.

»title« zum Angeben eines Titels.

Es ist natürlich möglich, sowohl die `<query>`- als auch die `<table>` in den gleichen Datenquellenspezifikationen zu verwenden.

# Exportierte Variablen

Jede Datenquelle exportiert einige Variablen, welche von anderen Datenquellen wiederverwendet werden können, um eine Abhängigkeit zu erzeugen. Wenn die Datenquellen ausgeführt werden, wird der Inhalt der exportierten Variablen abhängig von der aktuell ausgewählten Zeile in der sich ergebenden Tabellenansicht zurückgesetzt. Falls keine Zeile ausgewählt ist, dann wird die Variable nicht gesetzt.

Jede von einer Variable abhängige Datenquelle wird erneut ausgeführt, wenn sich die betreffende Variable ändert. Im Falle einer nicht gesetzten Variable ergibt die Ausführung der Datenquelle einen leeren Datensatz.

# Die `<query>`-Markierung

Verwenden Sie die `<query>`-Markierung zum Angeben einer SQL SELECT-Anweisung als Inhalt der Markierung. Verknüpfungen zu anderen Datenquellen sind über Variablen im SQL-Code der SELECT-Anweisung möglich.

<data> <query title="Customers" id="customers"> SELECT id, name FROM customers where name like ##name::string </query> <query title="Customer's details" id="cust_details"> SELECT * FROM customers WHERE id=##customers@id::int </query> </data>

Beispielsweise definiert die vorige XML-Spezifikation zwei Datenquellen:

Die Datenquelle `customers`, welche einige Felder aus der Datenquelle customers auswählt und von einer Zeichenketten-Variable namens `name` abhängt. Diese Variable muss gesetzt werden, wenn die Datenquellen ausgeführt werden, weil sie in dieser Spezifikation von keiner Datenquelle exportiert wird.

Die Datenquelle `cust_details`, die alle verfügbaren Details zu einem Kunden anhand dessen Kennung auswählt. Diese zweite Datenquelle ist von der vorigen Datenquelle abhängig, weil die `customers@id`-Variable von der `customers`-Datenquelle exportiert wird.

Die Ausführung dieser Datenquellenspezifikation erstellt zwei Tabellenansichten: Eine, in der Sie einen Kunden auswählen können, und eine weitere, welche alle Attribute des ausgewählten Kunden anzeigt.

## Exportierte Variablen

Jede durch eine `<query>`-Markierung definierte Datenquelle exportiert die folgende Variable für jede Spalte des resultierenden Datensatzes. Dabei entspricht der Variablentyp dem Spaltentyp:

`<data source ID>@<column position>`, wobei die Spaltenposition bei 1 beginnt.

`<data source ID>@<column name>, falls die Spalte des Datensatzes eine Tabellenspalte ist.`

# Die `<table>`-Markierung

Verwenden Sie die `<table>`-Markierung zum Definieren einer Datenquelle, welche den Inhalt einer Tabelle anzeigt. Diese Markierung:

benötigt das »name«-Attribut, welches den Namen der Tabelle repräsentiert.

kann ein »id«-Attribut enthalten, welches zur Kennung der Datenquelle korrespondiert. Falls nicht vorhanden, wird eine Kennung automatisch zugewiesen.

kann einen `<depend>`-Knoten enthalten, welcher eine Abhängigkeit zu einer anderen Datenquelle mit dem »foreign_key_table«-Attribut definiert. Dieses Attribut gibt den Namen der Tabelle an, für die Fremdschlüssel zum Definieren der Abhängigkeit verwendet werden. Weiterhin kann das »id«-Attribut eine Datenquellenkennung angeben, die sich von der Kennung der ersten Tabelle unterscheidet.

Die `<depend>`-Markierung definiert für eine Datenquelle eine Tabelle eine Abhängigkeit zu einer anderen Datenquelle einer Tabelle:

benötigt ein »foreign_key_table«-Attribut, welches den Namen der Tabelle definiert, zu welcher Fremdschlüssel referenziert sind, um die Abhängigkeit zu bezeichnen

kann ein »id«-Attribut enthalten, korrespondierend zur Kennung der referenzierten Datenquelle. Falls nicht angegeben, kann die Abhängigkeit ungültig sein, falls es keine Datenquelle gibt, deren Kennung dem »foreign_key_table«-Attribut entspricht.

kann eine oder mehrere `<column>`-Markierungen enthalten, deren Inhalt die Spalten zur Identifizierung der zu verwendenden Fremdschlüssel bezeichnet. Dies ist erforderlich, falls mehrere Fremdschlüssel existieren, und kann weggelassen werden, falls es nur einen einzigen Fremdschlüssel gibt. Es werden nur diejenigen Spalten der Tabelle aufgelistet, die die Fremdschlüssel enthalten.

<data> <table id="the_cust" name="customers"/> <table name="orders"> <depend id="the_cust" foreign_key_table="customers"> <column>customer_id</column> </depend> </table> </data>

Beispielsweise definiert die vorige XML-Spezifikation zwei Datenquellen:

die `customers`-Datenquelle, welche sämtlichen Inhalt der customers-Tabelle auswählt.

die `orders`-Datenquelle, welche aus dem Inhalt der `orders`-Tabelle diejenigen Zeilen auswählt, welche zu einer Zeile in der `customers`-Tabelle korrespondieren. Dies geschieht unter Einsatz der Fremdschlüssels für die Tabellenordnung (?), was die Spalte »orders.customer_id« und den Primärschlüssel der `customers`-Tabelle mit einbezieht. Das Attribut »id« der `<depend>`-Markierung ist hier erforderlich, um die referenzierte Datenquelle zu identifizieren.

In diesem Beispiel ist Folgendes zu beachten:

Sie müssen die beteiligten Felder im Fremdschlüssel nicht angeben, der die Tabellen `Bestellungen` und `Kunden` verknüpft

Den Datenquellenkennungen werden die Namen der ausgewählten Tabellen zugeordnet, weil kein »id«-Attribut für die `<table>`-Markierungen angegeben wurde

## Exportierte Variablen

Jede durch eine `<query>`-Markierung definierte Datenquelle exportiert die folgende Variable für jede Tabellenspalte, wobei der Variablentyp dem Spaltentyp entspricht:

`<Datenquellenkennung>@<Spaltenname>`

`<data source ID>@<column position>`, wobei die Spaltenposition bei 1 beginnt.