如何检查从SPARQL*通配符展开的所有级别的子属性?

如何检查从SPARQL*通配符展开的所有级别的子属性?,sparql,wikidata,Sparql,Wikidata,在Wikidata中,我想查找项目的国家/地区。如果物品直接有一个国家,则直接,或者通过爬上P131s(位于行政区域实体)直到我找到一个国家。以下是查询: ?item wdt:P131*/wdt:P17 ?country. 上面的查询工作正常。。。除非一个分部以前属于另一个国家,比如(普里什蒂纳)。在这种情况下,结果可能是不合时宜的。这就是我想要解决的问题 < P>伟大新闻:在这种情况下,我们只需考虑P131(位于行政领土实体)中没有P582-(结束时间)子属性,问题就解决了!p> 我的问题:

在Wikidata中,我想查找项目的国家/地区。如果物品直接有一个国家,则直接,或者通过爬上P131s(位于行政区域实体)直到我找到一个国家。以下是查询:

?item wdt:P131*/wdt:P17 ?country.
上面的查询工作正常。。。除非一个分部以前属于另一个国家,比如(普里什蒂纳)。在这种情况下,结果可能是不合时宜的。这就是我想要解决的问题

< P>伟大新闻:在这种情况下,我们只需考虑P131(位于行政领土实体)中没有P582-(结束时间)子属性,问题就解决了!p> 我的问题:如何更改我的上述查询以实现这一点

示例:假设MyItem在MyStreet在MyTown在MyRegion在MyCountry,我必须确保MyStreet、MyTown和MyRegion没有P582(结束时间)

(如果“子财产”不是正确的术语,请让我知道正确的术语,我会解决问题,谢谢!)

企图 下面的查询在中起作用,但不幸的是它有一个错误:如果当前国家也是过去的国家(例如阿尔萨斯在1871年之前属于法国,然后属于德国,现在又属于法国),那么它会找到错误的国家


Wikidata对直接链接和包含额外信息的链接使用不同的属性。因此,对于“普里什蒂纳位于行政领土实体科索沃社会主义自治省”的说法,有简单的三重含义:

wd:Q25270 wdt:P131 wd:Q646035
以及带有附加信息的长表格(结束时间):

因此,我们需要筛选出具有结束时间的所有路径(
pq:582
):

在这里,
?intermediateStatement
是一个语句,其结束时间位于从
?s
到一个国家/地区的路径上


如果为
?s
设置了多个值,则此查询似乎会超时。此外,查询没有考虑到可能存在从一个项目到一个区域的多个链接,其中一个有时间戳,另一个没有(两个路径都将被过滤掉)。

此子句-
过滤器不存在{语句pq:P582?x}
-出现3次。这是官方的方式。但是,请参见。@StanislavKralin:不幸的是,这些示例都不包含通配符(
*
),对吗?我的问题的挑战是检查所有爬到该国的P131的财产。例如,如果MyItem在MyStreet在MyTown在MyRegion在MyCountry,我必须确保MyStreet、MyTown和MyRegion没有结束时间。关于提案:有趣且非常相关,谢谢!我认为这是不可能的。看到这个有趣的(未回答的)问题,Wikidata的具体化不太可能让事情变得更简单。我不知道使用SPARQL的方法。我认为您需要使用外部硬编码编程来完成。不幸的是,它超时了:我做错了吗?如果您将
wd:Q6556803
绑定到一个变量,它确实可以工作。因此,使用我的查询,只需将
wd:Q25270
替换为
wd:Q6556803
wd:Q25270 wdt:P131 wd:Q646035
wd:Q25270 p:P131 wds:Q25270-7df79cec-4938-8b6d-4e11-4dde6f72d73b .

wds:Q25270-7df79cec-4938-8b6d-4e11-4dde6f72d73b ps:P131 wd:Q646035 ;
    pq:P582 "1990-01-01T00:00:00Z"
SELECT DISTINCT ?s ?sLabel ?country ?countryLabel {
  VALUES ?s {
    wd:Q25270 
  }
  ?s wdt:P131* ?area .
  ?area wdt:P17 ?country .
  FILTER NOT EXISTS {
    ?s p:P131/(ps:P131/p:P131)* ?statement .
    ?statement ps:P131 ?area .
    ?s p:P131/(ps:P131/p:P131)* ?intermediateStatement .
    ?intermediateStatement (ps:P131/p:P131)* ?statement .
    ?intermediateStatement pq:P582 ?endTime .
  }
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" }
}
limit 50