ONTOLOGY Pinetree Partners · GT·WT 진단 온톨로지 프로젝트 착수 교육
CHAPTER B · 온톨로지 기초

조립 예시 (Turtle)

앞 장에서는 사실 하나를 트리플 한 줄로 썼습니다.
실제 온톨로지 코드는 한 줄이 아닙니다. 앞에서 본 4가지 구성요소 — Class, Object Property, Datatype Property, Instance — 가 여러 줄로 이어집니다.
아래는 4가지 구성요소가 코드 안에서 어떻게 배치되는지 보여 주는 조립 예시입니다. 읽은 뒤 대응표에서 각 줄이 어디에 해당하는지 짚어 봅니다.

아래 대응표 오른쪽이 Turtle(터틀) 코드입니다.
RDF를 텍스트로 표현하는 직렬화 형식으로, 가독성이 높아 RDF를 표현할 때 자주쓰는 포맷입니다.
  • @prefix : <...> .  —  "이 문서에서 :는 저 URI의 줄임말로 쓴다"는 약속 (네임스페이스).
  • :WTG03 a :Turbine  —  a"~의 인스턴스다 (rdf:type)"의 줄임말.
  • ; 세미콜론  —  "같은 주어를 또 쓰지 않고 다음 속성을 이어 쓴다"는 약속.
  • "3"^^xsd:int  —  따옴표 안 값의 데이터 타입을 명시 (여기선 정수).
  • owl:Class · owl:ObjectProperty · owl:DatatypeProperty  —  Class·Property가 어떤 종류인지 적을 때 쓰는 OWL 키워드.
  • rdfs:label · rdfs:comment  —  URI에 이름표·설명을 다는 어노테이션. 추론에는 쓰이지 않고, 사람이 읽을 때 씁니다.

그래서 — 무엇을 말한 건가요?

아래 원문에서 뽑은 말과 Turtle 코드를 짝지어 봅니다. 명사·동사·값이 Class·Property·Instance로 어떻게 옮겨졌는지 따라가 보세요.

🗣️ 원문 (자연어)

3호기 WTG03풍력 터빈이며, 정격출력 3MW, 설치일 2021-05-20입니다.
  WTG03은 기어박스를 부품으로 갖고, 그 기어박스는 진동센서가 감시합니다. 센서가 측정한 진동값은 4.2입니다.」

원문에서 뽑은 말 Turtle 코드
(네임스페이스 약속)
@prefix : <http://pp.com/wtg/> .
@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#> .
① Class터빈·기어박스·센서라는 종류가 있다
:Turbine a owl:Class ;
        rdfs:label "풍력 터빈"@ko ;
        rdfs:comment "풍력 발전에 사용되는 회전형 발전 설비."@ko .

:Gearbox a owl:Class ;
        rdfs:label "기어박스"@ko ;
        rdfs:comment "회전 에너지를 변속·전달하는 터빈 부품."@ko .

:Sensor a owl:Class ;
        rdfs:label "센서"@ko ;
        rdfs:comment "설비 상태를 측정·전송하는 감시 장치."@ko .
③ Object부품·감시 같은 관계(동사)가 있다
:hasPart a owl:ObjectProperty ;
         rdfs:label "부품을 갖는다"@ko ;
         rdfs:comment "상위 자산이 하위 부품을 포함하는 관계."@ko .

:monitoredBy a owl:ObjectProperty ;
             rdfs:label "감시받는다"@ko ;
             rdfs:comment "부품이 특정 센서에 의해 모니터링되는 관계."@ko .
④ Datatype정격출력·설치일·진동값 같은 속성이 있다
:ratedPower a owl:DatatypeProperty ;
            rdfs:label "정격출력"@ko ;
            rdfs:comment "터빈의 명판 정격 출력(MW)."@ko .

:installedDate a owl:DatatypeProperty ;
               rdfs:label "설치일"@ko ;
               rdfs:comment "현장 설치 완료 날짜."@ko .

:vibrationLevel a owl:DatatypeProperty ;
                rdfs:label "진동값"@ko ;
                rdfs:comment "센서가 측정한 진동 수준."@ko .
② Instance3호기 WTG03은 터빈이다
④ Datatype정격출력이 3MW
④ Datatype설치일이 2021-05-20이다
③ Object기어박스를 부품으로 갖는다
:WTG03 a :Turbine ;
       rdfs:label "3호기 WTG03"@ko ;
       :ratedPower "3"^^xsd:int ;
       :installedDate "2021-05-20"^^xsd:date ;
       :hasPart :Gearbox_03 .
② InstanceGearbox_03은 기어박스이다
③ Object진동센서가 감시한다
:Gearbox_03 a :Gearbox ;
            rdfs:label "WTG03 기어박스"@ko ;
            :monitoredBy :VibSensor_03 .
② InstanceVibSensor_03은 센서이다
④ Datatype측정한 진동값이 4.2
:VibSensor_03 a :Sensor ;
                rdfs:label "WTG03 진동센서"@ko ;
                :vibrationLevel "4.2"^^xsd:decimal .

※ Class·Property와 Instance를 한곳에 모아 둔 것은, 구성요소 배치를 보여 주기 위한 예시입니다. rdfs:label·rdfs:comment는 URI에 붙이는 이름표·설명입니다.

4가지 구성요소 → 트리플 한 줄 → 코드로 조립.
이 흐름이 온톨로지 모델링의 기본 동작입니다.