2014-04-24 5 views

답변

1

이것은 세 가지 논리적 단계로 나눌 수 있습니다. 이들 중 일부는, 당신은 이미했을 수 있습니다

  1. 는 결과 문자열을 구문 분석 (# 1의 일부가 될 수 있음) RDF에 사용되는 구문을 확인 비 RDF 텍스트
  2. 에서 RDF 문을 분리 아파치 예나 Model.

첫 번째 두 개는 도메인에 따라 다르므로 몇 가지 입력 예를 제공하지 않으면 많은 도움을받을 수 없습니다. 또한 별도의 질문으로 간주 될 수 있습니다 (예 : 'RDF 구문의 존재 여부에 따라 문자열을 분할하는 방법')

셋째로, 매우 빠르고 쉽습니다. 나머지 텍스트에서 추출한 N-Triples 형식의 문서가 있다고 가정 해 보겠습니다. 다음 JUnit 테스트는 해당 내용을 구문 분석하고 해당 내용과 상호 작용하는 기능을 보여줍니다.

final String nTriplesDoc = "<urn:ex:s> <urn:ex:p> <urn:ex:o> . "; 

final Model model = ModelFactory.createDefaultModel(); 
try(final InputStream in = new ByteArrayInputStream(nTriplesDoc.getBytes("UTF-8"))) { 
    /* Naturally, you'd substitute the syntax of your actual 
    * content here rather than use N-TRIPLE. 
    */ 
    model.read(in, null, "N-TRIPLE"); 
} 

final Resource s = ResourceFactory.createResource("urn:ex:s"); 
final Property p = ResourceFactory.createProperty("urn:ex:p"); 
final Resource o = ResourceFactory.createResource("urn:ex:o"); 
assertTrue(model.contains(s,p,o)); 

편집/파트 II

의견을 본 후, 나는 신중 모델의 병합에 대한 또 다른 메모를 추가 할 수 느꼈다. Jena에서는 모든 트리플을 함께 추가하여 모델을 병합 할 수 있습니다. 이로 인해 가비지 수집되는 일부 남은 모델이 만들어 질 수 있으며 이는 반드시 시스템에 가장 적합한 시나리오는 아닙니다.

final Model model0 = ModelFactory.create(); 
// Add things to model 0... 
final Model model1 = ModelFactory.create(); 
// Add things to model 1... 

final Model merger = ModelFactory.create(); 
merger.add(model0); 
merger.add(model1); 

이 예제에서 두 소스 모델은 이제 수집이 필요합니다. 그것은 모든 트리플의 대상으로 기존 모델 중 하나를 사용하거나 두 개의 기본 그래프의 결합의 모델을 만들 수 중 하나에 현명 할 것이다 (두 그래프의 결과를 다시 사용) :

final Model union = ModelFactory.createModelForGraph(new Union(model0.getGraph(), model1.getGraph())); 

또한 AMQP 서버에서 String 개체를 얻을 수 있다는 가정을 남겨두기 때문에이 대답의 첫 번째 부분에서 # 3은 여전히 ​​시나리오와 관련이 있습니다.

+1

답장을 보내 주신 Rob에게 감사드립니다. 아이디어는 내 메서드가 activeMQ 서버에서 문자열 형식의 RDF 메시지를 읽고이를 모델로 변환 한 다음 다른 RDF 리소스와 병합하여 하나의 단일 모델로 만들어야한다는 것입니다. 그래서 제가 언급 한 두 가지 첫 번째 단계는 필자의 경우에는 필요하지 않습니다. –

+0

@SanaBaccar Sana는 "감사합니다. ** **하지만 ..."은 대답이 유용함을 의미하지만 질문에 완전히 답변하지는 않았습니다. 그러나 답변을 수락 한 것으로 표시했습니다. 응답이 받아 들여지면 다른 사용자가 추가 답변을 제공 할 가능성이 적기 때문에 귀하의 질문에 완전히 답변하지 않은 경우 아직 수락하지 않아야합니다. –

관련 문제