我的具体问题是我有一个名为“Beacon Theatre”的地方。我想找到的是在Wikidata中与此最匹配的内容。WikiData,定位特定类型或子类型的实体,位于特定城市
一个Wikidata Search会给我三种结果:
住在灯塔剧院(Q6656601)
灯塔剧院(Q264186):表演场地
灯塔剧院(Q19110809)
第一个是电影第二它正确的结果,第三是最高法院的决定。
使用this API调用,我能找到的ID的所有三个:
https://www.wikidata.org/w/api.php?action=query&format=json&list=search&srsearch=Beacon Theater
下一步是获取信息的每一项。我用this调用来获取信息,所有三个实体
"https://www.wikidata.org/w/api.php?action=wbgetentities&props=descriptions|labels|claims&ids=Q6656601|Q264186|Q19110809&languages=en&format=json"
在这一点上,我想在它们之间迭代,并找到一个是建筑物。我也许稍后想要添加一种方法来找到位于纽约的那个。
我的问题是,正确的答案不是建筑物(Q41176)。 P31的价值是Q3469910,这是一个Performance Arts Venue,所以我不能真正分类(想象一下,在未来,我使用这个代码来搜索博物馆,博物馆也是一座建筑物,但不是表演艺术场所。搜索灯塔剧院仅仅是一个例子
所以问题:我如何才能找到正确的条目,这对于这个问题的目的,我定义为:
- 作为一个建筑(或者是从衍生a Building)
- 可选答案:位于纽约(如果有多个匹配,这会进一步限制结果)
我想我需要做一个SPARQL查询作为第二个查询来做到这一点,但从例子我无法弄清楚如何,或者如果这将是正确的/最简单的方法。也许甚至可以在一个查询中完成上述所有操作的SPARQL查询?
谢谢,但我宁愿防守编码,也不要指望不断更新项目。在SPARQL中,我相信会有一些解决方案可以做到这一点。如果你想要面向未来的代码,用常数编码(如你在这里描述的)通常在我看来是一个灾难的秘诀。虽然谢谢:) – Andy