如何修改SPARQL查询以获取苏联人物的俄文维基百科所有图片
如何修改SPARQL查询获取苏联公民在俄文维基的所有关联图片?
我现有一条SPARQL查询,用于获取苏联(Q15180)公民(P27)且属于人类(Q5)的人物的图片,查询语句如下:
SELECT ?personLabel ?img WHERE { SERVICE wikibase:label { bd:serviceParam wikibase:language "ru,[AUTO_LANGUAGE]". } ?person wdt:P31 wd:Q5. ?person wdt:P27 wd:Q15180. ?person wdt:P18 ?img }请问如何修改该查询,以返回这些人物在俄文维基百科上的所有关联图片?
嘿,这个需求很好解决~原来的查询只抓取了人物的主图片(P18),但要获取俄文维基页面上的所有关联图片,我们需要先定位到人物对应的俄文维基条目,再抓取该条目关联的所有图片。
这里给你两种修改方案:
方案一:仅获取俄文维基条目关联的所有图片
这个方案直接定位俄文维基页面,拿到页面上的所有关联图片:
SELECT ?personLabel ?img ?imgLabel WHERE { SERVICE wikibase:label { bd:serviceParam wikibase:language "ru,[AUTO_LANGUAGE]". } # 保留原有的筛选条件:人类、苏联公民 ?person wdt:P31 wd:Q5. ?person wdt:P27 wd:Q15180. # 定位人物对应的俄文维基百科条目 ?ruArticle schema:about ?person ; schema:inLanguage "ru" ; schema:isPartOf <https://ru.wikipedia.org/>. # 获取该条目关联的所有图片 ?ruArticle schema:image ?img. }
方案二:同时获取主图片和俄文维基的所有关联图片
如果不想遗漏人物的主图片(有些主图可能没出现在俄文维基页面里),可以用UNION把两种来源的图片合并:
SELECT ?personLabel ?img ?imgLabel WHERE { SERVICE wikibase:label { bd:serviceParam wikibase:language "ru,[AUTO_LANGUAGE]". } ?person wdt:P31 wd:Q5. ?person wdt:P27 wd:Q15180. { # 抓取人物的主图片 ?person wdt:P18 ?img. } UNION { # 抓取俄文维基条目关联的所有图片 ?ruArticle schema:about ?person ; schema:inLanguage "ru" ; schema:isPartOf <https://ru.wikipedia.org/>. ?ruArticle schema:image ?img. } }
关键修改点说明:
?ruArticle部分:通过schema:about关联人物实体,schema:inLanguage "ru"限定俄语版本,schema:isPartOf锁定俄文维基站点,确保我们拿到的是俄文页面。schema:image:用来获取维基百科页面上关联的所有图片,这和仅抓主图的wdt:P18不同,能覆盖页面里的所有相关图片。
内容的提问来源于stack exchange,提问作者axk
相关产品推荐
相关产品推荐

