セマンティックWEB の紹介

WEB上のデータの爆発で、検索困難になる状況を回避する次世代WEBの研究が行われている。

作戦としては、データに意味のネットワーク(オントロジー)情報を付加してネットに公開する(ネット公開は面倒になる)。

 

例:

X社はマザーボードにプロセッサを取り付けて売る会社だったとする。X社は、製造時にA社とB社のプロセッサを性能比較し、性能が同じなら安い方のプロセッサを購入する

(もちろん全自動で)。

A社、B社ともプロセッサをネット販売しているが、

A社は、会社名:ACPU:A2000Freq:3G

B社は、メーカ:BProcessor:B2Frequency:3000M

とか書いてある。

X社は、会社名=メーカ、CPU=ProcessorFreq=Frequency、1G=1000Mを判断しなくてはいけない。

これに対し、各社A,Bはオントロジーと製品データを公開し、X社はそれらのオントロジーから共通部分を定義するオントロジーを作成し、検索を行う。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Jena

Jenaとは、JavaRDFやオントロジー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:国と撮影対象(山、海、動物、植物)を与えると場所を出力するように、RDFOWLを修正せよ。

 

課題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の性質という意味。

(注意:このObjectClass-Objectのオブジェクトであり、主語、述語、目的語の目的語を表すObjectではない)

そのため、図で描くと述語(ノード間の関係)の所に書かれる。

(重要)Objectの性質なので、data.rdf(オブジェクトの表)のrdfファイルで参照される。

この定義で使われる、domainは関係矢印のお尻、rangeは矢の先端を示す。

 

このタイプでは、さらにプロパティの型を指定できる。今回の例では、

(1)TransitiveProperty:推移型、友達の友達は友達。

(2)FunctionalProperty:関数型、矢印の先は0個または1個しか指定できない。

 

==

写真検索オントロジー