通过MongoDB实现Jena数据集提供程序

时间:2018-01-12 21:48:20

标签: jena

我已经开始实现一组类,这些类为MongoDB提供了持久性的直接接口,类似于RDBMS现在未维护的SDB persistor实现。 我正在使用历史悠久的技术,从接口创建必要的具体类,并在每个方法中执行println,从而允许我跟踪执行。我已经一直到引擎调用光标设置的位置:

public ExtendedIterator<Triple> find(Node s, Node p, Node o) {

    System.out.println("+++ MongoGraph:extenditer:find(" + s + p + o + ")");

    // TBD Need to turn s,p,o into a match expression!  Easy!                  
    MongoCursor cur = this.coll.find().iterator();

    ExtendedIterator<Triple> curs = new JenaMongoCursorIterator(cur);

    return curs;
}

可悲的是,当我后来称之为:

        while(rs.hasNext()) {
            QuerySolution soln = rs.nextSolution() ;
            System.out.println(soln);
        }

事实证明rs.hasNext()总是假的,即使MongoCursor中有材料(我可以在find()方法中调试它)。此外,我的具体迭代器next()中的JenaMongoCursorIterator函数中的跟踪打印(我认为可以扩展NiceIterator)从未被命中。简而言之,基本设置看起来不错,但引擎永远不会在find()

上启动迭代器

对于不熟悉软件架构的人来说,尝试使用SDB作为指南是完全无法应对的。它是完全考虑因素并充满了界面和工厂,虽然这很好,但很难导航。

有没有人试图创建自己的persistor实现?如果有的话,有什么基本步骤来获得一个&#34; hello world&#34;运行?在这种情况下,Hello World是一个非优化的实现,可以在某些内容上调用next()来生成Triple

1 个答案:

答案 0 :(得分:0)

TLDR:现在正在运作。 我的编码过于热切,而JenaMongoCursorIterator包含方法hasNexl,当然在hasNext的默认实现中没有覆盖t(带有NiceIterator)返回false。 这是eclipse和可视化调试和跟踪比常规jdb更容易解决的问题。如果你非常了解软件架构,jdb就没问题,但是如果你不熟悉,那么多个开源文件并且能够将鼠标移到vars等上可以大大增加可以创建到家中的上下文量。关于这个问题。