6

私のオントロジーには、PlayerTeam、およびCompetitionの 3 つのクラスがあります。また、2 つのオブジェクト プロパティ、Employs、およびCompetitionsInもあります。EmploysのドメインはTeamであり、範囲はPlayerであり、 compitesInのドメインはTeam または Playerであり、範囲はCompetitionです。

プレーヤーがチームに雇用されていて、そのチームコンペティションに参加する場合、プレーヤーもそのコンペティションに参加することをオントロジーに推論させたいと考えています。この情報をオントロジーに追加する方法はありますか? オントロジー内のすべての個人に対して {Player} の競合する {競争} を入れずに、この情報をオントロジーに追加する方法はありますか?

4

1 に答える 1

11

まず、出発点として最小限のオントロジーを提供していれば、これに答えるのがより簡単になります。幸いなことに、それは非常に簡単です。これがタートルの連載です。

@prefix :      <https://stackoverflow.com/q/22688901/1281433/competitions#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

<https://stackoverflow.com/q/22688901/1281433/competitions>
        a       owl:Ontology .

:Player  a      owl:Class .
:Team   a       owl:Class .
:Competition  a  owl:Class .

:employs  a          owl:ObjectProperty ;
        rdfs:domain  :Team ;
        rdfs:range   :Player .

:competesIn  a       owl:ObjectProperty ;
        rdfs:domain  [ a            owl:Class ;
                       owl:unionOf  ( :Player :Team )
                     ] ;
        rdfs:range   :Competition .

これを機能させるためにプロパティのドメインと範囲の宣言は実際には必要ありませんが、あなたが言及したので、とにかくそれらを含めました。あなたは、「チームが選手を雇い、そのチームが大会に出場する場合、選手は大会に出場する」というステートメントを表現しようとしています。論理的には、次のように表すことができます。

採用する(?チーム,?選手) ∧ 競合する(?チーム,?競争) → 競合する(?選手,?競争)

私たちが持っている関係が何であるか、そして何を取得したいのかを描くことは役に立ちます:

ここに画像の説明を入力

実線の矢印は実際にあるもので、破線の矢印は推測したいものです。これは、OWL のサブプロパティ チェーンを使用して行うことができます。実線の矢印に沿って、?player から ?competiton へのパスまたは一連のプロパティがあります。パスの最初のエッジは逆方向の矢印をたどるので、逆のプロパティ ( -1を使用) であり、2 番目のエッジは順方向の矢印をたどります。私たちは、そのようなパスがあるところにはどこでも、パスの開始と終了の間に競合する関係があると言いたいのです。チェーンは「employs -1 • offersIn」と書かれており、competesIn のサブプロパティであることを表明したいと思います。

採用-1 • 競合する ⊑ 競合する

Protégé では、これは次のようになります。

ここに画像の説明を入力

これにより、最終的なオントロジーが残ります。

@prefix :      <https://stackoverflow.com/q/22688901/1281433/competitions#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

:Player  a      owl:Class .
:Team   a       owl:Class .
:Competition  a  owl:Class .

<https://stackoverflow.com/q/22688901/1281433/competitions>
        a       owl:Ontology .

:employs  a          owl:ObjectProperty ;
        rdfs:domain  :Team ;
        rdfs:range   :Player .

:competesIn  a                  owl:ObjectProperty ;
        rdfs:domain             [ a            owl:Class ;
                                  owl:unionOf  ( :Player :Team )
                                ] ;
        rdfs:range              :Competition ;
        owl:propertyChainAxiom  ( [ owl:inverseOf
                          :employs ] :competesIn ) .

対象を限定する

元の質問では言及されていませんでしたが、コメントでは、プレーヤー以外のものをチームで使用できることが明らかになりました。これはまだ処理できますが、もう少し完全になります。秘訣は、次の形式の新しい公理が必要であることを認識することです。

p • 採用-1 • 競合する ⊑ 競合する

ここで、p は、各プレーヤーを自分自身に関連付ける特別なプロパティです。このようなプロパティを構築することをローリフィケーションと呼びます。この手法は、Stack Overflow の別の質問であるOWL 2 rolificationと、その質問からリンクされている学術出版物で詳細に説明されています。スタックオーバーフローには、ロール化を含む他の回答もあります。answer.semanticweb.comにもいくつかあります。いずれにせよ、アイデアは、クラスに対応する新しいプロパティR Playerを定義し、クラスPlayerを公理で定義することです。

Player ≡ R Player some Self

これは、R Player (x,x)の場合にのみx がPlayerであることを示しており、これはまさにpに入力する必要があるプロパティです。これにより、次のオントロジーが得られます。

@prefix :      <https://stackoverflow.com/q/22688901/1281433/competitions#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

<https://stackoverflow.com/q/22688901/1281433/competitions>
        a       owl:Ontology .

:R_Player  a    owl:ObjectProperty .

:employs  a          owl:ObjectProperty ;
        rdfs:domain  :Team ;
        rdfs:range   :Player .

:competesIn  a                  owl:ObjectProperty ;
        rdfs:domain             [ a            owl:Class ;
                                  owl:unionOf  ( :Player :Team )
                                ] ;
        rdfs:range              :Competition ;
        owl:propertyChainAxiom  ( :R_Player [ owl:inverseOf
                          :employs ] :competesIn ) .

:Team   a       owl:Class .

:Competition  a  owl:Class .

:Player  a                   owl:Class ;
        owl:equivalentClass  [ a               owl:Restriction ;
                               owl:hasSelf     true ;
                               owl:onProperty  :R_Player
                             ] .
于 2014-03-27T15:12:29.020 に答える