簡體   English   中英

Sparql - 將限制條件應用於謂詞

[英]Sparql - Applying limiting criteria to predicates

我對RDF / Sparql相當新,所以對任何不正確的術語表示道歉,並且對於下面相當可怕的例子也是如此:

給定以下RDF數據集:

@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix e:     <http://www.example.com/#> .
@prefix foaf:  <http://xmlns.com/foaf/0.1/> .

e:Freemason a owl:Class .
e:Civilian a owl:Class .

e:Marty a e:Freemason .
e:Eugene a e:Freemason .
e:Mike a e:Freemason .
e:Alan a e:Freemason .

e:Paul a e:Civilian .

e:Marty foaf:knows e:Eugene .
e:Eugene foaf:knows e:Mike .
e:Eugene foaf:knows e:Paul .
e:Paul foaf:knows e:Alan .

我正在努力找到朋友的朋友: e:Marty通過其他e:Freemason知道e:Freemason只有e:Freemason

所以:

  • Marty通過Eugene了解Mike,他們都是Freemason,所以沒關系
  • 馬蒂知道尤金,他有一位平民朋友保羅。 保羅有一個共濟會的朋友艾倫。 然而,馬蒂沒有“只有共濟會”的路徑,所以他應該被排除在外。

這是我的SPARQL查詢:

prefix e: <http://www.example.com/#>
prefix foaf:  <http://xmlns.com/foaf/0.1/>

SELECT *
{
  <http://www.example.com/#Marty> foaf:knows+ ?target .
  ?target a e:Freemason .
}

返回:

 http://www.example.com/#Eugene
 http://www.example.com/#Mike
 http://www.example.com/#Alan

在這里,艾倫被包括在內,因為他符合is-a-freemason標准。

我如何修改查詢以排除Alan?

我不知道純SPARQL中的解決方案,抱歉。 在OpenLink Virtuoso的SP​​ARQL-BI中,解決方案就是這個查詢

prefix e: <http://www.example.com/#>
prefix foaf:  <http://xmlns.com/foaf/0.1/>
select * 
where
  {
    { select ?orig ?target 
      where
       { ?orig   foaf:knows ?target . 
         ?target a          e:Freemason .
       } 
    } 
    option ( TRANSITIVE, 
             T_IN(?orig), 
             T_OUT(?target), 
             T_DISTINCT, 
             T_MIN(1)
           )
    filter ( ?orig = <http://www.example.com/#Marty> )
  }

- 有了這些結果 -

orig                               target
<http://www.example.com/#Marty>    <http://www.example.com/#Eugene>
<http://www.example.com/#Marty>    <http://www.example.com/#Mike>

這是一個使用SPARQL的例子,該規范已經從規范中棄用(出於我從未理解的原因)但在Virtuoso中仍然受到支持(對於不可預見的未來將是如此)

PREFIX e: <http://www.example.com/#>
PREFIX foaf:  <http://xmlns.com/foaf/0.1/>

SELECT *
FROM <http://kingsley.idehen.net/DAV/home/kidehen/Public/Linked%20Data%20Documents/Tutorials/club-member-test.ttl>
{
  <http://www.example.com/#Marty> foaf:knows{2} ?target .
  ?target a e:Freemason .
}

實時鏈接:

  1. 查詢解決方案
  2. 查詢定義

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM