2017-10-08 9 views
0

Apache Jena를 사용하는 데있어 새로운 기능입니다. 나는 여기서 문제를 직면하고있다.Apache Jena가 자동으로 객체 속성을 병합합니다.

Protege를 사용하여 RDF 파일을 디자인했습니다. 기본적으로, 나는 연합, 집계, & 구성이라는 3 가지 객체 속성을 가지고 있습니다. AGGREGATION & COMPOSITION은 모두 ASSOCIATION의 하위 속성입니다. Protege에서 이처럼 세 가지 객체가 함께 멋지게 생성됩니다.

그러나 Java에서 Jena를 사용할 때 (아래 코드는 내 코드 임), 생성 된 결과는 예상 된 결과와 다릅니다.

모델 m = ModelFactory.createDefaultModel(); String NS = "http://example.com/test/";

OntModel ontoModel = >ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM, null);  

    ObjectProperty ASSOCIATION = ontoModel.createObjectProperty(NS + >"ASSOCIATION"); 
    ObjectProperty AGGREGATION = ontoModel.createObjectProperty(NS + >"AGGREGATION"); 
    AGGREGATION.addProperty(RDFS.subPropertyOf, ASSOCIATION); 
    ObjectProperty COMPOSITION = ontoModel.createObjectProperty(NS + >"COMPOSITION"); 
    COMPOSITION.addProperty(RDFS.subPropertyOf, ASSOCIATION); 

가 생성 된 출력에서 ​​볼 수 있듯이 :

1) ASSOCIATION 객체 속성 응집 & COMPOSITION 아래에 중첩된다.

2) AGGREGATION & COMPOSITION의 하위 하위 속성이 생성됩니다.

여기에 도움을 주시면 매우 감사하겠습니다.

Expected output generated from Protege & output generated with Jena

감사합니다.

답변

1

표시하려는 두 RDF 파일은 의미 상 동일합니다. 당신이 보는 것은 공리의 순서가 다른 것입니다. OWL은 공리 직렬화의 순서를 정의하지 않으므로 각 라이브러리는이 점에서 자체 선택을합니다.

Protege는 온톨로지를 작성하기 위해 OWL API를 사용하며, OWL API는 공리를 먼저 유형별로 정렬 한 다음 해당 내용 (이 경우 공리의 하위 속성의 IRI)을 먼저 정렬합니다.

RDF를 인식하지 않는 도구를 사용하거나 버전 제어 시스템에 온톨로지를 저장하지 않는 경우 (순서가 다르면 커다란 불필요한 diff가 발생할 수 있음) 이러한 차이점을 무시할 수 있습니다. 사용중인 코드가 예상대로 작동합니다.