6. プロパティ要素
RDFではあるインスタンスの性質をプロパティで表します。インスタンスについているプロパティがどのような性質を表すプロパティなのか、何を主語に持って何を目的語に持つのかなどをこのプロパティ要素で定義します。
プロパティの性質
クラス定義ではowl:Classのインスタンスとして定義しましたが、プロパティ定義ではowl:Propertyのインスタンスとして定義します。
第3章でも説明したとおり、プロパティ(Pとする)の性質を表すためのプロパティには次のようなものがあります。
| プロパティ |
説明 |
| rdfs:subPropertyOf |
Pは参照するクラスのサブプロパティ |
| rdfs:domain |
Pの主語としてとるべきインスタンスの属するクラスを指定する |
| rdfs:range |
Pの目的語としてとるべきインスタンスの属するクラスを指定する |
| owl:equivalentProperty |
Pとほぼ同じような意味を表すプロパティを指定する |
| owl:inverseOf |
Pと逆の意味を表すプロパティを指定する |
例をいくつか挙げておきます。
例1 : 母親(hasMother)プロパティは親(hasParent)プロパティのサブプロパティ
<rdf:Property rdf:ID="hasMother">
<rdfs:subPropertyOf rdf:resource="#hasParent" />
</rdf:Property>
例2 : 親(hasParent)プロパティと子(hasChild)プロパティは逆の意味を表す
<rdf:Property rdf:ID="hasParent">
<rdfs:domain rdf:resource="#Human" />
<rdfs:range rdf:resource="#Human" />
<owl:inverseOf rdf:resource="#hasChild" />
</rdf:Property>
特徴のあるプロパティ
プロパティを定義する際、いろいろな特徴を持ったプロパティを定義することができます。
以下に挙げるクラスはすべてowl:Propertyのサブクラスなので、それぞれの特徴をもったプロパティを定義する場合はowl:Propertyのかわりに下に挙げたクラスのインスタンスとして定義すればよいということになります。
- owl:ObjectProperty
owl:ObjectPropertyはプロパティPの目的語には常に何らかのオブジェクトがくる、という特徴をもったクラスです。
つまり目的語としてインスタンスやクラスなどをもち、リテラルは目的語にとらないということです。
例3 : 母親(hasMother)プロパティは目的語に人(Human)クラスのインスタンスをとる
<owl:ObjectProperty rdf:ID="hasMother">
<rdfs:domain rdf:resource="#Human" />
<rdfs:range rdf:resource="#Human" />
</owl:ObjectProperty>
- owl:DatatypeProperty
owl:DatatypePropertyはowl:ObjectPropertyとは反対に目的語としてオブジェクトではなくリテラルなどのデータタイプをもつという特徴を表しています。
例4 : 本(book)のタイトル(hasTitle)プロパティは必ず目的語にリテラルをとる
<owl:DatatypeProperty rdf:ID="hasTitle">
<rdfs:domain rdfs:resource="#book" />
</owl:DatatypeProperty>
- owl:AnnotationProperty
owl:AnnotationPropertyはオントロジー補足的な情報について人間にわかりやすい説明を加えるという特徴を表しています。
主に値にはリテラルをとります。
例5 : OWLで使われているバージョン情報(versionInfo)プロパティはAnnotationProperty
<owl:AnnotationProperty rdf:ID="versionInfo" />
- owl:OntologyProperty
owl:OntologyPropertyは主にオントロジーのヘッダ部分に使われるバージョン管理などを行うという特徴を表しています。
また、主語と値にはowl:Ontologyのインスタンスをとります。
例6 : OWLで使われている後方互換(backwardCompatibleWith)プロパティはOntologyProperty
<owl:OntologyProperty rdf:ID="backwardCompatibleWith">
<rdfs:domain rdf:resource="http://www.w3.org/2002/07/owl#Ontology" />
<rdfs:range rdf:resource="http://www.w3.org/2002/07/owl#Ontology" />
</owl:OntologyProperty>
さらに、プロパティに以下のような特徴を与えることができます。
以下、X--P--YはXを主語、Pをプロパティ、Yを目的語とするRDF文を表すことにします。
- owl:SymmetricProperty(対称型プロパティ)
owl:SymmetricPropertyは、X--P--Y ならば Y--P--Xの関係も成り立つという特徴をもっています。このクラスはowl:ObjectPropertyクラスのサブクラスです。
例7 : AさんはBさんの友達ならばBさんはAさんの友達なので、友達(isFriendOf)プロパティはSymmetricProperty
<owl:SymmetricProperty rdf:ID="isFriendOf">
<rdfs:domain rdf:resource="#Human" />
<rdfs:range rdf:resource="#Human" />
</owl:SymmetricProperty>
- owl:TransitiveProperty(推移型プロパティ)
owl:TransitivePropertyは、X--P--Y、Y--P--Z ならば、X--P--Zが成り立つという特徴をもっています。このクラスはowl:ObjectPropertyクラスのサブクラスです。
例8 : AさんよりBさんのほうが年上で、BさんよりCさんのほうが年上ならばAさんよりCさんのほうが年上であるので、
年上(isOlderThan)プロパティはTransitiveProperty
<owl:TransitiveProperty rdf:ID="isOlderThan">
<rdfs:domain rdf:resource="#Human" />
<rdfs:range rdf:resource="#Human" />
</owl:TransitiveProperty>
- owl:FunctionalProperty(関数型プロパティ)
owl:FunctionalPropertyは、X--P--YにおいてXが決まれば、Yはただひとつに決まるという特徴を表しています。
例9 : Aさんの妻はただ一人に決まるので(一夫多妻制の国では成り立ちませんが)
妻(hasWife)プロパティはFuncitonalProperty
<owl:FunctionalProperty rdf:ID="hasWife">
<rdfs:domain rdf:resource="#Man" />
<rdfs:range rdf:resource="#Woman" />
</owl:FunctionalProperty>
- owl:InverseFunctionalProperty(逆関数型プロパティ)
owl:InverseFunctionalPropertyは、X--P--YにおいてYが決まればXはただひとつに決まるという特徴を表しています。名前からもわかるように、owl:FunctionalPropertyの逆です。
例10 : A大学において、学生番号がわかれば学生が誰かわかるので
学生番号(studentNumber)プロパティはInverseFunctionalProperty
<owl:InverseFunctionalProperty rdf:ID="studentNumber">
<rdfs:domain rdf:resource="#Human" />
</owl:InverseFunctionalProperty>
- owl:DeprecatedProperty(非推奨プロパティ)
第5章でもとりあげましたが、owl:DeprecatedPropertyはバージョンが進むにつれて使わなくなる可能性があるという特徴を表しています。
例11 : 車からみた運転手(hasDriver)プロパティは非推奨とされているのでDeprecatedProperty
<owl:DeprecatedProperty rdf:ID="hasDriver">
<rdf:comment>Drives is now prefered</rdf:comment>
<rdfs:domain rdf:resource="#Automobile" />
<rdfs:range rdf:resource="#Human" />
</owl:DeprecatedProperty>
プロパティに特徴を与えることで、より詳細なプロパティ定義が可能になります。