セマンティックWEB の紹介
WEB上のデータの爆発で、検索困難になる状況を回避する次世代WEBの研究が行われている。
作戦としては、データに意味のネットワーク(オントロジー)情報を付加してネットに公開する(ネット公開は面倒になる)。
例:
X社はマザーボードにプロセッサを取り付けて売る会社だったとする。X社は、製造時にA社とB社のプロセッサを性能比較し、性能が同じなら安い方のプロセッサを購入する
(もちろん全自動で)。
A社、B社ともプロセッサをネット販売しているが、
A社は、会社名:A、CPU:A2000、Freq:3G。
B社は、メーカ:B、Processor:B2、Frequency:3000M。
とか書いてある。
X社は、会社名=メーカ、CPU=Processor、Freq=Frequency、1G=1000Mを判断しなくてはいけない。
これに対し、各社A,Bはオントロジーと製品データを公開し、X社はそれらのオントロジーから共通部分を定義するオントロジーを作成し、検索を行う。
Jenaとは、JavaにRDFやオントロジーOWLを扱うAPIを加えたもので3つの機能を持つ。
(1) 概念のネットワーク(概念の木構造)から、RDFファイルを作る。
(2) RDFに関してMySQLの様な検索クエリーを出せる。検索エンジンARQと呼ばれる。
(3) OWLに関する推論を実行する。推論とはRDFに陽に書かれていない情報までも、RDFネットを辿って探しだす。
今回は、この(3)のデモを行う。
Exampleプログラム(写真検索)
動機:沢山の写真を撮ってPCに格納しておくと、後で探すのが大変。
概要:写真をPCにしまう時、簡単な情報(年、季節、国、場所、対象<山、海、動物、植物>)を書き込んでおいて、
検索は、アメリカの山の写真、とかヨーロッパで撮った動物の写真、とか2000年の秋に日本で撮った写真、などに対してリストをプリントする。
Photo.javaの構成
今回の状況設定:撮影は2008年の春と秋、場所はハワイで海を、ロッキー山脈で山を、上野で動物を、小石川で植物を撮影します。
==
Photo.javaの構造
課題1:プログラムを理解し、述語部と目的語部が与えられた時主語を求める関数
printModelWithPredicateObject()と、
主語部と目的語部が与えられた時述語部を求める関数
printModelWithSubjectObject()を作れ。
課題2:国と撮影対象(山、海、動物、植物)を与えると場所を出力するように、RDFとOWLを修正せよ。
課題3:撮影年と季節を与えると、写真ファイルを出力するようにせよ。
RDFの読み方
(A)基本は、三つ組(トリプル:主語、述語、目的語)で2ノード間の関係を示す。
例: 正式には三つ組なので次のように書くべきだが、
<rdf:Description rdf:about=”subject”>
<predicate>
<rdf:Description rdf:about=”object”
</rdf: Description >
</predicate>
</rdf: Description >
RDFでは次の様に省略形で書ける
<rdf:Description rdf: about=”subject”>
<predicate> “object” < /predicate>
</rdf:Description>
さらに簡単に、次の様に省略できる
<rdf:Description rdf: about=”subject”>
<predicate rdf:resource= “object” />
</rdf:Description>
(B)もう少し複雑な関係は次のように書く
<rdf:Description rdf:about=”&h;Ueno”>
<rdf:type rdf:resource=”Place”/>
<rdf:BeMemberOf rdf:resource=”&;Japan”/>
<Number rdf:datatype=”positiveinteger”>11</h:Number>
</Description>
は、
上のRDFデータを読むヒント
(1) RDF属性
(1) rdf:about:ノードにグローバルな名前を付ける(主語を定義する)
(2) rdf:resource は目的語であることを示す
(3) rdf:datatype は値のデータタイプを示す。
(2) />で終わっているものは端末であることを示す。
(3) 図の2重四角はOWLの方で定義されている。(とりあえずは無視して)
==
OWL(オントロジー言語)の読み方
3つのタイプがある。
(1) owl:Class: オブジェクトが出来るもの(まさにJavaのクラスに相当)。
例えばowl:Class CountryにはJapanとかUSAのようなオブジェクトができる。
(2) owl:DataTypeProperty:整数とか負数とかデータのタイプを定義
(3) owl:ObjectProperty:クラス間の関係を定義する。Objectの性質という意味。
(注意:このObjectはClass-Objectのオブジェクトであり、主語、述語、目的語の目的語を表すObjectではない)
そのため、図で描くと述語(ノード間の関係)の所に書かれる。
(重要)Objectの性質なので、data.rdf(オブジェクトの表)のrdfファイルで参照される。
この定義で使われる、domainは関係矢印のお尻、rangeは矢の先端を示す。
このタイプでは、さらにプロパティの型を指定できる。今回の例では、
(1)TransitiveProperty:推移型、友達の友達は友達。
(2)FunctionalProperty:関数型、矢印の先は0個または1個しか指定できない。
==
写真検索オントロジー