Sparql WikiData,定位特定城市中具有特定类型或子类型的实体

Sparql WikiData,定位特定城市中具有特定类型或子类型的实体,sparql,wikidata,Sparql,Wikidata,我的具体问题是我有一个叫“灯塔剧院”的地方。我想在Wikidata中找到与此最匹配的 A将给我三个结果: 灯塔剧院现场直播(Q6656601) 灯塔剧院(Q264186):表演艺术场馆 灯塔剧院(Q19110809) 第一个是电影,第二个是正确的结果,第三个是最高法院的判决 使用API调用,我可以找到所有三个的id: https://www.wikidata.org/w/api.php?action=query&format=json&list=search&srsear

我的具体问题是我有一个叫“灯塔剧院”的地方。我想在Wikidata中找到与此最匹配的

A将给我三个结果:

灯塔剧院现场直播(Q6656601)

灯塔剧院(Q264186):表演艺术场馆

灯塔剧院(Q19110809)

第一个是电影,第二个是正确的结果,第三个是最高法院的判决

使用API调用,我可以找到所有三个的id:

https://www.wikidata.org/w/api.php?action=query&format=json&list=search&srsearch=Beacon Theater
下一步是获得每一项的详细信息。我使用call获取所有三个实体的信息

"https://www.wikidata.org/w/api.php?action=wbgetentities&props=descriptions|labels|claims&ids=Q6656601|Q264186|Q19110809&languages=en&format=json"
在这一点上,我想对它们进行迭代,找到一个建筑物。我以后可能还想添加一种方法来查找位于纽约的

我的问题是正确答案不是建筑(Q41176)。P31的值是Q3469910,这是一个,所以我无法对其进行排序(设想将来我使用此代码搜索博物馆。博物馆也是一座建筑,但不是表演艺术场所。搜索Beacon剧院只是一个例子

问题:如何找到正确的条目,就本问题而言,我将其定义为:

  • 作为一座建筑物(或者可能是从一座建筑物衍生出来的)
  • 可选答案:位于纽约(如果多次点击,这将进一步限制结果)

  • 我想我需要做一个SPARQL查询作为第二个查询来做这件事,但是从例子中我不太清楚如何做,或者这是否是正确的/最简单的方法。甚至可能一个SPARQL查询可以在一个查询中完成上述所有工作?

    我遇到了同样的问题,但对于书籍,也可以是漫画书或漫画书a等。我找到的最简单的解决方案是保留实体,即在查找书籍时可以认为匹配的实体。它不像SPARQL查询那样动态,需要定期更新—添加新找到的匹配实体,删除有问题的实体—但这样做速度快得多,满足了我的大部分需求。

    在您的例子中,是exact标签匹配可能已经完成了

    SELECT DISTINCT ?loc ?locLabel ?locDescription 
      WHERE 
      {
       values ?locLabel {"Beacon Theater"@en }
       ?loc rdfs:label ?locLabel . 
       SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en"}
    }
    

    谢谢,但我更喜欢防御性地编写代码,而不是依赖于不断更新项目。在SPARQL中,我相信会有一些解决方案可以做到这一点。我认为,如果您想要未来的代码,使用常量(如您在此处所述)编写代码通常会带来灾难。不过,谢谢:)