W3Cのメンバー提案という形で新OWL作業部会で検討されてきたOWL 1.1の3仕様(構造仕様および関数型構文、モデル理論セマンティクス、RDFグラフへのマッピング)の最初の草案が1月8日付でW3Cから公開された。OWL 1.0との後方互換性を維持しつつ、それ以降の記述論理分野の進展を取り込み、かつOWL 1.0の実装経験から得られた改良が盛り込まれており、関係者の期待は高い。
エンティティの型と名前
OWL 1.0と1.1の大きな違いは、前者は構文からエンティティの型(クラス、オブジェクトプロパティなど)を特定できなかったのに対し、後者は型を明示する構文を導入したこと。たとえば、OWL 1.0で「P rdfs:range X
」と記述しても、P
がオブジェクトプロパティなのかデータ型プロパティなのか、X
がクラスなのかデータ型なのかは分からなかったわけだが、OWL 1.1では「P owl11:objectPropertyRange X
」のように記述することで、構文からP
がオブジェクトプロパティ、X
がクラスであることがはっきり分かるようにする。
これにより、アプリケーションの処理がすっきりするだけでなく、OWL 1.0の「ひとつの名前はクラス、プロパティ、個体のいずれかにしか使えない」という制約が取り払われる。この制約は、OWL 1.0においてクラス同士の関係を記述するメタモデリングを難しくしていた。たとえば「ベーシストはコントラバスを弾く」という一般的関係を表現したいとき、それぞれをクラスとプロパティとして
(例)
#Turtle/N3で記述。a はrdf:typeの省略形 ex:Bassist a owl:Class . ex:Contrabass a owl:Class . ex:plays a owl:ObjectProperty .
と定義した上で、「ex:Bassist ex:plays ex:Contrabass .
」と書くことは、OWL 1.0ではできない*1。オブジェクトプロパティは個体同士を関連付けるものなので、ex:Bassist
、ex:Contrabass
がクラスであるという定義と矛盾してしまうからだ。OWL 1.1では、2つのクラス名を個体名と読み替えることで、この記述が可能になる。punningと呼ばれるこの機能によって、メタモデリングを導入することができるわけだ。
*1:OWL 1.0(DL/Lite)でこの関係を記述するには、クラスのプロパティ制約を使うことになる。なお、OWL Fullなら何でもありなので、この制約もない。
プロパティの型付回数制約
OWL 1.0でのクラスのプロパティ制約は、目的語クラスの型を指定するか、プロパティの出現回数を指定するかのどちらかだけで、両方を同時に記述することができない。たとえば、弦楽四重奏団を定義するために、
(例)
ex:StringQuartetEnsemble a owl:Class; rdfs:subClassOf [ a owl:Restriction; owl:onProperty ex:member; owl:allValuesFrom ex:StringPlayer ]; rdfs:subClassOf [ a owl:Restriction; owl:onProperty ex:member; owl:cardinality "4"^^xsd:nonNegativeInteger ].
と書いて、「メンバー4人全員が弦楽器奏者」とすることはできるが、「バイオリン奏者2人とビオラ奏者1人とチェロ奏者1人」という記述はできない。目的語の型に応じて回数制約を変えることができないからだ。OWL 1.1ではqualified cardinalityと呼ばれる型付回数制約が可能になり、次のような記述ができる。
(例)
ex:StringQuartetEnsemble a owl:Class;
rdfs:subClassOf [
a owl:Restriction;
owl:onProperty ex:member;
owl11:onClass
ex:Violinist;
owl:cardinality "2"^^xsd:nonNegativeInteger ];
...
プロパティの型
OWL 1.0ではプロパティの型としてowl:FunctionalProperty
、owl:InverseFunctionalProperty
、owl:SymmetricProperty
、owl:TransitiveProperty
が用意されていたが、OWL 1.1ではさらに次のものが加わる:
owl11:AsymmetricProperty
:非対称型プロパティowl11:ReflexiveProperty
:再帰型プロパティ(主語と目的語が同じ個体になる、いわゆるナルシス型プロパティ)owl11:IreflexiveProperty
:非再帰型プロパティ
さらに、エンティティ型明記の一環として、owl11:FunctionalObjectProperty
とowl11:FunctionalDataProperty
も追加される。
また、OWL 1.1ではあるプロパティの反対プロパティを匿名のエンティティとして定義できる。たとえば、クラスのプロパティ制約を与えるとき、何らかのプロパティの反対プロパティに対する制約を、空白ノードを用いて記述することが可能になる。そのためにowl11:inverseObjectPropertyExpression
という記述プロパティが導入されるようだ。
データ型の定義、宣言など
そのほか重要なものとしては、
- ユーザによるデータ型定義が可能になること
- OWL 1.0ではサブクラスなどの公理に記述するクラスは必ず定義が必要だったが、OWL 1.1では定義なしでクラスを公理に書いてもよい
といったところがあげられる。後者は、たとえばOWL 1.0では
(例)ex:Dog a owl:Class; rdfs:subClassOf ex:Animal .
と書くためには、「ex:Animal a owl:Class .
」と明示的に書かなければならなかったが、OWL 1.1ではその必要がなくなった。ただ、プログラミング言語と同じように、ミスを無くすなどの目的でクラスを「宣言」しておくことができる。これは、「ex:Animal owl11:declaredAs owl:Class .
」という具合になる模様だ。
まだ最初の草案で、検討事項もたくさん残っているので、このままの形で進むかどうかは分からないが、方向性ははっきりしている。OWL 1.1の今後に注目しておきたい。