Sparql 如何通过正则表达式过滤标签?

Sparql 如何通过正则表达式过滤标签?,sparql,wikidata,Sparql,Wikidata,忽略按正则表达式筛选子句,筛选(!regex(STR(?aLabel),“^Q[0-9]+$”)。。。如何使用“按标签筛选?” 真实案例 你可以 PS:这不是问题,但现实问题的另一个解决方案,值得评论,是一个检查“无语言标签”或“空标签”的子句。正如@UninformedUser评论的那样 像您的?aLabel这样的标签是来自一些特殊的非标准服务的魔术变量,因此,在对查询求值之后发生 所以,为了避免变魔术,我们可以尝试在子查询中隔离它。。。它工作得很好 SELECT * WHERE {

忽略按正则表达式筛选子句,
筛选(!regex(STR(?aLabel),“^Q[0-9]+$”)
。。。如何使用“按标签筛选?”


真实案例 你可以



PS:这不是问题,但现实问题的另一个解决方案,值得评论,是一个检查“无语言标签”或“空标签”的子句。

正如@UninformedUser评论的那样

像您的
?aLabel
这样的标签是来自一些特殊的非标准服务的魔术变量,因此,在对查询求值之后发生

所以,为了避免变魔术,我们可以尝试在子查询中隔离它。。。它工作得很好

SELECT *
WHERE {
  # no constraints here in the main query, bypass the subquery
  { # subquery:
    SELECT ?a ?aLabel ?lat ?long 
    WHERE {
      ?a wdt:P31 wd:Q274393 .   # bakery or scholl or etc.
      ?a p:P625 ?statement .    # that has coordinate-location statement
      ?statement psv:P625 ?coordinate_node .
      ?coordinate_node wikibase:geoLatitude ?lat .
      ?coordinate_node wikibase:geoLongitude ?long .
      SERVICE wikibase:label { bd:serviceParam wikibase:language "en,[AUTO_LANGUAGE]" . }
    }
    ORDER BY (?aLabel)  
  }
  FILTER(!REGEX(STR(?aLabel), "^Q[0-9]+$")) # to eliminate ugly itens with no name
}
看到或看到

筛选没有名称的可选解决方案 如问题末尾所述,现实问题的另一个解决方案是一个检查“无语言标签”或“空标签”的子句。无需正则表达式和子查询,只需在原始查询中添加上述
过滤器即可

SELECT ?a ?aLabel ?lat ?long WHERE {
  ?a wdt:P31 wd:Q274393 .   # bakery or scholl or etc.
  ?a p:P625 ?statement .    # that has coordinate-location statement

  ?statement psv:P625 ?coordinate_node .
  ?coordinate_node wikibase:geoLatitude ?lat .
  ?coordinate_node wikibase:geoLongitude ?long .
  SERVICE wikibase:label {
    bd:serviceParam wikibase:language "en,[AUTO_LANGUAGE]" .
  }
  FILTER EXISTS {
    ?a rdfs:label ?someLabel filter(langmatches(lang(?someLabel), "[AUTO_LANGUAGE]"))
  } 
}
ORDER BY (?aLabel)

请参阅或

正则表达式不起作用,因为像您的
?aLabel
这样的标签是来自某些特殊非标准服务的魔术变量,因此,在对查询求值后会发生这种情况。您可以通过添加
过滤器EXISTS{?a rdfs:label?someLabel FILTER(langmatches(lang))来摆脱那些没有英文标签的实体(?someLabel),“en”)}
PS:我使用的是
[AUTO_LANGUAGE]
这是“任何语言”的语义…
过滤器(langmatches(lang(?someLabel),“[AUTO_LANGUAGE]”)
不要使用标签服务(见上文)或在手动模式下使用:““AUTO LANGUAGE”并不意味着“任何语言”.Hi@StanislavKralin,对不起,您更正了
自动语言
不是“任何”,但似乎在“检查存在的东西”时工作正常。
SELECT ?a ?aLabel ?lat ?long WHERE {
  ?a wdt:P31 wd:Q274393 .   # bakery or scholl or etc.
  ?a p:P625 ?statement .    # that has coordinate-location statement

  ?statement psv:P625 ?coordinate_node .
  ?coordinate_node wikibase:geoLatitude ?lat .
  ?coordinate_node wikibase:geoLongitude ?long .
  SERVICE wikibase:label {
    bd:serviceParam wikibase:language "en,[AUTO_LANGUAGE]" .
  }
  FILTER EXISTS {
    ?a rdfs:label ?someLabel filter(langmatches(lang(?someLabel), "[AUTO_LANGUAGE]"))
  } 
}
ORDER BY (?aLabel)