【发布时间】:2014-03-20 14:54:42
【问题描述】:
我的小组目前正在开发一个点击界面,用于导航和从 RDF 图中提取信息。作为其中的一部分,我们使用 Jena 的 sparqlservice 方法连接到各种三重存储端点。为了移动用户当前正在查看的点,用户可以选择一个节点并将其作为中心。然后程序使用下面的表达式获取该节点的邻居:
CONSTRUCT {
<URI> ?p ?o .
?s ?p <URI> .
} WHERE {
{<URI> ?p ?o .}
UNION
{?s ?p <URI> .}
} LIMIT N
URI 是用户选择的节点(我们对文字做了一些稍微不同的事情)。这个表达式然后执行如下:
Query myQuery = QueryFactory.create(_query);
QueryExecution qexe = QueryExecutionFactory.sparqlService(this.myURL, myQuery);
Model resultModel = qexe.execConstruct();
return resultModel;
我们面临的问题是关于空白节点。当 Jena 从端点获得一个空白节点时,它会立即被分配一个 Jena bNode ID。这个ID不会和endpoint提供的ID一样,如果用户在客户端选择一个空白节点作为新的中心,这显然会引起问题。
因此,我的问题是:有没有办法在 Jena 中保留原始端点 ID?通过浏览 Jena 的腹部,我可以看到几个 ResultSet 类使用一个类来处理端点 ID 和 Jena ID 之间的映射,称为 LabelToNodeMap。有没有办法检索这个映射?或者,阻止 Jena 使用自己的 ID 架构,而是使用端点。
【问题讨论】:
标签: java sparql jena blank-nodes