sparql wikidata - 如何仅显示没有任何引用的语句

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

我正在尝试收集特定主题的所有陈述(假设是 Václav Havel - Q36233),但我需要排除包含任何引用的所有陈述。

SELECT ?subjectLabel ?property ?object ?objectLabel
    WHERE {
      ?subject ?property ?object.
      FILTER (?subject = wd:Q36233)
      FILTER(REGEX(STR(?property), "http://www.wikidata.org/prop/.*"))
      FILTER(REGEX(STR(?object), "http://www.wikidata.org/entity/Q.*"))
      SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

此查询生成 194 条语句,但其中也包含引用。

我需要结果列表包含以下内容: 0 references = show

但不包括这个: 1+ references = not show

我尝试了很多方法来更改查询,通过添加 MINUS 运算符和 FILTER 运算符,但这些方法都不起作用,并且通常会产生 0 个结果。

sparql wikidata wikidata-query-service
1个回答
0
投票

您可以使用此查询:

SELECT DISTINCT ?subjectLabel ?property ?object ?objectLabel
WHERE {
  ?subject ?property ?object .
  ?subject ?p ?stmt.
  ?stmt ?ps ?object .
  
  BIND (URI(REPLACE(STR(?p),STR(p:),STR(wdt:))) as ?property)
  BIND (URI(REPLACE(STR(?p),STR(p:),STR(ps:))) as ?ps)
  
  FILTER (?subject = wd:Q36233)
  FILTER (REGEX(STR(?p), STR(p:)))
  FILTER (REGEX(STR(?object), STR(wd:)))
  FILTER NOT EXISTS { ?stmt prov:wasDerivedFrom ?ref . }
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

其中

FILTER NOT EXISTS { ?stmt prov:wasDerivedFrom ?ref . }
正在检查语句
?stmt
是否没有引用。

请注意,

?subject ?p ?stmt. ?stmt ?ps ?object .
几乎等同于
?subject ?property ?object .
,只不过 wdt: 前缀排除已弃用的语句,而 p: 前缀则不排除。因此
?subject ?property ?object .
并不是多余的,因为一般来说你无法安全地删除它。

使用 Blazergraph 的 QueryHints 的更高效版本

SELECT DISTINCT ?subjectLabel ?property ?object ?objectLabel
WHERE {
  {
    SELECT ?subject ?p ?stmt ?object
    WHERE {
      ?subject ?p ?stmt.
      ?stmt ?ps ?object .
      FILTER (?subject = wd:Q36233)
      FILTER (REGEX(STR(?p), STR(p:)))
      FILTER (REGEX(STR(?object), STR(wd:)))
      hint:SubQuery hint:runOnce true .
    }
  }
  hint:Prior hint:runFirst true .
  
  ?subject ?property ?object .
  
  BIND (URI(REPLACE(STR(?p),STR(p:),STR(wdt:))) as ?property)
  BIND (URI(REPLACE(STR(?p),STR(p:),STR(ps:))) as ?ps)
  
  FILTER NOT EXISTS { ?stmt prov:wasDerivedFrom ?ref . }
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
© www.soinside.com 2019 - 2024. All rights reserved.