第3章: セマンティックWebと知識グラフ ─ RDF/OWL/SPARQL から GQL まで
第2章で計算機科学のオントロジーの抽象を見た。本章では 「実際にどうやって書いて、どうやって動かすか」 ─ つまり技術スタックを地図にする。具体的には:
- W3C のセマンティックWebスタック(RDF / RDFS / OWL / SPARQL / SHACL)
- Property Graph vs RDF(Neo4j 系と Stardog 系の対立軸)
- GQL ISO/IEC 39075:2024(SQL以来 37年ぶりの新 ISO データベース言語)
- 主要な知識グラフ(Wikidata、Schema.org、Google KG)
- 「セマンティックWebは死んだ」言説の真実
W3C セマンティックWebスタック(Layer Cake)
Tim Berners-Lee が描いたとされる、有名な階層図がある。「Semantic Web Layer Cake」と呼ばれる。
graph BT
URI[URI / IRI<br/>識別子]
XML[XML / Unicode<br/>シンタックス]
RDF[RDF<br/>データモデル<br/>Subject-Predicate-Object]
RDFS[RDFS<br/>軽量スキーマ]
OWL[OWL<br/>記述論理ベースのオントロジー言語]
SPARQL[SPARQL<br/>クエリ言語]
SHACL[SHACL<br/>バリデーション]
Logic[Rules / Logic / Proof / Trust]
URI --> XML
XML --> RDF
RDF --> RDFS
RDFS --> OWL
OWL --> SPARQL
OWL --> SHACL
SPARQL --> Logic
SHACL --> Logic
style RDF fill:#1a2030,stroke:#ff4d6d
style OWL fill:#1a2030,stroke:#b794f4
style SPARQL fill:#1a2030,stroke:#4cc9f0
style SHACL fill:#1a2030,stroke:#00d9c0
下から上に向かって、データ → 構造 → 意味 → クエリ → 推論 が積み上がる。順に見ていく。
RDF ─ 全ての知識を Triple で表す
Resource Description Framework。すべての知識を「Subject-Predicate-Object」の3つ組(triple)で表現する。
graph LR
S[Subject<br/>John] -->|Predicate<br/>worksFor| O[Object<br/>Anthropic]
S2[Subject<br/>John] -->|Predicate<br/>hasAge| O2[Object<br/>30]
style S fill:#1a2030,stroke:#ff4d6d
style S2 fill:#1a2030,stroke:#ff4d6d
style O fill:#1a2030,stroke:#4cc9f0
style O2 fill:#1a2030,stroke:#4cc9f0
シンプルだが、この単位で全ての知識を表現できるのが強み。
シリアライゼーション形式
| 形式 | 特徴 | 例 |
|---|---|---|
| N-Triples | 1行1トリプル、最も簡素 | <...John> <...worksFor> <...Anthropic> . |
| Turtle | 簡略記法、人間に読みやすい | ex:John ex:worksFor ex:Anthropic . |
| RDF/XML | XML 表現、古典的 | <rdf:Description ...>...</rdf:Description> |
| JSON-LD | JSON 互換、Web で主流 | { "@id": "John", "worksFor": "Anthropic" } |
JSON-LD は Schema.org マークアップの 70% を占める主流形式。RDF と聞くと XML を連想して身構える人が多いが、実装はずっと身近になっている。
Turtle のミニサンプル
@prefix ex: <http://example.org/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
ex:John rdf:type ex:Person ;
ex:hasName "John" ;
ex:hasAge "30"^^xsd:integer ;
ex:worksFor ex:Anthropic .
ex:Anthropic rdf:type ex:Organization ;
ex:hasName "Anthropic" .
セミコロン ; で同じ subject の複数 triple を続けられる。これだけで「John は 30歳の Person で、Anthropic という Organization で働く」が表現できる。
RDFS ─ 軽量スキーマ
RDF Schema。RDF に最低限の語彙(クラス階層、プロパティ階層)を追加する。
ex:Person rdf:type rdfs:Class .
ex:Father rdf:type rdfs:Class ;
rdfs:subClassOf ex:Person .
ex:hasFather rdf:type rdf:Property ;
rdfs:domain ex:Person ;
rdfs:range ex:Father .
| RDFS の語彙 | 意味 |
|---|---|
rdfs:Class | クラスである |
rdfs:subClassOf | 親クラスを指定 |
rdfs:subPropertyOf | 親プロパティを指定 |
rdfs:domain | プロパティの主語側のクラス |
rdfs:range | プロパティの目的語側のクラス |
これだけで「Father は Person のサブクラス」のような階層が機械可読になる。
OWL ─ 表現力豊かなオントロジー言語
Web Ontology Language。Description Logic(記述論理)に基づく、推論可能なオントロジー言語。
OWL は表現力と決定可能性のトレードオフで、3階層に分かれる:
graph TB
OWL[OWL]
OWL --> Full[OWL Full<br/>表現力最大<br/>決定不能]
OWL --> DL[OWL DL<br/>記述論理 SHOIN(D)<br/>実用的・決定可能]
OWL --> Lite[OWL Lite<br/>軽量だが採用低調]
DL --> Reasoners[実用推論器:<br/>Pellet / HermiT / ELK]
Lite --> Profiles[現代は OWL 2 EL/QL/RL を使用]
style Full fill:#1a2030,stroke:#ff4d6d
style DL fill:#1a2030,stroke:#4cc9f0
style Lite fill:#1a2030,stroke:#7c8db5
OWL DL の主な機能
- Class Restriction:「Person は Father を高々1人持つ」
- Equivalent Class:「Mother ≡ Person ⊓ ∃hasChild.Person ⊓ Female」
- Property Chain:「parentOf ⊕ siblingOf → uncleOrAuntOf」
- Disjoint Class:「Male と Female は互いに排他」
これらを組み合わせると、推論器が新しい知識を導出できる。
# ex:Mary が Female で、ex:Tom の母親
ex:Mary rdf:type ex:Female ;
ex:hasChild ex:Tom .
# OWL DL に "Mother ≡ Female ⊓ ∃hasChild.Person" と書いてあれば、
# 推論器が自動的に:
# ex:Mary rdf:type ex:Mother .
# を導出する
OWL の現実
OWL は強力だが「重い・難しい」と言われる:
- DL の表現力を使いこなすには論理学の素養が必要
- 大規模な KG では推論コストが高い
- メンテナンスが続かない
→ 2010年代以降、OWL の使用は医療・ライフサイエンス・規制業界に集中し、Web 全体への普及は失速した。これが「セマンティックWeb失速」の核心。
SPARQL ─ RDF のクエリ言語
RDF に対する SQL 相当のクエリ言語。4種類の問いがある。
| 形式 | 用途 | SQL 類比 |
|---|---|---|
| SELECT | 表形式の結果 | SELECT |
| CONSTRUCT | 新しい RDF グラフを生成 | INSERT INTO ... SELECT |
| ASK | 真偽を返す | SELECT EXISTS |
| DESCRIBE | あるリソースの全情報 | (独自) |
SELECT の例
PREFIX ex: <http://example.org/>
SELECT ?name ?age WHERE {
?person rdf:type ex:Person ;
ex:hasName ?name ;
ex:hasAge ?age .
FILTER (?age > 25)
}
ORDER BY ?age
?name ?age のような変数が入った triple パターンでマッチング、FILTER で絞り込み、ORDER BY でソート ─ SQL 経験者には類推しやすい。
CONSTRUCT の例
新しいグラフを作るのが特徴的:
CONSTRUCT {
?person ex:isAdult true .
}
WHERE {
?person ex:hasAge ?age .
FILTER (?age >= 18)
}
これが「SPARQL は単なるクエリではなくグラフ変換言語」と言われる所以。
SHACL ─ バリデーション標準
Shapes Constraint Language(W3C 2017)。RDF グラフにバリデーションを加える。
# Shapes graph: 制約定義
ex:PersonShape a sh:NodeShape ;
sh:targetClass ex:Person ;
sh:property [
sh:path ex:hasName ;
sh:datatype xsd:string ;
sh:minCount 1 ;
sh:maxCount 1 ;
] ;
sh:property [
sh:path ex:hasAge ;
sh:datatype xsd:integer ;
sh:minInclusive 0 ;
] .
これに対して Data graph(検証対象の RDF)を渡すと、違反箇所と Severity(Violation / Warning / Info)が返ってくる。JSON Schema や Pydantic に近い感覚でデータ品質を担保できる。
主要 RDF ベンダ(AllegroGraph / Stardog / GraphDB / TopQuadrant)がサポート。
Property Graph vs RDF ─ 双子の系譜
知識グラフの実装には大きく2系統ある。
graph TB
KG[知識グラフ実装]
KG --> PG[Property Graph<br/>LPG]
KG --> RDF[RDF / Triple]
PG --> Neo4j[Neo4j]
PG --> TG[TigerGraph]
PG --> Memgraph[Memgraph]
PG --> Neptune[Amazon Neptune]
RDF --> Stardog[Stardog]
RDF --> GraphDB[Ontotext GraphDB]
RDF --> AG[AllegroGraph]
RDF --> Jena[Apache Jena Fuseki]
style PG fill:#1a2030,stroke:#ff4d6d
style RDF fill:#1a2030,stroke:#4cc9f0
| 観点 | Property Graph (LPG) | RDF / Triple |
|---|---|---|
| 単位 | ノード + エッジに任意の key-value プロパティ | Triple (S-P-O) 一律 |
| エッジ自体への属性 | 直接付与可(since: 2020 など) | 不可(reification が必要) |
| 標準化 | ベンダーロックイン気味 → GQL 統一中 | W3C 準拠で相互運用容易 |
| クエリ言語 | Cypher → GQL(ISO 標準) | SPARQL |
| 推論 | 弱い(外部実装に依存) | OWL Reasoner で強力 |
| 主用途 | アプリ開発・グラフトラバーサル | 知識統合・推論・セマンティック相互運用 |
どちらを選ぶか
flowchart TB
Q[要件] --> Q1{多ホップ推論?}
Q1 -- Yes --> Q2{規制ドメイン<br/>(医療/金融)?}
Q1 -- No --> PG2[Property Graph<br/>Neo4j / Memgraph]
Q2 -- Yes --> RDF2[RDF + OWL<br/>Stardog / GraphDB]
Q2 -- No --> Q3{OSS / コミュニティ?}
Q3 -- 強重視 --> Apache[Apache Jena]
Q3 -- バランス --> RDF2
Q --> Q4{アプリ統合中心?}
Q4 -- Yes --> PG2
ざっくり言えば:
- アプリの中で graph traversal をやりたい → Property Graph(Neo4j 系)
- 知識統合 + 推論 + W3C 標準準拠 → RDF/Triple(Stardog 系)
- 両方欲しい → マルチモデル(Amazon Neptune、ArangoDB)
GQL ─ SQL 以来37年ぶりの ISO 標準
ISO/IEC 39075:2024(2024-04-12 公開)。Property Graph 側のクエリ言語の標準化。
| 項目 | 内容 |
|---|---|
| 制定 | 2024-04-12 |
| 系譜 | Cypher(Neo4j)/ PGQL(Oracle)/ G-CORE(学術)の統一 |
| 構文 | SQL 構文を踏襲しつつ Cypher の MATCH / RETURN を採用 |
| 意義 | SQL(1987 ISO)以来 37 年ぶりの新 ISO データベース言語 |
| 採用 | Neo4j、TigerGraph、Memgraph、Microsoft Fabric、Amazon Neptune |
GQL の登場で「Property Graph も標準化された安心感のあるエコシステム」になった。これは知識グラフ業界全体のターニングポイント。
知識グラフ ─ オントロジーを満たすデータ
ここまで来ると、「オントロジーと知識グラフの違い」を整理できる:
「オントロジーはスキーマ、知識グラフはデータ」
graph LR
Onto[オントロジー<br/>スキーマ・公理] -->|定義する| KG[(知識グラフ<br/>インスタンス・トリプル)]
KG --> Reasoner[推論器]
Onto --> Reasoner
Reasoner --> NewKG[(導出された<br/>新しい知識)]
style Onto fill:#1a2030,stroke:#b794f4
style KG fill:#1a2030,stroke:#4cc9f0
主要な知識グラフ
| KG | 規模 | 用途 |
|---|---|---|
| Google Knowledge Graph(2012-、元 Freebase) | 数十億エンティティ | 検索結果のサイドパネル |
| Wikidata | 約 1 億アイテム | Wikipedia の構造化データ基盤、OSS |
| DBpedia | 約 4 億トリプル | Wikipedia から RDF 抽出 |
| Schema.org | 単一の語彙 | Web の構造化データ(全Webの 12.4%) |
| Wolfram Knowledgebase | 専門知識 | Wolfram Alpha のバックエンド |
| Amazon Product Graph | 数十億エンティティ | 商品レコメンド |
「セマンティックWebは死んだ」の真実
2010年代後半に広まった「セマンティックWebは死んだ」言説。これは半分正しく、半分誤りだ。
| 死んだ部分 | 生きている部分 |
|---|---|
| 「Web 全体が機械可読セマンティクスで覆われる」夢 | Schema.org(全Webの 12.4%) |
| 大規模な OWL Full ベースのウェブ推論 | エンタープライズ知識グラフ(Palantir / Stardog) |
| 一般人が手動で RDF を書く未来 | Wikidata(5億超のエディット) |
| LLM 時代の GraphRAG(第7章) |
つまり「Web 全体を覆う」という最大野望は失速したが、ドメイン特化と LLM 時代の再注目で技術自体は健在 ─ という整理が正確だ。
歴史年表(再掲)
timeline
title セマンティックWeb / 知識グラフの歴史
1984 : Cyc プロジェクト開始
1993 : Gruber Ontolingua + 単独定義
1998 : Studer ら定義拡張
2001 : Berners-Lee Semantic Web ビジョン
2004 : OWL 1 / RDF W3C 勧告
2008 : SPARQL 1.0
2009 : OWL 2
2012 : Google Knowledge Graph
2017 : SHACL W3C 勧告
2024-04 : ISO/IEC 39075:2024 GQL 制定
2024-04 : Microsoft GraphRAG 論文
2025-09 : Open Semantic Interchange 立ち上げ
本章の要点
| # | 要点 |
|---|---|
| 1 | W3C セマンティックWebスタックは URI/XML → RDF → RDFS → OWL → SPARQL/SHACL の階層 |
| 2 | RDF は Triple(S-P-O)でデータを表現。シリアライゼーションは JSON-LD が主流(Schema.org の 70%) |
| 3 | OWL は記述論理ベース。OWL Full は決定不能、実務は OWL DL や OWL 2 EL/QL/RL profile |
| 4 | SPARQL は SELECT / CONSTRUCT / ASK / DESCRIBE の4種、CONSTRUCT が「グラフ変換」の鍵 |
| 5 | SHACL(W3C 2017)は JSON Schema の RDF 版。データ品質担保に必須 |
| 6 | 知識グラフ実装は Property Graph(Neo4j 系)vs RDF(Stardog 系) の二系統。アプリ統合 vs 知識統合・推論 |
| 7 | **GQL(ISO/IEC 39075:2024)**は SQL 以来 37年ぶりの ISO データベース言語 |
| 8 | 「オントロジーはスキーマ、知識グラフはデータ」 |
| 9 | 「セマンティックWebは死んだ」は半分正しく半分誤り:Web 全体は失速したが Schema.org / Wikidata / エンタープライズ KG / GraphRAG で技術自体は健在 |
効いている根本原理
本章は 原理1(共通言語) と 原理3(構造 → 推論) を技術スタックに落とした章だった。RDF triple、OWL Reasoner、SPARQL、SHACL、Property Graph、GQL ─ すべて「世界の構造を共通言語で記述し、そこから何かを導出する」ための道具。
ここまでで第1部「オントロジーとは何か」は完了だ。次の第2部から、現代のオントロジー基盤として Palantir Foundry に焦点を当て、「digital twin としてのオントロジー」を見ていく。