【问题标题】:How to parse elements from Sparql algebra如何解析 Sparql 代数中的元素
【发布时间】:2014-03-11 05:58:53
【问题描述】:

我可以使用 ARQ 代数 (com.hp.hpl.jena.sparql.algebra) 从 sparql 查询字符串中获取代数形式:

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的基本图形模式,以及它们之间的关系这些图形模式。

感谢任何提示,谢谢。

【问题讨论】:

  • 我不知道打印输出是否符合良好的语法。它可能,但一般来说,toString(您在此处看到的)的结果是提供对象的 人类 可读描述,而不一定是明确的机器可读表示。通常可以找出“打破”解析 toString 输出尝试的方法。例如,见Parsing List<Map<String,String>> String form to POJO again

标签: sparql jena


【解决方案1】:

为什么要序列化代数?

如果您的目标是遍历代数树并提取 BGP,那么您可以使用 OpVisitor 接口执行此操作,其中有各种实现可以帮助您入门。您会关心的特定方法是visit(OpBgp opBgp),此后您可以访问OpBgp 类的方法来提取模式信息

【讨论】:

  • 谢谢,我尝试在分布式框架上运行 sparql 查询,然后我认为获取代数树是必要的。实际上我需要一些时间来了解 visit 函数。
【解决方案2】:

可能为时已晚,但由于我没有看到最终答案,所以我正在编写用于打印所有 BGP 的代码。

为此,创建如下扩展 OpVisitorBase 的类并覆盖以下代码中给出的 public void visit(final OpBGP) 函数。

然后从您的代码中简单地调用函数:

MyOpVisitorBase.myOpVisitorWalker(op);

public class MyOpVisitorBase extends OpVisitorBase
{
    public static void myOpVisitorWalker(Op op)
    {
        OpWalker.walk(op, this);
    }

    @Override
    public void visit(final OpBGP opBGP) {
        final List<Triple> triples = opBGP.getPattern().getList();
        int i = 0;
        for (final Triple triple : triples) {
            System.out.println("Triple: "+triple.toString());
        }
    }
}

【讨论】:

  • 如何在静态上下文中调用“this”?
猜你喜欢
  • 1970-01-01
  • 2015-01-19
  • 2023-01-04
  • 2018-04-06
  • 1970-01-01
  • 2015-11-14
  • 2022-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多