想要从结果中删除没有标签的实体

want to remove entity that has no label from the result

我想问一个关于标签的棘手问题。使用像 SERVICE wikibase:label { bd:serviceParam wikibase:language "ko,en". } 这样的 SERVICE 关键字使我们能够在第一偏好未匹配到目标实体标签时切换语言标签。 但是,我想删除一些没有任何标签的实体。但是,当实体没有任何语言匹配标签时,service 关键字添加带有 Qxxxx 标签的实体。我怎样才能从结果中删除实体? 我知道我们可以使用 rdfs:label 明确地过滤掉所有变量,但是将所有 rdfs:label 设置为所有变量是另一个令人头疼的问题。所以我想知道如何使用 SERVICE 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
RESULT:
Q59780594 <- no lang label
Q24642253 <- no lang label

维基数据标签服务不提供跳过没有标签的资源的内置方法。

最简单的选择是将查询作为子查询包装到新的 SELECT 查询中,并使用过滤器删除任何 Qxxxx 标签。这利用了只有真正的标签才有语言标签的事实:

SELECT ?vLabel {
  {
    SELECT DISTINCT ?vLabel
    ...
  }
  FILTER lang(?vLabel)
}

编辑: 下面是我原来的(和劣质的)答案,它在标签本身上使用正则表达式来删除 Qxxxx 的。它还会过滤掉 实际上 具有 Qxxxx 形式标签的任何资源,如果维基数据中存在此类资源的话。

SELECT ?vLabel {
  {
    SELECT DISTINCT ?vLabel
    ...
  }
  FILTER (!REGEX(?vLabel, "^Q[0-9]+$"))
}