我正在处理一小部分,我收到所有类型的资源。问题是:我不想拥有所有类型,只有" 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提前。
答案 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 .
}