jena Ontology API 활용하여 온톨로지에 class, individual, property 추가하기
- Study/OWL,RDF
- 2014. 5. 20. 15:47
온톨로지를 불러와 클래스, 객체, 속성 추가하기 |
본격적으로 java코드를 사용하여 온톨로지를 만들기 위한 코딩을 실행했다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public static void main( String[] args ) throws IOException { OntModel m = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM, null ); String NS = "http://www.semanticweb.org/cho/ontologies/2014/4/untitled-ontology-15#"; m.read( "file:c:/kkma.owl" ); ObjectProperty hasNext = m.getObjectProperty(NS+"hasNext"); ObjectProperty hasPrev = m.getObjectProperty(NS+"hasPrev"); OntClass c = m.getOntClass(NS+"V"); // first way: use a call on OntModel Individual ind0 = m.createIndividual( NS + "넥빠1", c ); // second way: use a call on OntClass Individual ind1 = c.createIndividual( NS + "넥빠2" ); ind0.addProperty(hasNext, ind1); ind1.addProperty(hasPrev, ind0); Writer fw = new FileWriter("c:/test8.owl"); m.write(fw,"RDF/XML"); |
일단 kkma라는 owl을 불러와서 객체를 생성하는 코드이다.
kkma라는 온톨로지는 내가 만든 임의의 온톨로지인데 다음과 같은 클래스를 가지고 있다.
클래스 명은 형태소의 약자들인데 크게 중요한 의미는 없다...
코드에서는 일단 V라는 class를 불러와 V 클래스에 2개의 객체를 만든다. 클래스를 불러오는 메소드는 다음과 같다.
OntClass c = m.getOntClass(String arg) |
메소드에서 arg값은 "네임스페이스 + 클래스이름" 으로 정의된다. 즉 V라는 클래스를 불러오기 위해서는 "http://www.semanticweb.org/cho/ontologies/2014/4/untitled-ontology-15#V"를 넣어야 한다. (밑줄친 부분은 온톨로지의 네임스페이스)
객체를 추가하는 방법은 Model에 추가하는 방법과 Class에 추가하는 방법이 있다.
Individual ind0 = m.createIndividual(String arg, OntClass class) Individual ind1 = c.createIndividual(String arg) |
각각의 arg에는 객체의 이름을 넣고 Model에 추가하는 경우는 해당하는 클래스도 적는다.
위 코드에서는 V클래스에 '넥빠1' 과 '넥빠2' 라는 객체를 생성했다.
객체를 생성하고 속성을 붙이기 위해서는 addProperty() 메소드를 사용한다.
.addproperty(Property property, RDFNode node) |
Property는 온톨로지에 이미 생성되있는 속성을 사용했다. Class를 불러온 것과 마찬가지로 get 메소드를 통해 만들어 놓은 'hasNext' 와 'hasPerv' 속성을 가져왔다.
'넥빠1' 은 'hasNext' 속성을 갖고 대상은 '넥빠2'로 설정했고,
'넥빠2' 는 'hasPrev' 속성을 갖고 대상은 '넥빠1'로 설정했다.
코드를 실행하고 결과를 protege로 실행하면 올바르게 작성된 것을 알 수 있다.
'Study > OWL,RDF' 카테고리의 다른 글
jena Ontology API와 sparQL을 사용하여 검색시스템 만들기 (8) | 2014.05.22 |
---|---|
자바에서 스파클 사용하기 ARQ - Application API (3) | 2014.02.19 |
스파클 사용하기 SPARQL Tutorial - Datasets (0) | 2014.02.19 |
스파클 사용하기 SPARQL Tutorial - Alternatives in a Pattern (0) | 2014.02.19 |
스파클 사용하기 SPARQL Tutorial - Optional Information (0) | 2014.02.18 |