4

SPARQLの機能を理解しようとしていますが、この種のクエリが可能かどうか疑問に思っています。

私のオントロジー構造の図(申し訳ありませんが、私はまだ写真を投稿することを許可されていません)

クラスBの同じインスタンスに接続しているクラスAとBのすべてのインスタンスを取得したいのです。

Select ?a, ?c
Where
{
 ?a myOntology:ab ?c .
 ?c myOntology:cb ?B .
}

それは私に与えるでしょう:

A:1 C:1
A:2 C:1 (with B:2)
A:2 C:1 (with B:3)

(文字はクラスとインスタンスの番号で、上から数えます)

しかし、Bの関連するインスタンスがまったく同じものだけが必要であるという違いがあります。

A:2 C:1 (with B:2 and B:3)

それは可能ですか、それとも外部ロジックを使用して取得する必要がありますか?

私はどんな答えでも喜んでいます...

4

1 に答える 1

1

はい、できます!NOT EXISTS を使用できる場合。

SPARQL は、SQL と同様に全称量指定子を持ちませんが、ネストされた NOT EXISTS を使用できます。

あなたのクエリは、擬似SPARQLでは、「すべてのペア(a、c)を教えてください. bb":

PREFIX : <http://test/>
SELECT ?a ?b ?c
WHERE 
{ ?a :ab ?b .
  ?b :bc ?c .
  FILTER NOT EXISTS
  { ?a :ab ?bb .
    FILTER NOT EXISTS
    {  ?bb :bc ?c . } 
  }
  ## vise verse:
  FILTER NOT EXISTS
  { ?bb :bc ?c .
    FILTER NOT EXISTS
    {  ?a :ab ?bb . } 
  }
}

実行中

@prefix : <http://test/> .
:a1 :ab :b1 .
:a1 :ab :b2 .
:a2 :ab :b2 .
:a2 :ab :b3 .
:b2 :bc :c1 .
:b3 :bc :c1 .

与える

----------------------------------------------------------
| a                | b                | c                |
==========================================================
| <http://test/a2> | <http://test/b3> | <http://test/c1> |
| <http://test/a2> | <http://test/b2> | <http://test/c1> |
----------------------------------------------------------
于 2012-10-11T19:27:46.427 に答える