2013-04-10 2 views
2

RDF 술어를 통해 주어진 주제 자원과 관련된 자원의 목록을 선택하고 싶습니다. 내 모델의 자원이 ex:alice, ex:bob, ex:peterex:Ben, 그리고 경우rdf 명령문의 오브젝트를 나열하는 방법은 무엇입니까?

예를 들어, 나의 모델은 포함

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

은 어떻게 객체가 자원의 목록을 반환하는 방법을 쓴다 특정 자원을 주제로 삼은 어떤 트리플 중? 예를 들어, 다음과 같이 입력하면 :

resourcesRelatedToResource(alice); 

Bob, Peter 및 Ben이 포함 된 목록이 필요합니다.

+1

것은 당신이 아마 처음 얻을 수

r.listProperties() 

가 동일하다 다시 물어 본 비슷한 질문으로? 특히 http://stackoverflow.com/questions/15557778/how-to-get-a-list-of-resources-linked-to-a-resource-in-jena는 매우 유사합니다 (답변을 제공했습니다). –

+0

그래하지만 위에서 언급 한 것처럼 resourceName을 사용하면 객체 목록이 반환되어야합니다 ... 자원 및 속성이 아닙니다. – user2057437

+0

다른 질문에서 뭔가를 시도한 것처럼 보입니다. http://stackoverflow.com/questions/15935783/return-resource-names-in-object-related-to-resource-subject-using-jena-apis 자세한 내용을 요청한 댓글 새로운 질문을하는 대신 먼저 대답하십시오. –

답변

2

와일드 카드 역할을하는 대상, 개체 또는 조건 자에 대해 널 인수로 listStatements을 호출하면 Jena API를 사용합니다. 그래서 앨리스라는 제목을 그냥 통과시키고, 객체 인 경우 일치하는 트리플의 객체를 수집합니다. 예나는을위한 지름길이있다 : 자원 r 주어진 통화 : 그래서

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; 
} 
관련 문제