提问人:Travis 提问时间:10/22/2023 最后编辑:Travis 更新时间:10/22/2023 访问量:59
如何在维基数据SPARQL中搜索化名的人?
How can I search for a person who goes by a pseudonym in Wikidata SPARQL?
问:
因此,我有以下维基数据SPARQL,它将获取一个人的基本传记信息。如果我给它提供一个化名,例如(麦当娜、雪儿、碧昂丝),它每次都会超时。当然,如果我提供一个真实的名字,例如“哈里森·福特”或“汤姆·克鲁斯”,效果很好。问题线是这样的
?person rdfs:label "Madonna"@en.
下面是整个查询
SELECT ?person ?personLabel ?birthdate (GROUP_CONCAT(DISTINCT ?occupationLabel_en; separator=", ") as ?occupations) ?birthPlaceLabel
?image (GROUP_CONCAT(DISTINCT ?spouseLabel_en; separator=", ") as ?spouses)
?familyLabel ?familyDescription ?qid
WHERE {
?person wdt:P31 wd:Q5. # Select instances of humans
?person rdfs:label "Madonna"@en.
OPTIONAL { ?person wdt:P569 ?birthdate. } # Retrieve birthdate
OPTIONAL { ?person wdt:P106 ?occupation. } # Retrieve occupation
OPTIONAL { ?person wdt:P19 ?birthPlace. } # Retrieve place of birth
OPTIONAL { ?person wdt:P18 ?image. } # Retrieve image
OPTIONAL {
?occupation rdfs:label ?occupationLabel_en.
FILTER(LANG(?occupationLabel_en) = "en")
}
OPTIONAL {
?person wdt:P26 ?spouse.
?spouse rdfs:label ?spouseLabel_en.
FILTER(LANG(?spouseLabel_en) = "en")
}
OPTIONAL { ?person wdt:P22 ?family. } # Retrieve family info
BIND(STR(?person) AS ?qid) # Retrieve Wikidata QID
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
GROUP BY ?person ?personLabel ?birthdate ?birthPlaceLabel ?image ?familyLabel ?familyDescription ?qid
LIMIT 1
这里是 SPARQL 查询,如果你想看到它的实际效果。当然,如果我更改 SPARQL 以搜索 QID,它将起作用,但用户不会知道这一点。
我确实知道一个解决方案,那就是从 SPARQL 查询中获取该人的 QID,然后在该 QID 上执行另一个 SPARQL 查询,但我真的试图避免这种情况。如果我提出的解决方案是搜索化名的人的唯一方法,那么我想它就是这样。让我知道。
答: 暂无答案
评论
OPTIONAL
for occupation 的标签应该嵌套在 for occupation 本身中:w.wiki/7rYBOPTIONAL