Semantische Suche mit SPARQL und DBpedia
Geschrieben von: Markus Junginger in Web, tags: DBpedia, Groovy, OWL, RDF, REST API, Semantik, Semantisches Web, SPARQL, W3C, WikipediaMit dem semantischen Web werden Webseiten nicht mehr nur vom Menschen in ihrer Bedeutung verstanden, sondern im gewissen Maße auch von Maschinen. Neue strukturierte und formalisierte Informationen werden für eine automatische Verarbeitung verwertbar. Heutige Suchmaschinen wie Google kennen die Semantik von Nutzereingaben und Webseiten nicht wirklich. Heuristisch kann vielleicht die wahrscheinlichste Bedeutung erraten werden, aber letztendlich reduziert sich viel auf Text-Vergleiche. Das semantische Web strebt an, eben diese Limitation aufzuheben.
Etablierte und vom W3C vorangetriebene Technologien im semantischen Web sind RDF (Resource Description Framework) und OWL (Web Ontology Language). Während man mit RDF Informationen strukturiert zur Verfügung stellen kann, beschreibt OWL die Ontologie, also Metaformationen zu den Informationen und wie diese zusammenhängen.
SPARQL ist die vom W3C favorisierte Abfragesprache für RDF und damit das semantische Web. Wie man schon anhand des Namens erraten kann, ist eine gewisse Ähnlichkeit zu SQL vorhanden, aber es gibt doch einige Abweichungen. Aufgrund des relativ jungen Alters ist der Funktionsumfang auch erheblich geringer und limitierter.
Nach diesen Grundlagen zum semantischen Web kommen wir jetzt zu den semantischen Suchen am Beispiel DBpedia: DBpedia bereitet die Daten von Wikipedia strukturiert (in RDF Tripel) auf und macht sie für semantische Abfragen zugänglich.
Zwei von vielen interessanten Beispielabfragen:
DBpedia stellt unter http://dbpedia.org/snorql ein Tool zur Verfügung, mit dem man SPARQL Queries absetzten die Ergebnisse gleich betrachten kann.
Die folgende Query (hier im neuen Fenster mit dem SPARQL Explorer öffnen) zeigt alle Filme bei denen Brad Pitt mitspielt mit dem deutschen Titel und Zusammenfassung, Spielzeit sowie des Budgets:
SELECT ?movie ?label ?abstract ?runtime ?budget WHERE { ?movie rdf:type <http://dbpedia.org/class/yago/MotionPictureFilm103789400>; dbpedia2:starring <http://dbpedia.org/resource/Brad_Pitt>. OPTIONAL { ?movie rdfs:label ?label FILTER (lang(?label) = 'de'). ?movie dbpedia2:runtime ?runtime; dbpedia2:budget ?budget; dbpedia2:abstract ?abstract FILTER (LANG(?abstract ) = 'de') . } } ORDER BY ?movie
Ein paar Anmerkungen dazu:
- Mit dem Fragezeichen oder dem Dollarzeichen werden Variablen angesprochen.
- Ressourcen werden in spitzen Klammern angegeben.
- Der WHERE Block besteht im wesentlichen aus 3er-Tupel Elementen: Subjekt, Prädikat und Objekt.
- Die Tripel werden mit einem Punkt beendet.
- Ein Semikolon anstatt einem Punkt am Ende des 3er-Tupels besagt, dass Objekt gleich bleibt und damit nur noch Prädikat und Objekt angegeben werden muss.
- WHERE Statements mit Texten sind recht limitiert, es fehlt ein LIKE oder Schalter für case-insensitive. Man weicht schnell auf die wesentlich inperformantere
FILTER regex(?variable, "expression")Syntax aus. - Bislang sind nicht alle Daten von Wikipedia 100% korrekt nach DBpedia übernommen: Hier und da gibt es noch Extraktionsfehler.
Programmatisch lässt sich DBpedia über eine REST API nutzen (http://dbpedia.org/sparql). Hier ein Beispiel wie sich die REST API mit Groovy ansprechen lässt. Ein SPARQL Query-String wird ausgeführt und das Ergebnis in der Variablen results festgehalten:
def query = """...Hier die SPARQL Query...""" query = URLEncoder.encode(query, "UTF-8") def urlStr= "http://dbpedia.org/sparql?&default-graph-uri=http%3A%2F%2Fdbpedia.org&should-sponge=&query=$query&format=application%2Fsparql-results%2Bxml" def content = new URL(urlStr).openStream().getText("UTF-8") def sparql = new XmlSlurper().parseText(content) def results = sparql.results.result println results.size()+" Ergebnisse gefunden"
Insgesamt lässt DBpedia schon ganz gut erahnen wohin uns das semantische Web führen wird. Jedenfalls ist es ein sehr spannendes Feld mit ganz neuen Perspektiven. Man darf also auf neuartige Applikationen gespannt sein, die sich das Wissen des Webs zunutze machen. Neben semantischen Suchen wird es sicher noch einige kreative Ideen geben…
Tags: DBpedia, Groovy, OWL, RDF, REST API, Semantik, Semantisches Web, SPARQL, W3C, Wikipedia


Einträge (RSS)