# 1

# Die XML-Syntax des Datenmanagers

Der Wurzelknoten des XML-Baums muss `<data>`, 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.

can have a "id" attribute corresponding to the data source's ID. If not present, and ID will be assigned automatically.

can contain a `<depend>` tag which defines a dependency on another data source with the "foreign_key_table" attribute defining the name of the table to which there are foreign keys used to determine the dependency, and the "id" attribute can specify a data source ID if different than the aforementioned table

The `<depend>` tag, which, for a data source from a table, defines a dependency to another data source from a table:

requires the "foreign_key_table" attribute defining the name of the table to which there are foreign keys used to determine the dependency

can have a "id" attribute corresponding to the ID of the referenced data source. If not provided, then the dependency may fail if there is no data source which ID is the"foreign_key_table" attribute.

can contain one or more `<column>` tag which contents define the columns to identify the foreign key to use; this is necessary if there are multiple foreign keys, and can be omitted if there is only one possible koreign key. The listed columns are the one from the table where the foreign key exists.

<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.

the `orders` data source which selects among contents of the `orders` table, the rows which correspond to a row in the `customers` table using the foreign key on table orders which involves the "orders.customer_id" column and the primary key of the customers table. The "id" attribute of the `<depend>` tag is necessary here to identify referenced the data source.

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.