Webアプリ開発エンジニアのための技術情報サイト「テックスコア」

5. クラス要素

章でも説明したようにクラス要素では、クラス間の関係などクラスに関する詳しい情報を記述します。

クラス間の関係

3章ではrdfs:subClassOf、owl:equivalentClass、owl:disjointWithでクラス間の関係を表す方法を説明しました。それ以外にクラスの関係を表す方法としてブール組み合わせを使う方法があり、それには次の3つがあります。

プロパティ 説明
owl:unionOf 参照クラスの和集合を表す
owl:intersectionOf 参照クラスの共通部分を表す
owl:complementOf 参照クラスの補集合を表す

owl:unionOf、owl:intersectionOfは二つ以上の参照クラスを必要とするので、記述する際には rdf:parseType="Collection" 属性を使います。例を以下に示します。

例1:クラスのブール組み合わせ1 
<owl:Class rdf:ID="Person">
    <rdfs:subClassOf rdf:resource="#Mammal" />
    <owl:unionOf rdf:parseType="Collection">
        <owl:Class rdf:about="#Men" />
        <owl:Class rdf:about="#Women" />
    </owl:unionOf>
</owl:Class>

上の例は哺乳類(Mammal)クラスのサブクラスである人間(Person)クラスは、男(Men)クラスと女(Women)クラスの和集合であるということを表しています。

例2:クラスのブール組み合わせ2 
<owl:Class rdf:ID="Women">
    <owl:intersectionOf rdf:parseType="Collection">
        <owl:Class rdf:ID="Human" />
        <owl:Class>
            <owl:complementOf>
                <owl:Class rdf:ID="Men" />
            </owl:complementOf>
        </owl:Class>
    </owl:intersectionOf>
</owl:Class>

例の中の匿名クラスは、Menクラスに属さないすべてのインスタンスを含むクラスを表しています。これだけでは人ではない「会社」や「消しゴム」などのインスタンスも含んでしまうため、Humanクラスとの共通部分をとることで定義します。 つまりこの例で女(Women)クラスは、人間(Human)クラスに属するものの中で男(Men)クラスに属さないものが属するクラスである、と定義していることになります。

列挙型クラス

クラスを定義する際にowl:oneOfプロパティを使って定義することができます。このowl:oneOfプロパティは、そのクラスに属するインスタンスを列挙したものだけに限るときに使います。このインスタンスは他のクラスのインスタンスである必要があります。

例3:oneOfによるクラス定義 
<owl:Class rdf:ID="TrafficLightColor">
    <owl:oneOf rdf:parseType="Collection">  
	<Color rdf:ID="Red" />
	<Color rdf:ID="Blue" />
	<Color rdf:ID="Yellow" />
    </owl:oneOf>
</owl:Class>

上の例は交通信号の色は赤、青、黄色のみで他にはないということを表しています。

クラスにおけるプロパティ制約

あるクラス(C)に対してプロパティ(P)の制限をつける機能がOWLにはあります。たとえば自動車(Automobile)クラスのインスタンスにhasDriverプロパティはひとつしかない、などという制約をつけることも可能です。このような制約は以下の6種類つけることができます。

プロパティ 説明
owl:cardinality Cのインスタンスに対するPの出現回数を設定する
owl:minCardinality Cのインスタンスに対するPの最小出現回数を設定する
owl:maxCardinality Cのインスタンスに対するPの最大出現回数を設定する
owl:allValuesFrom Cのインスタンスに対するPの値となるインスタンスの属するクラスを指定する
owl:someValuesFrom Cのインスタンスに対するPの値となるもののうち、少なくともひとつあるべきインスタンスの属するクラスを指定する
owl:hasValue Cのインスタンスに対するPの値となるもののうち、少なくともひとつあるべきインスタンスまたはデータタイプを指定する

上で紹介した制約を、以下のようにowl:Restriction要素の中に記述します。

例4:プロパティ制約の記述 
<owl:Class rdf:ID="C">
   <rdfs:subClassOf>または<rdfs:equivalentClass>
      <owl:Restriction>
         <owl:onProperty rdf:resource="P" />
         <<ここに制約条件を書く>>
      </owl:Restriction>
   </rdfs:subClassOf>または</rdfs:equivalentClass>
</owl:Class>

owl:Restriction要素はowl:Classのサブクラスであるため、制約条件をつくるということはowl:Restrictionの匿名クラスをつくることと等価となります。
この匿名クラスに対して主語クラスをサブクラスと定義することで制約をつけることができます。またその制約条件が主語クラスに対して必要十分条件になっている場合、つまり制約条件から主語クラスが特定できるような場合は、この匿名クラスに対して主語クラスをowl:equivalentClassとして定義します。

上の制約条件の例をいくつか示しておきます。

例5:サッカーチーム(SoccerTeam)クラスでのplayerプロパティは最低11必要 
<owl:Class rdf:ID="SoccerTeam">
   <rdfs:subClassOf>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#player" />
         <owl:minCardinality>11</owl:minCardinality>
      </owl:Restriction>
   </rdfs:subClassOf>
</owl:Class>
例6:音楽(Music)クラスでのhasMakerプロパティの値は常に作曲者(composer)クラスのインスタンス 
<owl:Class rdf:ID="Music">
   <rdfs:subClassOf>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#hasMaker"/>
         <owl:allValuesFrom rdf:resource="#composer"/>
      </owl:Restriction>
   </rdfs:subClassOf>
</owl:Class>
例7:milkTeaクラスでのmakeFromプロパティの値のうち少なくとも一つはmilkクラスのインスタンス 
<owl:Class rdf:ID="milkTea">
   <rdfs:subClassOf>
      <owl:Restriction>
         <owl:onProperty rdf:resource="#makeFrom"/>
         <owl:someValuesFrom rdf:resource="#milk"/>
      </owl:Restriction>
   </rdfs:subClassOf>
</owl:Class>
例8:四次元グループ(4DG)クラスのhasEmployeeプロパティの値のうち少なくともひとつはTaroYojigenである 
<owl:Class rdf:ID="4DG">
   <rdfs:subClassOf>
      <owl:Restriction>
         <owl:onProperty rdf:resource="hasEmployee" />
         <owl:hasValue rdf:resource="TaroYojigen" />
      </owl:Restriction>
   </rdfs:subClassOf>
</owl:Class>

例8は噛み砕くと、四次元グループに属する会社にはそれぞれ少なくとも一人は「四次元太郎」という人が働いている、ということになります。

非推奨クラス、非推奨プロパティ

4章でも少しとりあげましたが、バージョンが次のものに更新されるときに使われなくなる可能性のある語彙を、owl:DeprecatedClassとowl:DeprecatedPropertyで記述し、非推奨とします。

例9:DeprecatedClass、DeprecatedProperty 
<owl:DeprecatedClass rdf:ID="Car">
   <rdf:comment> Automobile is now preffered</rdf:comment>
</owl:DeprecatedClass>

<owl:DeprecatedProperty rdf:ID="hasDriver">
   <rdf:comment> Drives is now preffered</rdf:comment>
</owl:DeprecatedProperty>

この例ではCarクラスとhasDriverプロパティを定義して、自動車を表すクラスはCarよりもAutomobileが望ましいという場合と、hasDriverよりもDrivesとして人間を主語とするほうが望ましい場合を考えています。このときこのクラスやプロパティを非推奨とし、以降使用してはいけないことを表します。このDeprecatedClass、DeprecatedPropertyは後方互換性と組み合わせることにより意味をなします。



前のページへ TECHSCOREのTOPページへ 次のページへ
techscore(トップページへ)
TECHSCORE書店
TECHSCOREトップページJavaSQLXMLリッチクライアントモデリングセマンティックWebその他技術Tuigwaa