2012-08-22 51 views
0

我一直在開發一個遏制查詢語言的實現,文檔相當有限,沒有參考實現可以用作指導。 的容納語言查詢樹結構爲的樹模式的存在,並且是具有這樣的語法:哪些工具或庫支持執行樹的包含查詢?

A CONTAINS B CONTAINS ((C contains A) AND (C CONTAINS D)) 

A,B,C和d是類型樹的節點,或具有更通用的視圖,它們」重新標記節點。 A CONTAINS B表示A在樹下有一個位於其下的某個孩子。

該實現需要返回使用上述語句(表示部分定義的樹)查詢的樹實例的所有匹配子樹。它還需要考慮模式發生的組合,例如,在上面的查詢中,如果C有2個A實例在下面,那麼帶有CD的C-A1和帶有CD的C-A2是兩個不同的匹配等。

我設計了自己的解決方案,但是我沒有任何可以用作參考的東西,甚至還有更好的迴歸測試以及我的代碼,以確保我的實現始終如一且正確地工作。

最棘手的一點是查詢語言中的邏輯運算符。我將用XML作爲參考實現來研究XQuery(不確定此時它是否可以做我正在嘗試做的事),但我也很想聽聽其他選項。開源會很好,但即使是專有工具也能勝任。支持這種類型的查詢的圖形數據庫,可能是一些RDF等語義工具?

+0

上面給出的語法示例以關聯方式使用CONTAINS運算符,雖然它不返回具有與其操作數(樹)相同類型(布爾型)的結果。 A CONTAINS B CONTAINS C的預期語義是什麼?是(A CONTAINS B)和(B CONTAINS C)?謝謝! –

+0

是的,A在子節點(子節點等)的某個地方有一個子節點B,並且這個B節點以相同的方式有一個C節點。這是一個上升的後代關係。這實際上是我實現原型查詢語言的一部分:http://www.openehr.org/wiki/display/spec/Archetype+Query+Language+Description – mahonya

回答

1

我試圖讓概念使用XQuery(左巴實現)證明:

http://www.zorba-xquery.com/html/demo#f63nK4ICLH22

我希望這有助於。

+0

哇!非常感謝您的努力! – mahonya

+1

不客氣!它有點有限,代碼中可能會出現一些錯誤,但我希望它能幫助你開始。查詢中的對象和數組是Zorba的JSONiq擴展的一部分,它們可以用作中間數據結構。 –