Sparql 要从结果中删除没有标签的实体吗
我想问一个关于标签的棘手问题。使用Sparql 要从结果中删除没有标签的实体吗,sparql,wikidata,Sparql,Wikidata,我想问一个关于标签的棘手问题。使用SERVICE关键字,如SERVICE wikibase:label{bd:serviceParam wikibase:language“ko,en”。}使我们能够在第一个首选项未加工到目标实体标签时切换语言标签。 但是,我想退出一些没有任何标签的实体。但是,当实体没有任何语言匹配标签时,服务关键字使用Qxxxx标签添加实体。如何从结果中删除实体? 我知道我们可以使用rdfs:label对所有变量进行筛选,但是将所有rdfs:label设置为所有变量是另一个标题
SERVICE
关键字,如SERVICE wikibase:label{bd:serviceParam wikibase:language“ko,en”。}
使我们能够在第一个首选项未加工到目标实体标签时切换语言标签。
但是,我想退出一些没有任何标签的实体。但是,当实体没有任何语言匹配标签时,服务
关键字使用Qxxxx标签添加实体。如何从结果中删除实体?
我知道我们可以使用rdfs:label
对所有变量进行筛选,但是将所有rdfs:label设置为所有变量是另一个标题。因此,我想知道如何使用服务wikibase:label
改进查询,我想过滤掉没有任何标签的实体。我应该用rdfs:label
替换SERVICE
SELECT DISTINCT ?vLabel
WHERE {
hint:Query hint:optimizer "None" .
{
SELECT DISTINCT ?i {
?i wdt:P31 wd:Q515.
}LIMIT 15
}
?v wdt:P937 ?i.
SERVICE wikibase:label { bd:serviceParam wikibase:language "ko,en". }
}
LIMIT 3
结果:
Q59780594Wikidata标签服务不提供内置方式来跳过没有标签的资源
最简单的选择是将查询作为子查询包装到新的SELECT
query中,并使用过滤器删除任何Qxxxx
标签。这使用了只有真正的标签才有语言标记的事实:
SELECT ?vLabel {
{
SELECT DISTINCT ?vLabel
...
}
FILTER lang(?vLabel)
}
编辑:下面是我的原始(和次)答案,它使用标签本身上的正则表达式来删除Qxxxx
答案。如果Wikidata中存在这样的资源,它还将过滤掉任何实际具有Qxxxx
格式标签的资源
SELECT ?vLabel {
{
SELECT DISTINCT ?vLabel
...
}
FILTER (!REGEX(?vLabel, "^Q[0-9]+$"))
}
也许过滤器(lang(?vLabel)!='')会更好。@StanislavKralin很棒的建议!甚至只是过滤器语言(?vLabel)
,因为空字符串是“falsy”。我已经更新了答案。实际上我喜欢正则表达式,因为我发现变量v可以是url或一些没有标签但对答案有效的值。如果我用filter LANG
过滤掉它,这些值也会被过滤掉。上面的正则表达式纯粹过滤掉了我最初打算使用的Qxxx
内容。
SELECT ?vLabel {
{
SELECT DISTINCT ?vLabel
...
}
FILTER (!REGEX(?vLabel, "^Q[0-9]+$"))
}