sparql - 如何解析 Sparql 代数中的元素

标签 sparql jena

我可以使用 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/

相关文章:

java - 使用 Axis2 部署 Web 服务时出错

sql - 时态查询和非时态查询有什么区别

适用于 Apache Jena TripleStore 的 JavaScript

rdf - SPARQL 通过变量而不是行数来限制查询结果

java - 执行 JAR 时 JENA 报错 TurtleParseException

java - 如何从 RDF with Jena 中选择具有特定属性的主题?

SPARQL CONCAT() 和 STR() 与 CONSTRUCT

sparql - 使用 SPARQL 从 DBpedia 获取国家/地区的所有城市

java - 从 SPARQL 查询中仅获取 "#"之后的名称

graph - 如何使用SPARQL查询列出并统计图数据中不同类型的节点和边实体?