Analizando consultas SPARQL

Necesito probar una cierta propiedad estructural de un par de millones de consultas SPARQL, y para eso necesito la estructura de la statement WHERE . Actualmente estoy tratando de usar fyzz para hacer esto, pero desafortunadamente su documentación no es muy útil. Analizar consultas es fácil, el problema es que no he podido recuperar la estructura de la statement. Por ejemplo:

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

¿Hay alguna manera de recuperar el árbol de análisis real en fyzz en lugar de solo los triples, o alguna otra herramienta que me permita hacer esto? RDFLib parece haber tenido un analizador SPARQL de bisonte en el pasado, pero no puedo encontrarlo en los paquetes rdflib o rdfextras.sparql .

Gracias

Otra herramienta es roqet una herramienta que se empaqueta dentro de rasqal . Es una herramienta de línea de comandos que devuelve el árbol analizado. Por ejemplo:

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

saldría ..

 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, variable(y)) } } } Optional graph pattern[2] #1 { sub-graph patterns (1) { Basic graph pattern[3] #0 { triples { triple #0 { triple(variable(x), uri, variable(z)) } } } } } } } 

Mirando tu comentario en la otra respuesta, no creo que esto sea lo que necesites. Y no creo que encuentre una respuesta mirando los analizadores de SPARQL. La evaluación del objeto (o patrón triple) en una consulta ocurre dentro de los Query Engines que, en sistemas bien diseñados, se aíslan del análisis de consultas.

Por ejemplo, en 4store, puede ver el comando 4s-query con la opción -vvv (muy detallado) donde verá una salida de cómo se ejecutó la consulta y cómo se realizaron las sustituciones para cada evaluación de triple patrón.

ANTLR tiene una gramática SPARQL aquí: http://www.antlr.org/grammar/1200929755392/index.html

ANTLR puede generar código de análisis para que Python se ejecute.