我需要測試幾百萬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
包中找到它。
感謝
我知道他們是,我需要的是傳遞給查詢引擎的對象樹。基本上,我需要做的是檢查表單(P1可選P2)的每個子模式P'是否在P1中發生在P2和外部P'中的每個變量。鑑於此,我需要將某些重寫規則應用於原始模式,並且因爲具有對象樹將非常有用。 – ailnlv