2016-01-29 70 views
2

我在SPARQL(http://dbpedia.org/sparql),通過資源的標籤如何通過資源URI查詢DBpedia SPARQL?

PREFIX owl: <http://www.w3.org/2002/07/owl#> 
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
PREFIX dc: <http://purl.org/dc/elements/1.1/> 
PREFIX skos: <http://www.w3.org/2004/02/skos/core#> 
PREFIX : <http://dbpedia.org/resource/> 
PREFIX ru: <http://ru.dbpedia.org/resource/> 
PREFIX dbpedia2: <http://dbpedia.org/property/> 
PREFIX dbpedia: <http://dbpedia.org/> 
PREFIX dbo: <http://dbpedia.org/ontology/> 

SELECT ?type ?superType WHERE { { 
    ?res rdfs:label "HarryPotter"@en. 
} UNION { 
    ?redir dbo:wikiPageRedirects ?res . 
    ?redir rdfs:label "HarryPotter"@en . 
} 
?res rdf:type ?type . 
OPTIONAL { 
    ?type rdfs:subClassOf ?superType . 
} 
} 

It works fine查詢DBpedia的類型。

但是如果我知道確切的資源 - http://dbpedia.org/page/Harry_Potter?我試過類似的東西:

?res a :Harry_Potter. 

但它不起作用。

如果我知道資源URI,如何查詢DBpedia類型和超類型?我想不通,我應該使用哪個屬性或運營商(例如,rdfs:Resourcea等,這不工作)

回答

4

當你寫

?res a :Harry_Potter. 

它不工作,因爲這意思是「一種資源,其類型是:Harry_Potter」。它相當於

?res rdf:type :Harry_Potter. 

:Harry_Potter標識資源,而不是類型,因此它應該代替?res使用。

此外,我認爲你的意思是Harry_Potter_(character),因爲這是實際的標識符,而不是重定向。

您查詢是那樣簡單

SELECT ?type ?superType WHERE 
{ 
    # give me ?type of the resource 
    <http://dbpedia.org/resource/Harry_Potter_(character)> rdf:type ?type . 

    # give me ?superTypes of ?type 
    OPTIONAL { 
    ?type rdfs:subClassOf ?superType . 
    } 
}