Protege : 온톨로지 편집기 & 지식 관리 시스템
👉 https://github.com/protegeproject/protege-distribution/releases/tag/v5.5.0#downloads
위 링크에 접속 후 제일 아래로 스크롤을 내리면 설치 파일이 있다. 운영체제에 맞는 프로그램을 다운로드 후 압축을 푼다.
Window 에서 실행하는 경우
압축을 풀면 아래와 같은 사진의 폴더 내용을 확인 가능하다. Protege 응용 프로그램을 더블클릭하여 실행 후 사용하면 된다.
Ubuntu 에서 실행하는 경우
Protégé 다운로드 후, 해당 폴더에서 Terminal 창을 연다.
./run.sh ← 명령어를 입력 후 enter를 누르면 아래처럼 화면이 실행된다.
잠시 후 Protege 화면이 나타나므로, 사용하면 된다.
🚩 참고하면 좋은 사이트 🚩
SPARQL : RDF 형식, 형태의 구조화된 데이터를 처리하기 위한 Query 언어
아래 링크를 참고하여 공부했다.
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 .
example
Q. 우유를 마시지 못하는 골다공증 환자한테 무엇을 줘야 할까?
(그림 출처 : https://cholol.tistory.com/98)
위의 그림과 같은 온톨로지에서, “우유를 마시지 못하는 골다공증 환자한테 무엇을 줘야 할까?” 라는 질문에 대한 답을 SPARQL query를 사용해 찾는 법을 다룬다.
Protege 5.5.0 version에서 실행하였다.
각 Class들의 IRI도 원하는 형태로 바꿔 준다. 먼저 Class를 생성 시 나타나는 창의 new entity option 을 클릭한다.
Specified IRI에서 원하는 IRI를 입력한다. 여기서는 메인 화면에서 설정한 IRI와 같도록 입력하였다. 확인 버튼을 클릭하면 IRI 변경이 완료된다.
💡 우리가 직접 설정했던 IRI는 http://www.foodexample/ontology#이다.
이를 PREFIX로 나타내면 PREFIX food: http://www.foodexample/ontology# 로 표현 가능한데, 이렇게 하면 http://www.foodexample/ontology# 대신에 food를 쓸 수 있다.
food 대신 다른 원하는 단어를 사용해도 무방하다.
전체 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은 오랜만에 시도해서 제법 새로웠다.
protege관련 사용법을 좀 더 구체적으로 알려주실 수 있을까요?