SPARQL - 过滤评论。标签和摘要为英文,并保留整数和 uri 值

SPARQL - Filter comment. label and abstract to english and keep integer as well as uri values

我正在尝试从 DBPedia 获取有关某些资源的可用信息。 但是,我想过滤掉标签、评论和摘要,使其仅使用英文。

我原来的查询是:

SELECT ?property ?value (lang(?value ) as ?lang) { <http://dbpedia.org/resource/England> ?property ?value . }

为了过滤英文结果我修改为:

SELECT ?property ?value (lang(?value ) as ?lang) { <http://dbpedia.org/resource/England> ?property ?value .  FILTER(LANG(?value) = "en") }

但是,这样做我丢失了很多条目和信息,例如人口、密度、位置、纬度、经度等等。

我想知道,是否有办法获取所有可用条目,但将 abstractlabelcomment 过滤为仅英文。

我已尝试将我的查询修改为以下内容:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?property ?value (lang(?value ) as ?lang) { <http://dbpedia.org/resource/England> ?property ?value .   FILTER(LANG(?rdfs:label) = "en")}

不幸的是,我没有得到任何结果,因为查询是错误的。 任何帮助将不胜感激。

经过深入研究,我已经回答了我自己的问题。 您可以使用 FILTER 函数获取所有可用或不可用 @enlanguage 部分的值。为此,您可以使用以下部分:

FILTER(LANG(?value) = "" || LANGMATCHES(LANG(?value), "en")

然而,这会导致失去所有可用的 uri 和其他 links。 如果还想获得除 英文过滤结果 之外的所有链接,还需要一个与 startsWith 函数类似的函数。它在 SPARQL 语言中的等效项称为 strstarts。我在查询中的 FILTER 中添加了以下部分,并且我已经获得了所有最初需要的结果。

strstarts(str(?value), 'http'))

这就是结果查询。提示我已经删除了前缀,因为我在查询中不需要它们

 SELECT ?property ?value { <http://dbpedia.org/resource/England> ?property ?value .
      FILTER(LANG(?value) = "" || LANGMATCHES(LANG(?value), "en") || strstarts(str(?value), 'http'))}