はじめに
オントロジーを概説する記事を投稿した。
では、実際どのような形式で表現されるだろうか。オントロジーを表現するデータ形式である Web Ontology Language (OWL) について、具体例を見ながら確認していく。
Web Ontology Language とは
Web Ontology Language(OWL)は、W3Cが策定したオントロジー記述のための言語である。RDF(Resource Description Framework)の上に構築されており、RDFが「主語 − 述語 − 目的語」のトリプルで事実(インスタンス)を表現するのに対し、OWLはその上にクラス階層・プロパティの性質・論理的な制約といった意味(セマンティック)を載せていく。
RDFS(RDF Schema)といったRDFを拡張し、語彙そのもの(クラスやプロパティ)を定義するための最小限の語彙を提供するものがあり、OWLはプロパティの数学的な性質や、クラス同士の集合論的な関係まで記述できるようにしたものである。
OWLは記述論理(Description Logic)を理論的な基盤として設計されている。知識を TBox(Terminological Box) と ABox(Assertional Box) という2つの層に分けて捉える、という考え方があり、TBoxで定義された規則(公理)を、ABoxの個々の事実に適用することで、ABoxには明示的に書かれていない新しい事実を導出する。
推論エンジン・推論器と呼ばれるソフトウェア(HermiT・Pellet・Stardogの内蔵リーズナーなど)は、この記述論理の計算手続きを実装したものである。OWLファイルを読み込んでクラス階層を自動的に補完したり、矛盾を検出したりできるのは、背後でこの記述論理のアルゴリズムが動いているからである。
具体例 - Pokémon Ontology
具体例として、pokemon-kg/ontology(公開名前空間 https://pokemonkg.org/ontology# , prefix: poke)を取り上げる。ポケモンというゲーム・アニメの世界観を、種族の分類・進化・タイプといった生物学的特徴から、地域やジムといった地理、トレーナーという人物、アイテムや技の習得方法まで含めて体系的にモデリングしたオントロジーである。
このリポジトリで公開されているのは語彙の定義、つまりTBoxのみである。実際のポケモン種族データ(ABox)はオントロジー本体には含まれておらず、利用者がこの語彙を使って別途用意する形になっている。
Protégéといったスタンフォード大学が開発したオントロジーエディタで、メトリクスを確認できる。クラス定義は30個以上あり、オブジェクトプロパティは19個、データプロパティは11個と定義されている。DL表現力はSRIF(D)であった。
クラス定義を確認すると、以下のようになる。
オブジェクトプロパティの定義は以下のようになる。evolvesFrom・evolvesTo などもここに含まれており、ドメイン(domain)とレンジ(range)がどのクラスに紐づいているかが一覧できる。
このオントロジーは、Species(種族)と Pokémon(個体)で分離していることが1つの特徴であると考えられる。
:Species rdf:type owl:Class ;
rdfs:isDefinedBy <https://pokemonkg.org/ontology> .
:Pokémon rdf:type owl:Class ;
rdfs:isDefinedBy <https://pokemonkg.org/ontology> .
「フシギダネ」という種族(Species)と、プレイヤーが手持ちに加えた1匹の個体としてのフシギダネ(Pokémon)は本来別物である。evolvesFrom・evolvesTo・hasGenus・foundIn などはすべて Species を domain/range に取り、図鑑的・分類学的な知識を表現する役割を担っている。
:evolvesFrom rdf:type owl:ObjectProperty ;
rdfs:domain :Species ;
rdfs:range :Species .
:foundIn rdf:type owl:ObjectProperty ;
rdfs:domain :Species ;
rdfs:range :Habitat .
このように「種としての知識」と「個体としての知識」を異なるクラスの責務として切り分けることで、「フシギダネ(種族)は何に進化するか」という問いと「この1匹(個体)のレベルはいくつか」という問いを、混同せず別々に扱えるようになっていると考えられる。
リポジトリのREADME.mdには、この設計の妥当性を検証するための Competency Question(評価のための問い) が明示的に列挙されている。一部を引用すると以下のような問いが並ぶ。
- ある種族はどの種族に進化するか、あるいはどの種族から進化するか
- あるポケモンはどんな能力を持つか、どのタイプに弱いか
- ある種族はどの地方・どの生息環境(草むら・水辺など)で見られるか
- あるトレーナーやジムリーダーはどんなポケモンを得意とするか
このオントロジーは、データをどう持つかではなく「将来どんな問いに答えさせたいか」を先に定義し、そこから逆算してクラスとプロパティを設計していると考えられる。Species と Pokémon を分けたのも、evolvesFrom / evolvesTo を逆プロパティにしたのも、すべて「進化の経路を双方向に辿れるようにしたい」という具体的な問いから導かれた設計判断だと考えられる。
おわりに
Web Ontology Language は RDF で記述された事実に意味を与え、矛盾の検出や新しい事実の導出といった推論を可能にする。
具体例として pokemon-kg/ontology を確認した。いくつものクラス・プロパティ定義があり、それに基づいて、問いに対して表現可能なデータを定義できるよう設計されていると考えられる。
ここでは一例のみ確認したが、他にも Web Ontology Language で記述されたオントロジーがあるので、気になる方は探してみてほしい。


