我有一個我想查詢的生物數據庫。我也有一個給定的術語庫,它有可正式表達的謂詞。我想用這個謂詞爲這個數據庫建立一個查詢語言。你會怎麼做呢?我的解決方案如下:如何構建特定於域的查詢語言?
- 正式謂詞
- 翻譯成查詢語言(SQL,SPARQL,取決於)
- 建立與ANTLR或其他類似工具的特定語言
- 從3翻譯成2.
這是一個有效的方法嗎?有更好的嗎?任何指針將不勝感激。
我有一個我想查詢的生物數據庫。我也有一個給定的術語庫,它有可正式表達的謂詞。我想用這個謂詞爲這個數據庫建立一個查詢語言。你會怎麼做呢?我的解決方案如下:如何構建特定於域的查詢語言?
這是一個有效的方法嗎?有更好的嗎?任何指針將不勝感激。
使用BNF獲得語言語義的先機.GoldParser將通過玩弄語義和語法來幫助您(鏈接:http://www.devincook.com/)。一旦你將BNF語義分類出來,你就可以根據輸入建立動作,例如,一個bnf文法部分處理提取肢體遺傳組成的分類(我不知道這是否存在,抽象這裏的例子,但你得到的要點)爲一個特定的查詢...'獲取肢體腿肢'的統計數據,然後幕後,你會發出一個SQL選擇的列別名或從預定義的表名...我可能是錯誤的方法...希望它有幫助嗎?
因此,您建議我先定義dsl的語法,然後再定義其餘的。也許這是正確的路,它會指導剩下的工作。這是你的嗎?謝謝! – 2009-11-18 11:19:35
是的,這將是我的承擔。很高興有幫助! :) – t0mm13b 2009-11-18 18:22:58
看看Booleano。
我建議你看看i2b2 framework,這是一個用於患者數據庫的圖形化查詢語言和查詢引擎平臺。
可能很難先把握所有內容,但是看看CRC單元格或Web服務,你會看到他們是如何以一種有趣的方式從臨牀圖形化查詢語言中接近SQL生成的(儘管並非如此友好:))
聽起來像一個有趣的項目。 – 2009-11-18 00:10:50
你的姓是真的嗎?您必須對Haskell具有天生的親和力;)http://stackoverflow.com/a/6274016/443219 – 2013-12-06 23:09:18