我可以使用 ARQ 代数从 sparql 查询字符串获取代数形式 (com.hp.hpl.jena.sparql.algebra):
String queryStr =
"PREFIX foaf: <http://xmlns.com/foaf/0.1/>" +
"SELECT DISTINCT ?name ?nick" +
"{?x foaf:mbox <mailt:person@server> ." +
"?x foaf:name ?name" +
"OPTIONAL { ?x foaf:nick ?nick }}";
Query query = QueryFactory.create(queryStr);
Op op = Algebra.compile(query);
打印op的返回值:
(distinct
(project (?name ?nick)
(join
(bgp
(triple ?x <http://xmlns.com/foaf/0.1/mbox> <mailt:person@server>)
(triple ?x <http://xmlns.com/foaf/0.1/name> ?nameOPTIONAL)
)
(bgp (triple ?x <http://xmlns.com/foaf/0.1/nick> ?nick)))))
返回值是Op类型,但是我找不到任何可以直接将op解析为元素的方法,例如s、p、o的基本图形模式以及它们之间的关系这些图形模式。
任何提示表示赞赏,谢谢。
最佳答案
为什么要序列化代数?
如果您的目标是遍历代数树并提取 BGP,那么您可以使用 OpVisitor
来完成此操作接口(interface)有多种实现,可以帮助您入门。您需要关心的特定方法是 visit(OpBgp opBgp)
,从那时起您就可以访问 OpBgp
的方法。提取模式信息的类
关于sparql - 如何解析 Sparql 代数中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22317605/