Jena RDF api 활용하기

     

jena api를 사용하기위해 공식메뉴얼이 아니라 다른 사용자가 만든 메뉴얼이 있나 찾아봤는데 마땅한게 없었다. 한글로 되어있는 것 하나를 찾았는데 무슨 번역기를 돌렸는지 통 알아먹을수 없게 번역해놨고 영어와 한글을 같이쓰는 말투로 되어있어서 상당히 짜증났다. 차라리 영어로된걸 읽지 구지 동사만 한글로 번역하고 일반 명사들은 다 영어로 쓴 번역문을 읽어야 되나 싶다. 그 문서에 한문장을 써보면 다음과 같다


"이것은 programmer 가 compact 하고 쉬운 style 로 code 를 write 하는것을 가능하게 한다"


미칰ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 이게 영어여 한글이여.


이 문장을 본 순간 그냥 영문으로 보는게 좋겠다 싶어서 공식 Jena RDF API 설명서를 참고했다. 


http://jena.sourceforge.net/tutorial/RDF_API/index.html#ch-Navigating%20a%20Model



예제를 들어가며 자세하게 설명되어 있는 설명서다. (물론 영어 ^오^)

내가 그리 영어를 잘하는 것은 아니지만 모르는 단어 보면서 읽을 정도는 되기에 처음부터 하나씩 해보려고 한다.


일단 처음 Introduction에서는 RDF에 대한 설명을 해준다. RDF는 W3C에서 추천하는 표준이며 리소스를 묘사한다. 여기서 리소스가 무엇인가에 대해 나오는데 리소스에 대한 정의는 아직도 확실하지 않고 토론중이라고 한다. 여기서는 리소스란 우리가 확인할 수 있는 어떤것 이라고 정의한다. 즉 우리가 이건 무엇이다 라고 정의할 수 있는 어떤 것이든지 리소스가 될 수 있다는 소리다.


앞으로 예제에서는 사람에 관하여 예제를 만들것이다. VCARDS란 것으로 RDF를 표현할 것인데 vcards 란게 아직 뭔지 잘 모르겠다. 클릭하면 표준에 대한 정보가 나오는데 아마도 전자명함을 뜻하는 것 같다. 사람에대한 정보나 직업등에대한 정보를 vcard라는 RDF 표현 언어로 표현한다는 뜻으로 보인다.

아래는 한가지 예를 들어서 다이어그램같은것을 그려놨다.




이 그림은 RDF로 표현한 간단한 모델인데 일단 위에 동그라미안에 있는것은 JohnSmith라는 사람에대한 리소스다. 아까 리소스란 확인가능한 어떤것이라고 표현했기때문에 사람 역시 표현 가능하므로 리소스가 될 수 있다. RDF에서는 리소스를 URI라는 방식으로 표시한다. URI는 Uniform Resource Identifier의 약자로 객체에 대한 식별자라고 할 수 있겠다. 마치 인터넷 주소처럼 생겼는데 고유한 주소값을 사용함으로써 객체를 식별할 수 있다. 


리소스는 속성(property)이라는 것을 가질수 있는데 이 예제에서는 리소스가 나타내는 사람에 대한 속성을 나타내려는 듯 하다. 일단 vcard:FM 이라고 설정되어있는 화살표가 있다. 이것이 뜻하는 것은 무엇인가. FM은 FULL NAME의 약자로 리소스(사람)의 전체 이름은 무엇이다 라고 화살표로 가르키고 있는 것이다. 헌데 그앞에 vcard 와 ":" 이것은 무엇일까. 이것은 xml에서도 사용되었던 네임스페이스와도 같은 기능인데 원래 이 기능도 표현을 URI형태로 해야 하지만 간단히 하기위해 vcard라는 약자를 쓰기로 한것이다. XML의 네임스페이스를 사용해본 사람은 쉽게 알 것이다. 즉 vcard라는 네임스페이스를 사용해서 전체 URI를 대신 표현한것이다. 


속성은 해당하는 값(value)를 가질수 있다. 여기서 리소스에대한 속성의 값은 "John Smith" 이다. 풀네임이니까 그냥 "John Smith"가 되고 값 타입은 literal(문자)가 된다. 그냥 문자열 정보를 가지고 있는 값이라고 생각하면 된다. 


다시 정리해보면 저위에 표시된 다이어그램은 JohnSmith라는 리소스가 가진 vcard:FN이라는 속성의 값은 John Smith라는 표현이 된다. 


이것을 어떻게 jena API로 만드는지는 아래 이어져 설명되어 있다.

일단 지난 포스팅에서 이클립스와 jena API를 연동하는 것을 했고 다음 코드를 입력하면 위와같은 모델을 만들 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.vocabulary.VCARD;
 
 
public class Main {
    static String personURI    = "http://somewhere/JohnSmith";
    static String fullName     = "John Smith";
    public static void main(String[] args){
        
 
        // create an empty Model
        Model model = ModelFactory.createDefaultModel();
 
        // create the resource
        Resource johnSmith = model.createResource(personURI);
 
        // add the property
         johnSmith.addProperty(VCARD.FN, fullName);
         
         model.write(System.out"RDF/XML");
    }
 
}
 


위와 같이 입력하면 출력은 다음과 같다.


1
2
3
4
5
6
7
<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:vcard="http://www.w3.org/2001/vcard-rdf/3.0#" > 
  <rdf:Description rdf:about="http://somewhere/JohnSmith">
    <vcard:FN>John Smith</vcard:FN>
  </rdf:Description>
</rdf:RDF>


이렇게 RDF로 문서가 만들어졌다는 것이다. 위에 코드에서 model.write()의 첫번째 인자값을 파일로 한다면 존 스미스에대한 모델이 파일로 만들어 질 것이다. 코드를 짜면서 놀랐던 것은 VCARD라는 jena의 라이브러리가 존재했다는 것이다. 그냥 쓴 줄 알았는데 표준이 있던 것이구나...


코드가 간단해서 분석할 것도 없지만 한번 보자면, ModelFactory의 createDefaultModel 메소드를 사용해서 비어있는 모델을 만들고 그안에 johnSmith라는 리소스를 집어넣고 속성을 추가한 것이다.

친절하게 메뉴얼에는 이 기본적인 모델을 가지고 너만의 vcard를 만들어 보아라! 라고 나와있다. ^^;;


이곳에 더 추가하는 것은 다음 포스팅에 하도록 한다.



반응형

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

Jena RDF api 활용하기 (3)  (0) 2014.02.05
Jena RDF api 활용하기 (2)  (1) 2014.02.05
Jena API  (0) 2014.02.03
Ontology(온톨로지)란? (2)  (3) 2014.02.03
Ontology(온톨로지)란? (1)  (0) 2014.02.03

댓글

Designed by JB FACTORY