0

私は簡単なnotation3オントロジーを持っています

@prefix my: <http://www.codeproject.com/KB/recipes/n3_notation#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .



    my:spec a rdfs:Class.
    my:security a rdfs:Class; rdfs:subClassOf my:spec .

    my:bluetooth a my:security;
    my:preferedby my:BusinessPerson;
    my:name "bluetooth".

specクラスを定義securityし、クラスを のサブクラスとして定義しようとしていますspec

これは、dotNetRdf ライブラリの助けを借りて使用している私の sparql クエリです

PREFIX my: <http://www.codeproject.com/KB/recipes/n3_notation#>
SELECT ?name
WHERE {
    [ a my:spec;
        my:preferedby my:BusinessPerson;
        my:name ?name].
}";

クラス階層によると、このクエリは(私の知る限り)securityのサブクラスであるため、答えとして「bluetooth」を返す必要があります。specしかし、これまでのところ結果はありません。私が間違いを犯した場所で誰かが私を助けることができますか? ありがとう

4

1 に答える 1

2

クラス仕様を定義し、セキュリティクラスを仕様のサブクラスとして定義しようとしています。

あなたはこの部分を正しくやったと思います。

クラス階層によると、セキュリティは仕様のサブクラスであるため(私の知る限り)、このクエリは答えとして「bluetooth」を返す必要があります。

タイプsecurityであると主張されているインスタンスがタイプspecのインスタンスでもあると推論するには、少なくとも RDFS 推論が必要です。SPARQL はそれを直接提供しませんが、多くのエンドポイントとトリプル ストアが何らかのサポートを提供している可能性があります。ただし、いくつかの基本的な形式の推論は SPARQL でエンコードでき、この場合はクエリを機能させることができます。これにクエリを調整する (そしてrdfs:プレフィックスを追加する) 必要があるだけです:

SELECT ?name WHERE {
    [ a rdfs:subClassOf*/my:spec;
        my:preferedby my:BusinessPerson;
        my:name ?name].
}

これは文字どおり、クラス C のインスタンスを見つけたいということです。このクラス C は、 my:specにゼロ以上の長さのrdfs:subClassOfリンクのチェーンによって接続されています。この場合、それはsecurityまたはspecのいずれかであるすべてを意味します。

SPARQL で RDFS と OWL の推論を行う方法の詳細については、次の質問と回答が役立つ場合があります。

于 2015-07-22T13:22:25.520 に答える