微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

查询以获取维基数据页面中的前 3 张图片

如何解决查询以获取维基数据页面中的前 3 张图片

我正在尝试使用以下查询从 Wikidata 上的物种页面查询数据:

SELECT ?animal ?animalLabel ?iucncode ?photo WHERE {
    VALUES ?iucncode { "714" }
?animal wdt:P627 ?iucncode
OPTIONAL {
    ?animal wdt:P18 ?photo.
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE]". }
}

[See it working here.]1

我正在更改 ?iucncode 的值以获取有关不同物种的数据。使用当前查询,对于单个页面,我会得到与图像一样多的结果。我希望每个页面都有一行响应,前 3 个图像有 3 列数据(如果有)。有没有办法用 SPARQL 做到这一点?

对于上面例子中的物种,这些列不是有 4 行:

动物 animalLabel iucncode 照片

我想要这样的一行:

动物 animalLabel iucncode 照片_1 照片_2 photo_3

解决方法

这是一种方法:

SELECT 
?animal ?animalLabel ?iucncode 
(SAMPLE(?photo1) as ?photo1) 
(SAMPLE(?photo2) as ?photo2) 
(SAMPLE(?photo3) as ?photo3) 

WHERE {
    
  VALUES ?iucncode { "714"  "6736" "550" "899" }
    
  ?animal wdt:P627 ?iucncode
            
    OPTIONAL {
        ?animal wdt:P18 ?photo1.
    }
    
  BIND(IF( BOUND( ?photo1),?photo1,"NA1") AS ?photo1)
  
      OPTIONAL {
        ?animal wdt:P18 ?photo2.
        FILTER ( ?photo1 != ?photo2)
    }
    
  BIND(IF( BOUND( ?photo2),?photo2,"NA2") AS ?photo2)

    OPTIONAL {
        ?animal wdt:P18 ?photo3.
        FILTER ( ?photo1 != ?photo3)
        FILTER ( ?photo2 != ?photo3)
    }
      
  BIND(IF( BOUND( ?photo3),?photo3,"NA3") AS ?photo3)

  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE]". }
    }

GROUP BY ?animal ?animalLabel ?iucncode  

Result on WDQS 您也可以在 WDQS 上看到它:https://w.wiki/3WUi

快速说明:

  • 模式 OPTIONAL + FILTER (?A != ?B) 用于在每个变量上获取不同的照片
  • 模式 BIND(IF( BOUND( ?a),?a,"NA") AS ?a) 用于确保为每个变量返回一些结果,即使维基数据上没有匹配项
  • 模式 ?a (SAMPLE (?b) as ?b) (SAMPLE (?c) as ?c) + GROUP BY ?a 以获得单个结果并消除重复

不过,可能有更聪明的方法来解决它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?