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