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

问题描述

我正在尝试从 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'))}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...