2012-10-10 5 views
0

2 개의 기존 RDF/XML 모델을 병합하려고했습니다. 나는 자바에서 예나를 사용하고기존 모델에 모델 추가 RDF

  • model1.union(model2)
  • model1.add(model2) //adding a complete model
  • model1.add(model2.listStatements())

: 나는 다른 솔루션을 시도했다.

두 번째 모델에서 봉투 태그 (예 : Equipment)를 제거했지만 항상 동일한 문제가 있습니다. 결과 모델이 실제로 병합되지 않습니다. 추가 된 각 모델에 대해 봉투가 포함되어 있습니다. 예 : 2 개의 문서가 있지만 다른 종점이 있습니다. endpointA

에서

bookid123

<rdf:RDF 
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
xmlns:si="http://www.w3schools.com/rdf/"> 
<rdf:Description rdf:about="http://endpointA/bookid123"> 
    <si:title>W3Schools.com</si:title> 
</rdf:Description> 
</rdf:RDF> 

<rdf:RDF 
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
xmlns:si="http://www.w3schools.com/rdf/"> 
<rdf:Description rdf:about="http://endpointB/bookid123"> 
    <si:author>Jan Egil Refsnes</si:author> 
</rdf:Description> 
</rdf:RDF> 

결과, 뭔가 같은 endpointB에서 bookid123 :

그들은 모든 데이터를 포함하는 하나 개의 문서가 합병한다
<rdf:RDF 
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
xmlns:si="http://www.w3schools.com/rdf/"> 
<rdf:Description rdf:about="http://endpointA/bookid123"> 
    <si:title>W3Schools.com</si:title> 
</rdf:Description> 
<rdf:Description rdf:about="http://endpointB/bookid123"> 
    <si:author>Jan Egil Refsnes</si:author> 
</rdf:Description> 
</rdf:RDF> 

하지만 나는 입니다 :

<rdf:RDF 
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
xmlns:si="http://www.w3schools.com/rdf/"> 
<rdf:Description rdf:about="http://couldbeanything/bookid123"> 
    <si:title>W3Schools.com</si:title> 
    <si:author>Jan Egil Refsnes</si:author> 
</rdf:Description> 
</rdf:RDF> 

model2에 추가, model1의 모든 문을 받고보다 스마트 한 방법 때문에 소스 URI의 다른 문을 제외하고 있습니까?

+0

둘의 : 병합 할 각이 개 자원 resource1resource2을 위해, 또한 다른 문으로 하나의 문장을 복사하는 루프를 실행 이 스 니펫은 유효한 RDF/XML이므로 첫 번째 파일은 사용자가 얻는 것임을 의심하며 두 번째 파일이 원하는 파일인지 의심 스럽습니다. 당신은 이미 RDF가 주체 - 술어 - 객체 트리플이라는 용어로 정의되어 있다는 것을 이미 알고 있기 때문에 각 모델에서 어떤 트리플이 있고 최종 모델에서 원하는 트리플이 무엇인지 말하면 도움이 될 것입니다. XML 태그에 대해서 말하면 혼란 스러울뿐입니다. 또한 어떤 라이브러리를 사용하고 있습니까? 아파치 예나 (Apache Jena)라고 생각하지만 거기에는 많은 RDF 라이브러리가있다. – cygri

+0

나는 나의 예를 편집하고 더 많은 정보를 추가했다. 자네 말이 맞아, 나는 자바 프로젝트에서 jena 라이브러리를 사용하고있다. – wassermine

답변

2

는 RDF에서 식별자는 완전한 URI의 그리고 그들은 당신이 그들을 찾을 일이 모든 문서의 일부로 간주되지 않습니다.

http://endpointA/bookid123 
http://endpointB/bookid123 

는 것들에 대한 독특하고 독립적 인 이름입니다, 귀하의 예제에서 그래서. 따라서 RDF 관점에서 병합은 트리플을 해당 주제와 함께 결합하지 않습니다. 귀하의 경우에는

, 당신은 RDF 모델의 외부 일부에 의해, 그 주장하고자하는, 당신은 하나도 문으로 간주 될 수 있습니다에 대한 그 http://endpointA/bookid123http://endpointB/bookid123 실제로 동일한 리소스 그 때문에 문 알고 다른쪽에 대해서.

두 가지 방법으로 문제를 해결할 수 있습니다. 첫째, 당신은 두 개의 자원이 같은 개인이 나타내는 것을 표현하는 OWL을 사용할 수 있습니다 (I은 간결 거북이 구문을 사용합니다, 그것은 의미를 변경하지 않습니다) :

<http://endpointA/bookid123> owl:sameAs <http://endpointB/bookid123> . 

을 위해이 작업을 위해, 당신은 OWL 추론 자 (예 : OWL_MEM_MICRO_RULE_INF)가 부착 된 모델을 사용해야합니다.

두 번째 방법은 더 폭력이다

for (StmtIterator i = resource1.listStatements(); i.hasNext();) { 
    Statement s = i.next(); 
    resource2.addProperty(s.getPredicate(), s.getObject()); 
} 
+0

덕분에 두 번째 테스트를 통해 효과가있었습니다. 그러나 이것은 제한적인 것으로 보인다. 나는 올빼미를 볼 것이다 : sameAs. 그것은 rdfs -> rdfs : seeAlso에서도 같다. 위의 예제는 sparql 쿼리입니까? RDF/XML-documents에 sameAs-Resource를 추가해야하기 때문에 : ? – wassermine

+0

아니요, 'owl : sameAs'와'rdfs : seeAlso'는 전혀 같은 개념이 아닙니다. 'sameAs'는 OWL에서 두 가지 자원이 문자 그대로 * 동일한 개인을 나타냄을 해석합니다. 의미는 아주 정확합니다. 'seeAlso' * 비공식적으로 *는 객체 URI가 주제 리소스에 대해 더 많은 정보를 추가 할 수있는 문서임을 의미합니다. 대답에서 쓴 것처럼 RDF의 단편은 거북이에 코드화되어 있습니다. RDF로 작업하고 싶다면 구문 (RDF/XML, Turtle, 뭐든간에)에 대해 생각하지 말고 그래프의 트리플에 대해 생각해보십시오. RDF/XML의 관점에서 Jena 코드를 작성하려고하면 혼란 스러울 것입니다. –

+0

덧붙여서 거북에 대해 배우려면 Jena 문서 또는이 페이지를 참조하십시오. https://en.wikipedia.org/wiki/Turtle_%28syntax%29 –

관련 문제