2009-11-17 12 views
10

Ich habe eine Biologie-Datenbank, die ich abfragen möchte. Es gibt auch eine gegebene Terminologiebank, auf die ich Zugriff habe, die formalisierbare Prädikate hat. Ich möchte eine Abfragesprache für diese Datenbank mit den genannten Prädikaten erstellen. Wie würdest du das machen? Meine Lösung ist folgende:Wie erstelle ich eine domänenspezifische Abfragesprache?

  1. formalisieren die Prädikate
  2. in eine Abfragesprache übersetzen (SQL, sparql hängt)
  3. Erstellen Sie eine bestimmte Sprache mit ANTLR oder andere solche Werkzeuge
  4. Übersetzen von 3 bis 2.

Ist das ein gültiger Ansatz? Gibt es bessere? Alle Hinweise würden sehr geschätzt werden.

+0

Klingt wie ein interessantes Projekt. –

+0

Ist dein Nachname wirklich Thunk? Sie müssen eine natürliche Affinität zu Haskell haben;) http://stackoverflow.com/a/6274016/443219 –

Antwort

4

Verwenden Sie BNF, um einen Vorsprung in die Sprachsemantik zu bekommen .. GoldParser wird Ihnen helfen, indem Sie mit der Semantik und Syntax herumspielen (Link hier: http://www.devincook.com/). Sobald Sie die BNF-Semantik aussortiert haben, können Sie dann Aktionen basierend auf den Eingaben aufbauen, zum Beispiel eine bnf-Grammatik-Sektion, die sich mit dem Extrahieren einer Zusammensetzung der genetischen Make-up-Klassifikation einer Gliedmaße beschäftigt (ich weiß nicht, ob diese existiert, abstrakt Beispiel hier, aber Sie erhalten den Kern) für eine bestimmte Abfrage ... 'holen Statistiken auf Gliedmaßen, wo Glied ist Bein', dann hinter den Kulissen würden Sie eine SQL-Auswahl auf einer Spalte Alias ​​oder Name aus einer vordefinierten Tabelle ... I könnte bei der Annäherung falsch sein ... hoffe es hilft?

+0

Also schlagen Sie vor, ich definiere zuerst die Syntax der DSL, und dann den Rest. Vielleicht ist das der richtige Weg, es wird den Rest der Bemühungen leiten. Ist das deine Meinung? Vielen Dank! –

+0

Ja, das wäre meine Meinung. Freut mich, Ihnen zu helfen! :) – t0mm13b

2

Ich schlage vor, Sie werfen einen Blick auf die i2b2 framework, es ist eine grafische Abfrage Sprache und Abfrage-Engine-Plattform für Patientendatenbanken.

Es ist wahrscheinlich schwierig, alle zuerst zu verstehen, aber werfen Sie einen Blick auf die CRC-Zelle oder den Webservice, Sie werden sehen, wie sie die SQL-Generation aus einer klinischen grafischen Abfragesprache auf interessante Weise erreicht haben (wenn auch nicht so leistungsfähig :) friendly)

-1

Betrachten Irony.NET von hier mit: Irony.NET

+0

Die Frage ist nicht sprachspezifisch –