rdf - 如何列出rdf语句的对象?

标签 rdf jena ontology

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

例如,如果我的模型中的资源是 ex:aliceex:bobex:peterex :Ben,我的模型包含:

ex:alice ex:meet ex:bob.  
ex:alice foaf:knows ex:Peter.  
ex:alice ex:talk :ben.  

我如何编写一个方法来返回资源列表,这些资源是给定特定资源作为主题的任何三元组的对象?例如,如果我给出:

resourcesRelatedToResource( alice );

我期望一个包含 Bob、Peter 和 Ben 的列表。

最佳答案

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

r.listProperties()

相当于:

r.getModel().listStatements( r, null, (RDFNode) null )

所以:

public void test() {
    Model m = /*... your model here ...*/;

    // get a reference to the Alice resource
    Resource alice = m.getResource( NS + "alice" );

    Set<Resource> result = resourcesRelatedToResource( alice );
}

/** Return a set of the resources related to the given input 
  * resource via any predicate */
protected Set<Resource> resourcesRelatedToResource( Resource r ) {
    // we don't care about duplicates, so use a Set
    Set<Resource> objs = new HashSet<Resource>();

    // iterate over the triples with alice as subject
    for (StmtIterator i = r.listProperties(); i.hasNext(); ) {
        RDFNode obj = i.nextStatement().getObject();

        if (obj.isResource()) {
            objs.add( obj.asResource() );
        }
    }

    return objs;
}

关于rdf - 如何列出rdf语句的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15936291/

相关文章:

xml - xslt 在模板中集成一个 xsl

rdf - 是否可以在 SPARQL 的 RDF 集合中获取元素的位置?

rdf - Protege OWL 两个类的子类

java - 在html(servlet/jsp)中打印jena结果集

visualization - 可视化本体的最佳工具?

xml - 大写和小写的 XML/RDF 标签名称之间有什么区别吗?

java - 使用 Jena 进行本地和远程 OWL/SPARQL 查询

java - 将 Json-Ld 对象数组读入 Apache Jena 中的模型。如何从模型中检索单个对象?

rdf - Schema.org 创建者与作者属性

lucene 和本体论