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)