オントロジー構築で最もありがちな失敗は、「最初からすべての概念を網羅しようとして巨大化し、使われないオントロジーを作ってしまうこと」です(オントロジーの肥大化・死活化)。
これを防ぐのが、スタンフォード大学の設計手法(Ontology Development 101)でも推奨されるコンピテンシー・クエスチョン(Competency Questions, CQ)です。
例えば、社内のシステム統合・障害影響分析用のナレッジグラフを作るとします。
CQを文法分解(名詞=クラス/属性、動詞/助詞=関係性)することで、必要なモデルが自然と浮かび上がります。
| 要素タイプ | 抽出された要素(URI / ラベル) | 説明 |
|---|---|---|
| クラス (Class) | :Server, :BusinessService, :Department, :Employee, :Vendor |
ドメイン内の独立した「概念・モノ」 |
| 関係性 (Object Property) |
:hostsService (Server → BusinessService):managedBy (BusinessService → Department):belongsTo (Employee → Department):suppliedBy (Server → Vendor)
|
エンティティとエンティティを結ぶエッジ(グラフの結合線) |
| 属性 (Data Property) |
:ipAddress (xsd:string):contractEndDate (xsd:date):email (xsd:string)
|
エンティティが持つ具体的な値(文字列・日付・数値など) |
これらをRDF標準のトリプル(主語 - 述語 - 目的語)として記述すると、以下のようになります。
@prefix : <https://example.org/enterprise/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
# インスタンスデータの例 (ABox)
:Srv-Database-01 a :Server ;
:ipAddress "192.168.10.5" ;
:hostsService :PaymentService ;
:suppliedBy :VendorOracle .
:PaymentService a :BusinessService ;
:serviceName "決済ゲートウェイ" ;
:managedBy :PaymentTeam .
:Alice a :Employee ;
:email "alice@example.com" ;
:belongsTo :PaymentTeam .
:Srv-Database-01 が落ちた」というイベントが発生したとき、グラフを2ホップ・3ホップ辿るだけでSrv-Database-01 → :PaymentService → :PaymentTeam ← :Alice問: 「CQ: 従業員Aが保有する認定スキル(Python等)と、現在参画しているプロジェクトPで要求される必須スキルの一致度を調べたい」という要件に対し、オントロジーの要素設計として最も不適切な(誤った)組み合わせはどれでしょうか?
設計の基本が掴めたら、次はRDF/OWLでのクラス階層とプロパティ特性(推移関係・逆関係などによる推論)を学びます。
参照: 用語リファレンス