如何在wikidata SPARQL查询中获取instanceof属性(类)?

问题描述 投票:0回答:1

我有一个 wikidata SPARQL 查询,它获取特定位置(例如内华达州)附近“事件”类型(在空间/时间中发生)的所有实例:

SELECT ?event ?eventLabel ?date ?location
WITH {
  SELECT DISTINCT ?event ?date ?location
  WHERE {
    # find events
    wd:Q1227 wdt:P625 ?nevada. 
    ?event wdt:P31/wdt:P279* wd:Q1190554.
    # with a point in time or start date
    OPTIONAL { ?event wdt:P585 ?date. }
    OPTIONAL { ?event wdt:P580 ?date. }
    ?event wdt:P625 ?location.
    FILTER(geof:distance(?location, ?nevada) < 400).
  }
  LIMIT 1000
} AS %i
WHERE {
  INCLUDE %i
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" . }
}

链接查询)

我需要如何修改此查询才能获取每个事件所属的“类”实例?例如。对于Q6492580(Las Vegas Grind),我看到它是

music festival
类型的实例。我希望将此信息填充到我的查询结果中。

sparql wikidata
1个回答
0
投票

正如评论所建议的,查询太复杂而无法立即运行,我总是会超时。

我现在的解决方法是首先查询一个区域中的所有事件(参见问题),然后循环遍历项目,获取所有实体的所有类,例如:

SELECT ?item ?itemLabel ?class ?classLabel WHERE {
  VALUES ?item {
    wd:Q41522095
    wd:Q116448291
    wd:Q29098186
    wd:Q29098186
    wd:Q4602566
    wd:Q16274840
  }
  ?item wdt:P31 ?class.
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}

这并不完美,因为它返回了许多与事件无关的类,例如类

mass shooting
可以被视为事件,但类
building
hoitel
不是事件。因此,一些手动过滤是必要的。仍然将其发布在这里作为临时解决方案,直到有更好的建议为止。

© www.soinside.com 2019 - 2024. All rights reserved.