FANDOM


OttoQL ist eine universelle Abfragesprache für Tabellen und Dokumente, die zunächst für XML implementiert wurde. Sie zeichnet sich durch eine besonders einfache Syntax (Schreibweise) aus. Die Operationen werden in der Regel nacheinander auf alle entsprechenden Tupel bzw. Subtupel angewandt. Insbesondere verfügt OttoQL über Matrizenoperationen, Tupeloperationen, rekursive Erweiterungen, nutzerdefinierte Funktionen und geschachtelte Anfragen.

Beispiel Bearbeiten

BMI-Beispiel in OttoQL Bearbeiten

Im folgenden Programm ist ein XML-Dokument durch eine Tabelle gegeben:

<<L(NAME,      GROESSE,L(ALTER, GEWICHT))::
    Klaus      1.68      18     61
                         30     65  
                         56     80
    Rolf       1.78      40     72
    Kathi      1.70      18     55 
                         40     70
    Valerie    1.00       3     16
    Viktoria   1.61      13     51
    Bert       1.72      18     66
                         30     70 >>
mit NAME: ALTER>20
ext BMI:=(GEWICHT div GROESSE**2)
gib BMIDUR,M(ALTER,BMIDUR,B(BMI,NAME)) BMIDUR:=avg(BMI)
round 2

Es ist auch ohne entsprechende Tags ersichtlich, dass der Satz (das Tupel) für Klaus mit der 80 endet und dass Klaus 3 Subtupel besitzt. In dieser Struktur ist beispielsweise das ALTER dem NAMEn untergeordnet. Im gib-Teil wird diese Hierarchie einfach durch Angabe des gewünschten Schemas umgekehrt. Hierbei steht M für Menge, B für Multimenge und L für Liste. Als erstes wird jedoch eine Selektion (mit- oder ohne-Teil) auf die gegebene Tabelle angewandt. Hierbei werden alle Personen verworfen, die keinen ALTERs-Eintrag größer 20 besitzen. Das sind Valerie und Viktoria. Das erste Subtupel von Klaus verbleibt jedoch in der Tabelle, da durch "NAME:" ausgedrückt wird, dass nur vollständige Tupel und keine Subtupel gelöscht werden sollen. Will man nur Subtupel streichen, so ist NAME durch ALTER oder GEWICHT zu ersetzen. Folgende beiden Bedingungen selektieren in beiden Listen: mit NAME,ALTER: ALTER>20 bzw. mit ALTER>20. Durch einen ext-Teil wird eine Tabelle um eine neue Spalte erweitert (Extension). Ohne Einführung von Variablen können hierbei Spaltennamen verschiedener zueinander gehöriger Ebenen benutzt werden. Hinter dem GEWICHT wird der Body-Mass-Index eingefügt. Neben Umstrukturierungen in eine nichtrekursive DTD kann man mit dem gib-Teil auch folgende Aufgaben realisieren:

  • Sortieren (M,B) (stets nach den ersten Feldern einer Kollektion)(M-,B-: abwärts)
  • Aggregieren (simultan horizontal und vertikal) (sum, count, max, min, avg, prod, ex, all)
  • Duplikate eliminieren (M)
  • bestimmte Joins und Unions (Vereinigungen)
  • Projektionen
  • Group by und Nest
  • Unnest
  • Taggen

Die letzte Operation (round) rundet alle Zahlen, die im Ergebnis des gib-Teils stehen, auf zwei Stellen nach dem Komma. Binäre Operationen werden in OttoQL stets infix geschrieben. Damit realisiert obiges Programm folgende Anfrage: Gesucht ist der durchschnittliche BMI und der Durchschnitt pro Altersstufe aller Personen über 20. Es soll nach Alter und innerhalb einer Altersgruppe nach BMI sortiert werden. Das Ergebnis hat als Tabelle folgende Gestalt:

<<BMIDUR,M(ALTER, BMIDUR, B(BMI,  NAME))::
  23.12    18     20.98     19.03 Kathi
                            21.61 Klaus
                            22.31 Bert
           30     23.34     23.03 Klaus
                            23.66 Bert
           40     23.47     22.72 Rolf
                            24.22 Kathi
           56     28.34     28.34 Klaus>>

Datenstrukturunabhängigkeit Bearbeiten

Die Operationen von OttoQL benötigen eine Dokumenttypdefinition (DTD), da das System erkennen muss, was als Tupel und was als Kollektion aufzufassen ist. Trotzdem sind die wesentlichen Operationen von OttoQL weitestgehend unabhängig von der DTD. Obiges BMI-Programm funktioniert genauso, wenn die gegebene Tabelle flach (L(NAME,GROESSE,ALTER, GEWICHT)) oder auch anders strukturiert ist (M(GEWICHT,L(NAME,GROESSE,ALTER))). Diese Eigenschaft ist wichtig, wenn OttoQL für Suchmaschinen genutzt werden soll.

Entwicklung Bearbeiten

Die Grundideen der wichtigsten Operationen von OttoQL finden sich bereits in der Dissertation B "Hierarchische Datenstrukturen" von Klaus Benecke. In "Strukturierte Tabellen - Ein neues Paradigma für Datenbank- und Programmiersprachen" wurden die Ideen erweitert. Allerdings findet sich in dieser Monographie noch keine Verallgemeinerung auf XML. Die vorliegende Implementation wurde zum großen Teil von Studenten der Universität Magdeburg realisiert, wobei die Studenten Andreas Hauptmann, Martin Schnabel und Dmitri Schamschurko einen besonderes großen Anteil daran hatten.

Literatur Bearbeiten

  • Klaus Benecke, "Hierarchische Datenstrukturen", Dissertation B, Technische Universität "Otto von Guericke", Magdeburg, Mai 1987
  • Klaus Benecke, "A powerful Tool for Object Oriented Manipulation", in Object-Oriented Databases: Analysis, Design & Construction (DS-4), R.A.Meersman, W. Kent, S. Khosla (Editors), North -Holland 1991, S.95-122
  • Klaus Benecke, "Strukturierte Tabellen - Ein neues Paradigma für Datenbank- und Programmiersprachen", Deutscher Universitätsverlag, Wiesbaden 1998, ISBN 3-8244-2099-6

Weblinks Bearbeiten


Wikidata-logo Im Wikidata-Objekt Q2038042 befinden sich offene Daten zum Thema und Links zu Wikimedia-Projekten.
Info Sign  Dieser Wikipedia-Artikel wurde gemäß GFDL bzw. CC-by-sa mit allen Versionen importiert.

Störung durch Adblocker erkannt!


Wikia ist eine gebührenfreie Seite, die sich durch Werbung finanziert. Benutzer, die Adblocker einsetzen, haben eine modifizierte Ansicht der Seite.

Wikia ist nicht verfügbar, wenn du weitere Modifikationen in dem Adblocker-Programm gemacht hast. Wenn du sie entfernst, dann wird die Seite ohne Probleme geladen.

Auch bei FANDOM

Zufälliges Wiki