SPARQL DBpedia 过滤掉特定的结果

SPARQL DBpedia filter out specific results

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

在此查询中,我只需要 dbpedia-Ontologies "Country"、"Location" "PopulatedPlace" 和 "Place".

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 .
}

我设置了一个 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>)
}

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

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

 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/"))
}

嗯,你做的很好,但可能不是正确的做法。您要查找的内容称为 owl 类。因此,您只需要检查您要查找的类型是否为 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 .
}