0

我使用了插入 SPARQL 查询,如下所示:

PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX ns: <http://example.org/ns#>

INSERT DATA
{
   GRAPH <http://example/test> { <http://example/book2>  ns:price  42 }
   GRAPH <http://example/test> { <http://example/book3>  ns:price  55 }
}

当我在 TDB 中使用数据集时,此查询成功。但是当我使用内存数据集时,耶拿会抛出这个错误。

com.hp.hpl.jena.shared.JenaException: No such graph: http://example/test

使用内存数据集,是否无法使用插入查询创建图形?为什么?

附言

我用的是 v2.10.0。我创建了这样的数据集:

Dataset dataset = DatasetFactory.create(other_dataset);

因此,我更改了 Jena 版本并更改为使用“ DatasetFactory.createMem() ”。

它运行没有问题。

谢谢你。

4

2 回答 2

2

哪个版本?现在 v2.10.1 和之前的几个版本,内存数据集会自动添加新的图表,除非你要求一个固定的。

DatasetFactory.createMem() 与 DatasetFactory.createMemFixed()。

于 2013-05-23T09:27:54.070 回答
0

默认内存数据集(如您所见)只是固定的模型(图表)集合。它不知道如何按需创建图表。(TDB 确实——图表在四边形商店很便宜)

我在耶拿看不到合适的数据集(尽管它可能在那里),但写一个并不难:

// This makes graphs on demand
DatasetGraphFactory.GraphMaker maker = new DatasetGraphFactory.GraphMaker() {
    public Graph create() {
        return new GraphMem();
    }
};

// Make a datasetgraph which creates graphs when required, and wrap it as an API dataset
Dataset onDemand = DatasetImpl.wrap(new DatasetGraphMaker(maker));
于 2013-05-22T23:21:52.090 回答