2013-10-28 20 views
9

Ist es möglich, eine Definition einer Ressource (aus DBpedia) mit einer SPARQL-Abfrage zu haben? Ich möchte etwas wie die TBox und ABox haben, die in (Conceptual) Clustering methods for the Semantic Web: issues and applications (slides 10–11) gezeigt werden. Zum Beispiel für DBpedia Ressource Stephen King, würde ich gerne haben:Abrufen der meisten spezifischen Klassen von Instanzen

Stephen_King: Person ⊓ Writer ⊓ Männlich ⊓ ... (die meisten spezifische Klassen)

Antwort

10

Sie eine Abfrage wie die folgende verwenden können, zu fragen, für die Klassen, von denen Stephen King eine Instanz ist, die keine Unterklassen haben, von denen Stephen King auch eine Instanz ist. Dies scheint gut mit der Idee von "spezifischsten Klassen" übereinzustimmen. Da jedoch (soweit ich weiß) kein Denker an den DBpedia SPARQL-Endpunkt gebunden ist, kann es Unterklassenbeziehungen geben, die abgeleitet werden können, die aber nicht explizit sind in den Daten vorhanden.

select distinct ?type where { 
    dbpedia:Stephen_King a ?type . 
    filter not exists { 
    ?subtype ^a dbpedia:Stephen_King ; 
      rdfs:subClassOf ?type . 
    } 
} 

SPARQL results

Eigentlich, da jede Klasse ein rdfs:subClassOf selbst, könnte man eine andere Linie zu dieser Abfrage hinzufügen möchten, den Fall auszuschließen, in denen ?subtype und ?type sind die gleichen:

select distinct ?type where { 
    dbpedia:Stephen_King a ?type . 
    filter not exists { 
    ?subtype ^a dbpedia:Stephen_King ; 
      rdfs:subClassOf ?type . 
    filter (?subtype != ?type) 
    } 
} 

SPARQL results

Wenn Sie tatsächlich eine Ergebniszeichenfolge l möchten ike der in diesen Folien gezeigt, könnten Sie values verwenden eine Variable dbpedia:Stephen_King zu binden, und dann einige Gruppierung und String-Verkettung verwenden, um etwas schöneren (Art) zu erhalten:

select 
    (concat(?person, " =\n", group_concat(?type; separator=" AND\n")) as ?sentence) 
where { 
    values ?person { dbpedia:Stephen_King } 
    ?type ^a ?person . 
    filter not exists { 
    ?subtype ^a ?person ; 
      rdfs:subClassOf ?type . 
    filter (?subtype != ?type) 
    } 
} 
group by ?person 

SPARQL results

http://dbpedia.org/resource/Stephen_King = 
http://dbpedia.org/class/yago/AuthorsOfBooksAboutWritingFiction AND 
http://dbpedia.org/ontology/Writer AND 
http://schema.org/Person AND 
http://xmlns.com/foaf/0.1/Person AND 
http://dbpedia.org/class/yago/AmericanSchoolteachers AND 
http://dbpedia.org/class/yago/LivingPeople AND 
http://dbpedia.org/class/yago/PeopleFromBangor,Maine AND 
http://dbpedia.org/class/yago/PeopleFromPortland,Maine AND 
http://dbpedia.org/class/yago/PeopleFromSarasota,Florida AND 
http://dbpedia.org/class/yago/PeopleSelf-identifyingAsAlcoholics AND 
http://umbel.org/umbel/rc/Artist AND 
http://umbel.org/umbel/rc/Writer AND 
http://dbpedia.org/class/yago/20th-centuryNovelists AND 
http://dbpedia.org/class/yago/21st-centuryNovelists AND 
http://dbpedia.org/class/yago/AmericanHorrorWriters AND 
http://dbpedia.org/class/yago/AmericanNovelists AND 
http://dbpedia.org/class/yago/AmericanShortStoryWriters AND 
http://dbpedia.org/class/yago/CthulhuMythosWriters AND 
http://dbpedia.org/class/yago/HorrorWriters AND 
http://dbpedia.org/class/yago/WritersFromMaine AND 
http://dbpedia.org/class/yago/PeopleFromDurham,Maine AND 
http://dbpedia.org/class/yago/PeopleFromLisbon,Maine AND 
http://dbpedia.org/class/yago/PostmodernWriters