Mercurial > dive4elements > river
diff artifacts/doc/datacage_ref_de.rst @ 7340:2ce7bacc940f double-precision
Merged changes from default into double precision branch.
author | Tom Gottfried <tom@intevation.de> |
---|---|
date | Tue, 15 Oct 2013 18:41:55 +0200 |
parents | 7be4425eaca9 |
children | e07dc8854a8f |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/doc/datacage_ref_de.rst Tue Oct 15 18:41:55 2013 +0200 @@ -0,0 +1,530 @@ +========= +Datenkorb +========= + + +.. contents:: Inhalt + +Übersicht +--------- + +Daten +----- +Im Datenkorb stehen zwei Arten von Daten zur Auswertung zur Verfügung. + +``Datensätze`` +~~~~~~~~~~~~~~ +Datensätze sind Tabellen mit benannten Spalten. Sie werden von Datenquellen +erzeugt und in einem Stapel verwaltet. Die konkreten Werte stehen erst durch +Auffaltung als Variablen zur Verfügung. + + +``Variablen`` +~~~~~~~~~~~~~ +Variablen sind die Werte, die aktuell zur Auswertung zur Verfügung stehen. Sie haben +einen Namen und einen Typ (String, Zahl, durch Datenquelle bestimmt). + +Textersatz +---------- +Um die Wertebelegungen in das Ausgabedokument schreiben zu kann an entsprechenden +Stellen eine String-Interpolation durchgeführt werden. +Hier finden zwei Arten von Textersatz ihren Einsatz. + +``${}-Ersetzungen`` +~~~~~~~~~~~~~~~~~~~ +Die ältere Variante. Innerhalb von Strings werden hier nur Variablen aufgelöst. +Beispiel: "**Hallo, ${planet}!**" wird bei planet = 'Welt' zu "**Hallo, Welt!**". + +``{$}-Ersetzungen`` +~~~~~~~~~~~~~~~~~~~ +Die neuere Variante, allerdings noch nicht komplett an allen Stellen einsatzfähig. +Innerhalb der geschweiften Klammern können beliebige XPath-Ausdrück stehen, die +zu Strings evaluiert werden. Dies orientiert sich an den String-Auswertungen in XSLT. +"**{ concat($greet, ', ', $planet, '!') }**" wird bei gesetzten Variablen greet = Hallo +und planet = "Welt" zu **Hallo, Welt!** ausgewertet. + +Datenkorb-Elemente +------------------ + +Datensätze erzeugen +~~~~~~~~~~~~~~~~~~~ + +``dc:context`` Aufspannen eines Gültigkeitsbereiches eines Datenbankdatensatz +............................................................................. + +.. code:: xml + + <dc:context connection="Verbindung"> + ... + </dc:element> + +Spannt einen Gültigkeitsbereich für einen Datensatz auf, der aus der Datenbank +kommt. Die adressierte Datenbank wird über das optionale Attribut 'connection' +bestimmt. Zur Zeit sind drei Datenbanken angebunden: + +- **user**: Die Index-Datenbank des Artefakt-Servers. Hierüber stehen Meta-Informationen + zu alten Berechnungen zur Verfügung. + +- **system**: Die FLYS-Datenbank mit den hydrologischen, morphologische und geodätischen + Daten. + +- **seddb**: Die Sediment-Datenbank. + +In einem `<dc:context>`-Element wird zwingend ein `<dc:statement>`-Element erwartet, +um einen Datensatz aus der Datenbank zu holen. Dieser Datensatz steht dann innerhalb des +`<dc:context>`-Elementes ein oder mehrfach zur Verfügung. Innerhalb eines +`<dc:context>`-Elementes können weitere `<dc:context>`-Elemente eingeschachtelt werden. +Ist kein 'connection'-Attribut vorhanden, wird die Datenbank-Verbindung des umgebenen +Kontextes weiterbenutzt. Initial wird je nach Aufrufart der Datenkorbs entweder +der **user** oder **system**-Kontext angenommen. Dies richtet sich danach, ob in +der Aufrufumgebung eine Artefakt gesetzt wird oder nicht. Im ersten Fall wird +angenommen, dass es sich um einen Ladevorgang für zusätzliche Daten handelt, die +auch alte Berechnungen mit einschliesst. + + +``dc:statement`` Holen eines Datensatzes aus einer Datenbank +............................................................ + +.. code:: xml + + <dc:statement> + SQL-Select-Statement. + </dc:element> + +Mittels eines SQL-Select-Statements werden in einem `<dc:context>`-Elementes aus +der dort definierten Datenbank geholt. Die Spaltennamen der Projektion des SQL-Statements +werden übernommen und später beim Auffalten des Datensatzes benutzt. + +``dc:container-context`` **TODO** + +``dc:properties`` **TODO** + +``dc:virtual-column`` Virtuelle Spalten definieren +.................................................. + +.. code:: xml + + <dc:virtual-column name="Name" type="Type" expr="XPath-Ausdruck"> + ... + </dc:virtual-column> + +Definiert eine neue, virtuelle Spalte namens Name für den aktuellen Datensatz. +Der Typ wird optional durch Typ festgelegt; ohne Angabe wird der Typ String angenommen. +Die Wertebelegung ergibt sich aus der zeilenweisen Auswertung des XPath-Ausdrucks. + +Dies sei an folgendem Beispiel illustriert: + + +----+ + +Zahl+ + +====+ + + 1+ + +----+ + + 2+ + +----+ + + 3+ + +----+ + +.. code:: xml + + <dc:virtual-column name="Quadrat" type="number" expr="$Zahl * $Zahl"> + ... + </dc:virtual-column> + +Erzeugt einen neuen Datensatz folgender Struktur: + + +----+-------+ + +Zahl+Quadrat+ + +====+=======+ + + 1+ 1+ + +----+-------+ + + 2+ 4+ + +----+-------+ + + 3+ 9+ + +----+-------+ + +Innerhalb eines `virtual-column`-Elementes kann der Datensatz mittel `dc:for-each` wie +gewohnt realisiert werden. Wird das `dc:virtual-column`-Element verlassen, gilt wieder +der vormalige Datensatz ohne die zusätzlich Spalte. + +Datensätze einschränken +~~~~~~~~~~~~~~~~~~~~~~~ + +``dc:filter`` Selektieren einzelner Zeilen aus dem aktuellen Datensatz +...................................................................... + +.. code:: xml + + <dc:filter expr="XPath-Ausdruck"> + ... + </dc:filter> + +Evaluiert pro Zeile des aktuellen Datensatzes den XPath-Ausdruck 'expr' und erzeugt +einen neuen Datensatz, der nur die Zeilen des Originaldatensatzes enthält für den +die Auswertung logisch wahr ergab. Im XPath-Ausdruck stehen die aufgefalteten Werte +der jeweiligen Zeile zur Verfügung. + +Folgends Beispiel soll dies verdeutlichen: + + +----+ + +Zahl+ + +====+ + + 1+ + +----+ + + 2+ + +----+ + + 3+ + +----+ + + 4+ + +----+ + +Zahlen erhalten, die einen Wert kleiner drei haben. + +.. code:: xml + + <dc:filter expr="$Zahl < 3"> + ... + <dc:filter> + +Dies erzeugt folgenden neuen Datensatz: + + +----+ + +Zahl+ + +====+ + + 1+ + +----+ + + 2+ + +----+ + +Innerhalb des `dc:filter`-Elementes kann der neue Datensatz wie gewohnt mit `dc:for-each` +realisiert werden. Nach Verlassen des `dc:filter`-Elementes ist wieder der vormalige +Datensatz aktuell. + +``dc:group`` Datensätzen in Gruppen ordnen +.......................................... + +.. code:: xml + + <dc:group expr="XPath-Ausdruck"> + ... + </dc:group> + +Pro Zeile der Originaldatensatzes wird der XPath-Ausdruck 'expr' ausgewertet. +Wie bei `dc:filter` stehen hier die aufgefalteten Werte der einzelnen Spalten zur +Verfügung. Das Resultat der XPath-Auswertung wird als Schlüssel für zu erzeugende +Gruppen benutzt, denen dann die Zeilen zugeordnet werden. +Nachdem alle Zeilen ihren entsprechenden Gruppen zugeordnet wurden, wir der +Inhalt des `dc:group`-Elements für jede Gruppe durchlaufen. Innerhalb des +`dc:group`-Elementes steht der jeweilige Schlüssel der aktuellen Gruppe über +die Funktion `dc:group-key()` zur Auswertung zu Verfügung. Innerhalb der +jeweiligen Gruppen kann mittel `dc:for-each` der jeweilige Unterdatensatz +realisiert werden. + +Zur Verdeutlichung folgendes Beispiel: + + +-------+-----------+ + +Marke +Bezeichnung+ + +=======+===========+ + +Ferrari+Testarossa + + +-------+-----------+ + +Volvo +V40 + + +-------+-----------+ + +Volvo +780 + + +-------+-----------+ + +Ferrari+F40 + + +-------+-----------+ + +VW +Käfer + + +-------+-----------+ + +.. code:: xml + + <marken> + <dc:group expr="$Marke"> + <marke name="{dc:group-key()}"> + <dc:for-each> + <bezeichnung name="$Bezeichnung"/> + </dc:for-each> + </marke> + </dc:group> + </marken> + +Dies führt zu folgender Ausgabe: + +.. code:: xml + + <marken> + <marke name="Ferrari"> + <bezeichnung name="F40"/> + <bezeichnung name="Testarossa"/> + </marke> + <marke name="Volvo"> + <bezeichnung name="V40"/> + <bezeichnung name="780"/> + </marke> + <marke name="VW"> + <bezeichnung name="Käfer"/> + </marke> + </marken> + +Datensätze auffalten +~~~~~~~~~~~~~~~~~~~~ + +``dc:for-each`` Realisieren eines Datensatzes +............................................. + +.. code:: xml + + <dc:for-each> + ... + <dc:for-each> + +Erzeugt nacheinander alle zeilenweisen Realisationen des aktuellen Datensatzes. Die +einzelnen Spaltenwerte sind dann über Variablen erreichbar, die nach den Spaltenbezeichnern +des Datenstzes benannt sind. + +Folgendes Beispiel soll den Sachverhalt illustieren: + + +----+ + +Zahl+ + +====+ + + 1+ + +----+ + + 2+ + +----+ + + 3+ + +----+ + +.. code:: xml + + <zahlen> + <dc:for-each> + <zahl wert="$Zahl"/> + <dc:for-each> + </zahlen> + +Dies erzeugt folgende Ausgabe: + +.. code:: xml + + <zahlen> + <zahl wert="1"/> + <zahl wert="2"/> + <zahl wert="3"/> + </zahlen> + +``dc:iterate`` **TODO** + +Bedingte Ausführung +~~~~~~~~~~~~~~~~~~~ + +``<dc:if>`` Einfaches Wenn-Dann ohne Sonst-Fall +............................................... + +.. code:: xml + + <dc:if test="XPath-Ausdruck"> + ... + </dc:if> + +Der innere Teil wird nur dann betreten, wenn der XPath-Ausdruck zu +logisch wahr evaluiert wird. Dieses Konstrukt kennt keinen alternativen +Pfad, der betreten wird, falls der Ausdruck zu logisch falsch ausgewertet +wird. Wird dies benötigt, muss man ``<dc:choose>`` benutzen. +``<dc:if>`` ist in Symmetrie zu ``<xsl:if>`` von XSLT entworfen worden. + +``<dc:choose>`` Ketten von Wenn-Dann-Ausdrücken +............................................... + +.. code:: xml + + <dc:choose> + <dc:when test="XPath-Ausdruck 1"> ... </dc:when> + <dc:when test="XPath-Ausdruck 2"> ... </dc:when> + ... + <dc:otherwise> ... </dc:otherwise> + </dc:choose> + +Es werden der Reihe nach von oben nach unter die ``test``-XPath-Ausdrücke der ``dc:when``-Elemente ausgewertet. Evaluiert ein Ausdruck zu logisch wahr, wird der innere Teil des entsprechenden ``<dc:when>``-Elements betreten. Die verbliebenen +``<dc:when>``- und ``<dc:otherwise>``-Elemente werden dann ignoriert. Evaluiert +keiner der ``test``-Ausdrücke zu wahr, wird der innere Teil des +``<dc:otherwise>``-Elements betreten. +``<dc:choose>`` ist in Symmetrie zu ``<xsl:choose>`` von XSLT entworfen worden. + + + +Makros +~~~~~~ +Um innerhalb des Definitionsdokumentes Wiederholungen zu vermeiden, können sogenannte +Makros definiert werden, die dann von anderer Stellen aus eingefügt werden können. + +``dc:macro`` Wiederverwendbare Teile definieren +............................................... + +.. code:: xml + + <dc:macro name="Name"> + ... + </dc:macro> + +Definiert ein Makro namens Name. Nach der Definition ist dieses dann unter diesem +Namen global innerhalb des Definitionsdokumentes bekannt. Makros können geschachtelt +werden. Auch eingeschachtelte Makros sind global sichtbar. Die Makrodefinition und +ihre eingeschalteten Elemente werden nicht in das Ausgabedokument übernommen. + +``dc:call-macro`` Makros aufrufen + +.. code:: xml + + <dc:call-macro name="Name"> + +Ruft ein Makro names Name auf. Dieses muss mit `dc:macro` definiert sein. Die Reihenfolge +von Definition und Aufruf ist egal. + +``dc:macro-body`` Elemente an ein Makro übergeben +................................................. + +.. code:: xml + + <dc:macro name="Name"> + ... + <dc:macro-body/> + ... + </dc:macro> + +Um an Makros weitere Bausteine als Argument übergeben zu können, ist es optional +möglich innerhalb einer Makrodefinition ein Element `dc:macro-body` einzufügen. +Dieses Element expandiert sich zum Inhalt des `dc:call-macro`-Aufrufs. + +.. code:: xml + + <dc:call-macro name="Name">Inhalt von dc:macro-body</dc:call-macro> + +Zur Verdeutlichung ein konkretes Beispiel + +.. code:: xml + + <dc:macro name="Greetings"> + <Hallo> + <dc:macro-body/> + </Hallo> + </dc:macro> + + <dc:call-macro name="Greetings">Welt</dc:call-macro> + <dc:call-macro name="Greetings">Mond</dc:call-macro> + +Dies produziert folgende Ausgabe + +.. code:: xml + + <Hallo>Welt</Hallo> + <Hallo>Mond</Hallo> + +Das Haupteinsatzgebiet dieses Konstruktes ist die transparente Bereitstellung +von Kontexten, die dann verschiedentlich ausgewertet werden sollen. + +Sonstige Elemente +~~~~~~~~~~~~~~~~~ + +``dc:element`` Hinzufügen neuer Elemente in der Ausgabe +....................................................... + +.. code:: xml + + <dc:element name="Name"> + ... + </dc:element> + +Erzeugt ein Element namens Name. Für den Namen gelten die `${}-Ersetzungen`_. + + +``dc:attribute`` Hinzufügen neuer Attribute zum umgebenden Ausgabeelement +......................................................................... + +.. code:: xml + + <dc:attribute name="Name" value="Wert"/> + +Fügt dem umgebenden Ausgabeelement ein weiteres Attribut namens Name mit dem +Wert von Wert hinzu. Für Namen und Wert gelten die `${}-Ersetzungen`_. +Der Einsatz dieses Konstrukts findet häufig im Zusammenhang mit dc:element +seinen Einsatz, wenn es ein Ausgabeelement vollständig aus Variablenbelegungen +erstellt werden soll. + +``dc:comment`` Kommentare im Beschreibungsdokument +.................................................. + +.. code:: xml + + <dc:comment> + ... + </dc:comment> + +Ein Kommentar auf Ebene des Beschreibungsdokumentes, das keinerlei Ausgabe +im Ausgabedokument erzeugt. Eingeschachtelte Elemente werden ebenfalls nicht ausgewertet. +Im Gegensatz dazu werden die XML-typischen **<!-- Kommetare -->** in das Ausgabedokument übernommen! + + +``dc:message`` Ausgabe auf die Diagnoseausgabe (Log) +.................................................... + +.. code:: xml + + <dc:message> + Text für die Diagnose. + </dc:message> + +Gibt den Text innerhalb des Elementes aus Ausgabe im Log aus. Dies dient in erster Linie +dem Nachvollziehen von Aufrufen innerhalb des Datenkorbdokumentes. Für den Text gelten +die `{$}-Ersetzungen`_. + +``dc:variable`` Erzeugung einer kontext-lokalen Variablen +......................................................... + +.. code:: xml + + <dc:variable name="Name" type="Typ" expr="XPath-Ausdruck"/> + +Legt im aktuellen Kontext eine lokale Variable namens Name an. Diese hat den +Typ Typ und entsteht durch Auswertung des XPath-Ausdruck expr. Der Typ +ist optional. Wird dieser nicht gesetzt, wird das Ergebnis als String interpretiert. +Alternativ können hier die Werte 'number' für Zahlen, 'bool' für Boolean-Werte +benutzt werden. Für den Namen und den Typ gelten die `${}-Ersetzungen`_. +Wird der aktuellen `dc:context` verlassen, ist diese Variable nicht mehr definiert. + + +``dc:convert`` kontext-lokale Konvertierung von Variablen +......................................................... + +.. code:: xml + + <dc:convert name="Name" type="Typ"/> + +Konvertiert die Variable namens Name für die Gültigkeit des aktuellen Kontextes in +einen anderen Typ. Für Name und Typ gelten die `${}-Ersetzungen`_. Für die +Typen gilt das gleiche wie für die Typen von `dc:variable`. + + +Datenkorb-Funktionen +-------------------- + +``dc:contains`` **TODO** + +``dc:fromValue`` **TODO** + +``dc:toValue`` **TODO** + +``dc:replace`` **TODO** + +``dc:replace-all`` **TODO** + +``dc:has-result`` **TODO** + +``dc:group-key`` **TODO** + +``dc:date-format`` **TODO** + +``dc:dump-variables`` **TODO** + +``dc:get`` **TODO** + + +