2012-08-07 3 views
9

私はセマンティックウェブに取り組んでいると私は思ったんだけど:フクロウ:allValuesFromとrdfs:範囲の違い

:Person 
    a owl:Class ; 
    rdfs:subClassOf 
    [ a owl:Restriction ; 
     owl:onProperty :hasParent ; 
     owl:allValuesFrom :Person 
    ] . 

など範囲の制限を書く:のような制限を書くのsemanitcに差があります:

:hasParent rdfs:range :Person. 

これは私には同じことを意味しているように見えます。親はPersonタイプを持つ必要があります。違いはありませんか?

答えて

9

最初のスニペットは、親が必ず:Personの親を持つ:Personの親を意味します。ただし、:Dogには、例えば:Personではない親がいる場合があります。 2番目のスニペットでは、このことが何であるかにかかわらず、親を持つ人は必ず:Personという親を持っています。

編集krajolさんのコメントの後:

最初のスニペットのallValuesFrom制限と等価ではありません。allValuesFrom制限の場合

:hasParent rdfs:domain :Person; 
      rdfs:range :Person . 

、親があることは可能です人ではない。 rdfs:domain/rdfs:rangeの組み合わせの場合はできません。 allValuesFromの制限では、人には両親がいて、犬には犬の両親などがあると言うことができます。ドメイン/範囲では、できません。

+0

しかし、文のように: :hasParent rdfs:domain:Person。 が追加されました。それは同じですか? – krajol

+0

@krajol、ドメインを ':Person'に設定すると、親を持つ全員がPersonです。それを上記のOWLの制限と組み合わせれば、論理的な結果は、親を持つものは全てPersonであり、親はすべてPersonであるということです。 一方のドメイン/範囲と他方のクラスの制限の違いは、ドメイン/範囲は常にグローバルであり、クラスの制限は定義したクラスに対してのみ有効です。 –

1

注目すべき別の違いがあります。 1つのクラスに複数のrdfs:range(またはrdfs:domain)が3つある場合、範囲またはドメインは指定された範囲/ドメインの接続(交差点)です。文言はあいまいではありませんが、the RDFS specを参照してください。this post

オントロジーで推論を実行すると、指定された範囲/ドメインクラスのすべてのスーパークラスに対してrdfs:range/domainトリプルが推測されます。意味的には間違いはありませんが、これは混乱するかもしれません。これはallValuesFromでは発生しません。

+0

「これはallValuesFromで発生しません」とはどういう意味ですか?あなたが ':Person rdfs:subClassOf [a owl:Restriction; owl:onProperty:hasParent; ':Person :: rdfs:subClassOf:Agent'を推論することができます:' 'Person :: rdfs:subClassOf [a owl:Restriction; owl:allValuesFrom:Person] owl:onProperty:hasParent; owl:allValuesFrom:エージェント] ' –

0

(私は受け入れ答え不足の本質を発見したので、への答えを追加するには、すでに質問に答え。)

[ a owl:Restriction ; 
    owl:onProperty :hasParent ; 
    owl:allValuesFrom :Person 
] 

hasParent述語のために任意の値すべての物事のクラス」と読むことができます(潜在的になし)はタイプPerson "です。

Personは、このクラスのサブクラスであると言って、このクラスのより特殊化されたバージョンであると言います。だから、PersonはまだhasParentの値として他のPersonを持つことができます。

これはhasParentの有効なドメイン/範囲については何も述べていないため、rdfs:rangeとは異なります。 Antoine's exampleをリサイクルするには、次のように言うことができます。

:dog1 a :Dog. 
:dog2 a :Dog. 
:dog1 :hasParent :dog2. 
+1

"hasParent述語の値としてPersonを持つすべてのもののクラス"は誤解を招く可能性があります。このクラスには、例えば、 'hasParent'プロパティの値を持たないものが含まれます。 「すべての親が人であるすべてのもののクラス」と言う方が良いでしょう。 –

+0

良い発言 - 「hasParent」が発生しなかった場合にも適用されることを明確にするために、説明を更新しました。 – DieterDP