Wikidata/SPARQL,在结果中获取不同的项(对象id)
当我运行下面的查询时,我得到了多行“Paul Gauguin”,因为有多个关于他的死亡地点/时间的信息,当然,在所有其他参数上也可能发生同样的情况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
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”。在服务部分,我几乎得到了我想要的。。我唯一拿不出的就是这个项目描述编辑了它,现在它工作了。