2011-08-08 12 views
4

私は数百万のSPARQLクエリの特定の構造的プロパティをテストする必要があり、そのためにはWHEREステートメントの構造が必要です。私は現在、これを行うためにfyzzを使用しようとしていますが、残念ながらそのドキュメントはあまり有用ではありません。クエリの解析が簡単ですが、問題は私がそのステートメントの構造を回復できなかったことです。たとえば:SPARQLクエリの解析

>>> from fyzz import parse 
>>> a=parse("SELECT * WHERE {?x a ?y . {?x a ?z}}") 
>>> b=parse("SELECT * WHERE {?x a ?y OPTIONAL {?x a ?z}}") 
>>> a.where==b.where 
True 
>>> a.where 
[(SparqlVar('x'), ('', 'a'), SparqlVar('y')), (SparqlVar('x'), ('', 'a'), SparqlVar('y'))] 

ではなく、単にトリプルのfyzzにおける実際の解析ツリー、または私はこれをやらせるだろういくつかの他のツールを回復する方法はありますか? RDFLibには過去にバイソンSPARQLパーサーがあったようですが、rdflibまたはrdfextras.sparqlパッケージでは見つかりません。

答えて

5

roqetツールは、rasqalにパッケージされています。これは、解析されたツリーを返すコマンドラインツールです。例えば:

roqet -i laqrs -d structure -n -e "SELECT * WHERE {?x a ?y OPTIONAL {?x a ?z}}"

出力..

Query: 
query verb: SELECT 
query bound variables (3): x, y, z 
query Group graph pattern[0] { 
    sub-graph patterns (2) { 
    Basic graph pattern[1] #0 { 
     triples { 
     triple #0 { triple(variable(x), uri<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, variable(y)) } 
     } 
    } 
    Optional graph pattern[2] #1 { 
     sub-graph patterns (1) { 
     Basic graph pattern[3] #0 { 
      triples { 
      triple #0 { triple(variable(x), uri<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, variable(z)) } 
      } 
     } 
     } 
    } 
    } 
} 

は他の回答にコメントを見てしまう私は、これはヨーヨーが必要なものであるとは思いません。そして、私はあなたがSPARQLパーサの中で探している答えを見つけることはないと思います。クエリ内のオブジェクト(またはトリプルパターン)の評価は、よく設計されたシステムでクエリの解析から隔離されたQuery Enginesの内部で行われます。

たとえば、コマンドのオプション-vvv(非常に詳細)を見ると、クエリがどのように実行されたか、どのトリプルパターン評価ごとに置換が実行されたかがわかります。

+0

私はそれらが知っている、私が必要なのは、クエリエンジンに渡されるオブジェクトツリーです。基本的には、私がする必要があるのは、フォームのすべてのサブパターンP(P1オプションP2)をチェックすることです。これは、P1とP2で発生するすべての変数もP1で発生するということです。そのため、元のパターンにある書き換えルールを適用する必要があり、オブジェクトツリーを持つルールは非常に便利です。 – ailnlv

3

ANTLR

おかげでここSPARQL文法を持っていますhttp://www.antlr.org/grammar/1200929755392/index.html

ANTLRは、Pythonを実行するためのコードを解析し生成することができます。

+0

私が必要としているのは、それより少し複雑です。クエリエンジンによってデータベース上で評価されるオブジェクトを取得する必要があります( ';'のような省略形はありません)。これは既にどこかで行われている必要があります。私は解析木の前処理の作業を避けたいと思います。 – ailnlv