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]+$"))
}