1

我正在尝试在 java 中查询 jena TDB。我的代码如下。我的 TDB 数据集似乎是空的,因为model.size()model数据集默认模型在哪里)返回 0。不过,我确定它不为空,因为我可以使用 sparqlEndpoint 使用 Fuseki 查询它。

String directory = "//var//www//fuseki//TDB" ;
Dataset dataset = TDBFactory.createDataset(directory) ;

Model model  = dataset.getDefaultModel();
String sparqlQueryString = "SELECT (count(*) AS ?count) { ?s ?p ?o }" ;

Query query = QueryFactory.create(sparqlQueryString) ;
QueryExecution qexec = QueryExecutionFactory.create(query, model);

ResultSet results = qexec.execSelect() ;
ResultSetFormatter.out(results) ;

qexec.close();
System.err.printf("Model size is: %s\n", model.size());
4

1 回答 1

4

我的 TDB 似乎是空的,因为 model.size() 返回 0。我确定它不是空的,因为我可以使用 fuseki 和我的 sparqlEndpoint 查询它。

事物可以没有内容而存在。字符串的长度""为0,但它仍然是一个字符串。您没有显示查询结果

SELECT (count(*) AS ?count) { ?s ?p ?o }

它返回 0 还是其他?另外,当你这样做

Model model  = dataset.getDefaultModel();

您只获得数据集的默认模型,但除了默认图之外,数据集还可以包含许多命名图。如果您的数据集中确实有三元组,它们可能在命名图中,在这种情况下,您可以执行类似的操作

select (count(*) as ?count) { graph ?g { ?s ?p ?o } }

我不知道 Fuseki 如何处理默认图,但可能是数据集的默认图被配置(我认为这可以自定义)为数据集中命名图的并。在这种情况下,结果getDefaultModel可能仍然是一个空模型。我正在推测这一点,但这是一种可以想象的方式,您可以从默认图表中获得结果,同时仍然让默认模型为空。

于 2014-07-23T20:10:53.680 回答