我需要测试几百万个SPARQL查询的某个结构属性,为此我需要WHERE
语句的结构。但不幸的是,目前ZZM并不是很有用。解析查询很容易,问题是我无法恢复语句的结构。例如:
>>> 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过去似乎有一个bison SPARQL解析器,但我在rdflib
或{
谢谢
ANTLR在这里有一个SPARQL语法:http://www.antlr.org/grammar/1200929755392/index.html
ANTLR可以生成Python运行的解析代码。在
另一个工具是
roqet
一个打包在rasqal中的工具。它是一个命令行工具,返回已解析的树。例如:roqet -i laqrs -d structure -n -e "SELECT * WHERE {?x a ?y OPTIONAL {?x a ?z}}"
会输出。。在
看看你在另一个答案中的评论,我不认为这是你需要的。我不认为你会在SPARQL解析器中找到答案。查询中的对象(或三重模式)求值发生在
Query Engines
内部,在设计良好的系统中,它与查询解析分离。在例如,在4store中,您可以查看带有选项
4s-query
的4s-query
(非常详细)的命令,在那里可以看到查询是如何执行的以及如何为每个三重模式求值执行替换的输出。在相关问题 更多 >
编程相关推荐