Wikidata/SPARQL,在结果中获取不同的项(对象id)

Wikidata/SPARQL,在结果中获取不同的项(对象id),sparql,wikidata,Sparql,Wikidata,当我运行下面的查询时,我得到了多行“Paul Gauguin”,因为有多个关于他的死亡地点/时间的信息,当然,在所有其他参数上也可能发生同样的情况 SELECT DISTINCT ?item ?itemLabel ?itemDescription ?birthplaceLabel ?birthdate ?deathplaceLabel ?deathdate ?imageLabel ?article ?articleEn { ?item wdt:P31 wd:Q5. ?item wd

当我运行下面的查询时,我得到了多行“Paul Gauguin”,因为有多个关于他的死亡地点/时间的信息,当然,在所有其他参数上也可能发生同样的情况

   SELECT DISTINCT ?item ?itemLabel ?itemDescription ?birthplaceLabel ?birthdate ?deathplaceLabel ?deathdate ?imageLabel ?article ?articleEn
{
  ?item wdt:P31 wd:Q5.
  ?item wdt:P119 wd:Q5024152.
  
  OPTIONAL {
    ?item wdt:P18 ?image.       
  }
  OPTIONAL {
    ?item wdt:P19 ?birthplace.
  }
  OPTIONAL {
    ?item wdt:P569 ?birthdate.    
  }
  OPTIONAL {
    ?item wdt:P20 ?deathplace.    
  }
  OPTIONAL {
    ?item wdt:P570 ?deathdate.
  }
  OPTIONAL {
     ?article schema:about ?item.
     ?article schema:isPartOf <https://sv.wikipedia.org/>.
  }
   OPTIONAL {
     ?articleEn schema:about ?item.
     ?articleEn schema:isPartOf <https://en.wikipedia.org/>.
  }
  SERVICE wikibase:label { bd:serviceParam wikibase:language "sv,en, [AUTO_LANGUAGE]". }
}
选择不同的?项目?项目标签?项目描述?出生地标签?出生日期?死亡地点标签?死亡日期?图像标签?文章?文章
{
?项目wdt:P31 wd:Q5。
?项目wdt:P119 wd:Q5024152。
可选的{
?项目wdt:P18?图像。
}
可选的{
?项目wdt:P19?出生地。
}
可选的{
?项目wdt:P569?出生日期。
}
可选的{
?项目wdt:P20?死亡地点。
}
可选的{
?项目wdt:P570?死亡日期。
}
可选的{
?文章模式:关于?项目。
?文章模式:isPartOf。
}
可选的{
?Articlen模式:关于?项。
?Articlen模式:isPartOf。
}
服务wikibase:label{bd:serviceParam wikibase:language“sv,en[AUTO_language]”
}
有没有一种方法可以只接收同一个对象id中的一个,而不关心该对象是否有其他“版本”

我尝试了一些嵌套查询,但无法使其工作。还有其他方法吗?

此查询将起作用:

SELECT DISTINCT ?item ?itemLabel ?itemDescription 
(SAMPLE(?birthplaceLabel) AS ?birthplaceLabel)
(SAMPLE(?birthdate) AS ?birthdate)
(SAMPLE(?deathplaceLabel) AS ?deathplaceLabel)
(SAMPLE(?deathdate) AS ?deathdate)
(SAMPLE(STR(?image)) AS ?image)
?article ?articleEn

WHERE {
  ?item wdt:P31 wd:Q5.
  ?item wdt:P119 wd:Q5024152.
  
  OPTIONAL {
    ?item wdt:P18 ?image.       
  }
  OPTIONAL {
    ?item wdt:P19 ?birthplace.
  }
  OPTIONAL {
    ?item wdt:P569 ?birthdate.    
  }
  OPTIONAL {
    ?item wdt:P20 ?deathplace .    
  }
  OPTIONAL {
    ?item wdt:P570 ?deathdate.
  }
  OPTIONAL {
     ?article schema:about ?item.
     ?article schema:isPartOf <https://sv.wikipedia.org/>.
  }
   OPTIONAL {
     ?articleEn schema:about ?item.
     ?articleEn schema:isPartOf <https://en.wikipedia.org/>.
  }
  SERVICE wikibase:label {  ?birthplace rdfs:label ?birthplaceLabel . 
                          ?deathplace rdfs:label ?deathplaceLabel .
                          ?item rdfs:label ?itemLabel ;
                                schema:description ?itemDescription .
                          bd:serviceParam wikibase:language "sv,en, [AUTO_LANGUAGE]". }
}
GROUP BY ?item ?itemLabel ?itemDescription ?article ?articleEn
选择不同的?项目?项目标签?项目描述
(样本(?出生地标签)作为?出生地标签)
(样本(?出生日期)作为?出生日期)
(样本(?死亡地点标签)作为死亡地点标签)
(样本(?死亡日期)作为?死亡日期)
(样本(STR(?图像))作为?图像)
文章
在哪里{
?项目wdt:P31 wd:Q5。
?项目wdt:P119 wd:Q5024152。
可选的{
?项目wdt:P18?图像。
}
可选的{
?项目wdt:P19?出生地。
}
可选的{
?项目wdt:P569?出生日期。
}
可选的{
?项目wdt:P20?死亡地点。
}
可选的{
?项目wdt:P570?死亡日期。
}
可选的{
?文章模式:关于?项目。
?文章模式:isPartOf。
}
可选的{
?Articlen模式:关于?项。
?Articlen模式:isPartOf。
}
服务wikibase:label{?出生地rdfs:label?出生地标签。
?死亡地点rdfs:标签?死亡地点标签。
?项目rdfs:标签?项目标签;
模式:描述?项目描述。
bd:ServiceParamWikibase:language“sv,en,[自动语言]”}
}
按项目分组?项目标签?项目描述?文章?文章
如您所见,我们使用
SAMPLE
函数并按所有未采样的变量分组。 如果希望查看某个属性获取的所有可能值,也可以将
SAMPLE
替换为
GROUP\u CONCAT
。 例如,
。。。(组_CONCAT(?deathdate;SEPARATOR=“;”)作为?deathdates).


请注意,
GROUP\u CONCAT
将字符串作为参数。

对Valerio Cocchis的答案进行了一些修改,找到了解决方案

SELECT ?item ?itemLabel ?itemDescription 
(SAMPLE(?birthplaceLabel) AS ?birthplaceLabel)
(SAMPLE(?birthdate) AS ?birthdate)
(SAMPLE(?deathplaceLabel) AS ?deathplaceLabel)
(SAMPLE(?deathdate) AS ?deathdate)
(SAMPLE(?imageLabel) AS ?imageLabel)
?article ?articleEn

WHERE {
  ?item wdt:P31 wd:Q5.
  ?item wdt:P119 wd:Q5024152.
  
  OPTIONAL {
    ?item wdt:P18 ?image.       
  }
  OPTIONAL {
    ?item wdt:P19 ?birthplace.
  }
  OPTIONAL {
    ?item wdt:P569 ?birthdate.    
  }
  OPTIONAL {
    ?item wdt:P20 ?deathplace.    
  }
  OPTIONAL {
    ?item wdt:P570 ?deathdate.
  }
  OPTIONAL {
     ?article schema:about ?item.
     ?article schema:isPartOf <https://sv.wikipedia.org/>.
  }
   OPTIONAL {
     ?articleEn schema:about ?item.
     ?articleEn schema:isPartOf <https://en.wikipedia.org/>.
  }
  SERVICE wikibase:label { 
    bd:serviceParam wikibase:language "sv,en, [AUTO_LANGUAGE]". 
    ?birthplace rdfs:label ?birthplaceLabel . 
    ?deathplace rdfs:label ?deathplaceLabel .
    ?image rdfs:label ?imageLabel .
    ?item rdfs:label ?itemLabel .
    ?item schema:description ?itemDescription .
  }
}
GROUP BY ?item ?itemLabel ?itemDescription ?article ?articleEn
选择?项目?项目标签?项目描述
(样本(?出生地标签)作为?出生地标签)
(样本(?出生日期)作为?出生日期)
(样本(?死亡地点标签)作为死亡地点标签)
(样本(?死亡日期)作为?死亡日期)
(样本(?图像标签)为?图像标签)
文章
在哪里{
?项目wdt:P31 wd:Q5。
?项目wdt:P119 wd:Q5024152。
可选的{
?项目wdt:P18?图像。
}
可选的{
?项目wdt:P19?出生地。
}
可选的{
?项目wdt:P569?出生日期。
}
可选的{
?项目wdt:P20?死亡地点。
}
可选的{
?项目wdt:P570?死亡日期。
}
可选的{
?文章模式:关于?项目。
?文章模式:isPartOf。
}
可选的{
?Articlen模式:关于?项。
?Articlen模式:isPartOf。
}
服务wikibase:标签{
bd:ServiceParamWikibase:language“sv,en,[自动语言]”。
?出生地rdfs:标签?出生地标签。
?死亡地点rdfs:标签?死亡地点标签。
?图像rdfs:标签?图像标签。
?项目rdfs:标签?项目标签。
?项目架构:描述?项目描述。
}
}
按项目分组?项目标签?项目描述?文章?文章

这仅适用于聚合函数的使用。因此,您必须按
项对
进行分组,然后对所有其他值进行分组。这里的问题是,例如,如何处理他所在位置的多个值。这将导致您必须使用哪个聚合函数谢谢!但是“出生地标签”、“死亡地点标签”和“图像标签”在结果中是空的,我猜,因为这有很多“版本”。有可能在结果中得到其中一个的“第一”值吗?就为了在网站上显示一些东西,用户可以访问维基百科,阅读所有其他可能的“生日”和/或查看其余的图片,哦,对了,对不起,我没有注意到这一点。我将简短地编辑我的答案。我认为问题在于WikiData标签服务的工作方式。谢谢。。我尝试了一下你的代码,发现如果我添加“?出生地rdfs:label?出生地label”。在服务部分,我几乎得到了我想要的。。我唯一拿不出的就是这个项目描述编辑了它,现在它工作了。