2016-06-15 9 views
3

は、私は、次のRDFデータがあると?モデル検査ロジッククエリをSPARQLクエリに変換する方法は?私は、RDFモデルは、以下の論理式を満たすかどうかを確認するために使用することができますどのようなSPARQLクエリ</p> <pre><code>@prefix : <urn:ex:> :m :A "a" :m :A "b" :m :A "c" :m :B "a" :m :B "b" </code></pre> <p>:

∀x A(X) → B(x) 
+0

参照:http://stackoverflow.com/questions/25256452/is-it-possible-to-express-a-recursive-definition-in-sparql –

+1

正確にこれを行う方法を説明する仕様があります。 – Michael

答えて

4

SPARQLは、条件文またはユニバーサル定量化はありませんが、existentials(何が?これと一致しない)、(「不在」意味で)(暗黙の)組み合わせと否定していません。

そこで質問書き換える:

∀x A(x) → B(x) ⇒ 
∀x ¬ (A(x) ∧ ¬ B(x)) ⇒ 
¬ ∃x A(x) ∧ ¬ B(x) 

、それはSPARQLはかなり、行うことができるものです。このクエリ

# Is there anything of type A but not B? 
ASK { 
    { ?x a :A } MINUS { ?x a :B } 
} 

を制約の違反がある場合はを返します。

+1

これは[** minus **](https:// www。 w3.org/TR/sparql11-query/#neg-minus)。 **マイナス**は時々驚くかもしれないので、私はデフォルトで**存在しない**を使う傾向があります(例えば '?xa:A。filter not exist {?xa:B}')。常に同じ結果が得られます)。これは、**マイナス**の正しい使用例です。 –

+1

「それが偽を返す場合は、テストが合格しました」というメッセージにもう1つ注意してください。それは絶対に正しいですが、考えるのは簡単かもしれません「拘束の違反があればクエリは* true *を返します」 –

+1

テキストが盗まれました:-)はい、マイナスはここで気分が良くなりますが、あなたのように私はフィルタリングする傾向があります存在しない。 – user205512

関連する問題