Ontology 정리 2 (Protege 설치, SPARQL query 사용)

codeblue·2024년 2월 1일
0

Ontology

목록 보기
2/3

1. Protege 설치

Protege : 온톨로지 편집기 & 지식 관리 시스템

1-1. 설치 방법

👉 https://github.com/protegeproject/protege-distribution/releases/tag/v5.5.0#downloads

위 링크에 접속 후 제일 아래로 스크롤을 내리면 설치 파일이 있다. 운영체제에 맞는 프로그램을 다운로드 후 압축을 푼다.

Window 에서 실행하는 경우

압축을 풀면 아래와 같은 사진의 폴더 내용을 확인 가능하다. Protege 응용 프로그램을 더블클릭하여 실행 후 사용하면 된다.

Ubuntu 에서 실행하는 경우

  1. Protégé 다운로드 후, 해당 폴더에서 Terminal 창을 연다.

  2. ./run.sh ← 명령어를 입력 후 enter를 누르면 아래처럼 화면이 실행된다.

  3. 잠시 후 Protege 화면이 나타나므로, 사용하면 된다.

🚩 참고하면 좋은 사이트 🚩

2. SPARQL query 사용

SPARQL : RDF 형식, 형태의 구조화된 데이터를 처리하기 위한 Query 언어

아래 링크를 참고하여 공부했다.

2-1. PREFIX 란?

PREFIX : IRI를 길게 쓰지 않고 짧게 사용할 수 있기 때문에 간결한 표현 가능

PREFIX를 사용하지 않은 code ⬇

SELECT ?id ?name 
WHERE { 
?id rdf:type <http://lod.nl.go.kr/ontology/Author> ;
<http://xmlns.com/foaf/0.1/name> ?name . }

PREFIX를 사용하여 간결해진 code ⬇

PREFIX nlon: <http://lod.nl.go.kr/ontology/> 
PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT ?id ?name 
WHERE { 
?id rdf:type nlon:Author ;
foaf:name ?name .

2-2. Protege 에서 SPARQL query 사용

example

Q. 우유를 마시지 못하는 골다공증 환자한테 무엇을 줘야 할까?

(그림 출처 : https://cholol.tistory.com/98)

  • 위의 그림과 같은 온톨로지에서, “우유를 마시지 못하는 골다공증 환자한테 무엇을 줘야 할까?” 라는 질문에 대한 답을 SPARQL query를 사용해 찾는 법을 다룬다.

  • Protege 5.5.0 version에서 실행하였다.

  1. 온톨로지를 생성하기 위해 protégé를 실행한다.
  1. 메인 화면의 초기 ontology IRI는 길고 복잡한 형태로 되어있는데, 사용자가 편하게 볼 수 있도록 원하는 IRI로 바꿔 준다. ( www.foodexample/ontology 라고 임의로 지정했다.)
  1. 각 Class들의 IRI도 원하는 형태로 바꿔 준다. 먼저 Class를 생성 시 나타나는 창의 new entity option 을 클릭한다.

  2. Specified IRI에서 원하는 IRI를 입력한다. 여기서는 메인 화면에서 설정한 IRI와 같도록 입력하였다. 확인 버튼을 클릭하면 IRI 변경이 완료된다.

  1. 이후 1-1. 🚩참고하면 좋은 사이트🚩 의 링크를 참고해 온톨로지를 생성한다. example의 ontology는 간식, 식사 등 다양한 category의 객체들이 존재하지만 편의상 음료 관련 클래스/인스턴스들만 생성하였다. (protégé가 익숙하지 않다면 example의 객체를 모두 생성해보는 것을 추천한다.)
  1. example에서 칼슘을 함유한 음식은 두유2, 두유3, 우유1, 우유2 로 총 4가지 객체이지만, 여기서는 우유2에 칼슘이 없다고 가정하고 진행한다.
    (4가지로 할 경우 SPARQL query에 대한 답이 잘 나오지 않아 수정하였음. 4가지 모두 칼슘 함유에 대한 query 답을 알고 계시면 .. 알려주세용..😢)
  1. Entities의 Individuals - 두유2 인스턴스를 클릭 후, 오른쪽 하단의 Object property assertions에서 왼쪽 칸에는 object property name을, 오른쪽 칸에는 칼슘을 입력한다. 두유3, 우유1도 동일하게 진행한다.
  1. OntoGraf에서 전체 그래프를 볼 수 있다. 우유1, 두유2, 두유3에 칼슘이 함유되어 있다는 object property가 잘 생성되었는지 확인한다.
  1. 잘 생성되었다면 SPARQL Query Tab을 클릭한다. 아래와 같은 초기 상태의 모습일 것이다.
  1. 맨 위에 PREFIX를 정의하여 사용 가능한데, 우리가 바꾸었던 IRI를 추가한다.

    💡 우리가 직접 설정했던 IRI는 http://www.foodexample/ontology#이다.
    이를 PREFIX로 나타내면 PREFIX food: http://www.foodexample/ontology# 로 표현 가능한데, 이렇게 하면 http://www.foodexample/ontology# 대신에 food를 쓸 수 있다.
    food 대신 다른 원하는 단어를 사용해도 무방하다.

  1. “우유를 마시지 못하는 골다공증 환자한테 무엇을 줘야 할까?” 질문을 다음과 같이 SPARQL을 사용해 답을 찾아보았다. Query 실행 결과 두유2, 두유3이 정답이다.

2-3. code 설명

전체 code

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX owl: <http://www.w3.org/2002/07/owl#> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
PREFIX food: <http://www.foodexample/ontology#> 

SELECT ?subject 
WHERE { 
?subject food:함유하다 food:칼슘. 
?milk food:함유하다 food:칼슘. 
FILTER REGEX(STR(?milk), '우유') 
FILTER (?subject != ?milk) 
}

설명

SPARQL code설명
?subject food:함유하다 food:칼슘.subject라는 변수는 칼슘을 함유
?milk food:함유하다 food:칼슘.milk라는 변수는 칼슘을 함유
FILTER REGEX(STR(?milk), '우유')milk라는 변수는 ‘우유’ 라는 단어가 들어있는 변수
FILTER (?subject != ?milk)subject라는 변수는 milk와 같지않은 변수

이를 만족하는 ?subject 변수를 SELECT를 이용하여 찾은 결과
👉 두유2, 두유3이 정답으로 출력 !


2년 전에 했던 내용을 정리해보았다. 복습하면서 정리하는데 SPARQL은 오랜만에 시도해서 제법 새로웠다.

3개의 댓글

comment-user-thumbnail
2024년 8월 30일

protege관련 사용법을 좀 더 구체적으로 알려주실 수 있을까요?

1개의 답글
comment-user-thumbnail
2025년 1월 10일

생초보자용으로 하나 더 게시글 올려주시면 감사하겠습니다

답글 달기

관련 채용 정보