如何列出rdf语句的对象?

如何列出rdf语句的对象?,rdf,jena,ontology,Rdf,Jena,Ontology,我想通过任何RDF谓词选择和给定主题资源相关的资源列表 例如,如果我的模型中的资源是ex:alice、ex:bob、ex:peter和ex:Ben,我的模型包含: ex:alice ex:meet ex:bob. ex:alice foaf:knows ex:Peter. ex:alice ex:talk :ben. 我将如何编写一个方法来返回资源列表,这些资源是给定特定资源作为主题的任何三元组的对象?例如,如果我给出: resourcesRelatedToResource( al

我想通过任何RDF谓词选择和给定主题资源相关的资源列表

例如,如果我的模型中的资源是
ex:alice
ex:bob
ex:peter
ex:Ben
,我的模型包含:

ex:alice ex:meet ex:bob.  
ex:alice foaf:knows ex:Peter.  
ex:alice ex:talk :ben.  
我将如何编写一个方法来返回资源列表,这些资源是给定特定资源作为主题的任何三元组的对象?例如,如果我给出:

resourcesRelatedToResource( alice );

我希望有一份包含鲍勃、彼得和本的名单

使用Jena API,如果调用
listStatements
,主语、宾语或谓语的参数为空,将充当通配符。因此,您只需传递主题Alice,并收集匹配三元组的对象(如果它们是对象)。Jena有一条捷径:给定一个资源
r
,调用:

r.listProperties()
相当于:

r.getModel().listStatements(r,null,(RDFNode)null)
因此:

公共无效测试(){
模型m=/*…您的模型在这里…*/;
//获取对Alice资源的引用
Resource alice=m.getResource(NS+“alice”);
设置结果=resourcesRelatedToResource(alice);
}
/**返回一组和给定输入相关的资源
*通过任何谓词调用资源*/
受保护的集合resourcesRelatedToResource(资源r){
//我们不在乎重复,所以使用一套
Set objs=new HashSet();
//以alice为主题迭代三元组
对于(StmtIterator i=r.listProperties();i.hasNext();){
RDFNode obj=i.nextStatement().getObject();
if(obj.isResource()){
add(obj.asResource());
}
}
返回对象;
}

您是否可以先回到您提出的类似问题?尤其是非常相似(我提供了一个答案)。。。不是根据资源和属性。看起来您在另一个问题中尝试了一些东西,但有一条评论要求提供更多细节。请先回答这个问题,而不是问新的问题。鉴于这个例子,我几乎可以算出OP想要什么,所以我编辑了这个问题,说出我认为他/她在问什么,然后提供了我的答案!