2012-12-03 3 views
2

Jena Framework를 사용하여 RDF에서 정보를 얻으려면 도움이 필요합니다. 나는이 같은 RDF 내용이 : 엔티티 :RDF/XML Jena getValue

<rdf:RDF 
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
xmlns:ts="http://www.test.com/testModel.owl#"> 
<ts:Entity rdf:ID="1234_test"> 
<....> 
</ts> 
</rdf:RDF> 

지금 내 생각은 TS에서 ID를 얻을하는 것입니다. 이것은 내 코드입니다 :

Model model = ModelFactory.createDefaultModel(); 
InputStream requestBody = new ByteArrayInputStream(request.getBytes()); 
String BASE = "http://www.test.com/testModel.owl#"; 
model.read(requestBody,BASE); 
requestBody.close(); 

StmtIterator iter = model.listStatements(); 
while (iter.hasNext()) { 

     Statement stmt  = iter.nextStatement(); // get next statement 
     Resource subject = stmt.getSubject();  // get the subject 
     Property predicate = stmt.getPredicate(); // get the predicate 
     RDFNode object = stmt.getObject();  // get the object 

      System.out.println(subject + " | "+predicate); 

    } 

유일한 문제는이 모든 문장을 스크롤해야한다는 것입니다. ts : Entity에서 ID를 직접 가져 오는 방법이 있습니까? 어쩌면 자원을 얻고 그 자원과 관련된 ID 값을 얻는 것입니다.

도움을 주셔서 미리 감사드립니다. 예를 들어 내가이 RDF의 경우 전, 비슷한 질문을 가지고 있기 때문에


미안 해요, 내가 다시 여기입니다 :

<rdf:RDF 
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
xmlns:ts="http://www.test.com/testModel.owl#"> 
<ts:Entity rdf:ID="1234_test"> 
    <ts:Resource> 
     <ts:testProp rdf:datatype="http://www.w3.org/2001/XMLSchema#string">test_ID_test</ts:testProp> 
</ts> 
</ts> 
</rdf:RDF> 

내가 값 test_ID_test을 추출 할 수있는 방법을 ??? 그리고 만약 내가 SPARQL을 사용하고 싶다면 jena로 어떻게 할 수 있을까? ???

답변

2

방법에 대한 각 개체의 URI를 얻을 것이다

Resource ENTITY_TYPE = model.getResource("http://www.test.com/testModel.owl#Entity"); 
StmtIterator iter = model.listStatements(null, RDF.type, ENTITY_TYPE); 
while (iter.hasNext()) { 
    String entityID = iter.next().getSubject().getURI(); 
    System.out.println(entityID); 
} 

.

+0

고맙습니다 ... 유일한 오류는 다음과 같습니다. 문자열 entityID = iter.nextStatement(). getSubject(). getURI(); 주제를 얻기위한 성명서가 필요하기 때문입니다. – Asp1de

+0

저는 질문자를위한 운동으로 더 많은 개선점을 남깁니다 :-) – user205512

3

모든 문을 반복하지 않고 모델을 쿼리하려면 SPARQL을 사용해야합니다. Jena는 API와 함께 SPARQL을 사용하는 방법에 대해 좋은 tutorial을 제공합니다.

+0

SPARQL을 사용하여 모델을 쿼리 할 수도 있다고 생각합니다. 내 코드에서는 SPARQL을 약 50 %의 시간 동안 사용하고 나머지는 모델 (또는 OntModel) API를 직접 사용합니다. 모든 것이 코드를 가장 명확하게 만드는 이유에 달려 있습니다. 탐색하려는 RDF 속성 체인이 길어질 경우 SPARQL 쿼리 접근 방식을 사용하면 API만큼 빠르게 복잡성이 증가하지 않는 경우가 종종 있습니다. 반면에 SPARQL 쿼리보다 API 호출에서 분리가 더 명확해질 수 있습니다. –

+0

감사합니다. 아마도 다른 접근 방식 일 수 있습니다! – Asp1de

+0

죄송합니다. rdf : ID 추출을위한 SPARQL 쿼리를 만드는 방법을 보여줄 수 있습니까? – Asp1de