SPARQL中的限制条件

SPARQL中的限制条件,sparql,Sparql,我想从某个图表中得到姓名、姓氏和出生地。我得到的结果像“约翰·多伊”“伦敦”和“约翰·多伊”“英国”。是否有办法限制和表达3个(姓名、姓氏和出生地)中的2个(姓名和姓氏?)中的不同点?您没有展示任何示例数据或您尝试过的问题,这使得这个问题更难回答,请在以后提供这些详细信息 一种方法是使用groupby而不是DISTINCT,例如 PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?name ?surname (SAMPLE(?loc)

我想从某个图表中得到姓名、姓氏和出生地。我得到的结果像“约翰·多伊”“伦敦”和“约翰·多伊”“英国”。是否有办法限制和表达3个(姓名、姓氏和出生地)中的2个(姓名和姓氏?)中的不同点?

您没有展示任何示例数据或您尝试过的问题,这使得这个问题更难回答,请在以后提供这些详细信息

一种方法是使用
groupby
而不是
DISTINCT
,例如

PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT ?name ?surname (SAMPLE(?loc) AS ?location)
WHERE
{
  ?person foaf:givenName ?name ;
          foaf:familyName ?surname ;
          foaf:based_near ?loc .
}
GROUP BY ?name ?surname
前缀foaf:
选择?姓名?姓氏(样本(?loc)作为?位置)
哪里
{
?人员foaf:givenName?姓名;
foaf:家族名称?姓氏;
foaf:基地在?loc附近。
}
按姓名分组
此查询按
?名称
?姓氏
将结果分组,并为每组结果选择一个可能的位置

这里使用的
SAMPLE()
聚合基本上要求查询引擎从分组结果中为非分组键变量选择一个可能的值。

在这里是正确的。它使用
sample
,但如果您对是获得
London
还是
UK
有一些偏好,您可能可以使用不同的聚合函数来实现它。您甚至可以将字符串与串联组合在一起,例如,
“London,UK”
(尽管顺序可能难以保证)<不过,code>groupby加上一个聚合函数听起来像是您需要的。