【问题标题】:SPARQL count item in an intersectionSPARQL 计数交叉点中的项目
【发布时间】:2021-12-12 11:09:10
【问题描述】:

给定以下三元组

@prefix ex: <http://example.org/> .
@base <http://example.com/> .



<person1> ex:has_interpretation <interpretation1> .
<interpretation1> ex:refers_to <objectA> ;
 ex:resultIn <X> .

<person2> ex:has_interpretation <interpretation2> .
<interpretation2> ex:refers_to <objectA> ;
 ex:resultIn <Y> .

<person2> ex:has_interpretation <interpretation3> .
<interpretation3> ex:refers_to <objectB> ;
 ex:resultIn <Z> .

<person3> ex:has_interpretation <interpretation4> .
<interpretation3> ex:refers_to <objectA> ;
 ex:resultIn <ZZ> .

我正在尝试使用 SPARQL 来:

  1. 仅计算 person1 和 person2 的解释所引用的对象的数量(交集)
  2. 计算对象的不同解释次数
  3. 计算 person1 和 person2 的解释中引用的对象的数量
  4. 将上述计数与解释引用的对象列表以及创建解释的人员一起列出。

我在使用 1(因此是 3)时遇到问题,因为我找不到计算解释对象的交集的方法。

我当前的 SPARQL 查询没有得到我想要的:



PREFIX ex: <http://example.org/>

SELECT ?person (COUNT(distinct ?object) as ?c_object) (group_concat(distinct ?interpretation;separator="; ") as ?interpretations)

WHERE {

  ?person ex:has_interpretation ?interpretation .
 ?interpretation 
      ex:refers_to ?object ;
       ex:resultIn ?result .


FILTER (?person = <http://example.com/person1> || ?person = <http://example.com/person2> )
 
}
GROUP BY ?person ?object

我想要的只是:

object_uri number_object interpretations person_involved
&lt;objectA&gt; 1 &lt;interpretation1&gt;,&lt;interpretation2&gt; &lt;person1&gt;,&lt;person2&gt;

有什么想法吗?

【问题讨论】:

  • 如果您想要每个对象的人员列表,为什么要按?person 分组?另外,number_object 的值在这种情况下是否大于 1?

标签: sparql rdf


【解决方案1】:
  1. 仅计算 person1 和 person2 的解释所引用的对象的数量(交集)
PREFIX ex: <http://example.org/>
    
SELECT DISTINCT ?obj
WHERE { 
    <http://example.com/person1> ex:has_interpretation/ex:refers_to ?obj .
    <http://example.com/person2> ex:has_interpretation/ex:refers_to ?obj .
}

这里的查询只匹配那些从&lt;person1&gt;&lt;person2&gt; 具有ex:has_interpretation/ex:refers_to 路径的对象(?obj)。

  1. 计算对象的不同解释次数

只需使用COUNT() 函数作为答案中使用的路径 1. 以上是不同的(不同的):

PREFIX ex: <http://example.org/>
    
SELECT DISTINCT ?obj
WHERE { 
    <http://example.com/person1> ex:has_interpretation/ex:refers_to ?obj .
    <http://example.com/person2> ex:has_interpretation/ex:refers_to ?obj .
}
  1. 计算 person1 和 person2 的解释都没有引用的对象的数量

可能能够找到一种奇特的方式来查询这个,但我只会计算不同的对象:

PREFIX ex: <http://example.org/>

SELECT DISTINCT ?obj
WHERE { 
    ?x ex:refers_to ?obj .
} 

...然后从上面的 1. 中减去结果。这很容易理解,并且您已经得到了 1. 的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-22
    • 2022-09-28
    • 1970-01-01
    • 2017-09-25
    • 2016-09-29
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多