jena Ontology API 활용하여 온톨로지에 class, individual, property 추가하기

     





온톨로지를 불러와 클래스, 객체, 속성 추가하기



본격적으로 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'로 설정했다.


        ind0.addProperty(hasNext, ind1);
        ind1.addProperty(hasPrev, ind0);



코드를 실행하고 결과를 protege로 실행하면 올바르게 작성된 것을 알 수 있다.





반응형

댓글

Designed by JB FACTORY