我的小组目前正在开发一个点击界面,用于从 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 不会和端点提供的 ID 相同,如果用户在客户端选择一个空白节点作为新的中心,这显然会引起问题。
因此,我的问题是:有什么方法可以在 Jena 中保留原始端点 ID?通过浏览 Jena 的腹部,我可以看到有几个ResultSet
类使用一个类来处理端点 ID 和 Jena ID 之间的映射,称为LabelToNodeMap
. 有没有办法检索这个映射?或者,阻止 Jena 使用其自己的 ID 架构,而是使用端点。