RDF와 OWL: 웹의 지식 언어
📍 현재 위치: 1부 · 지식 표현 — 2장. 트리플과 그래프는 사실 더미가 곧 레이블이 붙은 방향 그래프임을 보였습니다 — 그러나 벌거벗은 그래프는 구조만 고정할 뿐 공유된 의미는 전혀 고정하지 못했고, 우리가 계속 인용했던 규칙들은 여백에 갇힌 채로 남아 있었습니다; 이 장은 그 노드와 엣지에 전역적으로 모호하지 않은 이름을, 그리고 그래프가 그저 암시만 할 수 있었던 규칙을 진술할 언어를 부여합니다.
기계가 순회할 수 있는 그래프가 곧 기계가 공유할 수 있는 지식은 아닙니다. 지난 장은 우리에게 두 가지 문제를 남겼습니다. 첫째, mit라는 이름의 노드는 다른 누군가의 그래프에서는 다른 기관을 뜻할 수도 있으므로, 두 그래프를 병합하면 조용히 서로 다른 두 세계를 병합해 버리는 셈이 됩니다. 둘째, 우리가 의지해 온 규칙들 — 지도 관계는 교수를 학생에게 잇는다는 것, 조부모격 지도는 두 번의 지도 홉이라는 것, 누구도 교수이면서 동시에 학생일 수는 없다는 것 — 은 데이터 어디에도 살지 않았습니다; 그것들은 여백에 적힌 산문이었을 뿐입니다. 세 겹으로 쌓인 세 개의 웹 표준이 정확히 이 두 문제를 해결하며, 이 장은 학계 세계 자신의 열네 개 공리 위에 그 층을 쌓아 올립니다.
전 세계의 모든 연구실이 색인 카드에 자신들의 사실을 적어 두는데, 각 연구실이 저마다 자기만의 속기 표기를 만들어냈다고 상상해 보십시오 — 어떤 곳은 advises라고 쓰고, 다른 곳은 supervises라고 쓰고, 또 다른 곳은 완전히 다른 것을 가리키는 데 글자 A를 재사용합니다. 신발 상자들을 한데 쏟아부으면 그야말로 혼돈입니다: 어떤 카드들이 같은 것을 뜻하는지 아무도 알 수 없습니다. 이제 모든 카드의 모든 용어가, 어떤 두 연구실도 결코 충돌할 수 없는 완전한 우편 주소로 바뀌고, 공유된 규칙집이 각 용어가 무엇을 함의하는지 — 교수는 연구자라는 것, 교수이면서 동시에 학생일 수는 없다는 것 — 를 말해 준다고 상상해 보십시오. 그러면 갑자기 신발 상자들이 깔끔하게 합쳐지고, 기계는 아무도 적어 두지 않은 사실까지 알아낼 수 있게 됩니다. 그 업그레이드 — 사적인 속기 표기에서 전역적으로 주소가 매겨지고 규칙을 지닌 용어로의 전환 — 이 바로 RDF, RDFS, OWL입니다.
이 장에서 다루는 내용
- 사적인 그래프에서 공유된 지식으로 — IRI(국제화 자원 식별자, Internationalized Resource Identifier)는 모든 노드와 엣지에 전역적으로 유일한 이름을 부여하여, 두 그래프가
advises가 무엇을 뜻하는지에 합의할 수 있게 합니다; RDF 트리플은 바로 그 발상을 표준으로 만든 것입니다. - 층층이 쌓인 케이크 — RDF(데이터 모델) → RDFS(클래스,
subClassOf, 정의역과 치역) → OWL(완전한 논리적 구성자), 그리고 각 층이 정확히 무엇을 얻어 주는지. - 여기서 중요한 네 가지 OWL 구성자 — 하위 클래스, 존재 제한(existential restriction), 분리성(disjointness), 속성 사슬(property chain)을 각각 그것이 표현하는 정확한 학계-세계 공리와 함께 보여줍니다.
- OWL로 재구축된 열네 개의 공리 —
reasoners.build_ontology는 owlready2의Thing,ObjectProperty,GeneralClassAxiom,AllDisjoint,PropertyChain을 사용해ontology.TBOX의 공리들을 하나하나 그대로 재구성합니다. - 서술 논리-OWL 사전 — 교과서적 DL 표기법을 그 OWL 2 및 owlready2 형태로 대응시키는 표 하나.
- 표준화하는 이유 — 기성 추론기(HermiT, ELK)가 바로 그 동일한 파일을 그대로 읽어 들이고, 그 분류 결과가 처음부터 작성한 코드와 항목별로 일치합니다.
- 아직 풀리지 않은 부분 — 이 층층 케이크는 스키마와 데이터를 엄격히 구분해 둘 때에만 깔끔하게 쌓입니다; 그 엄격함이 바로 다음 장이 정식화할 TBox(용어 상자, terminology box)/ABox(단언 상자, assertional box) 분할입니다.
사적인 그래프에서 공유된 지식으로
지난 장의 그래프에는 한 가지 치명적인 약점이 있었습니다: 그 레이블들이 지역 문자열(local string)이었다는 점입니다. 단어 advises는 우리의 여백이 뜻한다고 적어 놓은 것이면 무엇이든 뜻했고, 우리 그래프를 다른 이의 그래프와 병합하는 기계는 두 advises 레이블이 같은 관계를 나타내는지 알아낼 방법이 전혀 없었습니다. RDF — 자원 기술 프레임워크(Resource Description Framework), 트리플을 위한 W3C(월드 와이드 웹 컨소시엄, World Wide Web Consortium) 표준 — 는 단 하나의 규율로 이 구멍을 메웁니다: 모든 이름은 IRI, 즉 웹 URL과 같은 주소 공간에서 가져온 전역적으로 유일한 식별자여야 한다는 것입니다 [1]. 우리의 동반 온톨로지는 이미 그런 IRI 하나를 지니고 있습니다: 이는 자신의 홈 네임스페이스를 IRI로 선언합니다(reasoners.py 45번째 줄),
world = get_ontology("http://nesy-guide.org/academic.owl")
따라서 개념 Professor는 맨 문자열 "Professor"가 아니라 완전한 IRI http://nesy-guide.org/academic.owl#Professor입니다. 그 IRI를 함께 사용하는 두 그래프는 구성상 같은 클래스를 뜻하게 됩니다; 서로 다른 IRI를 사용하는 두 그래프는 안전하게 분리된 채로 남습니다. 지역 문자열이 전역 이름이 되었고, 병합은 건전해졌습니다.
이 수정을 거치면 트리플을 정확하게 진술할 수 있습니다. 기호에 앞서 평범한 말로 풀어 두면: 트리플은 여전히 지난 장과 정확히 같은 "주어, 술어, 목적어"입니다 — IRI는 다만 어느 주어, 술어, 목적어인지를 못박아 줄 뿐입니다. 를 IRI의 집합, 를 블랭크 노드(blank node)(전역 이름이 없는 익명의 개체)의 집합, 을 리터럴(literal)(숫자나 문자열 같은 순수 데이터 값)의 집합이라고 합시다. 그러면 RDF 그래프는 트리플의 집합입니다
여기서 는 집합 합집합(union)이고 는 데카르트 곱(Cartesian product, "가능한 모든 조합")입니다. 세 자리를 왼쪽에서 오른쪽으로 읽으면: 주어는 IRI이거나 블랭크 노드이고, 술어는 언제나 IRI입니다(관계는 반드시 전역적으로 이름 붙어야 하기 때문입니다), 그리고 목적어는 추가로 리터럴일 수도 있습니다(advises는 어떤 개체를 가리키지만, 가상의 age라면 숫자 34를 가리킬 것입니다). 이는 이전과 같은 모양이지만 — 이제 공유되어야 할 모든 , , 가 전역적으로 모호하지 않은 이름이라는 점이 다릅니다 [1].
층층이 쌓인 케이크: RDF, 그다음 RDFS, 그다음 OWL
RDF 홀로는 이름 붙이기는 고정하지만 엣지 너머의 의미에 대해서는 아무것도 말하지 않습니다: 전역 이름으로 advises(alice, bob)을 기록할 수는 있지만, 여전히 "모든 교수는 학생을 지도한다"거나 "교수는 연구자이다"라고 말할 수는 없습니다. 이런 것들은 그 위에 층층이 쌓인 두 개의 층에서 나오며, 각 층은 정확히 한 종류의 표현력을 더합니다. 이 표준들은 서로 포개지도록 설계되어 있습니다: 모든 RDFS 그래프는 합법적인 RDF 그래프이고, 모든 OWL 온톨로지도 합법적인 RDF 그래프이므로, 층들은 기저의 트리플 기반 구조를 바꾸지 않은 채 의미만을 더합니다 [2].
| 층 | 전체 이름 | 더해지는 것 | 학계-세계 예시 |
|---|---|---|---|
| RDF | 자원 기술 프레임워크(Resource Description Framework) | 전역적으로 이름 붙은 트리플: 데이터 모델 그 자체 | IRI를 사용한 (alice, advises, bob) |
| RDFS | RDF 스키마(RDF Schema) | 클래스, rdfs:subClassOf, 속성의 domain과 range | Professor ⊑ Researcher; advises는 Person에서 Person으로 이어진다 |
| OWL | 웹 온톨로지 언어(Web Ontology Language) | 논리적 구성자: ∃, ⊓, ⊔, ¬, ⊥, 속성 사슬, 카디널리티 | Professor ⊑ ∃advises.Student; Professor ⊓ Student ⊑ ⊥ |
RDFS — RDF 스키마(RDF Schema) — 는 유형(type)의 어휘를 더합니다: Professor와 Researcher가 클래스라는 것, 그중 하나가 rdfs:subClassOf를 통해 다른 하나의 하위 클래스라는 것, 그리고 속성 advises가 정의역(domain)과 치역(range) — 추론기가 그 주어와 목적어가 속한다고 추론할 클래스들 — 을 갖는다는 것을 선언할 수 있게 해 줍니다. 이 대목은 주의 깊게 읽어야 하는데, RDFS에 관한 가장 흔한 오해가 바로 여기서 나오기 때문입니다: 정의역과 치역은 검증 제약이 아니라 추론 규칙입니다. RDFS 의미론 아래에서, advises의 정의역이 Person으로 설정되어 있을 때 advises(alice, bob)을 단언하는 것은 alice가 Person이라는 새로운 사실을 함의합니다; 이는 제약을 위반했다고 데이터를 거부하거나 표시하는 일을 결코 하지 않습니다. 이는 이미 개념 계층 Professor ⊑ Researcher ⊑ Person을 포착하는데, 여기서 ⊑는 "~의 하위 클래스이다"로 읽습니다. 하지만 RDFS는 거기서 멈춥니다. 교수가 반드시 무언가를 지도해야 한다고 말할 수 없고, 두 클래스가 분리되어(disjoint) 있다고 말할 수 없으며, 어떤 관계를 다른 두 관계의 합성으로 정의할 수도 없습니다. OWL — 웹 온톨로지 언어(Web Ontology Language) — 는 바로 그 논리적 구성자들을 더하며 [3], 이로써 그래프는 단순한 기록이기를 멈추고 형식적 온톨로지(formal ontology) — 그 공리가 새로운 사실을 함의하는 이론 — 가 됩니다. 그 힘의 대가는 복잡성입니다 — OWL 2 DL에서의 추론은 결정 가능하지만 최악의 경우 이중 지수적(N2ExpTime-완전)인 반면, 우리 학계 세계가 살고 있는 OWL 2 EL 프로파일은 추론을 다항식적으로 유지하기 위해 일부 구성자를 포기합니다 [3] — 이 거래는 이후 EL 관련 장들이 현금화할 것입니다.
하나의 세계 위에 놓인 지식 스택: RDF는 모든 트리플에 전역 IRI를 부여하고, RDFS는 클래스와 하위 클래스 위계를 더하며, OWL은 학계 그래프를 표준 추론기라면 어떤 것이든 동일하게 분류할 수 있는 형식적 온톨로지로 바꾸는 논리적 구성자를 더합니다.
저자가 AI의 도움을 받아 직접 제작한 원본 도해.
그래프를 온톨로지로 바꾸는 네 가지 구성자
학계 세계에서는 네 개의 OWL 구성자가 거의 모든 무게를 짊어집니다. 각각을 그것이 표현하는 정확한 공리, 그리고 그 owlready2 표현과 함께 살펴봄으로써 추상적인 표기법과 실행 가능한 코드가 나란히 놓이도록 하겠습니다.
하위 클래스(Subclass). 이미 RDFS 안에 있는 가장 평범한 공리는 한 클래스가 다른 클래스 아래에 놓인다는 일반 개념 포함(general concept inclusion, GCI)입니다:
owlready2는 이름 붙은 하위 클래스를 평범한 파이썬 상속으로 표현합니다 — class Professor(Researcher)는 그 자체가 공리 Professor ⊑ Researcher입니다 (reasoners.py 50번째 줄).
존재 제한(Existential restriction). 진정으로 OWL다운 첫 번째 조치는 어떤 클래스가 주어진 종류의 무언가와 관계를 맺어야 한다고 요구하는 것입니다. 기호에 앞선 해독: "모든 교수는 학생인 것을 적어도 하나는 지도한다."
여기서 ∃는 "존재한다"로 읽으며, 는 "역할 을 통해 의 어떤 구성원과 관계 맺는다"는 존재 제한입니다. RDFS는 이를 진술할 수 없지만, OWL은 Professor.is_a.append(advises.some(Student))로 이를 할 수 있습니다 (reasoners.py 68번째 줄).
분리성(Disjointness). OWL은 또한 중첩을 금지할 수 있습니다. 바닥 개념 ⊥(비어 있는, 불가능한 클래스)를 사용해, 분리성은 공유된 구성원이 있다면 그것은 불가능해야 한다고 말합니다:
여기서 ⊓는 "그리고"(둘 다의 구성원)로 읽고, ⊥는 "아무것도 없음"으로 읽습니다. owlready2는 이를 AllDisjoint([Professor, Student])로 씁니다 (reasoners.py 73번째 줄). 이것이 제 몫을 톡톡히 해내는 공리입니다: 바로 이 공리 때문에 (교수이면서 학생이라고 선언되어) 일부러 망가뜨린 개념 TenuredStudent가 충족 불가능(unsatisfiable)한 것으로 드러납니다.
속성 사슬(Property chain). 마지막으로, OWL은 어떤 역할을 두 역할의 합성으로 정의할 수 있습니다 — 지난 장의 역할 사슬(role chain)이 이제 어엿한 공리가 된 것입니다:
여기서 ∘는 "~와 합성된"(먼저 첫 번째 역할을 따라간 다음 두 번째 역할을 따라간다)으로 읽습니다. owlready2는 이를 목표 속성에 붙입니다: grandAdvisor.property_chain.append(PropertyChain([advises, advises])) (reasoners.py 75번째 줄). 벌거벗은 그래프에서는 그저 따라가 볼 수밖에 없었던 두-홉 경로가, 이제는 추론기가 유도해 낼 엣지가 되었습니다.
OWL로 재구축된 열네 개의 공리
동반 코드는 build_ontology(reasoners.py 42–91번째 줄)에서 TBox(용어 상자, terminology box)의 열네 개 공리 전부를 owlready2로 공리 하나하나 그대로 재구축함으로써 이 대응이 충실하다는 것을 증명합니다. 이름 붙은 개념들이 먼저 나오고, 하위 클래스 공리들은 파이썬 클래스 구문에서 곧바로 떨어져 나옵니다 — 번호가 매겨진 각 주석은 그 줄을 ontology.TBOX의 공리로 다시 이어 줍니다 (reasoners.py 47–57번째 줄):
# Concept names (declared so the hierarchy is explicit).
class Person(Thing): pass
class Researcher(Person): pass # (3) Researcher ⊑ Person
class Professor(Researcher): pass # (1) Professor ⊑ Researcher
class Student(Researcher): pass # (2) Student ⊑ Researcher
class Paper(Thing): pass
class Institution(Thing): pass
class Topic(Thing): pass
class Dean(Professor): pass # (8) Dean ⊑ Professor
class TenuredStudent(Thing): pass
class TenuredStudentAdvisor(Thing): pass
모든 클래스는 Thing — 최상위 개념 ⊤(owl:Thing)에 대한 owlready2의 이름으로, 모든 개체가 속하는 클래스입니다 — 로부터 뻗어 나옵니다. 여섯 개의 역할도 마찬가지로 평이하게 선언되며, 각각 ObjectProperty(객체 속성, 즉 두 개체 사이의 관계; reasoners.py 60–65번째 줄)로 선언됩니다. RDFS가 표현할 수 없었던 논리적 공리들은 그런 다음 하나씩 덧붙여집니다 (reasoners.py 67–88번째 줄):
# (4) Professor ⊑ ∃advises.Student
Professor.is_a.append(advises.some(Student))
# (5) ∃advises.⊤ ⊑ Researcher
gca5 = GeneralClassAxiom(advises.some(Thing))
gca5.is_a.append(Researcher)
# (6) Professor ⊓ Student ⊑ ⊥ (disjointness)
AllDisjoint([Professor, Student])
# (7) advises ∘ advises ⊑ grandAdvisor
grandAdvisor.property_chain.append(PropertyChain([advises, advises]))
이 중 두 개는 OWL이 단순한 하위 클래스를 넘어서는 모습을 보여줍니다. 공리 (5) ∃advises.⊤ ⊑ Researcher("누구든 무언가를 지도하는 사람은 연구자이다")는 왼쪽에 복합 표현식을 갖고 있어서, 평범한 is_a로는 담아낼 수 없습니다; owlready2는 이를 GeneralClassAxiom으로 감쌉니다 — 왼쪽이 맨 이름이 아닌 GCI를 직접 인코딩한 것입니다. 같은 도구가 공리 (14) Person ⊓ ∃authored.Paper ⊑ Researcher도, 논리곱을 위한 owlready2의 &를 사용해 GeneralClassAxiom(Person & authored.some(Paper))(reasoners.py 87번째 줄)로 표현합니다. 정답의 원천을 실행하면 세계의 규모가 출력되며, OWL 빌드가 그대로 반영하는 것이 바로 이 열네 개의 공리입니다 (python3 ontology.py):
10 named concepts, 6 roles, 14 TBox axioms; ABox: 13 concept assertions, 18 role assertions over 13 individuals.
DL 표기법에서 OWL로: 사전
이 전체 번역은 표 하나에 담깁니다. 각 행은 교과서적인 서술 논리(description logic) 구성자와 그 의미, 동반 코드가 사용하는 OWL 2/owlready2 형태, 그리고 그것이 인코딩하는 학계-세계 공리로 이루어져 있습니다. 이것이 바로 이 권의 나머지 부분을 실제 코드에 비추어 읽어 내기 위한 로제타석(Rosetta stone)입니다.
| 교과서 DL | 의미 | OWL 2 / owlready2 형태 | 학계-세계 공리 |
|---|---|---|---|
| 하위 클래스 / GCI | class C(D) 또는 C.is_a.append(D) | Professor ⊑ Researcher | |
| 존재 제한 | r.some(C) | Professor ⊑ ∃advises.Student | |
| 논리곱(conjunction) | C & D | Person ⊓ ∃authored.Paper ⊑ Researcher | |
| 분리성 | AllDisjoint([C, D]) | Professor ⊓ Student ⊑ ⊥ | |
| 속성(역할) 사슬 | PropertyChain([r, s]) | advises ∘ advises ⊑ grandAdvisor | |
| , 은 복합 | 일반 개념 포함 | GeneralClassAxiom(L) | ∃advises.⊤ ⊑ Researcher |
| ⊤ / ⊥ | 최상위 개념 / 바닥 개념 | Thing / Nothing | Thing이 모든 클래스의 뿌리이다 |
이 표는 양방향으로 읽으십시오. 왼쪽에서 오른쪽으로 읽으면, 서술 논리의 한 조각을 실제 온톨로지 도구에서 어떻게 작성하는지를 말해 줍니다. 오른쪽에서 왼쪽으로 읽으면, SNOMED CT나 Gene Ontology를 포함한 어떤 OWL 온톨로지든 이 권의 추론기들이 실제로 작동하는 명료한 ⊑, ∃, ⊓ 표기법으로 다시 읽어 내는 법을 말해 줍니다. 표기법과 파일은 하나의 대상을 바라보는 두 가지 시각입니다.
표준화하는 이유: 하나의 파일, 여러 추론기
이 모든 것을 공유된 표준 위에 올려놓았을 때 얻는 보상은, 온톨로지가 더 이상 그것을 만든 프로그램에 용접되어 있지 않다는 것입니다. OWL을 구사하는 어떤 추론기든 같은 파일을 불러와 분류할 수 있습니다. 동반 코드는 가능한 가장 강력한 검사로 이를 입증합니다: 학계 세계를 owlready2로 재구축한 다음, 완전한 OWL 2 DL 추론기인 HermiT를 그 위에서 실행하고, HermiT가 추론한 계층과 충족 불가능한 클래스 집합이 처음부터 작성한 EL 완성(completion)과 항목별로 일치한다고 단언합니다 (reasoners.py 145–152번째 줄). HermiT는 OWL 2 EL의 진(眞)초집합인 OWL 2 DL을 결정하므로, 일치한다면 결정적입니다; EL에 특화된 ELK라도 이 EL++ 온톨로지에 대해 동일한 분류를 내놓을 것입니다. 커밋된 교차 검증 출력은 다음과 같습니다:
Reasoner (HermiT via owlready2) vs. from-scratch EL completion
from-scratch subsumptions : 8
HermiT subsumptions : 8
from-scratch unsatisfiable: ['TenuredStudent', 'TenuredStudentAdvisor']
HermiT unsatisfiable : ['TenuredStudent', 'TenuredStudentAdvisor']
subsumptions agree : True
unsatisfiable agree: True
AGREEMENT CONFIRMED — the from-scratch reasoner matches HermiT.
서로 독립적인 두 엔진 — 손으로 작성한 EL 완성과 산업용 OWL 2 DL 추론기 — 이 같은 열네 개의 공리를 읽고 동일한 결론에 도달합니다: 이름 붙은 개념들 사이의 여덟 개 포섭 관계, 그리고 충족 불가능하다고 표시된 같은 두 개념(TenuredStudent, TenuredStudentAdvisor) 말입니다. 그것이 바로 "표준"이 가져다주는 것입니다. 지식을 OWL로 단 한 번 작성해 두면, 서로 어떻게 작동하는지 알 필요조차 없는 교환 가능한 추론기, 편집기, 검증기의 생태계를 물려받게 됩니다.
아직 풀리지 않은 부분
이 층층 케이크는 매끄러워 보이지만, 그 안에는 균열선이 하나 있습니다. RDF는 완전한 자유를 위해 설계되었습니다 — 클래스 자신을 포함해 무엇이든 어떤 트리플의 주어가 될 수 있으므로, Professor를 마치 평범한 개체인 것처럼 다루며 그것에 관한 트리플을 쓸 수 있습니다. 이와 대조적으로 OWL의 논리적 구성자는 결정 가능성을 유지하기 위해 규율을 필요로 합니다: 클래스를 개체처럼 취급하도록 허용하고 그 둘을 자유롭게 섞는 순간(OWL Full이라 불리는 방언), 추론은 결정 불가능(undecidable)해집니다 — 어떤 알고리즘도 모든 온톨로지에 대해 종료를 보장받을 수 없습니다 [3]. 결정 가능한 논리를 되찾기 위해, OWL DL은 바로 그 제약 없는 RDF 패턴들을 금지하며, 클래스의 어휘와 개체의 어휘가 깔끔하게 분리된 채로 남아 있을 것을 요구합니다. 그러므로 정직한 한계는, 깔끔한 RDF → RDFS → OWL 스택이 맨 위에서는 공짜로 합성되지 않는다는 것입니다: 완전한 일반성과 결정 가능한 추론을 동시에 가질 수는 없으며, 진지한 온톨로지라면 모두 조용히 규율 있는 쪽을 선택합니다.
그리고 그 규율에는 이름이 있습니다. 스키마(어떤 클래스가 존재하고 그들이 어떻게 관계 맺는지)를 데이터(어떤 개체가 존재하고 그것이 무엇인지)로부터 떼어 놓는 것은 문체상의 취향이 아닙니다; 그것이 바로 전체 장치가 추론할 수 있게 만드는 것입니다. 우리의 열네 개 공리는 모두 스키마이고, 열세 개의 개념 단언과 열여덟 개의 역할 단언은 모두 데이터입니다. 다음 장은 그 구분에 정식 이름 — TBox와 ABox — 을 부여하고, 그 경계가 어째서 추론기의 힘이 실제로 나오는 곳인지를 보여 줍니다.
왜 중요한가
신경-기호(neuro-symbolic) 이후에 나오는 모든 것은 공유되고 기계가 읽을 수 있는 지식 형식을 전제로 하며, RDF 위의 OWL이 바로 그 형식입니다. 3권이 지식 그래프를 임베딩할 때, 그것이 임베딩하는 그래프는 RDF 그래프입니다; 이후의 하이브리드 시스템이 신경망 예측을 논리적 제약과 대조해 검사할 때, 그 제약은 OWL 공리로 작성됩니다. 표준화는 이 분야의 정확한 절반과 견고한 절반이 애초에 같은 대상을 가리킬 수 있게 해 주는 것입니다: 교수의 advises 엣지가 정리 증명기, 임베딩 모델, 검증기 모두에게 같은 것을 뜻하는 이유는 오직 IRI와 OWL 공리가 그것을 못박아 두었기 때문입니다. 이 장이 가르치는 가장 실용적인 단 하나의 습관은, SNOMED CT의 수십만 개 클래스나 Gene Ontology의 생물학적 계층을 포함한 어떤 온톨로지든, 규모만 키운 학계 세계에 지나지 않는 것으로 보는 것입니다: 이름을 위한 IRI, 계층을 위한 RDFS, 규칙을 위한 OWL 구성자, 그리고 이 모두를 읽어 내는 추론기.
핵심 용어
- RDF(자원 기술 프레임워크, Resource Description Framework) — W3C 표준 데이터 모델: 전역적으로 이름 붙은 트리플 의 집합으로서의 지식.
- IRI(국제화 자원 식별자, Internationalized Resource Identifier) — 웹의 주소 공간에서 가져온, 노드나 엣지를 위한 전역적으로 유일한 이름으로, 두 그래프가 의미에 합의할 수 있게 합니다.
- RDFS(RDF 스키마, RDF Schema) — 클래스,
rdfs:subClassOf, 그리고 속성의 정의역과 치역(데이터가 만족해야 할 제약이 아니라, 추론기가 어떤 속성이 잇는 것들의 유형을 추론하는 데 쓰는 규칙)을 더하는 층; 하위 클래스 위계에는 충분하지만 논리적 구성자에는 충분하지 않습니다. - OWL(웹 온톨로지 언어, Web Ontology Language) — 존재 제한, 논리곱, (⊥를 통한) 분리성, 속성 사슬을 더하는 층으로, 그래프를 함의를 지닌 형식적 온톨로지로 바꿉니다.
- 존재 제한 — "역할 을 통해 의 어떤 구성원과 관계 맺는다"; owlready2에서는
r.some(C), 예: Professor ⊑ ∃advises.Student. - 분리성(Disjointness) — , "그 무엇도 둘 다일 수 없다"; owlready2에서는
AllDisjoint([C, D])이며,TenuredStudent를 충족 불가능하게 만드는 공리입니다. - 속성(역할) 사슬(Property (role) chain) — ; owlready2에서는
PropertyChain([r, s])이며, 두-홉 경로를 유도 가능한 엣지로 바꿉니다(advises ∘ advises ⊑ grandAdvisor). - 일반 개념 포함(General concept inclusion, GCI) — 형태의 임의의 공리; 이 복합적일 때, owlready2는 이를
GeneralClassAxiom으로 인코딩합니다. - OWL DL 대 OWL Full — 클래스와 개체를 분리하는 규율 있고 결정 가능한 방언과, 그 둘을 섞도록 허용하는 완전히 일반적이고 결정 불가능한 방언.
이 장이 이끄는 곳
RDF는 세계에 이름을 붙였고, RDFS는 그것에 위계를 주었으며, OWL은 그것에 논리를 주었습니다 — 그러나 이 장은 아직 이름 붙이지 않은 하나의 구분으로 마무리되었습니다: 열네 개의 공리는 스키마이고, 서른한 개의 단언은 데이터이며, 이 둘을 떼어 놓는 것이 바로 추론을 결정 가능하게 만듭니다. 다음 장인 TBox와 ABox는 바로 그 구분 — 용어적 공리의 TBox와 단언적 사실의 ABox — 을 정식화하고, 추론기가 어떻게 하나를 사용해 다른 하나를 완결하는지를 보여 줍니다. 다시 한 번 같은 학계 세계이지만, 이번에는 모든 서술 논리 시스템이 그 둘레에 세워지는 이음매를 따라 잘려 있습니다.