SPARQL DBpedia过滤掉特定结果

时间:2017-03-30 18:03:59

标签: filter sparql ontology dbpedia

我正在处理一小部分,我收到所有类型的资源。问题是:我不想拥有所有类型,只有" http://dbpedia.org/ontology" -types。如何在SPARQL查询中过滤它们?只要我只收到本体,我就不在乎。

在此查询中,我只需要dbpedia-Ontologies" Country"," Location" " PopulatedPlace"和"放置"。

SPARQL端点:http://de.dbpedia.org/sparql

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?type WHERE {
?i rdfs:label "Deutschland"@de ; a ?type .
}

我设置了一个过滤掉Ontologies的FILTER。但这不是解决方案,因为它是静态的,只适用于这个例子。它也重复。但这是一个小问题。

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?type WHERE {
?i rdfs:label "Deutschland"@de ; a ?type .
FILTER (?type = <http://dbpedia.org/ontology/Country> ||
?type = <http://dbpedia.org/ontology/PopulatedPlace> ||
?type = <http://dbpedia.org/ontology/Place> ||
?type = <http://dbpedia.org/ontology/Location>)
}

需要一些建议或帮助。 Thx提前。

2 个答案:

答案 0 :(得分:1)

好吧我以为我不应该问,但这花了我一些时间才意识到...当一个字符串以相同的字母开头时,有一个函数可以过滤...

 strstarts

解。希望我能帮助别人。

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT DISTINCT ?type WHERE {
?i rdfs:label "Deutschland"@de ; a ?type .
FILTER (strstarts(str(?type), "http://dbpedia.org/ontology/"))
}

答案 1 :(得分:0)

你所做的很好,但可能不是正确的做法。您正在寻找的是猫头鹰类。因此,您只需要检查您要查找的类型是否为owl:Class

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
SELECT ?type WHERE {
?i rdfs:label "Deutschland"@de ; a ?type .
?type a owl:Class .
}