Jena Ontology API

     


Jena RDF API의 간단한 사용법은 지난포스팅까지 완료했습니다. 제가 현제 원하는 것은 온톨로지 제작툴로 쉽게 만든 온톨로지를 다른 프로그램에 적용하기위해 온톨로지 파일을 읽어서 분석하거나 추론하는 기능을 자바로 구현하는 것입니다. 


처음에는 Jena RDF API로 간단하게 할 수 있을것 같았는데 그게 아니였습니다 ㅠㅠ

Jena홈페이지에 가보면 Jena 튜토리얼 과정에서 Jena RDF API와 SparQL, Jena Ontology API 등등 여러가지가 있었습니다. 전부를 알아야 그나마 완성도 높은 프로그램을 만들 수 있을것 같습니다. 이번 포스팅은 그중에 하나인 Jena Ontology API에 대해서 입니다. 


일단 API는 지난시간에 사용했던 Jena RDF API에 포함된 것 같습니다. 단지 RDF와 OWL의 차이를 설명하기 위한 메뉴얼을 제공하는 것 같습니다. Jena 공식 홈 주소는 아래와 같습니다.


http://jena.apache.org/index.html


공식 홈페이지에서 Ontology API 메뉴를 클릭하시면 됩니다. 물론 영어로 되있습니다 ^^...



General concepts


처음에는 일반적인 개념을 설명하고 있습니다. RDF와 OWL의 차이를 말하고 있는데 이것은 이미 알고 있으므로 대충 훑어보았습니다. 간단하게 요약하자면 OWL은 RDF보다 클래스를 정의하는 방법이 더 많고 다양하고 OWL은 3가지 버전이 있는데 각각 적용하는 분야가 조금씩 상이하다 정도 입니다. 


온톨로지는 간단한 RDFS부터 복잡한 OWL Full까지 여러가지 언어로 만들어 질 수 있습니다. Jena API는 하나의 클래스로 여러가지 언어를 지원합니다. 예를 들어 ontClass는 OWL에서는 온톨로지 클래스를 정의하지만 RDFS에서는 null값을 가지고 있습니다. 


온톨로지를 사용하는 이유중 하나는 바로 추론기능이 있다는 것입니다. 추론기능을 사용하면 기존 정보에서 새로운 정보를 자동으로 생성할 수 있습니다. Jena는 Interface API를 통해 추론기능을 사용 할 수있습니다. 추론기능은 기존 데이터에서 새로운 데이터를 만들고 그래프로 관리 할 수 있게 합니다. 기존데이터또한 저장되기 때문에 프로그래밍 할때 두 데이터의 차이를 비교하면서 만들 수 있습니다.


마지막에는 RDF-level에서의 변화를 자바가 어떻게 처리하는지 나와있는데 솔직히 무슨말인지 모르겠습니다. RDF-level에서 문법을 바꿨을때 자바가 어떻게 받아들이는지에 대해 설명한 것 같은데 자세하게는 모르겠습니다. 나중에 예제를 통해 알아봐야 할 것 같습니다.


Running example: the ESWC ontology


Tom Heath의 ESWC온톨로지를 예제로 사용한다. 파일 첨부함.



eswc-2006-09-21.rdf



Creating ontology models


자바에서 실질적으로 온톨로지를 선언하는 부분을 알려줍니다. 기본적으로 문법 구조는 RDF API와 유사합니다. 대신 선언부가 OntModel로 바뀌였습니다. 그리고 인자값으로 OntModelSpec클래스가 사용되는데 이미 정해져있는 온톨로지 모델을 사용할 수 있습니다. 정해져 있다는것은 사용할 온톨로지 모델(DL, Full, Lite)과 저장 모델, 추론기능사용 여부 등이 세팅되어있는 모델을 사용하겠다는 것입니다. 여러가지 모델들이 표에 나와있으니 메뉴얼에 있는 표를 참고하시기 바랍니다.



Compound ontology documents and imports processing


RDF API에서 비슷하지만 다른 RDF 모델 두개를 합치는 메소드가 있었습니다. 온톨로지 또한 여러개의 온톨로지를 합칠 수 있습니다. 하지만 RDF모델과는 방식이 조금 다른것 같습니다. 온톨로지 자체가 다른 온톨로지에 import할 수 있는 것 같습니다. 온톨로지 모델 자체가 기본 온톨리지모델과 import된 온톨로지모델 여러개를 관리할 수 있는 구조입니다.




메뉴얼에서는 새롭게 Document라는 단어를 사용합니다. Document는 온톨로지를 읽어드리는 형식? 이라고 표현할 수 있습니다. 온톨로지가 저장이 될때 RDF/XML이거나 N3 형식이 있는데 이것들을 Document라 표현합니다. Document 입장에서 온톨로지를 봤을때 표현하기 편리하지만 데이터의 글로벌 웹적인 부분에서 제한이 생긴다고 합니다. 편하긴 하지만 반드시 필요하지는 않는 것 같습니다.


Jena에서 온톨로지 document를 불러오는 것은 RDF API때와 똑같습니다. read()메소드를 사용해서 온톨로지를 불러올 수 있는데 인자값에 따라 다양한 방법으로 온톨로지를 불러올 수 있습니다. 


read( String url )
read( Reader reader, String base )
read( InputStream reader, String base )
read( String url, String lang )
read( Reader reader, String base, String Lang )
read( InputStream reader, String base, String Lang )

기본적인 온톨로지말고 import된 온톨로지는 기본 온톨로지와 분할되서 표시됩니다. 우리가 온톨로지를 추가하고 수정할 때 기본 온톨로지만 업데이트됩니다. import된 온톨로지는 추론이나 다른 서비스에서만 사용되는 것 같습니다.


The ontology document manager


온톨로지는 각각의 document manager를 가지고 있습니다. document manager는 모델을 선언할 때 인자값으로 들어가게 되는데 아마 온톨로지를 제어하거나 하는 메소드가 포함되어 있는 것 같습니다. 초기 셋팅값(?) 같은 걸로 생각하면 됩니다. 이 매니져는 모델을 생성할 때 인자값으로 들어가기 때문에 중간에 수정하게 되면 모델에 영향을 미친다고 합니다.


Document manager policy


매니져는 많은양의 옵션을 설정할 수 있는데 java 코드상에서 이런 옵션을 설정할 수 있고, 아니면 따로 정의된 RDF설정 파일을 불러올 수 있다고 합니다. 


The ModelMaker: creating storage on demand


온톨로지를 만들때 저장하는 방법에 대해 설명합니다. jena에서는 모델을 만들때 저장방법으로 in-memory, file-backed, in a persistent database 등의 방법을 제공합니다. 맨 처음에 모델을 만들때 저장방법을 결정하는데 두가지를 결정합니다. 하나는 기본 온톨로지에대한 저장방식이고 다른 하나는 추가되는 온톨로지에 대한 저장 방식입니다. OntModelSpec 클래스가 이 값들을 가지고 있습니다.


Controlling imports processing


온톨로지를 추가할 때, read()메소드가 자동적으로 온톨로지를 import합니다. 하지만 ProcessImports의 값이 false로 되어있으면 import하지 못합니다. setProcessImports(true)가 되어 있어야 import가 자동적으로 진행됩니다. 이 설정은 document manager에서 설정해 놓을 수 있습니다.


Managing file references


온톨로지의 장점중에 하나는 재 사용성입니다.  프로그램을 만들때 다른 공식 온톨로지 모델을 사용할 수 있습니다. 하지만 추가하고 싶은 온톨로지 모델이 웹상에 있다면 이는 불러오는데 딜레이와 웹 접속이 가능해야한다는 조건이 붙습니다. 이 부분을 완화하기 위해서 웹상의 URI document를 로컬폴더에 저장하는 FileManager 기능이 있습니다. 


<OntologySpec>
  <publicURI rdf:resource="... the public URI to map from..."    />
  <altURL rdf:resource="... the local URL to map to ..." />
  <!-- optional ontology language term -->
  <language rdf:resource="... encoding used ..." />
  <!-- optional prefix to associate with the public URL -->
  <prefix rdf:datatype="&xsd;string">a prefix</prefix>
</OntologySpec>

For example:

<OntologySpec>
  <!-- local version of the RDFS vocabulary -->
  <publicURI rdf:resource="http://www.w3.org/2000/01/rdf-schema"    />
  <altURL rdf:resource="file:src/main/resources/rdf-schema.rdf" />
</OntologySpec>


위에 예제처럼 웹 URI와 local URI 경로를 동시에 적으면 적용됩니다.


Specifying prefixes


prifix:name 형식의 URI prefixes는 document manager에서 관리하고 메소드를 통해 추가 관리 할 수 있습니다.


Caching of imported models


A와 B의 온톨로지를 상요하는데 두 온톨로지 모두 C온톨로지를 import할 경우, 두번 import하는 것이 아니라 캐쉬에 저장했다가 쓰는 방법을 사용한다고 합니다. 기본적으로는 캐싱이 사용되도록 설정되어 있고 추가적인 메소드를 사용해서 이 기능을 끌 수 있습니다. setCacheModels(boolean caching) 


The generic ontology type: OntResource


ontology API에서 모든 클래스를 표시할 수 있는 클래스가 OntResource입니다. RDF에서 사용했던 Resource와 같은 형태입니다. 


AttributeMeaning
versionInfoA string documenting the version or history of this resource
commentA general comment associated with this value
labelA human-readable label
seeAlsoAnother web location to consult for more information about this resource
isDefinedByA specialisation of seeAlso that is intended to supply a definition of this resource
sameAsDenotes another resource that this resource is equivalent to
differentFromDenotes another resource that is distinct from this resource (by definition)

For each of these properties, there is a standard pattern of available methods:

MethodEffect
add<property>Add an additional value for the given property
set<property>Remove any existing values for the property, then add the given value
list<property>Return an iterator ranging over the values of the property
get<property>Return the value for the given property, if the resource has one. If not, return null. If it has more than one value, an arbitrary selection is made.
has<property>Return true if there is at least one value for the given property. Depending on the name of the property, this is sometimes is<property>
remove<property>Removes a given value from the values of the property on this resource. Has no effect if the resource does not have that value.


이 중에 메뉴얼에서 강조하는 부분은 list기능입니다. 온톨로지에서 클래스들의 관계를 그래프적으로 나타낼때 list 메소드를 사용하는데 추론기능의 여부와 direct기능이 있어서 직관적으로 모델의 구조를 파악할 수 있게 도와줍니다. 




이 부분에 대한 예제코드가 있긴 한데 전체적인 코드가 아니라서 실행해 보지 못했습니다. jena폴더에도 이 예제를 찾을 수 없었기에.. 나중에 해보는 직접 해보는 수 밖에 없겠습니다.


(i)는 기본적인 관계들만 나타냅니다. 기본 모델의 그래프라고 볼 수 있습니다. (ii)는 추론기를 사용했을때의 그래프입니다. 전체적인 관계가 전부 나와있습니다. (iii)의 경우는 직접적인 연결만 표시한 그래프입니다. 리소스 x는 A의 서브가 될 수 있지만 이미 A의 서브인 D의 서브이기 때문에 따로 관계를 표시하지 않습니다. 이렇게 direct기능을 쓰면 직관적으로 모델의 구조를 알 수 있기때문에 가장 많이 쓰입니다. direct기능을 사용할때에는 메소드 인자값에 booleand direct를 넣으면 됩니다.






실질적인 온톨로지의 클래스 사용법 부터는 코드가 많이 나오는데 실제적으로 테스트해볼 코드가 존재하지 않습니다. 제가 못찾을 것일 수도 있기에 다음 내용부터는 예제를 찾거나 실제로 코딩을 해가면서 봐야 할 것 같습니다.

반응형

'Study > OWL,RDF' 카테고리의 다른 글

Jena Ontology API 예제소스 (2)  (1) 2014.02.12
Jena Ontology API 예제소스 (1)  (0) 2014.02.11
Jena RDF api 활용하기 (3)  (0) 2014.02.05
Jena RDF api 활용하기 (2)  (1) 2014.02.05
Jena RDF api 활용하기  (0) 2014.02.04

댓글

Designed by JB FACTORY