セマンティックウェブの基礎としてのRDF
- セマンティックウェブの基礎としてのRDF
- 誰もが有益な情報を発信できる
- セマンティックウェブ設計の原則
- セマンティックウェブの技術階層
- RDF:リソース表現のモデル
- グラフによるモデル表現
- ストライピング:RDFのXML構文
- RDF/XMLのバリエーション
- 複数の文を連結したRDF
- 匿名ノードの利用
- 連結RDFのXML構文
- RDFスキーマによる語彙定義
- RDFスキーマでのクラス定義
- RDFスキーマでのプロパティ定義
- クラスのインスタンス
- ウェブオントロジーとOWL
- OWLの基本機能
- OWLクラス定義の概要
- OWLクラス定義の例
- クラスでのプロパティの制約
- OWLプロパティ定義の概要
- OWLプロパティの例
- インスタンスあるいは個体
- 人間・マシン双方向けのコンテンツ
セマンティックウェブの基礎としてのRDF
- 内容のあらまし
- マシンが意味を理解し、推論による情報探索や問題解決を行うセマンティックウェブの実現に向けて、W3Cを中心に活動が進められています。「誰もがあらゆることについて何でも発信できる」という世界を目指すための基本的な考え方と、それを実現する基礎技術としてのRDF、RDFスキーマ、OWLの概要を紹介します。
- 担当者
- 神崎正英(かんざきまさひで)
誰もが有益な情報を発信できる
- HTMLのウェブは人間が読んで理解
- The simpler, the better
- セマンティックウェブではマシンが理解
- URI、XML、RDF、オントロジーといった、正確な意味を厳密に記述する技術
- しかし、誰でも情報発信できること
- Anyone can say anything about anything
- HTMLベースのウェブが、誰もが簡単に発信できることで大きく発展したように、SWも「誰でも」が重要
- 人間だけでなく、マシンだけでもなく、その両方に向けたコンテンツこそが豊かな可能性を開く
セマンティックウェブ設計の原則
- Everything is URI identifiable
- すべてのものがURIによってグローバルに識別可能
- Partial information
- 部分的な情報からの推論(断片的な、不十分な発信でも有益)
- Web of trust
- 信頼度の低いウェブの情報を適切に利用する手段
- Evolution
- 分散した知識の統合や新しい情報の組み込みが可能
- Minimalist Design
- できるだけ制約を課さず、必要以上の標準化を求めない
セマンティックウェブの技術階層
一般に9階層の構造として考えられ、順次技術が開発されています
レイヤー | 役割 | 技術 | |
---|---|---|---|
Trust | コンテクスト、プルーフ、暗号化と電子署名により、エージェントが示した結果の信頼性を判断 | D-Sig, XML-Encを含む総合 | |
Proof | D-Sig 暗号 |
エージェントの処理の履歴、処理理由など、結果を導いた根拠を示す | (TBA) |
Logic | 一階述語論理などを用いた知識の記述と、それに基づくエージェントの処理 | KIF, N3(?) | |
Rule | 問い合わせ、フィルタリングを可能にする共通基盤としての論理の定義 | (RDQL, N3 ?) | |
Ontology | より精密な語彙の定義と、複数のスキーマの関係づけ・融合を可能にする推論 | OWL, DAML+OIL | |
RDF Schema | 語彙(クラス、プロパティ)を定義する手段の提供 | RDF Schema | |
RDF MS | 機械処理可能なメタデータの表現(データモデル) | RDF Model & Syntax | |
XML/Namespace | 処理が容易な記述言語(XML)と複数語彙の区別・混在を可能にするメカニズム(名前空間) | XML, XML-NS | |
URI/Unicode | リソースのグローバルな識別(URI)とグローバルなデータ表現(Unicode) | URI, Unicode |
RDF:リソース表現のモデル
- S - P - O のトリプルで関係を表現
- 古くからの「プロパティ:値」ペアに主語を追加
- 述語論理風にいえば P(S,O)の関係
- リソースはURIで参照
- 人間、場所、事象などすべてリソース
- プロパティもリソース(URIで表現)→マシン処理可能
- 名前空間URIと語彙(ローカル名)を連結
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- dc:creator → http://purl.org/dc/elements/1.1/creator
- 通常のXML名前空間の定義を超えた解釈
グラフによるモデル表現
- RDFの基本モデルは有向ラベルつきグラフ
- S、Oをノードとし、Pをアークとして連結
- リソースノードは楕円、リテラルは長方形で示す
- アークはS→Oの有向グラフで、Pをラベルとする
- RDFはさまざまな構文で表現可能
- XML構文はデータ交換用の標準形式
- 同じモデルを複数のXML構文で表現可能
- ほかにNotation3、N-Triplesなど別の構文も
ストライピング:RDFのXML構文
- XML構文はノードとアークのサンドイッチ
- ノードをrdf:Description要素で。URIはrdf:about
- 属性名も必ずRDFの名前空間接頭辞で修飾すること
- アークをノード要素の子要素として記述(プロパティ要素)
- リテラルの場合はプロパティ要素の内容(PCDATA)として記述
(例)
<rdf:Description rdf:about="urn:isbn:4-8399-0454-5"> <dc:publisher> <rdf:Description rdf:about="http://www.mycom.co.jp"> </rdf:Description> </dc:publisher> </rdf:Description>
- ノードをrdf:Description要素で。URIはrdf:about
RDF/XMLのバリエーション
- 目的語ノードをプロパティ要素の属性として記述
- URIをrdf:resource属性に記述する
(例)
<rdf:Description rdf:about="urn:isbn:4-8399-0454-5"> <dc:publisher
rdf:resource
="http://www.mycom.co.jp"/> </rdf:Description> - リテラルノードは主語要素にまとめられる
- プロパティを属性名としてリテラルをその値に
(例)
<rdf:Description rdf:about="urn:isbn:4-8399-0454-5"
dc:creator
="Masahide KANZAKI"/>
複数の文を連結したRDF
- 目的語ノードを主語として連結
- ノードから複数のアークが伸びてよい
匿名ノードの利用
- この本の作者は「神崎正英」?
- 本の作者はリテラルではない
- 本来は「この本には作者がいて、その名前は神崎正英」
- リソース自身ではなく、その属性に関心がある
- 匿名のノードを作って、そのプロパティを表現
- 作者についての複数のプロパティを表現できる
連結RDFのXML構文
- 基本はストライピング
(例)
<rdf:Description rdf:about="urn:isbn:4-8399-0454-5"> <dc:creator> <rdf:Description> <v:FN>Masahide KANZAKI</v:FN> <v:EMAIL>webmaster@kanzaki.com</v:EMAIL> </rdf:Description> </dc:creator> </rdf:Description>
- 匿名ノード要素はparseTypeを用いて省略可
(例)
<dc:creator
rdf:parseType="Resource"
> <v:FN>Masahide KANZAKI</v:FN> <v:EMAIL>webmaster@kanzaki.com</v:EMAIL> </dc:creator>
RDFスキーマによる語彙定義
- RDFスキーマの基本クラス
- rdfs:Resource:すべてのものはリソース
- rdfs:Class:クラス=基本的なものごとのカテゴリ
- rdf:Property:プロパティ=物事の性質、関係
- rdfs:Literal:文字列などのリテラル
- RDFスキーマの基本プロパティ
- あるクラスのインスタンスであることを示すrdf:type
- クラス、プロパティの派生関係を示すrdfs:subClassOf、rdfs:subPropertyOf
- プロパティの限定定義rdfs:range, rdfs:domain
- 人間に理解できる情報rdfs:label, rdfs:comment
RDFスキーマでのクラス定義
- rdf:typeでRDFスキーマのClassを指定
- 型付ノードで<rdfs:Class ...>としてもよい
- 基本的にはクラス階層を定義するだけ
- 上位クラスを継承するrdfs:subClassOf
- プロパティの定義はクラスに属さない(グローバルプロパティ)
- より詳細なクラスの定義はOWLなどのオントロジー言語で
(例)
<rdf:Description rdf:ID="Music"> <
rdf:type
rdf:resource="http://www.w3.org/...#Class"/> <rdfs:subClassOf
rdf:resource="#Performing_Arts"/> </rdf:Description> <rdfs:Class rdf:ID="Symphony"> <rdfs:subClassOf rdf:resource="#Music"/> </rdfs:Class>
RDFスキーマでのプロパティ定義
- プロパティはクラスに従属せず、グローバル
- OOP言語のクラスにおけるプロパティ定義と異なる概念
- 誰もが自由にプロパティを定義し、利用できる
- プロパティの継承、適用範囲の定義
- 上位プロパティを継承するrdfs:subPropertyOf
- 定義域(主語の範囲)を定義するrdfs:domain
- 値域(目的語の範囲)を定義するrdfs:range
(例)
<rdf:Property rdf:ID="composer"> <
rdfs:subPropertyOf
rdf:resource="http://purl.org/dc/elements/1.1/creator"/> <rdfs:domain
rdf:resource="#Music"/> <rdfs:range
rdf:resource="#Person"/> </rdf:Property>
クラスのインスタンス
- rdf:typeによる型指定
- 定義したクラスのインスタンスであることをrdf:typeによって示す
- 型付ノードの略記
- 多くの場合、クラス名を要素名として型付ノードで表現
(例)
<rdf:Description rdf:ID="KV550"> <rdf:type rdf:resource="#Symphony"/> <ex:composer>W.A.Mozart</ex:composer> </rdf:Description> <ex:Symphony rdf:ID="Hob.I-104"> <ex:composer>F.J.Haydn</ex:composer> </ex:Symphony>
ウェブオントロジーとOWL
- 中央集約でない語彙のネットワーク
- ウェブでは各地で独自の語彙定義が行われる
- これらを変更することなく、統合・発展させるメカニズム
- 継承関係、相互関係などに基づく簡単な推論
- W3Cによる標準化OWL
- DAML+OILをベースに2002年7月に草案
- 12月に勧告候補、2003年3月ごろに勧告案を目標
- 議論の様子から、まだ仕様はかなり変更される可能性が高い
OWLの基本機能
- 比較的シンプルなオントロジー
- 高機能な推論規則より、共有性、発展性、相互運用性
- 実装の容易なOWL Liteも提供(変更の可能性→Fast OWL ?)
- OWLの構成要素
- ヘッダ、クラス定義、プロパティ定義、インスタンス(個体)定義
- 対象領域をオブジェクトとデータタイプ値の2つに分割
- オブジェクト:URIで参照されるクラス
- データタイプ値:XML Schemaのデータタイプで定義される値
- データタイプ値の扱いは議論の最中
OWLクラス定義の概要
- スキーマとは異なるレイヤーとしてのClass
- owl:Class要素によるクラス定義
- クラス同士の関係
- rdfs:subClassOf, owl:disjointWith,
owl:sameClassAsowl:equivalentClass
- rdfs:subClassOf, owl:disjointWith,
- クラスの集合(論理組合せ)としての定義
- owl:intersectionOf, owl:unionOf, owl:complementOf
- クラス内でのプロパティの限定
- 限量子に相当するowl:allValuesFrom, owl:someValuesFrom
- DAMLではhasClass, toClass
- 出現回数を制約するcardinality
- 限量子に相当するowl:allValuesFrom, owl:someValuesFrom
OWLクラス定義の例
- クラス同士の関係
(講演当時のモデルでの例)
<owl:Class rdf:ID="Symphony"> <rdfs:subClassOf rdf:resource="#Music"/> <
rdf:resource="http://...#Sinfonie"/> </owl:Class>owl:sameClassAs
※
sameClassAs
は勧告時点ではequivalentClass
に変更されています。
- クラスの組み合わせ
(例)
<owl:Class rdf:ID="XHTML"> <
owl:intersectionOf
rdf:parseType="Collection
"> <owl:Class rdf:about="#XML"/> <owl:Class rdf:about="#HTML"/> </owl:intersectionOf> </owl:Class>
クラスでのプロパティの制約
- クラス内のowl:onRestriction要素
- 対象とするプロパティをowl:onProperty要素で指定
- グローバルなプロパティがこのクラス内で受ける制約を定義
- memberプロパティは、トリオならcardinality="3"、金管アンサンブルなら金管楽器奏者など、クラスに応じて使い分けられる
(講演当時のモデルでの例)
<owl:Class rdf:ID="StringQuartett"> <rdfs:subClassOf rdf:resource="#PerformingGroup"/> <rdfs:subClassOf> <
owl:Restriction
owl:cardiality
="4"owl:onProperty
rdf:resource="#member"/> <owl:allValuesFrom
rdf:resource="#StringsPlayer"/> </owl:Restriction> </rdfs:subClassOf> </owl:Class>
※勧告のモデルでは、cardiality
は属性ではなく、独立したRestriction
として記述することになりました。
OWLプロパティ定義の概要
- RDFSを用いた基本定義
- rdfs:subPropertyOf, rdfs:range, rdfs:domain
- プロパティ同士の関係
samePropertyAsequivalentProperty, inverseOf
- プロパティのタイプ
- TransitiveProperty, SymmetricProperty, FunctionalProperty, InverseFunctionalProperty
- ObjectProperty, DataProperty
- DataPropertyのrangeのあり方、InverseFunctionalPropertyになり得るかは議論の最中
OWLプロパティの例
- FunctionalProperty
- P(x,y)において、xについてただひとつのyしか対応しない
- maxCardinality="1"と同じ
(例)
<owl:FunctionalProperty rdf:ID="dateOfBirth"/>
- InverseFunctionalProperty
- P(x,y)において、yの値は特定のxにしか適用できない
- IDとして機能するプロパティ
(例)
<owl:InverseFunctionalProperty rdf:ID="mailBox"> <rdfs:range rdf:resource="#MailAddress"/> </owl:InverseFunctionalProperty>
インスタンスあるいは個体
- 通常のrdf:Description要素として記述
- rdf:type / 型付ノードで属するクラスを表現
- 他の個体との関係を示す
owl:sameIndividualAssameAs, owl:differentIndividualFrom - そのほか任意のプロパティ要素を記述
(講演当時のモデルでの例)
<rdf:Description rdf:ID="Lewis_Carroll"> <rdf:type rdf:resource="#Novelist"/> <owl:same
IndividualAs rdf:resource="#Charles_Dodgson"/> <ex:isAuthorOf rdf:resource="#Alice_in_Wonderland"/> </rdf:Description>
※sameIndividualAs
は勧告時点ではsameAs
に変更されています。
人間・マシン双方向けのコンテンツ
- 当分の間、ウェブ制作は人間向けが中心
- 視覚コンテンツと別にメタデータを提供、管理するのは困難
- XHTMLにメタデータを埋め込み、エージェントが抽出する
- XSLTによるデータ変換の応用
- XHTMLのmeta要素、link要素から文書メタデータを抽出
- class属性を一般化し、WordNetなどの汎用オントロジー(シソーラス)と結びつける
(例) <p class="Book"><span class="creator">夏目漱石</span>の『<cite class="title">明暗</cite>』を読んだ。</p>
↓
(例)
<wn:Book> <dc:creator>夏目漱石</dc:creator> <dc:title>明暗</dc:title> </wn:Book>