몇백 만 개의 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 OPTIONAL P2)를 검사하는 것입니다. P1에서 P2와 P'외부에서 발생하는 모든 변수도 발생한다는 것입니다. 주어진 점을 감안할 때, 나는 원래의 패턴에 특정 다시 쓰기 규칙을 적용해야하고, 객체 트리를 갖는 것은 매우 유용 할 것이다. – ailnlv