CyberLibrarian

【注意】 このドキュメントは、W3CのOWL Web Ontology Language Reference W3C Recommendation 10 February 2004の和訳です。
このドキュメントの正式版はW3Cのサイト上にある英語版であり、このドキュメントには翻訳に起因する誤りがありえます。誤訳、誤植などのご指摘は、訳者までお願い致します。

First Update: 2004年7月22日



W3C

OWLウェブ・オントロジー言語
リファレンス

W3C 勧告 2004年2月10日

本バージョン:
http://www.w3.org/TR/2004/REC-owl-ref-20040210/
最新バージョン:
http://www.w3.org/TR/owl-ref/
旧バージョン:
http://www.w3.org/TR/2003/PR-owl-ref-20031215/
編集者:
Mike Dean, BBN Technologies
Guus Schreiber, Free University Amsterdam
著者:
Sean Bechhofer, University of Manchester
Frank van Harmelen, Free University Amsterdam
Jim Hendler, University of Maryland
Ian Horrocks, University of Manchester
Deborah L. McGuinness, Stanford University
Peter F. Patel-Schneider, Bell Labs Research, Lucent Technologies
Lynn Andrea Stein, Franklin W. Olin College of Engineering

このドキュメントに対する正誤表を参照してください。いくつかの規範的な修正が含まれているかもしれません。

翻訳版も参照してください。


要約

OWLは、ワールド・ワイド・ウェブ上でオントロジーを公表し共有するためのセマンティック・マークアップ言語です。OWLは、RDF(Resource Description Framework)の言語拡張として開発されており、DAML+OILウェブオントロジー言語から派生したものです。このドキュメントは、フルセットのOWL言語構成子の構造化した非形式的な記述を含んでおり、OWLオントロジーの構築を望むOWLユーザのための参考として役立つことを意図しています。

このドキュメントのステータス

このドキュメントは、W3Cメンバーおよび他の利害関係者によりレビューされ、W3C勧告として管理者の協賛を得ました。勧告の作成におけるW3Cの役割は、仕様に注意を引き付け、広範囲な開発を促進することです。これによってウェブの機能性および相互運用性が増強されます。

これは、6つからなるOWL(ウェブ・オントロジー言語)のW3C勧告の1つです。2004年2月10日の公開に向けてW3Cセマンティック・ウェブ・アクティビティアクティビティ声明グループ憲章)の一部としてウェブ・オントロジー・ワーキンググループによって開発されてきたものです。

これらのドキュメントの初期バージョンで示されたOWLの設計は広くレビューされており、ワーキンググループの技術要件を満たしています。ワーキンググループは、必要に応じて変更を加えながら受理したすべてのコメントに取り組みました。勧告案バージョン以後のこのドキュメントに対する変更の詳細は、変更履歴に記述されています。

コメントはpublic-webont-comments@w3.orgアーカイブ)で歓迎され、関連技術の一般的な議論はwww-rdf-logic@w3.orgアーカイブ)で歓迎されます。

実装のリストが利用可能です。

W3Cは、この事業に関するあらゆる特許の開示のリストを維持します。

この項は、このドキュメントの公開時のステータスについて記述しています。他のドキュメントがこのドキュメントに取って代わることがありえます。現行のW3Cの刊行物および技術報告の最新の改訂版のリストは、http://www.w3.org/TR/のW3C技術報告インデックスにあります。

謝辞

このドキュメントの一部は、DAML+OIL W3Cノートの一部として提出されたDAML+OIL(2001年3月)参照記述[DAML+OIL]に由来します。このドキュメントおよび先行ドキュメントのスポンサーに大いに感謝を表します。

JJeremy Carroll、Jim Hendler、Brian McBrideとPeter Patel-Schneiderは、このドキュメントに対して実質的なレビューおよび寄稿文を提供しました。Jeff Heflinは、非推奨に関する項を提供しました。Jerome Euzenatは、列挙型データ型に対して例を提供しました。

このドキュメントは、総じてウェブ・オントロジー・ワーキンググループ内で積み重ねられた議論の結果です。このワーキンググループのメンバーは、Yasser alSafadi、Jean-François Baget、James Barnette、Sean Bechhofer、Jonathan Borden、Frederik Brysse、Stephen Buswell、Jeremy Carroll、Dan Connolly、Peter Crowther、Jonathan Dale、Jos De Roo、David De Roure、Mike Dean、Larry Eshelman、Jérôme Euzenat、Tim Finin、Nicholas Gibbins、Sandro Hawke、Patrick Hayes、Jeff Heflin、Ziv Hellman、James Hendler、Bernard Horan、Masahiro Hori、Ian Horrocks、Jane Hunter、Francesco Iannuzzelli、Rüdiger Klein、Natasha Kravtsova、Ora Lassila、Massimo Marchiori、Deborah McGuinness、Enrico Motta、Leo Obrst、Mehrdad Omidvari、Martin Pike、Marwan Sabbouh、Guus Schreiber、Noboru Shimizu、Michael Sintek、Michael K. Smith、John Stanton、Lynn Andrea Stein、Herman ter Horst、David Trastour、Frank van Harmelen、Bernard Vatant、Raphael Volz、Evan Wallace、Christopher Welty、Charles White、John Yanosyです。

目次


1. はじめに

1.1 このドキュメントの目的

このドキュメントは、OWLに対するRDF/XMLの交換構文を使用して、OWLのすべてのモデリング・プリミティブに関する系統的、コンパクトかつ形式張らない記述を提供します。我々は、このドキュメントがOWL言語のユーザにとっての参照ガイドとして役立つことを期待しています。

このドキュメントは、W3Cウェブ・オントロジー・ワーキンググループによって作成されているOWL(ウェブ・オントロジー言語)の記述構成要素の1つです。OWL概要のドキュメント・ロードマップの項は、各々の異なる部分について記述し、また、それらがどのように組み合わさるかについて記述します。OWLに不慣れな読者は、オントロジー言語の使用例に関するより説明的な記述を入手するために、最初にOWL概要ドキュメント[OWL Overview]、続いて、OWLガイド[OWL Guide]を参考にする方が良いかもしれません。

このドキュメントでは、読者がRDFの基本的な概念[RDF Concepts]に精通しており、RDF/XML構文[RDF/XML Syntax]およびRDFスキーマ[RDF Vocabulary]に関する実用的な知識を持っていると見なします。

言語の構成子の厳密な構文に関する規範的な参考資料は、OWLセマンティクスおよび抽象構文ドキュメント[OWL S&AS]にあります。そのドキュメントは、モデル理論セマンティクス(model-theoretic semantics)の形式で、オントロジー言語の構成子の意味の厳密な定義も含んでいます。OWLオントロジーの整合性のような概念は、そのドキュメントで議論されます。

OWL言語のユースケースと要件は、OWL要件ドキュメント[OWL Requirements]で記述されます。OWLツールのテストケース(例えば、含意テスト(entailment tests)、整合性テスト(consistency tests))は、テスト・ドキュメント[OWL Test Cases]で仕様が定められています。

1.2 OWL Full/DL/Lite

OWL概要ドキュメント[OWL Overview]で、また、続いてOWLガイド[OWL Guide]でも議論されたように、OWL言語は、開発者や言語のユーザに役に立つだろうと我々が信じる2つの特定のサブセットを提供します。OWL Liteは、容易に実装でき、ユーザがOWLを使い始めるような機能的なサブセットを提供するために設計されました。OWL DL(DLは「記述論理(Description Logic)」を意味する)は、既存の記述論理のビジネス・セグメントをサポートし、推論システムに対して望ましいコンピュータ特性を持っている言語サブセットを提供すべく設計されました。完全なOWL言語(サブセットと区別するためにOWL Fullと呼ばれる)は、多くのデータ・ベースと知識表現システムに役に立つかもしれない機能を利用できるようにするために、OWL DLのいくつかの制約を緩めますが、これは記述論理推論システムの制約に違反します。

注:RDFドキュメントは、OWL DLやOWL Liteに属すように特に構築されなければ、一般にOWL Fullに属しているでしょう。

OWL FullとOWL DLは、同じOWL言語構成子セットをサポートします。これらの違いは、これらのいくつかの機能の使用に対する制限、および、RDF機能の使用に対する制限にあります。OWL Fullでは、OWLとRDFスキーマとの自由な混用が可能で、RDFスキーマのように、クラス、プロパティー、個体、およびデータ値の厳密な分離を強要しません。OWL DLでは、RDFとの混用に制約が置かれ、クラス、プロパティー、個体、およびデータ値の非重複性(disjointness)が要求されます。OWL DLというサブ言語(sublanguage)を持っている主要な理由は、OWL DLに対して要求される制限によって制約されたオントロジーをサポートする強力な推論システムを、ツールの構築者が開発してきたからです。OWL FullとOWL DLの違いに関する正式な定義は、セマンティクスおよび抽象構文ドキュメント[OWL S&AS]を参照できます。8.2項「OWL DL」では、OWL FullとOWL DLの違いが要約されています。

OWL Liteは、OWL言語構成子のサブセットのみをサポートするOWL DLのサブ言語です。OWL Liteは、特に、OWLをサポートしたいけれども、比較的シンプルで基礎的な言語機能で始めたいと考えているツールの構築者をターゲットにしています。OWL Liteは、OWL DLと同じ意味の制限に従い、推論エンジンが確実に望ましい特性を保証することを可能にします。OWL Liteで許される言語構成子の要約は、8.3項で提供しています。OWL LiteがサポートするOWL言語構成子のサブセットに関するより正式な記述は、セマンティクスおよび抽象構文ドキュメント[OWL S&AS]を参照してください。

注:OWLにアップグレードするRDFユーザは、OWL LiteがRDFスキーマの単なる拡張ではないことを認識しているべきです。OWL Liteは、OWL DLの軽量版(light version)で、RDF語彙の使用に制約(例えば、クラス、プロパティーなどの非重複性)を置きます。OWL Fullは、RDFと最大限の互換性を持つように設計されており、したがって、RDFのユーザが着手するのに適しています。OWL DLかOWL Liteかのどちらかを選択する場合には、OWL DL/Liteの長所(例えば、推論のサポート)が、OWLやRDFの構成子の使用におけるDL/Liteの制限を上回るものかどうかを考慮すべきです。

注:このドキュメントでは、OWL Liteは、OWL DLに対する多くの追加的な制限として定義されています。これは、特に明示的な記述がなければ、OWL DL構成子がOWL Liteの一部でもあることを意味します。8.3項では、これらの追加的なOWL Lite制限の要約を提供しています。

1.3 OWL構文

OWLオントロジーは、RDFグラフ[RDF Concepts]で、1組のRDFトリプルでもあります。任意のRDFグラフと同様に、OWLオントロジー・グラフは、様々な構文形式で(RDF/XML構文仕様(改訂版)[RDF/XML Syntax]で記述されているように)書くことができます。現在のドキュメントは、トリプルを表現するために、RDF/XMLのいくつかの特定の構文形式を使用します(ガイド・ドキュメントが使用するように)。しかし、OWLオントロジーの意味は、RDFグラフが単独で決定します。したがって、それらが同じ根本的なRDFトリプルの集合に帰着する限り、他のRDF/XMLの構文形式を使用することができます。そうすれば、そのような他の構文形式は、このドキュメントで使用される構文形式と厳密に同じ意味を伝えるでしょう。

同じRDFトリプルに帰着する代替構文形式のシンプルな一例として、以下のRDF/XML構文を考えてみてください。

<owl:Class rdf:ID="Continent"/> 

以下のRDF/XML構文は、

<rdf:Description rdf:about="#Continent">
  <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/>
</rdf:Description> 

同じRDFトリプルの集合をコード化し、したがって、同じ意味を伝えるでしょう。

1.4 OWLおよびRDFセマンティクス

OWLは、RDF[RDF Semantics]の語彙拡張です。したがって、あらゆるRDFグラフは、OWL Fullのオントロジーを形成します。さらに、OWLによってRDFグラフに与えられた意味は、RDFによってグラフに与えられた意味を含んでいます。このように、OWL Fullのオントロジーは、あらゆるRDFコンテンツを含むことができ、RDFが処理する方法と整合性を持った方法で処理されます。OWLは、あるRDFトリプルに追加的な意味を与えます。OWLセマンティクスおよび抽象構文ドキュメント[OWL S&AS]は、どのようなトリプルが特定の意味を付与され、その意味とは何かを厳密に明示します。

注:以前に述べたように、OWL DLとOWL LiteはRDF語彙を拡張しますが、さらに、この語彙の使用に制限を置きます。したがって、OWL DLやLiteに属するように特に構築されていなければ、RDFドキュメントは、通常は、OWL Fullに属しているでしょう。

1.5 例に関する注

読みやすさを考慮して、このドキュメントにおける例は、XMLエンティティーの&rdf;&rdfs;&owl;、および&xsd;(XMLスキーマ・データ型)が付録Bと同じ方法で定義されていると見なします。同じ前提が、対応する名前空間のrdf:rdfs:owl:、およびxsd:にも適用できます。

このドキュメントの例は、OWL言語構成子の使用の実例として役立つことを意図しています。それらは、ひとつの整合性のあるオントロジーを形成するものではありません。より広範な例に関しては、ガイド・ドキュメント[OWL Guide]を参照してください。

1.6 データ集約とプライバシー

多数のドキュメントに現われる個体に関するオントロジー情報を表現するというOWLの性能によって、さまざまな情報源のデータの結び付けが原理に適った方法でサポートされます。基礎となるセマンティクスは、予期しない結果をもたらしうるこのデータに関する推論をサポートします。特に、owl:sameAsを使用して同等性を表現する性能は、違うように見える個体が実際には同じであることを明言するために使用することができます。owl:InverseFunctionalPropertyは、個体どうしを結び付けるためにも使用することができます。例えば、SocialSecurityNumber(社会保障番号)のようなプロパティーがowl:InverseFunctionalPropertyである場合、そのプロパティの同じ値を持っているということに基づいて、2つの別個の個体は同一であると推論することができます。そのような手段によって個体が同じであると定められている場合、それらに関する異なる情報源からの情報を結合することができます。この集約(aggregation)は、1つの任意の情報源では直接表されない事実を決定するために使用することができます。

多数の情報源の情報を結び付けるというセマンティック・ウェブの性能は、多くのアプリケーションで使用することができる望ましく強力な機能です。しかし、OWLの推理力と合わせて、多数の情報源のデータを結合する性能は、乱用される可能性を持っています。データ保護法を持っている国では(特にEUで)、処理に対する有効な法的根拠を持たずにそのような結び付けた情報を作成したり処理することは違法かもしれません。したがって、他のデータソースやオントロジーと結び付けられているかもしれないような、何らかの個人情報を含んでいるOWLを使用する場合には、非常に注意が必要です。セキュリティの解決策の詳細は、ワーキンググループの範囲外であると考えられました。現在進行中の他の事業が、様々なセキュリティとプリファレンスの解決策でこれらの問題に取り組むことが期待されます――SAMLP3Pの例を参照してください。

1.7 このドキュメントの付録

このドキュメントには、補足情報を含んでいる付録があります。

言語構成子の定義にはられているこのドキュメントのリンクは、OWLセマンティクスおよび抽象構文[OWL S&AS]へのアクセスを提供します。付録Aには、ガイドおよびS&ASドキュメントの対応する項への、各言語構成子に対する体系的なリンクが含まれています。

付録Bは、OWL言語構成子のRDFスキーマを含んでいます。このスキーマは、オントロジーの構築者とツール開発者にとって有用な参照ポイントになりうるOWLの語彙に関する情報を提供します。スキーマによってOWLのクラスとプロパティーに提供される制限は有益かつ不完全です。さらに、このスキーマは、OWL Full、OWL DL、OWL Liteを区別しません。慣習的に、クラスは大文字ではじまり、プロパティーは小文字はじまります。したがってowl:Ontologyはクラスで、owl:importsはプロパティーです。

注:OWLに対するRDFスキーマのファイルが、オントロジーに明示的にインポートされる(つまりowl:importsで)ことは期待できません。スキーマは、参考のステータスを持っており、RDF/XML構文中で使用できるクラスおよびプロパティーを提供するように作られています。このスキーマをインポートする人々は、結果として得られるオントロジーがOWL Fullオントロジーであることを予期すべきです。

付録Cでは、組み込み(built-in)OWLクラスおよびプロパティー(後者は、定義域と値域付きで)に関するOWL語彙の概要を表形式で提供します。

DAML+OILに精通している読者のために、付録Dは、DAML+OILとOWL間の多くの変更点をリストアップしています。

最後に、付録E では、RDFでOWL DLオントロジーを指定するための一連の実際的なガイドラインを提供します。

2. OWLドキュメント

OWLの情報は、オントロジーに集結され、その後に、ドキュメントとしてワールド・ワイド・ウェブに格納することができます。OWLの一面であるオントロジーのインポートは、ウェブにOWLオントロジーを格納するという、この性能に依存します。

2.1 コンテンツ

OWLドキュメントは、オプションのオントロジー・ヘッダー(一般に、高々1つの)に加えて、任意の数のクラス公理プロパティー公理個体に関する事実で構成されます。「公理」が、S&ASドキュメントで使用される公式な用語であることに注意してください。これらの公理は、ガイドおよび概要ドキュメントでは、多少より非公式に「定義」と呼ばれます。

注:OWLは、OWL構成要素に命令を課しません。オントロジーを書く人は、例えば最初にオントロジー・ヘッダーを置くなど、ある種の命令を使用するでしょうが、これは意味に影響を及ぼしません。ツールは、命令を前提としてはなりません。

ほとんどのRDFドキュメントと同様に、OWLコードは、rdf:RDF要素の下位要素であるべきです。この囲み要素は、通常、XML名前空間と基底宣言を保持しています。さらに、OWLオントロジー・ドキュメントは、しばしばいくつかのエンティティー宣言で始まります。この種の情報の典型例については、ガイド・ドキュメント[OWL Guide]で論じている、ワインと食品オントロジーの例を見てください。

2.2 OWL組み込み語彙

OWLの組み込み語彙の出所は、すべてOWL名前空間

http://www.w3.org/2002/07/owl#

で、慣習的に名前空間の名称owlと結び付いています。オントロジーが、この名前空間を出所とする名前を、組み込み語彙以外には使用しないことをお勧めします。OWLツール構築者は、この名前空間を出所とする他の名前が使用される場合には、自由に警告を発すべきですが、そうでない場合には、通常どおりに継続するべきです。

2.3 MIMEタイプ

ウェブ・オントロジー・ワーキンググループは、OWLドキュメントに対して独自のMIMEタイプを要求してきませんでした。その代わりに、RDFコア・ワーキンググループが要求するMIMEタイプ(すなわち、application/rdf+xml[RDF Concepts])、あるいはXMLのMIMEタイプapplication/xmlを使用することを推奨します。

ファイル拡張子は、.rdfまたは.owlのどちらかを使用することを推奨します。

3. クラス

クラスは、資源を同様の特性とグループ化するための抽象メカニズムを提供します。RDFクラスのように、すべてのOWLクラスは、クラス拡張と呼ばれる個体の集合と関連付けられています。クラス拡張の個体は、クラスのインスタンスと呼ばれます。クラスは、そのクラス拡張に関連付けられているけれども同等ではない、内包的な意味(基底概念)を持っています。したがって、2つのクラスが同じクラス拡張を持っていたとしても、異なるクラスかもしれません。

このドキュメントで、「個体のクラス…」のような言いまわしを使用する場合は、「個体を含んでいる、クラス拡張を持つクラス…」と解釈するべきです。

注:OWL LiteとOWL DLでは、個体が同時にはクラスでありえず、クラスと個体は互いに素である定義域を形成(プロパティーとデータ値を形成するように)します。OWL Fullは、RDFスキーマの自由度を認めます。クラスは、別の(メタ)クラスのインスタンスの機能を果たすかもしれません。

OWLクラスは、「クラス記述」によって記述され、「クラス公理」へと結合させることができます。このドキュメントでは、最初にクラス記述について記述し、続いてクラス公理を取り上げます。

3.1 クラス記述

クラス記述は、このドキュメント(および、OWLセマンティクスおよび抽象構文)において、クラス公理(概要とガイドのドキュメントでは、非公式にクラス定義と呼ばれる)の構成要素に対して使用される用語です。クラス記述は、クラス名、あるいは、無名の匿名クラスのクラス拡張を指定するかのどちらかによって、OWLクラスを記述します。

OWLは、6つのタイプのクラス記述を識別します。

  1. クラス識別子(URI参照)
  2. クラスのインスタンスを一緒に形成する個体の網羅的な列挙
  3. プロパティー制限
  4. 2つ以上のクラス記述の積集合(intersection)
  5. 2つ以上のクラス記述の和集合(union)
  6. クラス記述の補集合(complement)

それがクラス名によってクラスを記述する(URI参照として構文的に表される)という意味において、1番目のタイプは特別です。他の5つのタイプのクラス記述は、クラス拡張に制約を置くことによって匿名クラスを記述します。

タイプ2~6のクラス記述は、それぞれ、列挙された個体をきっかり含むクラス(2番目のタイプ)、特別のプロパティー制限を満たすすべての個体のクラス(3番目のタイプ)、あるいは、クラス記述のブール組合せを満たすクラス(4番目、5番目と6番目のタイプ)を記述します。積集合、和集合、補集合は、それぞれ、論理AND、論理OR、論理NOT演算子と見なすことができます。最後の4つのタイプのクラス記述は、入れ子のクラス記述につながり、それゆえに任意の複雑なクラス記述に理論上つながることがありえます。実際には、入れ子のレベルは、通常、制限されています。

タイプ1のクラス記述は、owl:Classの名前付きインスタンス、rdfs:Classのサブクラスとして構文上表されます。

<owl:Class rdf:ID="Human"/>

これは、ex:が関連するオントロジーの名前空間である、トリプル「ex:Human rdf:type owl:Class.」を言明するでしょう。

注:OWL LiteとOWL DLでは、owl:Class(あるいは、owl:Restriction、詳細を参照)は、すべてのクラス記述に対して使用されなければなりません。

注:owl:Classは、rdfs:Classのサブクラスとして定義されます。別個のOWLクラス構成子を持っている論理的根拠は、OWL DLにおける(そしてひいては、OWL Liteにも)制限にあり、すべてのRDFSクラスが正当なOWL DLクラスだとは限らないことを暗示します。OWL Fullには、これらの制限は存在しておらず、したがって、OWL Fullではowl:Classrdfs:Classは同等です。

クラス記述の他の5つのタイプは、空白ノードが記述されているクラスを表すRDFトリプルの集合で構成されます。この空白ノードは、値がowl:Classであるrdf:typeプロパティーを持っています。

注:列挙、積集合、和集合、あるいは補集合のタイプのクラス記述にRDF識別子を提供する場合、クラス記述であるとは見なされず、完全なクラスに対する特殊なクラス公理であると見なされます。詳細は、3.2.3.項を参照してください。

注:このドキュメントでは、読みやすいように、「クラス記述によって記述されているクラス」を言及するために「クラス記述」という省略表現を使用することが時々あります。厳密に言えば、これは、タイプ2~6のクラス記述の場合には異なります。この場合、クラスは、対応する空白ノードによって表されます――クラス記述は、この空白ノードを主語として持つトリプルによって表されます。

2つのOWLクラスの識別子(すなわち、owl:Thing owl:Nothing)が、あらかじめ定義されています。owl:Thingのクラス拡張は、すべての個体の集合です。owl:Nothingのクラス拡張は、空の集合です。従って、すべてのOWLのクラスは、owl:Thingのサブクラスで、owl:Nothingは、すべてのクラスのサブクラスです(サブクラス関係の意味に関しては、rdfs:subClassOfに関する項を参照)。

3.1.1 列挙

「列挙」の種類に関するクラス記述は、owl:oneOfプロパティーで定義されます。この組み込みOWLプロパティーの値は、クラスのインスタンスである個体のリストでなければなりません。これにより、インスタンスを網羅的に列挙することによって、クラスを記述することができるようになります。owl:oneOfで記述されたクラスのクラス拡張は、列挙された個体をきっかり含んでおり、それ以上でも、それ以下でもありません。個体のリストは、通常はRDF構成子rdf:parsetype="Collection"の助けを借りて表され、リスト要素の集合を記録するのに便利な省略表現を提供します。例えば、以下のRDF/XML構文は、すべての大陸のクラスを定義します。

<owl:Class>
  <owl:oneOf rdf:parsetype="Collection">
    <owl:Thing rdf:about="#Eurasia"/>
    <owl:Thing rdf:about="#Africa"/>
    <owl:Thing rdf:about="#NorthAmerica"/>
    <owl:Thing rdf:about="#SouthAmerica"/>
    <owl:Thing rdf:about="#Australia"/>
    <owl:Thing rdf:about="#Antarctica"/>
  </owl:oneOf>
</owl:Class>

RDF/XML構文<owl:Thing rdf:about="..."/>は、ある個体を参照します(思い出してください。すべての個体は、定義上、owl:Thingのインスタンスです)。

データ型に関する項では、owl:oneOf構成子の別の用途(すなわち、データ値の列挙を定義するための)を紹介します。

注:列挙は、OWL Liteに含まれていません。

3.1.2 プロパティー制限

プロパティー制限は、特殊なクラス記述です。これは、匿名クラス(すなわち、制限を満たすすべての個体のクラス)を記述します。OWLは、2種類のプロパティー制限(値制約とカーディナリティー制約)を区別します。

この特殊なクラス記述に適用する場合値制約はプロパティーの値域に制約を置きます。例えば、プロパティーadjacentToの値が、ある地域である個体について言及し、これをクラス公理(恐らく地域自体のクラス公理さえも)の範囲内で使用したい場合などが考えられます。これがrdfs:rangeとは異なっていることに注意が必要で、プロパティーが使用されるすべての状況に適用されます。

カーディナリティー制約は、この特殊なクラス記述の文脈において、プロパティーがとることができる値の数に制約を置きます。例えば、あるサッカー・チームに対してhasPlayerプロパティーが11の値を持っていると言いたい場合などが考えられます。バスケットボール・チームに対して、同じプロパティーは、たった5つの値しか持たないでしょう。

OWLは、グローバルなプロパティー・カーディナリティー、すなわちowl:FunctionalPropertyowl:InverseFunctionalPropertyを定義するために、制限を持つ構成子もサポートします(プロパティーに関する項を参照)。

プロパティー制限は、以下の一般的な形式を持っています。

<owl:Restriction>
  <owl:onProperty rdf:resource="(some property)" />
  (きっかり1つの値あるいはカーディナリティー制約。下記を参照)
</owl:Restriction>

クラスowl:Restrictionは、owl:Classのサブクラスとして定義されます。制限クラスは、owl:onPropertyを使用して、制限を特定のプロパティーに結び付ける、きっかり1つのトリプルを持つべきです。制限クラスは、値制約あるいは検討中のプロパティーのカーディナリティー制約を表すきっかり1つのトリプルも持っているべきで、例えば、プロパティーのカーディナリティーはきっかり1です。

プロパティー制限は、データ型プロパティー(値がデータ・リテラルであるプロパティー)とオブジェクト・プロパティー(値が個体であるプロパティー)の両方に適用することができます。この識別に関する詳細は、プロパティーに関する項を参照してください。

3.1.2.1 値制約
3.1.2.1.1 owl:allValuesFrom

値制約owl:allValuesFromは、制限クラスをクラス記述データ値域のどちらかに結び付ける組み込みOWLプロパティーです。owl:allValuesFrom制約を含んでいる制限は、検討中のプロパティーのすべての値がクラス記述のクラス拡張のメンバーか、指定されたデータ値域内のデータ値のどちらかである、すべての個体のクラスを記述するために使用されます。言いかえれば、対(x,y)がP(関連するプロパティー)のインスタンスである場合、yがそれぞれクラス記述のインスタンスあるいはデータ値域内の値である、という条件に当てはまる個体xのクラスを定義します。

シンプルな例:

<owl:Restriction>
  <owl:onProperty rdf:resource="#hasParent" />
  <owl:allValuesFrom rdf:resource="#Human"  />
</owl:Restriction>

この例では、hasParentプロパティーがクラス人間(Human)の値のみを持っている、すべての個体の匿名OWLクラスを記述しています。このクラス記述は、プロパティーがこのクラスの値を常に持っているとは明言しないことに注意してください--匿名制限クラスのクラス拡張に属する個体に対して真だというだけです。

注:OWL Liteでは、owl:allValuesFromの目的語として許されている唯一のクラス記述の形式は、クラス名です。

owl:allValuesFrom制約は、述語論理の全称(すべてに対する)限量子と類似しています--記述されているクラスの各インスタンスに対して、Pに対するすべての値が制約を満たさなければなりません。owl:allValuesFromの全称限量子との一致は、プロパティーPに対するowl:allValuesFrom制約がプロパティーPに対する値を全く持っていない個体に対して自明的に満たされることを意味するということにも注意してください。なぜこれがそうであるかを見るには、owl:allValuesFrom制約はPのすべての値がタイプTであることを要求し、そのような値が存在しない場合、制約は自明的に真だということに注目してください。

3.1.2.1.2 owl:someValuesFrom

値制約owl:someValuesFromは、制限クラスをクラス記述またはデータ値域に結びつける組み込みOWLプロパティーです。owl:someValuesFrom制約を含んでいる制限は、関連するプロパティーの少なくとも1つの値がクラス記述のインスタンス、あるいはデータ値域内のデータ値である、すべての個体のクラスを記述します。言いかえれば、それは、対(x,y)がPのインスタンスであるような、少なくとも1つの対応するy(クラス記述のインスタンスかデータ値域の値のいずれか)が存在する、個体xのクラスを定義します。これには、y'がクラス記述やデータ値域に属さない、Pの他のインスタンス(x,y')が存在する余地があります。

以下の例では、医者である親を少なくとも1人は持つ個体のクラスを定義します。

<owl:Restriction>
  <owl:onProperty rdf:resource="#hasParent" />
  <owl:someValuesFrom rdf:resource="#Physician" />
</owl:Restriction>

owl:someValuesFrom制約は、述語論理の存在限量子と類似しています--定義されているクラスの各インスタンスに対して、制約を満たすPに対する少なくとも1つの値が存在します。

注:OWL Liteでは、owl:someValuesFromの目的語として許されている唯一のクラス記述の形式は、クラス名です。

3.1.2.1.3 owl:hasValue

値制約owl:hasValueは、制限クラスを値Vに結び付ける組み込みOWLプロパティーで、個体あるいはデータ値のどちらかでありえます。owl:hasValue制約を含んでいる制限は、関連するプロパティーがV(それは他の値も持っているかもしれない)と意味的に同等である少なくとも1つの値を持っている、すべての個体のクラスを記述します。

注:データ型にとって「意味的に同等」とは、リテラルの字句表現が同じ値にマッピングするということを意味します。個体にとっては、同じURL参照を持っているか、同じ個体であると定義されているかのどちらかを意味します。

注:値制約owl:hasValueは、OWL Liteには含まれていません。

以下の例は、クリントン(Clinton)と呼ばれる個体を親として持つ、個体のクラスを記述しています。

<owl:Restriction>
  <owl:onProperty rdf:resource="#hasParent" />
  <owl:hasValue rdf:resource="#Clinton" />
</owl:Restriction>
3.1.2.2 カーディナリティー制約

OWLでは、RDFでのように、クラスのあらゆるインスタンスが、特定のプロパティーに対して任意の数(0以上)の値を持っているかもしれないと見なされます。プロパティーが(少なくとも1つは)要求されるようにするために、そのプロパティーに対して特定数の値だけを許すために、あるいは、プロパティーが発生しないに違いないと断言するために、カーディナリティー制約を使用することができます。OWLは、クラスの文脈の範囲内でプロパティーのカーディナリティーをローカルに制限するために、3つの構成子を提供します。

注:OWL Liteには、3つのすべての形式のカーディナリティー制約の使用が含まれていますが、「0」か「1」の値と共に使用する場合に限ります。

3.1.2.2.1 owl:maxCardinality

カーディナリティー制約owl:maxCardinalityは、XMLスキーマのデータ型nonNegativeIntegerの値空間(value space)に属しているデータ値に制限クラスを結びつける組み込みOWLプロパティーです。owl:maxCardinality制約を含んでいる制限は、関連するプロパティーに対して高々N個の意味的に別個の値(個体あるいはデータ値)を持つすべての個体のクラスを記述し、そこでは、Nがカーディナリティー制約の値です。構文上は、カーディナリティー制約は、対応するrdf:datatype属性を持つRDFプロパティー要素として表されます。

以下の例は、高々2人の親を持つ個体のクラスを記述します。

<owl:Restriction>
  <owl:onProperty rdf:resource="#hasParent" />
  <owl:maxCardinality rdf:datatype="&xsd;nonNegativeInteger">2</owl:maxCardinality>
</owl:Restriction>

RDFデータタイピングについては、6項でより詳細に議論されます。

3.1.2.2.2 owl:minCardinality

カーディナリティー制約owl:minCardinalityは、XMLスキーマのデータ型nonNegativeIntegerの値空間に属しているデータ値に制限クラスを結びつける組み込みOWLプロパティーです。owl:minCardinality制約を含んでいる制限は、関連するプロパティーに対して少なくともN個の意味的に別個の値(個体あるいはデータ値)を持つすべての個体のクラスを記述し、そこでは、Nがカーディナリティー制約の値です。構文上は、カーディナリティー制約は、対応するrdf:datatype属性を持つRDFプロパティー要素として表されます。

以下の例は、少なくとも2人の親を持つ個体のクラスを記述します。

<owl:Restriction>
  <owl:onProperty rdf:resource="#hasParent" />
  <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">2</owl:minCardinality>
</owl:Restriction>

1つ以上のowl:minCardinalityが、クラスのすべてのインスタンスがプロパティーに対する値を持っていなければならないことを意味することに注意してください。

3.1.2.2.3 owl:cardinality

カーディナリティー制約owl:cardinalityは、XMLスキーマのデータ型nonNegativeIntegerの値域に属しているデータ値に制限クラスを結びつける組み込みOWLプロパティーです。owl:cardinality制約を含んでいる制限は、関連するプロパティーに対してきっかりN個の意味的に別個の値(個体あるいはデータ値)を持つすべての個体のクラスを記述し、そこでは、Nがカーディナリティー制約の値です。構文上は、カーディナリティー制約は、対応するrdf:datatype属性を持つRDFプロパティー要素として表されます。

実際のところ、この構成子は、同じ値を持つ1対のowl:minCardinalityowl:maxCardinalityの制約にいつでも取り替えることができるため、不必要です。これは、ユーザのための便利な省略表現として含まれています。

以下の例は、きっかり2人の親を持つ個体のクラスを記述します。

<owl:Restriction>
  <owl:onProperty rdf:resource="#hasParent" />
  <owl:cardinality rdf:datatype="&xsd;nonNegativeInteger">2</owl:cardinality>
</owl:Restriction>

3.1.3 積集合、和集合、および補集合

この項の3つのタイプのクラス記述は、記述論理で使用されるさらに上級のクラス・コンストラクタを表します。これらは、クラスにおけるAND、ORおよびNOT演算子を表していると考えることができます。3つの演算子は、積集合、和集合、補集合という、標準的な集合演算子名を持っています。これらの言語構成子は、1つ(補集合)かそれ以上(和集合、積集合)の、入れ子のクラス記述を含んでいるという特徴も共有しています。

3.1.3.1 owl:intersectionOf

owl:intersectionOfプロパティーは、クラスをクラス記述のリストに結び付けます。owl:intersectionOfステートメントは、クラス拡張がリスト中のすべてのクラス記述のクラス拡張のメンバーである個体をきっかり含むクラスを記述します。

例:

<owl:Class>
  <owl:intersectionOf rdf:parsetype="Collection">
    <owl:Class>
      <owl:oneOf rdf:parsetype="Collection">
        <owl:Thing rdf:about="#Tosca" />
        <owl:Thing rdf:about="#Salome" />
      </owl:oneOf>
    </owl:Class>
    <owl:Class>
      <owl:oneOf rdf:parsetype="Collection">
        <owl:Thing rdf:about="#Turandot" />
        <owl:Thing rdf:about="#Tosca" />
      </owl:oneOf>
    </owl:Class>
  </owl:intersectionOf>
</owl:Class>

この例では、owl:intersectionOfの値は、2つのクラス記述のリスト、すなわち2つの列挙で、両方とも2つの個体を持つクラスを記述します。結果として生じる積集合は、1つの個体を持つクラス、すなわちトスカ(Tosca)です(これが、両方の列挙に共通するたった一つの個体であるため)。

注:これは、3つの個体がすべて異なると見なします。実際、これはOWLにおいて、定義上は真ではありません。OWLは「単一名」仮定を持たないため、異なるURI参照が同じ個体を参照するかもしれません。5項では、同一性と個体の違いに関する制約を作るためのOWL言語構成子を見ることができます。

注:この例では、この言語構成子がどのような意味かを明確にするために列挙を使用します。より典型的な例は、OWLガイド[OWL Guide]を参照してください。

注:OWL Liteは、owl:intersectionOfの使用に制限があります。これは、このドキュメント内で後ほど議論されます。3.2.3項を参照してください。

owl:intersectionOfは、論理積(logical conjunction)と類似していると見ることができます。

3.1.3.2 owl:unionOf

owl:unionOfプロパティーは、クラスをクラス記述のリストに結び付けます。owl:unionOfステートメントは、クラス拡張がリストのクラス記述の少なくとも1つのクラス拡張で生じる個体を含む匿名のクラスを記述します。

例:

<owl:Class>
  <owl:unionOf rdf:parsetype="Collection">
    <owl:Class>
      <owl:oneOf rdf:parsetype="Collection">
        <owl:Thing rdf:about="#Tosca" />
        <owl:Thing rdf:about="#Salome" />
      </owl:oneOf>
    </owl:Class>
    <owl:Class>
      <owl:oneOf rdf:parsetype="Collection">
        <owl:Thing rdf:about="#Turandot" />
        <owl:Thing rdf:about="#Tosca" />
      </owl:oneOf>
    </owl:Class>
  </owl:unionOf>
</owl:Class>

このクラス記述は、クラス拡張が3つの個体、すなわち、トスカ(Tosca)サロメ(Salome)トゥーランドット(Turandot)(それらが、すべて異なると仮定して)を含むクラスを記述します。

注:owl:unionOfは、OWL Liteに含まれていません。

owl:unionOfは、論理和(logical disjunction)と類似しています。

3.1.3.3 owl:complementOf

owl:complementOfプロパティーは、クラスをきっかり1つのクラス記述に結び付けます。owl:complementOfステートメントは、クラス拡張がステートメントの目的語であるクラス記述のクラス拡張に属さない個体をきっかり含むクラスを記述します。owl:complementOfは、論理否定(logical negation)と類似しており、クラス拡張は捕集合のクラスのクラス拡張のメンバーでない個体で構成されます。

補集合の使用例として、「肉(Meat)ではない」という表現は、以下のように書くことができます。

<owl:Class>
  <owl:complementOf>
    <owl:Class rdf:about="#Meat"/>
  </owl:complementOf>
</owl:Class>

このクラス記述の拡張は、クラスに属さないすべての個体を含みます。

注:owl:complementOfは、OWL Liteに含まれていません。

3.2 クラス公理

クラス記述は、クラスを定義するための基礎構成要素を、クラス公理によって形成します。クラス公理の最もシンプルな形式は、タイプ1のクラス記述です。これは、クラス識別子とともにowl:Classを使用して、クラスの存在を明言するだけです。

例えば、以下のクラス公理は、URI参照#HumanがOWLクラスの名前であると宣言します。

<owl:Class rdf:ID="Human"/>

これは正しいOWLですが、クラス人間(Human)についてはあまり伝えてくれません。クラス公理は、通常は、クラスの必要かつ/または十分な特性を明言する付加的な要素を含んでいます。OWLは、クラス記述を組み合わせてクラス公理にするための3つの言語構成子を含んでいます。

構文的には、これらの3つの言語構成子は、定義域と値域の両方としてクラス記述を持つプロパティーです。以下の小項目において、これらのプロパティーについてより詳細に議論します。

さらに、OWLは、列挙あるいは集合演算子のタイプのクラス記述が名前を与えられるクラス公理を許します。これらのクラス公理は、owl:equivalentClassステートメントを持つクラス公理と意味的に同等なので、これらは、その小項目の直後に議論されるでしょう(3.2.3項「owl:equivalentClassを使用しない完全なクラスの公理」を参照)。

3.2.1 rdfs:subClassOf

公理スキーマ: クラス記述 rdfs:subClassOf クラス記述

rdfs:subClassOf構成子は、RDFスキーマの一部として定義されています[RDF Vocabulary]。OWLにおいてはその意味は全く同じです:クラス記述C1が、クラス記述C2のサブクラスとして定義されている場合、C1のクラス拡張における個体の集合は、C2のクラス拡張における個体の集合のサブセットであるべきです。クラスは、定義上、それ自身のサブクラスです(サブセットが完全な集合かもしれないので)。

例:

<owl:Class rdf:ID="Opera">
  <rdfs:subClassOf rdf:resource="#MusicalWork" />
</owl:Class>

このクラス公理は、名前(オペラ(Opera)およびミュージカル作品(MusicalWork))によって記述される2つのOWLクラス間のサブクラス関係を宣言します。サブクラス関係は、クラスに属するための必要条件を提供します。この場合、オペラであるためには、個体はミュージカル作品でもある必要があります。

注:OWL Liteでは、rdfs:subClassOfステートメントの主語は、クラス識別子でなければなりません。目的語は、クラス識別子またはプロパティー制限のどちらかでなければなりません。

任意のクラスに対し、任意の数のsubClassOf公理が存在しえます。例えば、クラスオペラに関する以下の公理を加えることができます。

<owl:Class rdf:about="#Opera">
  <rdfs:subClassOf>
    <owl:Restriction>
      <owl:onProperty rdf:resource="#hasLibrettist" />
      <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:minCardinality>
    </owl:Restriction>
  </rdfs:subClassOf>
</owl:Class>

このクラス公理には、プロパティー制限が含まれます。この例は、オペラが、プロパティーhasLibrettistが少なくとも1つの値を持つ、すべての個体の集合をクラス拡張として持っている匿名のOWLクラスのサブクラスである(思い出してください。owl:Restrictionは、owl:Classのサブクラスです)と明言します。したがって、オペラには少なくとも1人の歌劇台本作家(librettist)がいなければなりません。

クラス記述が入れ子である場合、クラス公理はより複雑になる可能性があります。例えば、owl:allValuesFromまたはowl:someValuesFromステートメントを持つプロパティー制限は、任意のクラス記述を指すかもしれません。以下の例を考えてみてください。

<owl:Class rdf:ID="TraditionalItalianOpera">
  <rdfs:subClassOf rdf:resource="#Opera"/>
  <rdfs:subClassOf>
    <owl:Restriction>
      <owl:onProperty rdf:resource="#hasOperaType"/>
      <owl:someValuesFrom>
        <owl:Class>
          <owl:oneOf rdf:parsetype="Collection">
            <owl:Thing rdf:about="#OperaSeria"/>
            <owl:Thing rdf:about="#OperaBuffa"/>
          </owl:oneOf>
        </owl:Class>
      </owl:someValuesFrom>
    </owl:Restriction>
  </rdfs:subClassOf>
</owl:Class>

この例は、owl:oneOf構成子の使用法を示します。クラス公理は、オペラ・セリア(opera seria)またはオペラ・ブッファ(opera buffa)のどちらかをオペラの形式として持っているオペラのクラスのサブクラスとして、伝統的なイタリア・オペラ(traditional Italian opera)を定義します。

より多くの例がガイド・ドキュメントに掲載されています[OWL Guide]。サブクラス公理は、部分的な定義を提供します:これは、個体のクラス・メンバーシップを確立するために必要だけども十分でない条件を表します。次の小項目では、必要かつ十分な条件を定義するために、OWLがowl:equivalentClass構成子を提供するところを見ます。そのような公理への足掛かりとして、以下の例を考えてみてください。

<owl:Class rdf:ID="Operetta">
  <rdfs:subClassOf rdf:resource="#MusicalWork"/>
  <rdfs:subClassOf>
    <owl:Restriction>
      <owl:onProperty rdf:resource="#hasLibrettist" />
      <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:minCardinality>
    </owl:Restriction>
  </rdfs:subClassOf>
  <rdfs:subClassOf>
    <owl:Class>
      <owl:complementOf rdf:resource="#Opera"/>
    </owl:Class>
  </rdfs:subClassOf> 
</owl:Class>

このクラス公理は、オペレッタがミュージカル作品で、少なくとも1人の歌劇台本作家を持っていてオペラではないと明言します。サブクラス関係の使用では、歌劇台本作家を持っておりオペラでない他のミュージカル作品が存在する可能性が残ります。オペレッタが、間違いなく歌劇台本作家を持っているがオペラでないミュージカル作品であると言いたければ、owl:equivalentClass構成子を使用する必要があるでしょう。

3.2.2 owl:equivalentClass

公理スキーマ: クラス記述 owl:equivalentClass クラス記述

クラス公理は(複数の)owl:equivalentClass ステートメントを含んでいるかもしれません。owl:equivalentClassは、クラス記述を別のクラス記述に結びつける組み込みプロパティーです。このようなクラス公理は、含まれている2つのクラス記述が同じクラス拡張を持つ(つまり、両方のクラス拡張は、個体の同じ集合をきっかり含んでいる)ということを意味します。

その最もシンプルな形式では、equivalentClass公理は、2つの名前付きクラスの同等性(クラス拡張に関する)を明言します。例:

<owl:Class rdf:about="#US_President">
  <equivalentClass rdf:resource="#PrincipalResidentOfWhiteHouse"/>
</owl:Class>

注:owl:equivalentClassの使用は、クラスの同一性を意味しません。クラスの同一性は、クラスが同じ内包的な意味を持っている(同じ概念を示す)ことを意味します。上の例では、「米国の大統領(President of the US)」の概念は、ある土地の主要な居住者(the principal resident of a certain estate)という概念とは、関係がありますが、同一ではありません。真のクラスの同一性は、owl:sameAs構成子でのみ表すことができます。これは、クラスを個体として扱うことを要求するため、クラスの同一性は、OWL Fullでのみ表すことができます。

owl:equivalentClassを持つ公理は、タイプ1のクラス記述(クラス識別子)をタイプ2のクラス記述(列挙)に結びつけることにより、列挙されたクラスを定義するためにも使用できます。例:

<owl:Class rdf:ID="DaPonteOperaOfMozart">
  <owl:equivalentClass>
    <owl:Class>
      <owl:oneOf rdf:parsetype="Collection">
        <Opera rdf:about="#Nozze_di_Figaro"/>
        <Opera rdf:about="#Don_Giovanni"/>
        <Opera rdf:about="#Cosi_fan_tutte"/>
      </owl:oneOf>
    </owl:Class>
  </owl:equivalentClass>
</owl:Class>

このクラス公理は、組み合わせると「ダ・ポンテによるモーツァルトのオペラ(Da Ponte operas of Mozart)」(音楽学の人気のある主語)を表すオペラのクラスを定義します。equivalentClass構成子を使用することによって、クラスのメンバーシップに対する必要十分な条件(この場合、3つの個体の列挙で構成される)を明言することができ、それ以下でもそれ以上でもありません。

注:OWL DLは、owl:equivalentClassステートメントの主語や目的語として使用することができるクラス記述のタイプに制約を少しも置きません。OWL Liteでは、主語がクラス名でなければならず、目的語はクラス名かプロパティー制限のどちらかでなければなりません。

注:異なるタイプのクラス記述は、原則としてequivalentClassステートメントの主語として許されますが、実際のところ、それは通常何らかのクラス識別子です。これは、この項の例にも当てはまります。

同じクラスに関して多数のequivalentClass公理を持つことが可能です。しかし、これは注意を要します。両方の公理が同じ結果(つまり、全く同じクラス拡張)をもたらさなければなりません。例えば、モーツァルトの「ダ・ポンテ作のオペラ(Da Ponte operas)」に対する別のequivalentClass公理は、以下のようでありえます。

<owl:Class rdf:about="#DaPonteOperaOfMozart">
  <owl:equivalentClass>
    <owl:Class>
      <owl:intersectionOf rdf:parsetype="Collection">
        <owl:Restriction>
          <owl:onProperty rdf:resource="#hasComposer"/>
          <owl:hasValue rdf:resource="#Wolfgang_Amadeus_Mozart"/>
        </owl:Restriction>
        <owl:Restriction>
          <owl:onProperty rdf:resource="#hasLibrettist"/>
          <owl:hasValue rdf:resource="#Lorenzo_Da_Ponte"/>
        </owl:Restriction>
      </owl:intersectionOf>
    </owl:Class>
  </owl:equivalentClass>
</owl:Class>

これは、モーツァルトのダ・ポンテ作のオペラのクラス拡張が、モーツァルトによって作曲され、歌劇の台本がダ・ポンテによって書かれたオペラに厳密に相当すると述べます(注:積集合 = "and")。確かに、この公理は以前の公理と同じインスタンスを持つクラスをまさしく定義します。

注:形式「A subClassOf B」の公理を「A equivalentClass B」に「アップグレード」したい場合(Aのクラス拡張が、単なる普通のサブセットではなく、実際はBのクラス拡張と同じ集合であることを意味する)、その形式の別のsubClassOf公理を加えることが可能で(B subClassOf A)、これにより、定義上2つのクラス拡張が同等になります(したがって、「A equivalentClass B」と同じ意味を持つ)。そのようなsubClassOfの「循環(cycles)」は、明示的に許されます。OWLは、分散環境において使用可能なため、これは有用な機能でありえます。

3.2.3 owl:equivalentClassを使用しない完全なクラスに対する公理

公理スキーマ: タイプ2(owl:oneOf付き)の名前付きクラス記述、あるいは、タイプ4-6(owl:intersectionOfowl:unionOf、あるいはowl:complementOf付き)

OWLでは、列挙または集合演算子のタイプのクラス記述に名前を与えることにより、ユーザがクラス公理を定義することが可能になります。このようなクラス公理は、クラスのメンバーシップの確立に対して必要十分な条件を定義します。例:

<owl:Class rdf:ID="DaPonteOperaOfMozart">
  <owl:oneOf rdf:parsetype="Collection">
    <owl:Thing rdf:about="#Nozze_di_Figaro"/>
    <owl:Thing rdf:about="#Don_Giovanni"/>
    <owl:Thing rdf:about="#Cosi_fan_tutte"/>
  </owl:oneOf>
</owl:Class>

このクラス公理は、以下のように解釈されるべきです:クラスDaPonteOperaOfMozartのクラス拡張は、列挙によって厳密に定義されます。

このクラス公理は、前項の最初のオペラの例(追加のowl:equivalentClassステートメントを含んでいた)と意味的に同等です。このタイプの公理は、owl:intersectionOfowl:unionOf、およびowl:complementOfで構築することもできます。和集合を使用した例は、以下のようになります。

<owl:Class rdf:ID="LivingBeing">
  <owl:unionOf rdf:parsetype="Collection">
    <owl:Class rdf:about="#Plant"/>
    <owl:Class rdf:about="#Animal"/>
  </owl:unionOf>
</owl:Class>

このクラス公理は、生物(LivingBeing)のクラス拡張が植物(Plant)動物(Animal)のクラス拡張の和集合に厳密に相当すると明言します。

注:OWL Liteは、owl:intersectionOfプロパティーを使って構築されるこのタイプのクラス公理のみを含んでいます。intersectionOfリストの値は、クラス識別子、および(または)プロパティー制限でなければなりません。したがって、列挙、補集合および和集合を使用する「完全なクラス」公理は、OWL Liteでは許されていません。

3.2.4 owl:disjointWith

公理スキーマ: クラス記述 owl:disjointWith クラス記述

クラス公理は、(複数の)owl:disjointWithステートメントも含んでいるかもしれません。owl:disjointWithは、定義域および値域としてクラス記述を持つ組み込みOWLプロパティーです。それぞれのowl:disjointWithステートメントは、関連する2つのクラス記述のクラス拡張が共通の個体を持っていないと言明します。rdfs:subClassOfを持つ公理のように、2つのクラスが互いに素であると宣言するのは不完全な定義で、必要だが十分でない条件をクラスに課します。

これは、クラスdisjointnessの一般的な例です。

<owl:Class rdf:about="#Man">
  <owl:disjointWith rdf:resource="#Woman"/>
</owl:Class>

これが本当に真実かどうかは、生物学者が決めることです。以下の例は、サブクラス階層におけるクラスdisjointnessの一般的な利用法を示しています。

<owl:Class rdf:about="#MusicDrama">
  <owl:equivalentClass>
    <owl:Class>
      <owl:unionOf rdf:parsetype="Collection">
        <owl:Class rdf:about="#Opera"/>
        <owl:Class rdf:about="#Operetta"/>
        <owl:Class rdf:about="#Musical"/>
      </owl:unionOf>
    </owl:Class>
  </owl:equivalentClass>
</owl:Class>

<owl:Class rdf:about="#Opera">
  <rdfs:subClassOf rdf:resource="#MusicDrama"/>
</owl:Class>

<owl:Class rdf:about="#Operetta">
  <rdfs:subClassOf rdf:resource="#MusicDrama"/>
  <owl:disjointWith rdf:resource="#Opera"/>
</owl:Class>

<owl:Class rdf:about="#Musical">
  <rdfs:subClassOf rdf:resource="#MusicDrama"/>
  <owl:disjointWith rdf:resource="#Opera"/>
  <owl:disjointWith rdf:resource="#Operetta"/>
</owl:Class>

ここでは、互いに素かつ完全なスーパークラスのサブクラスの集合を定義するために、owl:disjointWithステートメントは、owl:unionOfと一緒に使用されています。自然言語では、すべてのMusicDramaは、オペラ、オペレッタ(Operetta)、あるいはミュージカル(Musical)のいずれかで(サブクラス分割は完全)、1つのサブクラスに属する個体、例えばオペラは、別のサブクラス、例えばミュージカルに属することはできません(互いに素、あるいは重なり合わないサブクラス)。これは多くのデータ・モデリング表記法で使用される、一般的なモデリング概念です。

注:OWL Liteでは、owl:disjointWithの使用は許されていません。

4. プロパティー

OWLは、オントロジーの構築者が定義したいと思うかもしれない、以下のプロパティーの2つの主要なカテゴリーを識別します。

注:OWLは、アノテーション・プロパティー(owl:AnnotationProperty)およびオントロジー・プロパティー(owl:OntologyProperty)の概念も持っています。これらは、セマンティック上の理由でOWL DLに必要です。7項とOWLセマンティクスおよび抽象構文ドキュメント[OWL S&AS]を参照してください。

オブジェクト・プロパティーは、組み込みOWLクラス owl:ObjectPropertyのインスタンスとして定義されています。データ型プロパティーは、組み込みOWLクラス owl:DatatypePropertyのインスタンスとして定義されています。owl:ObjectPropertyowl:DatatypePropertyのは、両方ともRDFクラスrdf:Propertyのサブクラスです(付録Bを参照)。

注:OWL Fullでは、オブジェクト・プロパティーとデータ型プロパティーは、互いに素の関係ではありません。データ値は個体として扱いうるため、データ型プロパティーは、事実上、オブジェクト・プロパティーのサブクラスです。OWL Fullでは、owl:ObjectPropertyrdf:Propertyと同等です。実際のところ、これは、主にowl:InverseFunctionalPropertyの使用に対して影響を持っています。8.1項のOWL Full特性を参照してください。

プロパティー公理は、プロパティーの特性を定義します。その最もシンプルな形式では、プロパティー公理は、プロパティーの存在を定義するだけです。例えば、

<owl:ObjectProperty rdf:ID="hasParent"/>

これは、その値が個体であるべきであるという制限を持つプロパティーを定義します。

しばしば、プロパティー公理は、プロパティーの追加特性を定義します。OWLは、プロパティー公理に対して以下の構成子をサポートします。

次の小項目では、様々なタイプのプロパティー公理についてより詳細に議論します。

注:この項では、「クラス拡張(class extension)」と同じような方法で、用語「プロパティー拡張(property extension)」を使用します。プロパティー拡張は、プロパティーと関係のあるインスタンスの集合です。プロパティーのインスタンスは、単体の要素ではなく、主語―目的語の対のプロパティー・ステートメントです。リレーショナル・データベース用語では、プロパティー・インスタンスは2項関係(プロパティー)の「タプル(tuples)」と呼ばれているでしょう。

4.1 RDFスキーマ構成子

この項の構成子は、RDFスキーマ・ドキュメント[RDF Vocabulary]で詳細に議論されます。この項の記述は、これらの構成子の概要を提供し、いくつかのOWL特有の側面と例を提供します。

4.1.1 rdfs:subPropertyOf

rdfs:subPropertyOf公理は、プロパティーが、ある他のプロパティーのサブプロパティーであると定義づけます。公式には、これは、P1がP2のサブプロパティーである場合、P1(1組の対)のプロパティー拡張はP2(同じく1組の対)のプロパティー拡張のサブセットであるべきだということを意味します。

例:

<owl:ObjectProperty rdf:ID="hasMother">
  <rdfs:subPropertyOf rdf:resource="#hasParent"/>
</owl:ObjectProperty>

これは、プロパティー「hasMother」のプロパティー拡張に含まれているすべてのインスタンス(対)が、プロパティー「hasParent」のプロパティー拡張のメンバーでもあると明言します。

サブプロパティー公理は、データ型プロパティーとオブジェクト・プロパティーの両方に適用することができます。

注:OWL DLでは、サブプロパティー・ステートメントの主語と目的語が、両方ともデータ型プロパティーであるか、両方ともオブジェクト・プロパティーであるかのどちらかでなければなりません。

4.1.2 rdfs:domain

プロパティーに対して、(複数の)rdfs:domain公理を定義することができます。構文上は、rdfs:domainは、プロパティー(クラスrdf:Propertyの、あるインスタンス)をクラス記述に結びつける、組み込みプロパティーです。rdfs:domain公理は、このようなプロパティー・ステートメントの主語が、示されたクラス記述のクラス拡張に属していなければならないと主張します。

複数のrdfs:domain公理は許され、論理積として解釈されるべきです:これらは、プロパティーの定義域を、クラス記述の積集合に属している個体に制限します。複数のクラスが定義域の機能を果せうると言いたい場合、owl:unionOf形式のクラス記述を使用するべきです。例えば、プロパティーhasBankAccount(銀行口座を持つ)の定義域が、人(Person)かあるいは企業(Corporation)のいずれかでありえると言いたい場合、次のように言う必要があるでしょう。

<owl:ObjectProperty rdf:ID="hasBankAccount">
  <rdfs:domain>
    <owl:Class>    
      <owl:unionOf rdf:parsetype="Collection">
        <owl:Class rdf:about="#Person"/>
        <owl:Class rdf:about="#Corporation"/>
      </owl:unionOf>
    </owl:Class>    
  </rdfs:domain>
</owl:ObjectProperty>

注:OWL Liteでは、rdfs:domainの値は、クラス識別子でなければなりません。

4.1.3 rdfs:range

プロパティーに対して、(複数の)rdfs:range公理を定義することができます。構文上は、rdfs:rangeは、プロパティー(クラスrdf:Propertyの、あるインスタンス)をクラス記述データ値域のどちらかに結びつける、組み込みプロパティーです。rdfs:range公理は、このプロパティーの値が、クラス記述のクラス拡張、あるいは、指定されたデータ値域のデータ値に属さなければならないと言明します。

複数の値域制限は、プロパティーの値域がすべての値域の積集合(つまり、クラス記述のクラス拡張の積集合、あるいは、データ値域の積集合)であると明言していると解釈されます。rdfs:domainと同じように、複数の代替値域が、owl:unionOf形式のクラス記述を使用することによって指定することができます(前の小項目を参照してください)。

クラス記述に関する項で記述されている値制約のどれとも異なり、rdfs:range制限はグローバルであることに注意してください。 owl:allValuesFromのような値制約は、クラス記述で使用され、そのクラスに適用された時にのみプロパティーにおいて実行されます。対照的に、rdfs:range制限は、適用されるクラスに関係なくプロパティーに適用されます。したがって、rdfs:rangeは、注意して使用するべきです。

注:OWL Liteでは、rdfs:rangeの目的語として許されている唯一のクラス記述の形式は、クラス名です。

4.2 他のプロパティーとの関係

4.2.1 owl:equivalentProperty

owl:equivalentProperty構成子は、2つのプロパティーが同じプロパティー拡張を持っていると明言するために使用することができます。構文上は、owl:equivalentPropertyは、その定義域と値域の両方としてrdf:Propertyを持つ、組み込みOWLプロパティーです。

注:プロパティー同等(equivalence)は、プロパティー同一(equality)と同じではありません。同等なプロパティーは、同じ「値」(つまり、同じプロパティー拡張)を持っていますが、異なる内包的な意味を持っている(つまり、異なる概念を意味する)かもしれません。プロパティー同一は、owl:sameAs構成子で表されるべきです。これは、プロパティーが個体として扱われることを要求するため、このような公理はOWL Fullでのみ許されます。

4.2.2 owl:inverseOf

プロパティーには、定義域から値域への、方向性があります。実際のところ、両方向に関係を定義するのが有用であることが多いです(自動車を所有し、自動車は人に所有されるといったように)。owl:inverseOf構成子は、そのようなプロパティー間の逆の(inverse)関係を定義するために使用することができます。

構文上は、owl:inverseOfは、その定義域と値域の両方としてowl:ObjectPropertyを持つ、組み込みOWLプロパティーです。形式P1 owl:inverseOf P2の公理は、P1のプロパティー拡張のすべての対(x,y)に対して、P2のプロパティー拡張の対(y,x)が存在し、その逆も正しいと言明します。したがって、owl:inverseOfは、対称的な(symmetric)プロパティーです。

例:

<owl:ObjectProperty rdf:ID="hasChild">
  <owl:inverseOf rdf:resource="#hasParent"/>
</owl:ObjectProperty>

4.3 プロパティーにおけるグローバルなカーディナリティー制約

4.3.1 owl:FunctionalProperty

関数型(functional)プロパティーは、それぞれのインスタンスxに対し、たった一つの(ユニークな)値yを持つことができるプロパティーです。つまり、対(x,y1)と(x,y2)の両方がこのプロパティーのインスタンスであるような、2つの別個の値y1とy2はありえません。オブジェクト・プロパティーとデータ型プロパティーは、両方とも「関数型」であると宣言することができます。この目的のために、OWLは、組み込みクラスowl:FunctionalPropertyをRDFクラスrdf:Propertyの特別なサブクラスとして定義します。

以下の公理は、夫(husband)プロパティーが関数型であると明言します。つまり、女性は高々1人の夫を持つことができます(オントロジーの文化依存性のよい例)。

<owl:ObjectProperty rdf:ID="husband">
  <rdf:type    rdf:resource="&owl;FunctionalProperty" />
  <rdfs:domain rdf:resource="#Woman" />
  <rdfs:range  rdf:resource="#Man" />
</owl:ObjectProperty>

いつもどおり、構文上のバリエーションがあります。上の例は、下記のものと意味的に同等です。

<owl:ObjectProperty rdf:ID="husband">
  <rdfs:domain rdf:resource="#Woman" />
  <rdfs:range  rdf:resource="#Man" />
</owl:ObjectProperty>

<owl:FunctionalProperty rdf:about="#husband" />

4.3.2 owl:InverseFunctionalProperty

プロパティーが逆関数型(inverse-functional)であると宣言される場合、プロパティー・ステートメントの目的語は、一意に主語(ある個体)を決定します。より形式的には、Pがowl:InverseFunctionalPropertyであると明言すれば、これは、値yが単一のインスタンスxに対するPの値でのみありうると言明します。つまり、対(x1,y)と(x2,y)の両方がPのインスタンスであるような、2つの別個のインスタンスx1とx2はありえません。

構文上は、逆関数型プロパティー公理は、プロパティーが組み込みOWLクラスowl:InverseFunctionalPropertyのインスタンスであると宣言することにより指定され、これは、OWLクラスowl:ObjectPropertyのサブクラスです。

注:OWL Fullでは、データ型プロパティーがオブジェクト・プロパティーのサブクラスであるので、逆関数型プロパティーは、データ型プロパティーに対して定義することができます。OWL DLでは、オブジェクト・プロパティーとデータ型プロパティーは互いに素の関係で、そのため、逆関数型プロパティーは、データ型プロパティーに対して定義することができません。8.1項8.2項も参照してください。

逆関数型プロパティーの典型例:

<owl:InverseFunctionalProperty rdf:ID="biologicalMotherOf">
  <rdfs:domain rdf:resource="#Woman"/>
  <rdfs:range rdf:resource="#Human"/>
</owl:InverseFunctionalProperty>

この例は、生みの母(biologicalMotherOf)ステートメントのそれぞれの目的語(ある人間)に対して、主語(ある女性)を一意に識別することができるはずであると明言します。逆関数型プロパティーは、データベースにおけるキー(key)の概念に似ています。

関数型プロパティーとの違いのひとつは、逆関数型プロパティーに対しては、付加的なオブジェクト・プロパティーあるいはデータ型プロパティー公理が要求されないということであり、逆関数型プロパティーは、定義上、オブジェクト・プロパティーです。

owl:FunctionalPropertyowl:InverseFunctionalPropertyが、グローバルなカーディナリティー制約を指定することに注意してください。すなわち、いかなるクラスにプロパティーが適用されようとも、カーディナリティー制約は有効でなければなりません。これは、プロパティー制限に含まれるカーディナリティー制約とは異なります。後者は、クラス記述であり、そのクラスに適用された時にのみプロパティーにおいて実行されます。

4.4 プロパティーの論理特性

4.4.1 owl:TransitiveProperty

プロパティーPが推移的なプロパティーであると定義する場合、これは、対(x,y)がPのインスタンスで、対(y,z)がPのインスタンスでもある場合、対(x,z)もPのインスタンスであると推論できることを意味します。

構文上、プロパティーを組み込みOWLクラスowl:TransitivePropertyのインスタンスにすることにより、そのプロパティーは推移的であると定義され、これは、組み込みOWLクラスowl:ObjectPropertyのサブクラスとして定義されます。

推移的なプロパティーの典型例は、ある部分―全体関係を表すプロパティーです。例えば、地域間のsubRegionOfプロパティーが推移的であると言いたいかもしれません。

<owl:TransitiveProperty rdf:ID="subRegionOf">
  <rdfs:domain rdf:resource="#Region"/>
  <rdfs:range  rdf:resource="#Region"/>
</owl:TransitiveProperty>

これから、OWLの推論システムは、キアンティ・クラシコ(ChiantiClassico)トスカーナ(Tuscany)、およびイタリア(Italy)が地域であり、キアンティ・クラシコトスカーナの小地域(subregion)であり、トスカーナイタリアの小地域である場合、キアンティ・クラシコイタリアの小地域でもあると導き出すことできるはずです。

owl:TransitivePropertyは、owl:ObjectPropertyのサブクラスであるため、以下の構文上のバリエーションは上の例と同等であることに注意してください。

<owl:ObjectProperty rdf:ID="subRegionOf">
  <rdf:type rdf:resource="&owl;TransitiveProperty"/>
  <rdfs:domain rdf:resource="#Region"/>
  <rdfs:range  rdf:resource="#Region"/>
</owl:ObjectProperty>

注:OWL DLでは、推移的なプロパティーに対して、プロパティー自身あるいはそのスーパープロパティーにおいても、プロパティーあるいはそのスーパープロパティーの逆においても、ローカルあるいはグローバルなカーディナリティー制約は宣言されるべきではありません。

4.4.2 owl:SymmetricProperty

対称的なプロパティーは、対(x,y)がPのインスタンスである場合に、対(y,x)もPのインスタンスであるとするプロパティーです。構文上、プロパティーを組み込みOWLクラスowl:SymmetricPropertyowl:ObjectPropertyのサブクラス)のインスタンスにすることにより、そのプロパティーは対称的であると定義されます。

対称的なプロパティーのよく知られている例は、friendOf関係です。

<owl:SymmetricProperty rdf:ID="friendOf">
  <rdfs:domain rdf:resource="#Human"/>
  <rdfs:range  rdf:resource="#Human"/>
</owl:SymmetricProperty>

対称的なプロパティーの定義域と値域は同じです。

5. 個体

個体は、個体の公理(「事実(facts)」とも呼ばれる)を使用して定義されます。ここでは、以下の2つのタイプの事実について議論します。

  1. クラス・メンバーシップと個体のプロパティー値に関する事実
  2. 個体のアイデンティティーに関する事実

5.1 クラス・メンバーシップとプロパティー値

通常、多くの事実は、個体のクラス・メンバーシップと個体のプロパティー値を示すステートメントです。例として、クラスオペラ(Opera)のインスタンスに関する以下のステートメントの集合を考えてみてください。

<Opera rdf:ID="Tosca">  <hasComposer rdf:resource="#Giacomo_Puccini"/>
  <hasLibrettist rdf:resource="#Victorien_Sardou"/>
  <hasLibrettist rdf:resource="#Giuseppe_Giacosa"/>
  <hasLibrettist rdf:resource="#Luigi_Illica"/>
  <premiereDate rdf:datatype="&xsd;date">1900-01-14</premiereDate>
  <premierePlace rdf:resource="#Roma"/>
  <numberOfActs rdf:datatype="&xsd;positiveInteger">3</numberOfActs> 
</Opera>

この例には、個体トスカ(Tosca)(クラスオペラ(Opera)のインスタンス)に関する多くの事実が含まれています。トスカ(Tosca)は、ジャコモ・プッチーニ(Giacomo Puccini)によって作曲されました。このオペラには、3人の歌劇台本作家がいます。プロパティー初公演日(premiereDate)は、オペラをXMLスキーマ・データ型日付(date)のタイピングされたリテラルに結び付けます。データ型に関するXMLスキーマ・ドキュメント[XML Schema Datatypes]は、このデータ型の構文およびセマンティクスに関する関連情報を含んでいます。

個体の公理は、必ずしも名前付き個体に関するものである必要はなく、匿名の個体を参照することもできます。例として、下記のRDF/XMLを考えてみてください。この例では、クラス計測(Measurement)(観察の対象物、観察した現象、観察した値、および観察時間のような事実がリストアップされている数量観察)の匿名インスタンスに関するいくつかの事実を定義しています。

<Measurement>
  <observedSubject rdf:resource="#JaneDoe"/>
  <observedPhenomenon rdf:resource="#Weight"/>
  <observedValue>
    <Quantity>
      <quantityValue rdf:datatype="&xsd;float">59.5</quantityValue>      <quantityUnit rdf:resource="#Kilogram"/>
    </Quantity>
  </observedValue>  <timeStamp rdf:datatype="&xsd;dateTime">2003-01-24T09:00:08+01:00</timeStamp>
</Measurement>

この個体の公理には、2つの匿名の個体、すなわち、ある計測、ある数量(Quantity)が含まれます。自然言語では、主語ジェーン・ドウ(Jane Doe)に対して、現象の測定値、重量(Weight)が、ある量(キログラムという単位を用いて、59.5の値を持っている)です。測定の時刻は、タイム・ゾーンUTC+1(アムステルダム、ベルリン、パリの冬期間)において、2003年1月24日、朝9時8秒です。これまでのように、フロート(float)日時(dateTime)は、XMLスキーマ・データ型(関連するXMLスキーマ・ドキュメンテーション[XML Schema Datatypes]にある構文的・意味的な詳細)です。

5.2 個体のアイデンティティー

多くの言語は、いわゆる「単一名」仮定(その世界では、異なる名前は異なる事物を参照する)を持っています。ウェブにおいては、このような仮定は可能ではありません。例えば、同一人物は、様々な方法(つまり、異なるURI参照で)で参照される可能性があります。この理由のために、OWLはこのような仮定を行いません。2つのURI参照が同じあるいは異なる個体を参照するという明示的なステートメントがなされていなければ、OWLツールは、原則的に、どちらか一方の状況がありうると仮定するべきです。

OWLは、個体のアイデンティティーに関する事実を明言するための3つの構成子を提供します。

5.2.1 owl:sameAs

組み込みOWLプロパティーowl:sameAsは、個体を個体に結び付けます。そのようなowl:sameAsステートメントは、2つのURI参照が実際に同じものを参照するということを示します。つまり、個体は同じ「アイデンティティー」を持っています。

「人々(people)」のような個体に関して、この概念を理解することは比較的容易です。例えば、以下の2つのURI参照が実際に同一人物を参照すると明言することができます。

<rdf:Description rdf:about="#William_Jefferson_Clinton">
  <owl:sameAs rdf:resource="#BillClinton"/>
</rdf:Description>

owl:sameAsステートメントは、オントロジー間のマッピングを定義するのにしばしば使用されます。個体を参照するために皆が同じ名前を使用するだろうと仮定することは非現実的です。これには、相当大規模な計画が必要であり、ウェブの精神に反します。

クラスを(メタ)クラスのインスタンスとして扱うことができる、OWL Fullでは、クラスの同一性を定義するためにowl:sameAs構成子を使用することができ、したがって、2つの概念が同じ内包的な意味を持っていることを示すことができます。例:

<owl:Class rdf:ID="FootballTeam">
  <owl:sameAs rdf:resource="http://sports.org/US#SoccerTeam"/></owl:Class>

この公理がヨーロッパにおけるスポーツのオントロジーの一部であると想像することができます。2つのクラスは、ここでは個体として、このケースではクラスowl:Classのインスタンスとして扱われます。これにより、あるヨーロッパにおけるスポーツのオントロジーのクラスフットボール・チーム(FootballTeam)が、あるアメリカンにおけるスポーツのオントロジーのクラスサッカー・チーム(SoccerTeam)と同じ概念を意味すると述べることが可能になります。以下のステートメントとの違いに注意してください。

<footballTeam owl:equivalentClass us:soccerTeam />

これは、2つのクラスが同じクラス拡張を持っているけれども、(必ずしも)同じ概念ではないと明言します。

注:URI参照の比較の詳細に関しては、RDF概念ドキュメント[RDF Concepts]におけるRDF URI参照に関する項を参照してください。

5.2.2 owl:differentFrom

組み込みOWLowl:differentFromプロパティーは、個体を個体に結び付けます。owl:differentFromステートメントは、2つのURI参照が異なる個体を参照するということを示します。

例:

<Opera rdf:ID="Don_Giovanni"/>

<Opera rdf:ID="Nozze_di_Figaro">
  <owl:differentFrom rdf:resource="#Don_Giovanni"/>
</Opera>
<Opera rdf:ID="Cosi_fan_tutte">
  <owl:differentFrom rdf:resource="#Don_Giovanni"/>
  <owl:differentFrom rdf:resource="#Nozze_di_Figaro"/>
</Opera>
これは、3つの異なるオペラがあることを明言します。

5.2.3 owl:AllDifferent

すべての個体が、対で素の関係であると宣言しなければならない時には、単一名仮定が適用できるオントロジーでは、owl:differentFromの を使用すると、多数のステートメントにつながってしまいます。このような状況のために、OWLは構築要素owl:AllDifferentの形で特別なイディオムを提供します。owl:AllDifferentは、特別な組み込みOWLクラスで、owl:distinctMembersが定義され、owl:AllDifferentのインスタンスを個体のリストに結び付けます。このようなステートメントで意図される意味は、リストのすべての個体が互いにみな異なっているということです。

例:

<owl:AllDifferent>
  <owl:distinctMembers rdf:parsetype="Collection">
    <Opera rdf:about="#Don_Giovanni"/>
    <Opera rdf:about="#Nozze_di_Figaro"/>
    <Opera rdf:about="#Cosi_fan_tutte"/>
    <Opera rdf:about="#Tosca"/>
    <Opera rdf:about="#Turandot"/>
    <Opera rdf:about="#Salome"/>
  </owl:distinctMembers>
</owl:AllDifferent>

これは、これらの6つのURI参照がすべて異なるオペラを指すと明言します。

注:owl:distinctMembersは、便宜上追加される特別な構文の構成子であり、常にその主語としてowl:AllDifferent個体と共に使用されるべきです。

6. データ型

このドキュメントの多くの箇所で、データ値の値域指定のためのデータ値域の概念を見てきました。OWLでは、3つのタイプのデータ値域の仕様が許されています。

データ型に対する最小レベルのツールのサポートイについては、6.3項で議論されます。

6.1 RDFデータ型

OWLは、RDFデータタイピング・スキーム(XMLスキーマ・データ型[XML Schema Datatypes]を参照するためのメカニズムを提供する)を使用します。詳細な記述については、RDFドキュメント(例えば、[RDF Concepts])を参照してください。読者の便宜をはかり、ここでは、RDFデータ型の使用の概要を提供します。

データ値は、RDFスキーマ・クラスrdfs:Literalのインスタンスです。リテラルは、プレーン(plain)(データ型はない)あるいは型付き(typed)のどちらかでありえます。データ型は、クラスrdfs:Datatypeのインスタンスです。RDF/XMLでは、リテラルのタイプは、その値が以下の1つであることが推奨される、rdf:datatype属性によって指定されます。

RDFセマンティクス・ドキュメント[RDF Semantics、5項]は、以下のシンプルな組み込みXMLスキーマ・データ型の使用を推奨します。

注:rdfs:Datatypeのインスタンスを定義することによって、アプリケーションが自身のデータ型を定義することは、推奨されませんが、不正ではありません。このようなデータ型は「未承認」ですが、「未サポートのデータ型」と同じ方法で扱われます(OWLツールがこれらをどのように扱うべきかに関する詳細に関しては、6.3項を参照してください)。

データ型を使用する場合、プロパティーがあるデータ型の値域を持っていると定義されていたとしても、RDF/XMLは、プロパティーが使用されるごとにデータ型が指定されることをさらに要求することに注意してください。例としては、計測(Measurement)の例で以前に使用したプロパティーの宣言があげられます。

<owl:DatatypeProperty rdf:about="#timeStamp">
  <rdfs:domain rdf:resource="#Measurement"/>
  <rdf:range rdf:resource="&xsd;dateTime"/>
</owl:DatatypeProperty>

<Measurement>
  <timeStamp rdf:datatype="&xsd;dateTime">2003-01-24T09:00:08+01:00</timeStamp>  
</Measurement>

6.2 列挙型データ型

RDFデータ型に加え、OWLは、データ値の値域を定義するためのもうひとつの付加的な構成子(つまり、列挙型データ型)を提供します。このデータ型フォーマットは、owl:oneOf構成子を利用し、列挙型クラスを記述するためにも使用されます。列挙型データ型の場合、owl:oneOfの主語は、クラスowl:DataRangeの空白ノードであり、目的語はリテラルのリストです。残念ながら、RDFはRDFノード要素のリストであることを収集物に要求するため、リテラルのリストを指定するためにrdf:parsetype="Collection"というイディオムを使用することができません。したがって、基礎的なリスト構成子rdf:firstrdf:rest、およびrdf:nilを持つデータ値のリストを指定しなければなりません。

注:列挙型データ型は、OWL Liteに含まれていません。

下記の例は、プロパティーtennisGameScoreの値域が、整数値{0, 15, 30, 40}のリストであるように指定します。

<owl:DatatypeProperty rdf:ID="tennisGameScore">
  <rdfs:range>
    <owl:DataRange>
      <owl:oneOf>
        <rdf:List>
           <rdf:first rdf:datatype="&xsd;integer">0</rdf:first>
           <rdf:rest>
             <rdf:List>
               <rdf:first rdf:datatype="&xsd;integer">15</rdf:first>
               <rdf:rest>
                 <rdf:List>
                   <rdf:first rdf:datatype="&xsd;integer">30</rdf:first>
                   <rdf:rest>
                     <rdf:List>
                       <rdf:first rdf:datatype="&xsd;integer">40</rdf:first>
                       <rdf:rest rdf:resource="&rdf;nil" />
                     </rdf:List>                   </rdf:rest>                 </rdf:List>
              </rdf:rest>
            </rdf:List>
          </rdf:rest>
        </rdf:List>
      </owl:oneOf>
    </owl:DataRange>
  </rdfs:range>
</owl:DatatypeProperty>

6.3 データ型推論のサポート

データ型推論のサポートの点において、ツールにはバリエーションがあるかもしれません。最小のものとしては、ツールは、XMLスキーマ・データ型xsd:stringxsd:integerに対してデータ型推論をサポートしなければなりません。OWL Fullのツールは、rdf:XMLLiteralもサポートしなければなりません。未サポートのデータ型に関しては、字句が同一であるリテラルは同一であると考えられるべきですが、字句が異なるリテラルは同一か不同一かは分からないでしょう。未承認の(unrecognized)データ型は、未サポートのデータ型と同じ方法で扱われるべきです。

7. アノテーション、オントロジー・ヘッダ、インポート、およびバージョン情報

7.1 アノテーション

OWL Fullは、オントロジーのアノテーションに制約を全く置きません。OWL DLは、クラス、プロパティー、個体、およびオントロジー・ヘッダに関するアノテーションを許しますが、以下の条件下においてのみです。

以下の5つのアノテーション・プロパティーが、OWLで定義済みです。

OWL DLにおけるアノテーション・プロパティーの正当な使用例を以下に示します。

<owl:AnnotationProperty rdf:about="&dc;creator"/>

<owl:Class rdf:about="#MusicalWork">
  <rdfs:label>Musical work</rdfs:label>
  <dc:creator>N.N.</dc:creator>
</owl:Class>

この例は、&dc;dc:が、それぞれダブリン・コアURIと名前空間を指すと仮定します。したがって、OWL DLでアノテーション・プロパティーとしてダブリン・コア・プロパティーを使用するには、明示的なタイピング・トリプルが必要です。これは、アノテーションがOWL DL推論システムによって意味的に正確な方法で扱われることを保証します(詳細は、OWLセマンティクスおよび抽象構文ドキュメント[OWL S&AS]を参照してください)。

ひとたびdc:creatorをアノテーション・プロパティーとして定義すれば、OWL DLは、下記の値域制約のようなプロパティー公理を許しません。

<-- This is illegal in OWL DL -->
<owl:AnnotationProperty rdf:about="&dc;creator">
  <rdfs:range rdf:resource="&xsd;string"/>
</owl:AnnotationProperty>

アノテーション・プロパティー・ステートメントにおいてリテラルの値タイプを指定することが、なお可能であることに注意してください。

<Opera rdf:about="#Tosca">
  <dc:creator rdf:datatype="&xsd;string">Giacomo Puccini</dc:creator>
</Opera>

7.2 オントロジー・ヘッダ

オントロジーを記述しているドキュメントは、通常、オントロジー自体に関する情報を含んでいます。オントロジーは資源であり、したがって、OWLや他の名前空間からのプロパティーを使用して記述されるかもしれません。例えば、下記の通り。

<owl:Ontology rdf:about="">
  <owl:versionInfo> ... </owl:versionInfo>
  <rdfs:comment>...</rdfs:comment>
  <owl:imports rdf:resource="..."/>
</owl:Ontology>

これは、一般にオントロジー・ヘッダと呼ばれ、通常は、はRDF/XMLドキュメントの冒頭近くに置かれます。

  <owl:Ontology rdf:about="">

という行は、このブロックが、カレント・オントロジーを記述していると明言します。より正確に言えば、これは、カレント基底URIがクラスowl:Ontologyのインスタンスを識別すると明言します。ドキュメントの冒頭の<rdf:RDF>要素においてxml:base属性を使用して、基礎URIを定義することが推奨されます。

オントロジー・ヘッダーの例は、以下ようでありえます。

<owl:Ontology rdf:about="">
  <owl:versionInfo>v 1.17 2003/02/26 12:56:51 mdean</owl:versionInfo>
  <rdfs:comment>An example ontology</rdfs:comment>
  <owl:imports rdf:resource="http://www.example.org/foo"/>
</owl:Ontology>

次の項では、ヘッダー内で通常使用される様々なタイプのステートメントを記述します。

注:オントロジー・インポート構成子owl:importsおよびオントロジー・バージョン付け構成子owl:priorVersionowl:backwardCompatibleWith、およびowl:incompatibleWithは、OWLの語彙においてOWLの組み込みクラスowl:OntologyPropertyのインスタンスとして定義されます。owl:OntologyPropertyのインスタンスは、その定義域および値域としてクラスowl:Ontologyを持っていなければなりません。owl:OntologyPropertyの他のインスタンスを定義することが許されています。OWL DLでは、オントロジー・プロパティーに対して、7.1項のアノテーション・プロパティーに対して指定されたものと同じ制約を適用できます。

7.3 オントロジーのインポート

owl:importsステートメントは、定義を含んでいる別のOWLオントロジーを参照し、その意味はインポートするオントロジーの意味の一部であると見なされます。それぞれの参照は、オントロジーがどこからインポートされるのかを示すURIで構成されます。構文上は、owl:importsは、その定義域と値域としてクラスowl:Ontologyを持つプロパティーです。

owl:importsステートメントは、推移的です。つまり、オントロジーAがBをインポートし、BがCをインポートする場合、AはBとCの両方をインポートします。

オントロジーを自身にインポートすることは無効な行為とみなされ、従って、オントロジーAがBをインポート入し、BがAをインポートする場合、それらは同等であると見なされます。

OWLツールがインポートしたオントロジーをロードしなければならないかどうかは、ツールの目的によることに注意してください。ツールが完全な推論システム(完全な整合性チェッカーを含んでいる)である場合、インポートしたオントロジーをすべてロードしなければなりません。シンプルなエディターや不完全な推論システムのような他のツールは、インポートしたオントロジーのいくつかだけをロードするか、全くをロードしないことを選択できます。

owl:importsと名前空間宣言は不必要に見えるかもしれませんが、それらは実際に異なる目的で役立ちます。名前空間宣言は、識別子の参照に対する省略表現を単に設けるだけです。これは、そのURIに存在するドキュメントの意味を暗黙的には含みません。いっぽう、owl:importsは、インポートしたドキュメントの識別子を参照するための省略表現の表記法を少しも提供しません。したがって、通常は、インポートされるあらゆるオントロジーに対応する名前空間宣言を持ちます。

注:owl:importsは、owl:OntologyPropertyのインスタンスです。

7.4 バージョン情報

7.4.1 owl:versionInfo

owl:versionInfoステートメントは、その目的語として一般に当該バージョンに関する情報を示す文字列を持っています(例えばRCS/CVSキーワード)。このステートメントは、RDF(S)モデル理論によって与えられた場合をのぞき、オントロジーの論理的な意味には関与しません。

このプロパティーは、通常はオントロジーに関して明言するために使用されますが、あらゆるOWL構成子に適用されえます。例えば、OWLクラスにowl:versionInfoステートメントを付けることができます。

注:owl:versionInfoは、owl:AnnotationPropertyのインスタンスです。

7.4.2 owl:priorVersion

owl:priorVersionステートメントには、別のオントロジーへの参照が含まれます。これにより、指定されたオントロジーが、包含されているオントロジーの前のバージョンであると認識されます。これは、RDF(S)モデル理論によって与えられた場合をのぞき、モデル理論セマンティクスにおいて意味を持ちません。しかし、バージョンごとにオントロジーを編成するために、ソフトウェアで使用することができます。

owl:priorVersionは、その定義域と値域としてクラスowl:Ontologyを持つ、組み込みOWLプロパティーです。

注:owl:priorVersionは、owl:OntologyPropertyのインスタンスです。

7.4.3 owl:backwardCompatibleWith

owl:backwardCompatibleWithステートメントには、別のオントロジーへの参照が含まれています。これにより、指定されたオントロジーが、包含されているオントロジーの前のバージョンであると認識され、さらに、それと下位互換性をもつということを示します。特に、これは、前のバージョンのすべての識別子が新バージョンで同じ意図に解釈されることを示します。したがって、これは、ドキュメントの著者が(単に名前空間宣言とowl:importsステートメントを、新バージョンのURLを参照するように更新することにより)自分のドキュメントを新バージョンにコミット(commit)するように安全に変更することができるということを示唆します。owl:backwardCompatibleWithが、2つのバージョンに対して宣言されているのではない場合、 互換性は見込めません。

owl:backwardCompatibleWithは、RDF(S)モデル理論によって与えられた場合をのぞき、モデル理論セマンティクスにおいて意味をを持ちません。

owl:backwardCompatibleWithは、その定義域と値域としてクラスowl:Ontologyを持つ、組み込みOWLプロパティーです。

注:owl:backwardCompatibleWithは、owl:OntologyPropertyのインスタンスです。

7.4.4 owl:incompatibleWith

owl:incompatibleWithステートメントには、別のオントロジーへの参照が含まれます。これは、含んでいるオントロジーが、参照されたオントロジーの後のバージョンであるけれども、それと下位互換はないということを示します。原則的に、これは、変更を要するかどうかをチェックせずには、新バージョンを使用するためにドキュメントをアップグレードすることができないことを明示したいオントロジーの著者が使用するためのものです。

owl:incompatibleWithは、RDF(S)モデル理論によって与えられた場合をのぞき、モデル理論セマンティクスにおいて意味を持ちません。

owl:incompatibleWithは、その定義域と値域としてクラスowl:Ontologyを持つ、組み込みOWLプロパティーです。

注:owl:backwardCompatibleWithは、owl:OntologyPropertyのインスタンスです。

7.4.5 owl:DeprecatedClassおよびowl:DeprecatedProperty

非推奨は、特定の機能が下位互換性のために保持されているが、今後段階的に廃止されるかもしれないことを示すために、バージョニング・ソフトウェア(例えば、Javaプログラミング言語を参照)で一般に使用される機能です。ここでは、特定の識別子が、タイプowl:DeprecatedClassあるいはowl:DeprecatedPropertyであると述べられ、そこでは、owl:DeprecatedClassrdfs:Classのサブクラスで、owl:DeprecatedPropertyrdf:Propertyのサブクラスです。用語を非推奨にすれば、その用語をオントロジーにコミットする新しいドキュメントでは使用してはならないことを意味します。これによって、古い語彙を段階的に廃止しながらも、オントロジーが下位互換性を保持することが可能になります(したがって、下位互換性と組み合わせてのみ、非推奨の使用は意味をなします)。その結果、古いデータやアプリケーションが、新バージョンをマイグレートすることがより容易になり、したがって、新バージョンの導入レベルを増大させることができます。これは、RDF(S)モデル理論によって与えられた場合をのぞき、モデル理論セマンティクスにおいて意味を持ちません。しかし、オーサリング・ツールは、OWLマークアップをチェックする際に、ユーザに警告するためにこれを使用するかもしれません。

非推奨の例は、以下のとおりです。

<owl:Ontology rdf:about="">
  <rdfs:comment>Vehicle Ontology, v. 1.1</rdfs:comment>
  <owl:backwardCompatibleWith
          rdf:resource="http://www.example.org/vehicle-1.0"/>   
  <owl:priorVersion rdf:resource="http://www.example.org/vehicle-1.0"/>
</owl:Ontology>

<owl:DeprecatedClass rdf:ID="Car">
  <rdfs:comment>Automobile is now preferred</rdfs:comment>
  <owl:equivalentClass rdf:resource="#Automobile"/>
  <!-- note that equivalentClass only means that the classes have the same
       extension, so this DOES NOT lead to the entailment that
       Automobile is of type DeprecatedClass too -->        
</owl:DeprecatedClass>

<owl:Class rdf:ID="Automobile" />

<owl:DeprecatedProperty rdf:ID="hasDriver">
  <rdfs:comment>inverse property drives is now preferred</rdfs:comment>
  <owl:inverseOf rdf:resource="#drives" />
</owl:DeprecatedProperty>

<owl:ObjectProperty rdf:ID="drives" />

8. OWL Full、OWL DL、およびOWL Lite

「はじめに」では、OWLの3つのサブ言語について簡潔に議論しました。この項では、OWLの3つの「種類」の違いに関する有益な仕様を提供します。違いに関する形式上の説明は、セマンティクスおよび抽象構文ドキュメント[OWL S&AS]で提供されます。

8.1 OWL Full

OWL Fullは、実際にはサブ言語ではありません。OWL Fullは、すべてのOWL言語構成子を含んでおり、RDF構成子の自由で制約のない使用を提供します。OWL Fullでは、資源owl:Classrdfs:Classと同等です。これは、OWL DLおよびOWL Liteとは異なり、owl:Classrdfs:Classの正式なサブクラスです(OWL DLおよびOWL Liteでは、すべてのRDFクラスが、OWLクラスだとは限らないことを意味します)。OWL Fullでは、クラスを個体として扱うこともできます。例えば、OWL Fullでは、クラス名(世界中を飛ぶフォッカー100飛行機の集合を意味する)および個体の名前(例えば、クラス機種(AirplaneType)のインスタンス)の両方として動作する「フォッカー100」識別子を持つことは、完全に正当です。

OWL Fullでは、すべてのデータ値は、個体の定義域の一部ともみなされます。実際、OWL Fullでは、個体の宇宙(universe)は、すべての資源で構成されます(owl:Thingは、rdfs:Resourceと同等)。オブジェクト・プロパティーとデータ型プロパティーは、互いに素ではないことを意味します。OWL Fullでは、owl:ObjectPropertyは、rdf:Propertyと同等です。結果は、データ型プロパティーが、事実上、オブジェクト・プロパティーのサブクラスであるということです。(注:owl:ObjectPropertyowl:DatatypePropertyの両方がrdf:Propertyのサブクラスであるという事実は、これと矛盾してはいません)。

OWL Fullは、OWLの表現力をRDFの柔軟性やメタモデル化機能と組み合わせたい人に主として役立ちます。しかし、OWL Fullの機能の使用は、OWL DLとOWL Liteが推論システムに供給することができるいくつかの保証(下記を参照)を失うことを意味します。

注:OWL DLあるいはLiteに属するように特に構築されたのでなければ、RDFドキュメントは、通常、OWL Fullに属しているでしょう。

注:したがって、OWL Fullでは、owl:Thingrdfs:Resourceと同等、owl:Classrdfs:Classと同等、そして、owl:ObjectPropertyrdf:Propertyと同等でです。

8.2 OWL DL

OWL DLは、OWL言語構成子の使用に多くの制約を置くOWLのサブ言語です。簡潔に言えば、これらの制約は、以下の通りです。

OWL DLのこれらの制約は、任意の集合のように見えるかもしれませんが、実際はそうではありません。制約は、記述論理のための推論システムの分野における取り組みに基づいており、これらの制限が、オントロジーの構築者やユーザに推論のサポートを提供することを要求します。特に、OWL DL制限は、決定可能な推論手順がOWL推論システムに対して存在しうると、現在の研究が保証できるOWL Fullの最大のサブセットを許します。

注:付録Eは、RDFにおいてOWL DLオントロジーを指定するための集合の実用的なガイドラインを提供します。

8.3 OWL Lite

OWL Liteは、OWL DLがOWL言語構成子の使用に置くすべての制限に準じます。さらに、OWL Liteは、以下の使用を禁止します。

OWL Liteでは、以下も要求されます。

OWL Liteの表現力制限の背後にある考えは、制限が最小限の有用な言語機能のサブセットを提供するということで、ツールの開発者がサポートするのが比較的容易です。OWL Liteの言語構成子は、サブクラス階層構築に対する基礎を提供します:サブクラスおよびプロパティー制限。さらに、OWL Liteでは、プロパティーがオプションになったり、要求されることが許されます。OWL Liteにおける制限は、OWL DLよりクラスの複雑さが低いです。これは、OWL Liteに対する完全な推論システムの性能に好ましい影響を及ぼし得ます。

OWL Liteの語彙のみをサポートする(さもなければ、OWL DLの制限を緩める)実装は、整合性と複雑性に関して一定の計算上の要求をすることができません。しかし、そのような実装は、OWLシステムに、RDFSモデル、データ・ベース、マークアップ・ツール、あるいはその他の非推論ツールとの相互運用性を提供するのに有用かもしれません。ウェブ・オントロジー・ワーキンググループは、この潜在的に有用なサブセットに名前を与えませんでした。

付録A. 全言語要素の索引

注:この付録には、OWL固有の構成子のみが含まれています。RDF/RDFS構成子に関しては、関連するRDFドキュメンテーション、特にRDFスキーマ・ドキュメント[RDF Vocabulary]を参照してください。

[OWL Reference]
(本ドキュメント)
[OWL Semantics]
(規範)
[OWL Guide]
(例)
owl:AllDifferent owl:AllDifferent owl:AllDifferent
owl:allValuesFrom owl:allValuesFrom owl:allValuesFrom
owl:AnnotationProperty owl:AnnotationProperty
owl:backwardCompatibleWith owl:backwardCompatibleWith owl:backwardCompatibleWith
owl:cardinality owl:cardinality owl:cardinality
owl:Class owl:Class owl:Class
owl:complementOf owl:complementOf owl:complementOf
owl:DataRange owl:DataRange
owl:DatatypeProperty owl:DatatypeProperty owl:DatatypeProperty
owl:DeprecatedClass owl:DeprecatedClass owl:DeprecatedClass
owl:DeprecatedProperty owl:DeprecatedProperty owl:DeprecatedProperty
owl:differentFrom owl:differentFrom owl:differentFrom
owl:disjointWith owl:disjointWith owl:disjointWith
owl:distinctMembers owl:distinctMembers owl:distinctMembers
owl:equivalentClass owl:equivalentClass owl:equivalentClass
owl:equivalentProperty owl:equivalentProperty owl:equivalentProperty
owl:FunctionalProperty owl:FunctionalProperty owl:FunctionalProperty
owl:hasValue owl:hasValue owl:hasValue
owl:imports owl:imports owl:imports
owl:incompatibleWith owl:incompatibleWith owl:incompatibleWith
owl:intersectionOf owl:intersectionOf owl:intersectionOf
owl:InverseFunctionalProperty owl:InverseFunctionalProperty owl:InverseFunctionalProperty
owl:inverseOf owl:inverseOf owl:inverseOf
owl:maxCardinality owl:maxCardinality owl:maxCardinality
owl:minCardinality owl:minCardinality owl:minCardinality
owl:Nothing owl:Nothing owl:Nothing
owl:ObjectProperty owl:ObjectProperty owl:ObjectProperty
owl:oneOf owl:oneOf owl:oneOf
owl:onProperty owl:onProperty owl:onProperty
owl:Ontology owl:Ontology owl:Ontology
owl:OntologyProperty owl:OntologyProperty
owl:priorVersion owl:priorVersion owl:priorVersion
owl:Restriction owl:Restriction owl:Restriction
owl:sameAs owl:sameAs owl:sameAs
owl:someValuesFrom owl:someValuesFrom owl:someValuesFrom
owl:SymmetricProperty owl:SymmetricProperty owl:SymmetricProperty
owl:Thing owl:Thing owl:Thing
owl:TransitiveProperty owl:TransitiveProperty owl:TransitiveProperty
owl:unionOf owl:unionOf owl:unionOf
owl:versionInfo owl:versionInfo owl:versionInfo

付録B. OWLのRDFスキーマ

この付録の目的の記述に関しては、1.7項を参照してください。この付録のRDF/XMLバージョンは、http://www.w3.org/2002/07/owlにあります。

<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [
     <!ENTITY rdf  "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
     <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
     <!ENTITY xsd  "http://www.w3.org/2001/XMLSchema#" >
     <!ENTITY owl  "http://www.w3.org/2002/07/owl#" >
   ]>

<rdf:RDF  xmlns     ="&owl;"
  xmlns:owl ="&owl;"
  xml:base  ="http://www.w3.org/2002/07/owl"
  xmlns:rdf ="&rdf;"
  xmlns:rdfs="&rdfs;"
>

<Ontology rdf:about="">
  <imports rdf:resource="http://www.w3.org/2000/01/rdf-schema"/>
  <rdfs:isDefinedBy rdf:resource="http://www.w3.org/TR/2004/REC-owl-semantics-20040210/" />
  <rdfs:isDefinedBy rdf:resource="http://www.w3.org/TR/2004/REC-owl-test-20040210/" />
  <rdfs:isDefinedBy rdf:resource="http://www.w3.org/TR/2004/REC-owl-features-20040210/" />  <rdfs:comment>このファイルは、RDFスキーマ・フォーマットで、
    OWL Full、OWL DL、およびOWL LiteのRDF/XML構文の基礎を一
    緒に形成する組み込みクラスとプロパティーを指定します。我々
    は、人々がこのファイルを彼らのオントロジーへ明示的にイン
    ポートすることは予期していません。このファイルをインポー
    トする人々は、自分たちのオントロジーがOWL Fullオントロジ
    ーであることを予期すべきです。
  </rdfs:comment>
  <versionInfo>10 February 2004</versionInfo>
</Ontology>

<rdfs:Class rdf:ID="Class">
  <rdfs:label>Class</rdfs:label>
  <rdfs:subClassOf rdf:resource="&rdfs;Class"/>
</rdfs:Class>

<Class rdf:ID="Thing">
  <rdfs:label>Thing</rdfs:label>
  <unionOf rdf:parsetype="Collection">
    <Class rdf:about="#Nothing"/>
    <Class>
      <complementOf rdf:resource="#Nothing"/>
    </Class>
  </unionOf></Class>

<Class rdf:ID="Nothing">
  <rdfs:label>Nothing</rdfs:label>  <complementOf rdf:resource="#Thing"/>
</Class>

<rdf:Property rdf:ID="equivalentClass">
  <rdfs:label>equivalentClass</rdfs:label>
  <rdfs:subPropertyOf rdf:resource="&rdfs;subClassOf"/>
  <rdfs:domain rdf:resource="#Class"/>
  <rdfs:range rdf:resource="#Class"/>
</rdf:Property>

<rdf:Property rdf:ID="disjointWith">
  <rdfs:label>disjointWith</rdfs:label>
  <rdfs:domain rdf:resource="#Class"/>  <rdfs:range rdf:resource="#Class"/>
</rdf:Property>

<rdf:Property rdf:ID="equivalentProperty">
  <rdfs:label>equivalentProperty</rdfs:label>
  <rdfs:subPropertyOf rdf:resource="&rdfs;subPropertyOf"/>
</rdf:Property>

<rdf:Property rdf:ID="sameAs"> 
  <rdfs:label>sameAs</rdfs:label>
  <rdfs:domain rdf:resource="#Thing"/>
  <rdfs:range rdf:resource="#Thing"/>
</rdf:Property>

<rdf:Property rdf:ID="differentFrom">
  <rdfs:label>differentFrom</rdfs:label>
  <rdfs:domain rdf:resource="#Thing"/>
  <rdfs:range rdf:resource="#Thing"/>
</rdf:Property>

<rdfs:Class rdf:ID="AllDifferent">
  <rdfs:label>AllDifferent</rdfs:label>
</rdfs:Class>

<rdf:Property rdf:ID="distinctMembers">
  <rdfs:label>distinctMembers</rdfs:label>
  <rdfs:domain rdf:resource="#AllDifferent"/>
  <rdfs:range rdf:resource="&rdf;List"/>
</rdf:Property>
  
<rdf:Property rdf:ID="unionOf">  <rdfs:label>unionOf</rdfs:label>
  <rdfs:domain rdf:resource="#Class"/>
  <rdfs:range rdf:resource="&rdf;List"/>
</rdf:Property>

<rdf:Property rdf:ID="intersectionOf">
  <rdfs:label>intersectionOf</rdfs:label>
  <rdfs:domain rdf:resource="#Class"/>  <rdfs:range rdf:resource="&rdf;List"/>
</rdf:Property>

<rdf:Property rdf:ID="complementOf">
  <rdfs:label>complementOf</rdfs:label>
  <rdfs:domain rdf:resource="#Class"/>
  <rdfs:range rdf:resource="#Class"/>
</rdf:Property>

<rdf:Property rdf:ID="oneOf">
  <rdfs:label>oneOf</rdfs:label>
  <rdfs:domain rdf:resource="&rdfs;Class"/>
  <rdfs:range rdf:resource="&rdf;List"/>
</rdf:Property>

<rdfs:Class rdf:ID="Restriction">
  <rdfs:label>Restriction</rdfs:label>
  <rdfs:subClassOf rdf:resource="#Class"/>
</rdfs:Class>

<rdf:Property rdf:ID="onProperty">
  <rdfs:label>onProperty</rdfs:label>
  <rdfs:domain rdf:resource="#Restriction"/>
  <rdfs:range rdf:resource="&rdf;Property"/>
</rdf:Property>

<rdf:Property rdf:ID="allValuesFrom">
  <rdfs:label>allValuesFrom</rdfs:label>
  <rdfs:domain rdf:resource="#Restriction"/>
  <rdfs:range rdf:resource="&rdfs;Class"/>
</rdf:Property>

<rdf:Property rdf:ID="hasValue">
  <rdfs:label>hasValue</rdfs:label>
  <rdfs:domain rdf:resource="#Restriction"/>
</rdf:Property>

<rdf:Property rdf:ID="someValuesFrom">
  <rdfs:label>someValuesFrom</rdfs:label>
  <rdfs:domain rdf:resource="#Restriction"/>
  <rdfs:range rdf:resource="&rdfs;Class"/>
</rdf:Property>

<rdf:Property rdf:ID="minCardinality">
  <rdfs:label>minCardinality</rdfs:label>
  <rdfs:domain rdf:resource="#Restriction"/>  <rdfs:range rdf:resource="&xsd;nonNegativeInteger"/>
</rdf:Property>

<rdf:Property rdf:ID="maxCardinality">
  <rdfs:label>maxCardinality</rdfs:label>
  <rdfs:domain rdf:resource="#Restriction"/>
  <rdfs:range rdf:resource="&xsd;nonNegativeInteger"/>
</rdf:Property>

<rdf:Property rdf:ID="cardinality">
  <rdfs:label>cardinality</rdfs:label>
  <rdfs:domain rdf:resource="#Restriction"/>
  <rdfs:range rdf:resource="&xsd;nonNegativeInteger"/>
</rdf:Property>

<rdfs:Class rdf:ID="ObjectProperty">
  <rdfs:label>ObjectProperty</rdfs:label>
  <rdfs:subClassOf rdf:resource="&rdf;Property"/>
</rdfs:Class>

<rdfs:Class rdf:ID="DatatypeProperty">
  <rdfs:label>DatatypeProperty</rdfs:label>
  <rdfs:subClassOf rdf:resource="&rdf;Property"/>
</rdfs:Class>

<rdf:Property rdf:ID="inverseOf">
  <rdfs:label>inverseOf</rdfs:label>
  <rdfs:domain rdf:resource="#ObjectProperty"/>
  <rdfs:range rdf:resource="#ObjectProperty"/></rdf:Property>
<rdfs:Class rdf:ID="TransitiveProperty">
  <rdfs:label>TransitiveProperty</rdfs:label>
  <rdfs:subClassOf rdf:resource="#ObjectProperty"/>
</rdfs:Class>

<rdfs:Class rdf:ID="SymmetricProperty">
  <rdfs:label>SymmetricProperty</rdfs:label>
  <rdfs:subClassOf rdf:resource="#ObjectProperty"/>
</rdfs:Class>

<rdfs:Class rdf:ID="FunctionalProperty">
  <rdfs:label>FunctionalProperty</rdfs:label>
  <rdfs:subClassOf rdf:resource="&rdf;Property"/>
</rdfs:Class>

<rdfs:Class rdf:ID="InverseFunctionalProperty">
  <rdfs:label>InverseFunctionalProperty</rdfs:label>
  <rdfs:subClassOf rdf:resource="&owl;ObjectProperty"/>
</rdfs:Class>

<rdfs:Class rdf:ID="AnnotationProperty">
  <rdfs:subClassOf rdf:resource="&rdf;Property"/>
</rdfs:Class>
<AnnotationProperty rdf:about="&rdfs;label"/>
<AnnotationProperty rdf:about="&rdfs;comment"/>
<AnnotationProperty rdf:about="&rdfs;seeAlso"/>
<AnnotationProperty rdf:about="&rdfs;isDefinedBy"/>

<rdfs:Class rdf:ID="Ontology">
  <rdfs:label>Ontology</rdfs:label>
</rdfs:Class>
<rdfs:Class rdf:ID="OntologyProperty">
  <rdfs:subClassOf rdf:resource="&rdf;Property"/></rdfs:Class>

<rdf:Property rdf:ID="imports">
  <rdfs:label>imports</rdfs:label>
  <rdf:type rdf:resource="#OntologyProperty"/>
  <rdfs:domain rdf:resource="#Ontology"/>
  <rdfs:range rdf:resource="#Ontology"/>
</rdf:Property>

<rdf:Property rdf:ID="versionInfo">
  <rdfs:label>versionInfo</rdfs:label>
  <rdf:type rdf:resource="#AnnotationProperty"/>
</rdf:Property>

<rdf:Property rdf:ID="priorVersion">  <rdfs:label>priorVersion</rdfs:label>
  <rdf:type rdf:resource="#OntologyProperty"/>
  <rdfs:domain rdf:resource="#Ontology"/>
  <rdfs:range rdf:resource="#Ontology"/>
</rdf:Property>

<rdf:Property rdf:ID="backwardCompatibleWith">
  <rdfs:label>backwardCompatibleWitesh</rdfs:label>
  <rdf:type rdf:resource="#OntologyProperty"/>
  <rdfs:domain rdf:resource="#Ontology"/>
  <rdfs:range rdf:resource="#Ontology"/>
</rdf:Property>

<rdf:Property rdf:ID="incompatibleWith">
  <rdfs:label>incompatibleWith</rdfs:label>
  <rdf:type rdf:resource="#OntologyProperty"/>
  <rdfs:domain rdf:resource="#Ontology"/>
  <rdfs:range rdf:resource="#Ontology"/>
</rdf:Property>

<rdfs:Class rdf:ID="DeprecatedClass">
  <rdfs:label>DeprecatedClass</rdfs:label>
  <rdfs:subClassOf rdf:resource="&rdfs;Class"/>
</rdfs:Class>

<rdfs:Class rdf:ID="DeprecatedProperty">
  <rdfs:label>DeprecatedProperty</rdfs:label>
  <rdfs:subClassOf rdf:resource="&rdf;Property"/>
</rdfs:Class>

<rdfs:Class rdf:ID="DataRange">
  <rdfs:label>DataRange</rdfs:label>
</rdfs:Class>

</rdf:RDF>


付録C. OWLクイック・リファレンス

OWL語彙のクラス:

rdfs:Class
owl:AllDifferent
owl:AnnotationProperty
owl:Class
owl:DataRange
owl:DatatypeProperty
owl:DeprecatedClass
owl:DeprecatedProperty
owl:FunctionalProperty
owl:InverseFunctionalProperty
owl:Nothing
owl:ObjectProperty
owl:Ontology
owl:OntologyProperty
owl:Restriction
owl:SymmetricProperty
owl:Thing
owl:TransitiveProperty

OWL語彙のプロパティー:

rdf:Property rdfs:domain rdfs:range
owl:allValuesFrom owl:Restriction rdfs:Class
owl:backwardCompatibleWith owl:Ontology owl:Ontology
owl:cardinality owl:Restriction xsd:nonNegativeInteger
owl:complementOf owl:Class owl:Class
owl:differentFrom owl:Thing owl:Thing
owl:disjointWith owl:Class owl:Class
owl:distinctMembers owl:AllDifferent rdf:List
owl:equivalentClass owl:Class owl:Class
owl:equivalentProperty rdf:Property rdf:Property
owl:hasValue owl:Restriction
owl:imports owl:Ontology owl:Ontology
owl:incompatibleWith owl:Ontology owl:Ontology
owl:intersectionOf owl:Class rdf:List
owl:inverseOf owl:ObjectProperty owl:ObjectProperty
owl:maxCardinality owl:Restriction xsd:nonNegativeInteger
owl:minCardinality owl:Restriction xsd:nonNegativeInteger
owl:oneOf owl:Class rdf:List
owl:onProperty owl:Restriction rdf:Property
owl:priorVersion owl:Ontology owl:Ontology
owl:sameAs owl:Thing owl:Thing
owl:someValuesFrom owl:Restriction rdfs:Class
owl:unionOf owl:Class rdf:List
owl:versionInfo

付録D. DAML+OILからの変更

この項では、DAML+OIL[DAML+OIL]からOWLへの変更を要約します。

  1. セマンティクスは、大きく変更されました。3つのサブ言語に関して言えば、DAML+OILセマンティクスは、OWL DLセマンティクスに最も近いです。
  2. 名前空間は、http://www.w3.org/2002/07/owlに変更されました。
  3. 以下を含む、RDFコア・ワーキンググループによるRDFおよびRDFスキーマへの様々な更新を組み入れました。
  4. 修飾付き制限(qualified restrictions)が言語から削除され、その結果、以下のプロパティーが削除されました。
  5. 以下の表で示されているような、様々なプロパティーとクラスが改名されました。
    DAML+OIL OWL
    daml:differentIndividualFrom owl:differentFrom
    daml:equivalentTo owl:sameAs
    daml:sameClassAs owl:equivalentClass
    daml:samePropertyAsowl:equivalentProperty
    daml:hasClass owl:someValuesFrom
    daml:toClass owl:allValuesFrom
    daml:UnambiguousProperty owl:InverseFunctionalProperty
    daml:UniqueProperty owl:FunctionalProperty
  6. owl:SymmetricPropertyが追加されました。
  7. owl:AnnotationPropertyowl:OntologyProperty、およびowl:DataRangeが、同様に追加されました。
  8. OWL Fullでは、owl:DatatypePropertyは、owl:InverseFunctionalPropertyでありえます。
  9. RDFおよびRDFスキーマのクラスとプロパティーの同意語が、言語から削除され、その結果、以下が削除されました。
  10. owl:unionOfあるいはrdfs:subClassOfおよびowl:disjointWithを使用すれば同じ効果が得られるため、daml:disjointUnionOfが言語から削除されました。
  11. daml:equivalentToは、owl:sameAsに改名され、もはやowl:equivalentClassおよびowl:equivalentPropertyのスーパープロパティーではなくなりました。
  12. 以下のプロパティーとクラスが、バージョン付けをサポートするために追加されました。
  13. owl:AllDifferentおよびowl:distinctMembersは、単一名仮定(Unique Names Assumption)を指定するために追加されました。

付録E. OWL DLオントロジーの経験則

OWL抽象構文およびセマンティクス・ドキュメント[OWL S&AS]は、RDFトリプルへのマッピングに加えて、抽象構文に関するOWLオントロジーの特性を規定します。

以下の規則は、RDFグラフがDLオントロジーになる条件の非形式的な特性を示します。これは、S&ASで提供された特性に取って代わることは意図されていませんが、その代りに、いくつかの一般的なポインターを与えます—これらのガイドラインを守れば、OWL DLオントロジーを作成する可能性が高いということです。また、これは、トリプル表現を抽象構文により近いものに変える方法を教えることも意図されていません。

語彙に干渉しない

組み込みプロパティーおよびクラスを、再定義するべきではありません。これは、OWL、RDF、あるいはRDFS名前空間における事物がトリプルの主語として現われてはならないことを一般に意味します。

明示的なタイプ付け(typing)を提供

すべてが、タイプ1を持っているべきです。クラスが予期される場所でなんらかのURI参照xが使用される場合、グラフは以下を明言するトリプルを含んでいるべきです。

x rdf:type owl:Class

同様に、オブジェクト・プロパティーが予期される場所でプロパティーpが使用される場合、以下のトリプル2が存在するべきです。

p rdf:type owl:ObjectProperty

データ・プロパティーが予期される場所でプロパティーqが使用される場合、以下のトリプルが存在するべきです。

q rdf:type owl:DatatypeProperty

オントロジーのプロパティーが予期されている場所でプロパティーoが使用される場合、組み込みオントロジーのプロパティー(owl:importsowl:priorVersionowl:backwardCompatibleWith、およびowl:incompatibleWith)のひとつであるか、以下のトリプルが存在するかのどちらかであるべきです。

o rdf:type owl:OntologyProperty

アノテーション・プロパティーが予期される場所でプロパティーaが使用される場合、組み込みアノテーション・プロパティー(owl:versionInfordfs:labelrdfs:commentrdfs:seeAlso、およびrdfs:isDefinedBy)のひとつであるか、以下のトリプルが存在するかのどちらかであるべきです。

a rdf:type owl:AnnotationProperty

オントロジーで生じるあらゆる個体は、少なくとも1つのタイプを指定するべきです。つまり、個体iに対して、以下のトリプルが存在しなければなりません。

i rdf:type c

ここでは、cは、owl:Classあるいはowl:Restrictionです。

名前を分離しておく

クラス、プロパティー(オブジェクト、データ型、オントロジー、およびアノテーション)および個体に対するURI参照は、互いに素であるべきです。したがって、以下のようなものを持つことはできません。

x rdf:type owl:Class
x rdf:type owl:ObjectProperty

特に、これは、インスタンスとしてクラスを使用することができないことを意味します。つまり、

x rdf:type owl:Class
y rdf:type owl:Class
x rdf:type y

は、有効なOWL DLではありません。ここでの一般的な規則は、以下のトリプルを持つグラフにノードxが存在している場合、

x rdf:type owl:Class

xは、述語rdf:typeを持ついかなる他のトリプルの主語としても現れるべきではないということです。3

制限

ノードxrdf:type owl:Restrictionを持っている場合、以下のようであるでしょう。

クラス公理

述語rdfs:subClassOfあるいはowl:equivalentClassあるいはowl:disjointWithを持つあらゆるトリプルに対し、トリプルの主語と目的語の両方は、owl:Classあるいはowl:Restrictionであるべきです。つまり、

x rdfs:subClassOf y

を持っている場合、グラフは、

x rdf:type owl:Class

あるいは

x rdf:type owl:Restriction.

のうちの1つ、および、

y rdf:type owl:Class

あるいは

y rdf:type owl:Restriction

のうちの1つを含んでなければなりません。

プロパティー公理

述語rdfs:subPropertyOfあるいはowl:equivalentPropertyを持つあらゆるトリプルに対し、トリプルの主語と目的語の両方は、owl:ObjectPropertyあるいはowl:DatatypePropertyのうちのひとつである、同じタイプを持つべきです。つまり、

p owl:equivalentProperty q

を持っている場合、グラフは、

p rdf:type owl:ObjectProperty
q rdf:type owl:ObjectProperty.

あるいは

p rdf:type owl:DatatypeProperty
q rdf:type owl:DatatypeProperty

のどちらかを含んでいなければなりません。

述語rdfs:domainを持つトリプルは、その主語としてowl:ObjectPropertyあるいはowl:DatatypePropertyを、その目的語としてowl:Classあるいはowl:Restrictionを持っているべきです。

述語rdfs:rangeを持つトリプルは、その主語としてowl:ObjectPropertyあるいはowl:DatatypePropertyのどちらかを持っているべきです。前者の場合には、トリプルの目的語はowl:Classあるいはowl:Restrictionであるべきで、後者の場合には、目的語はXMLスキーマ・データ型、rdfs:Literal、あるいは、タイプowl:DataRangeを持つデータ値域を指定するowl:oneOfのいずれかであるべきです。

owl:inverseOfトリプルの主語と目的語の両方が、タイプowl:ObjectPropertyを持っていなければなりません。

個体公理

述語owl:sameAsあるいはowl:differentFromを持つあらゆるトリプルに対しては、主語と目的語は個体でなければなりません。

owl:sameAsによって2つのクラスを関連付けることは、owl:equivalentClassによってこれらを関連付けることとは大きく異なるということに注意してください。前者は、2つの目的語が事実上同じであると述べ、実際にインスタンスとしてのクラスの例であり、したがって、OWL DLからオントロジーを追い出します。後者は、クラスの拡張(例えば、メンバーの収集物)が同等であるという言明です。

同様に、owl:differentFromによってクラスを関連付けることは、owl:disjointWithによってそれらを関連付けることと同じではありません(これもまた、OWL Full構成子の一例です)。2つのクラスは異なる目的語であるかもしれませんが、それでもなお、同じ拡張を共有しているかもしれません。

ノードxrdf:typeowl:AllDifferentを持っている場合、以下のようであるでしょう。

ブール・クラス表現

ブール演算子(and、or、not)は、owl:intersectionOfowl:unionOf、およびowl:complementOfを使用して、OWLで表されます。

owl:complementOfトリプルの主語はowl:Classでなければならず、目的語はowl:Classあるいはowl:Restrictionのどちらかでなければなりません。

owl:unionOfあるいはowl:intersectionOfトリプルの主語はowl:Classでなければならず、目的語は(整形式の)rdf:Listでなければならず、これらの要素のすべてはowl:Classあるいはowl:Restrictionのどちらかです。拡張したrdf:Listsを明示的に使用するか、あるいは、RDF-XMLが使用されている場合はrdf:parsetype="Collection"属性を使用するかのどちらかで、これらを表すことができるかもしれません。

<owl:Class>
 <owl:intersectionOf rdf:parsetype="Collection">
  <owl:Class rdf:about="x"/>
  <owl:Class rdf:about="y"/>
 </owl:intersectionOf>
</owl:Class>

owl:Classが空白ノード(つまり、クラスは無名)である場合、それは、述語owl:intersectionOfowl:unionOfあるいはowl:complementOfを持つ、高々1つのトリプルの主語でしかありえません。クラスが名前付きである場合は、そのようなトリプルはいくつでも許されます。

列挙

述語owl:oneOfを持つあらゆるトリプルは、owl:Classあるいはowl:DataRangeのどちらかでなければなりません。前者の場合には、目的語は(整形式の)rdf:Listでなければならず、これらの要素のすべては個体です。後者の場合には、目的語は(整形式の)rdf:Listでなければならず、これらの要素のすべてはデータ・リテラルです。再び、ブール演算子の場合と同じく、rdf:parsetype="Collection"を使用することができます。

オントロジーおよびアノテーション・プロパティー

オントロジー述語を持つあらゆるトリプルの主語と目的語はオントロジーであるべきです(例えば、以下のトリプルが存在するようなノードx)。

x rdf:type owl:Ontology

アノテーション述語を持つあらゆるトリプルの目的語は、名前付き(つまり、非bノード(non-bnode)(訳注:空白ノードのことと思われる))クラス、プロパティー、個体、あるいはオントロジーであるべきです。アノテーション述語を持つトリプルの目的語は、個体、データ・リテラル、あるいは任意のURI参照であるべきです。

OWL、RDFおよびRDFS語彙内の述語を除き、アノテーション・プロパティーは、主語としてクラスあるいはプロパティーを持つトリプルで現われるべき唯一の述語です。

アノテーションおよびオントロジーのプロパティー自身は、タイプ付けされるべきであり、述語rdf:typeあるいはアノテーション・プロパティーを持つトリプルの主語としてではなく、トリプルの主語あるいは目的語として現われるべきではありません。

構造共有を避ける

一般に、OWLのS&AS記述は、RDF表現における構造共有(structure sharing)を許しません。これは、特定の記述を表すRDFグラフにおける匿名ノードが一度だけ(トリプルの目的語として)生じるべきであることを事実上意味します。したがって、以下のような記述は避けるべきです。

x1 rdf:type owl:Class
x1 rdfs:subClassOf _:y
x2 rdf:type owl:Class
x2 rdfs:subClassOf _:y
_:y rdf:type owl:Class
_:y owl:complementOf z

これが、許されるいくつかの巧妙で見逃しがちなケースがあります。しかし、一般には、クラス記述が1つ以上の場所で使用される場合は常に、グラフは別々の空白ノードを使用するべきです。

親なし空白ノードを避ける

一般に、グラフに生じる空白ノードは、無名の個体を表すか、下記のきっかり1つであるかのどちらかであるべきです。

親なし空白ノード(Orphan blank nodes)、つまり、トリプルの目的語でないものは、一般に許されません(上で述べたowl:AllDifferentの場合の除いて)。

基礎事実

オントロジーは、基礎事実(ground facts)の言明を含んでいるかもしれません(例えば、個体のプロパティーを言明するトリプル)。これらの言明で使用されるプロパティーは、owl:ObjectPropertyあるいはowl:DatatypePropertyでなければなりません。あらゆるそのようなトリプルの主語は、個体(型付きであるべき)でなければなりません。目的語は、個体(プロパティーがowl:ObjectPropertyである場合)への参照か、データ・リテラル(プロパティーがowl:DatatypePropertyである場合)への参照のどちらかでありえます。

OWL Lite

OWL Liteドキュメントは、主に許されている語彙に関して、OWL DLドキュメントと同じ規則に従うべき(多くの追加制限付きで)です。OWL Liteドキュメントは、以下の語彙のうちのどれも使用してはなりません。

述語owl:equivalentClassを持つトリプルの目的語か主語である、いかなる目的語もbノードであってはなりません。

述語owl:minCardinalityowl:maxCardinality、あるいはowl:cardinalityを持つあらゆるトリプルの目的語は、整数0あるいは1を表すデータ・リテラルであるべきです。

OWL Liteにおけるowl:intersectionOfの使用に関する状況は、もう少し複雑です。述語は、任意の表現を形成するためには使用してはなりませんが、完全なクラス定義を表すためには必要です。上記の制限は、述語owl:intersectionOfを持つあらゆるトリプルの主語がowl:Classであるべきだと述べます。OWL Liteでは、このクラスが名前付きであるべきだという、さらなる制限があります(つまり、主語はbノードであってはなりません)。

その他

owl:Thingの使用に注意してください。例えば、以下のOWL-RDFフラグメントは、

<owl:Class rdf:about="#A">
  <rdfs:subClassOf>
    <owl:Thing/>
  </rdfs:subClassOf>
</owl:Class>

owl:ThingのサブクラスであるクラスAを記述せず、実際は、owl:Thingのある匿名のインスタンスのサブクラスであるクラスAを記述します。したがって、これはインスタンスとしてのクラスの使用であり、OWL DLに含まれません。owl:Thingのサブクラスの望まれる効果は、以下によって得られます。

<owl:Class rdf:about="#A">
  <rdfs:subClassOf>
    <owl:Class rdf:about="http://www.w3.org/2002/07/owl#Thing"/>
  </rdfs:subClassOf>
</owl:Class>

owl:Classrdfs:Classを混同しないように注意してください。以下は、cが適切なタイプを与えられないという事実により、DLに含まれません

c rdf:type rdfs:Class

注記

[1] もちろん、すべてをタイプ付けする必要性が、OWL、RDFあるいはRDFS名前空間のものに当てはまるわけではありません。

[2] 厳密に言えば、プロパティーがowl:TransitivePropertyowl:SymmetricProperty、あるいはowl:InverseFunctionalPropertyであると定義されている場合、これは必要ではありません。

[3] ここでの例外は、

x rdf:type rdfs:Class
x rdf:type owl:Class
p rdf:type rdf:Property
p rdf:type owl:ObjectProperty

あるいは

q rdf:type rdf:Property
q rdf:type owl:DatatypeProperty

を持つことができるということです。

さらに、制限に対しては、以下を持つことができます。

x rdf:type owl:Restriction
x rdf:type rdfs:Class
x rdf:type owl:Class

付録F. PR以後の変更

  1. 付録Eの誤ったエンドノート[4]を削除。
  2. Jacco van Ossenbruggenからのコメントの後で、rdfs:label要素を、付録A(OWLのRDFスキーマ)のアノテーション・プロパティー(AnnotationProperty)およびオントロジー・プロパティー(OntologyProperty)に追加。
  3. 破損した項の参照を修正、さらに、項の参照スタイルを訂正。
  4. リファレンスの項を標準化。
  5. Minsu Jangからのコメントの後で、rdf:RDF要素に対する要件記述を編集改訂。
  6. Lacyによるレビューに応じたいくつかの編集上の変更。
  7. いくつかのパブリックコメント(例えば、Benjamin Nowackによるコメントを参照)の後に、アノテーション・プロパティーの使用におけるOWL DL制約に関して7.1項に説明文を追加。同じ制約をオントロジー・プロパティーにも適用できることを示すために、7.2項にも文を追加。
  8. 編集者による最終読み合わせの後の、いくつかの小さな編集上の修正。

参考文献

[OWL Overview]
OWL Web Ontology Language Overview, Deborah L. McGuinness and Frank van Harmelen, Editors, W3C Recommendation, 10 February 2004, http://www.w3.org/TR/2004/REC-owl-features-20040210/ . 最新版は、http://www.w3.org/TR/owl-features/にあります。
[OWL Guide]
OWL Web Ontology Language Guide, Michael K. Smith, Chris Welty, and Deborah L. McGuinness, Editors, W3C Recommendation, 10 February 2004, http://www.w3.org/TR/2004/REC-owl-guide-20040210/ . 最新版は、http://www.w3.org/TR/owl-guide/にあります。
[OWL Semantics and Abstract Syntax]
OWL Web Ontology Language Semantics and Abstract Syntax, Peter F. Patel-Schneider, Patrick Hayes, and Ian Horrocks, Editors, W3C Recommendation, 10 February 2004, http://www.w3.org/TR/2004/REC-owl-semantics-20040210/ . 最新版は、http://www.w3.org/TR/owl-semantics/にあります。
[OWL Test]
OWL Web Ontology Language Test Cases, Jeremy J. Carroll and Jos De Roo, Editors, W3C Recommendation, 10 February 2004, http://www.w3.org/TR/2004/REC-owl-test-20040210/ . 最新版は、http://www.w3.org/TR/owl-test/にあります。
[OWL Requirements]
OWL Web Ontology Language Use Cases and Requirements, Jeff Heflin, Editor, W3C Recommendation, 10 February 2004, http://www.w3.org/TR/2004/REC-webont-req-20040210/ . 最新版は、http://www.w3.org/TR/webont-req/にあります。
[RDF Concepts]
Resource Description Framework (RDF): Concepts and Abstract Syntax, Graham Klyne and Jeremy J. Carroll, Editors, W3C Recommendation, 10 February 2004, http://www.w3.org/TR/2004/REC-rdf-concepts-20040210/ . 最新版は、http://www.w3.org/TR/rdf-concepts/にあります。
[RDF Syntax]
RDF/XML Syntax Specification (Revised), Dave Beckett, Editor, W3C Recommendation, 10 February 2004, http://www.w3.org/TR/2004/REC-rdf-syntax-grammar-20040210/ . 最新版は、http://www.w3.org/TR/rdf-syntax-grammar/にあります。
[RDF Semantics]
RDF Semantics, Pat Hayes, Editor, W3C Recommendation, 10 February 2004, http://www.w3.org/TR/2004/REC-rdf-mt-20040210/ . 最新版は、http://www.w3.org/TR/rdf-mt/にあります。
[RDF Vocabulary]
RDF Vocabulary Description Language 1.0: RDF Schema, Dan Brickley and R. V. Guha, Editors, W3C Recommendation, 10 February 2004, http://www.w3.org/TR/2004/REC-rdf-schema-20040210/ . 最新版は、http://www.w3.org/TR/rdf-schema/にあります。
[DAML+OIL]
DAML+OIL (March 2001) Reference Description. Dan Connolly, Frank van Harmelen, Ian Horrocks, Deborah L. McGuinness, Peter F. Patel-Schneider, and Lynn Andrea Stein. W3C Note 18 December 2001. 最新版は、http://www.w3.org/TR/daml+oil-referenceにあります。
[XML-SCHEMA2]
XML Schema Part 2: Datatypes - W3C Recommendation, World Wide Web Consortium, 2 May 2001.