Wikipedia Daten über DBpedia mit SPARQL & PHP abfragen

Wikipedia Daten über DBpedia mit SPARQL & PHP abfragen

Heute möchte ich euch zeigen wie ihr Wikipedia bequem über das DBpedia Projekt mit SPARQL und PHP abfragen könnt und so strukturierte Daten gewinnen könnt.

Wikipedia

Die Wikipedia stellt sehr viele Informtionen zu den unterschiedlichsten Themen bereit. Oft kann es sinnvoll sein diese Informationen auch für eigenen Projekte zu nutzen, um eigene Daten beispielsweise zu ergänzen oder neue Datensätze aufzubauen.

Wikipedia stellt natürlich auch eine eigene API zur Verfügung. Wer bereits damit gearbeitet hat, kann aber vielleicht bestätigen, dass diese nicht alle Bedürfnisse abdeckt und auch nicht wirklich einfach zu nutzen ist, da eine gewisse Struktur fehlt.

DBpedia

Einfacher und strukturierter kann man Wikipedia über das DBpedia Projekt abfragen. DBpedia nutzt die frei zugänglichen Daten aus der Wikipedia und stellt diese in einer strukturierten Form zur Verfügung. Hierzu kann man einen SPARQL Query gegen deren Service schicken und erhält die gewünschten Daten zurück.

SPARQL

Für einen ersten Test können wir die Weboberfläche der deutschen Version der DBpedia nutzen, um einen SPARQL Query auszuführen. Wir möchten zunächst einmal die Zusammenfassung (Abstract) für die Seite über Berlin der Wikipedia abfragen.

Der SPARQL-Query dazu sieht wie folgt aus:

Geben wir diesen Query in die Weboberfläche ein, nutzen JSON als Ausgabeformat und führen diesen aus, bekommen wir folgendes Ergebnis:

In results > bindings finden wir alle Ergebnisse. Greifen wir auf das erste Ergebnis zu und lassen uns abstract > value ausgeben so erhalten wir Folgendes:

Sehr gut, das sind genau die Informationen, die wir haben wollten.

Diese Daten hätten wir aber auch mit der Wikipedia API abfragen können. Schauen wir uns deshalb mal ein anderes Beispiel an.

Wir möchten nun alle Städte in Nordrhein-Westfalen finden und uns deren Postleitzahlen und Kfz-Kennzeichen ausgeben lassen.

Der SPARQL-Query sieht wie folgt aus:

Wenn wir das Ergebnis des Queries nun parsen erhalten wir folgende Daten:

Sehr gut. Damit kann man arbeiten. Ihr bekommt natürlich noch mehr Datensätze, wenn ihr das LIMIT aus dem SPARQL-Query entfernt.

SPARQL und PHP

Für dieses Tutorial habe ich eine Test Klasse geschrieben, die die Abfragen durchführt. Diese Klasse stellt natürlich keinen wirklichen Wrapper da, für das Tutorial reicht sie aber dennoch aus. Hier mal der PHP-Code:

Und so sieht die Abfrage mit dem zuletzt gezeigten Query in der Praxis aus:

Die Ausgabe habe ich oben bereits gezeigt.

So, das waren jetzt nur zwei einfache Besipiele. Ihr könnt euch ja jetzt selbst überlegen, welche Daten bzw. Informationen ihr gerne hättet und wie ihr diese abfragen könnt.

Links

Hier mal ein paar Links für den Fall, dass ihr euch intensiver mit DBpedia und SPARQL beschäftigen wollt:

Fazit

Wie gezeigt kann man mit DBpedia, SPARQL und PHP schon sehr nette Daten gewinnen. Ich muss aber zugeben, dass es schon ein nicht ganz triviales Thema ist und die Einarbeitung in das Thema ein bisschen dauert. Der Aufwand lohnt sich aber wie ich finde.

Wenn euch dieses Tutorial gefallen hat, dann verbreitet es bitte auf den üblichen Kanälen. Vielen Dank!

Bild: Flickr / dullhunk

Veröffentlicht von

Michael

Webentwickler & SEO

6 Gedanken zu „Wikipedia Daten über DBpedia mit SPARQL & PHP abfragen“

  1. hallo,
    ich bin grade dabei für meine diplomarbeit aus der Dbpedia daten zu filtern, dabei habe ich dein beispiel versucht zu testen das geht leider nicht.
    ich habe alle in ein datei kopiert und versucht zu testen.
    können sie mir sagen warum?

    1. Hallo Hamid,

      da hat es bei der Schnittstelle wohl Änderungen gegeben.

      Damit es wieder sauber läuft, müsstest du das „dbpprop-de“ im Query durch „prop-de“ austauschen.

      Der Query sieht dann wie folgt aus:

  2. Hallo Michael,

    kannst du mir bitte sagen was ich hier falsch mache, und zwar ich greife auf deine Klasse zu aus eine andere php datei.

    <?php
    include 'D:/xampp/htdocs/test2/seiten/DBpedia.php';

    $results = new DBpedia();

    $query = << query($query);

    echo „hallo“;
    foreach ($results->results->bindings as $result)
    {
    echo “

    Name
    {$result->name->value}

    PLZ
    {$result->zip->value}

    Kuerzel
    {$result->kfz->value}

    Fläche
    {$result->area->value}

    “ . PHP_EOL;
    }
    ?>

    DBpedia.php sieht dann so aus:

    $query,
    ‚format‘ => $format,
    );

    $ch = curl_init();

    curl_setopt( $ch, CURLOPT_URL, self::BASE . http_build_query( $params ) );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true);

    $response = curl_exec( $ch );
    $info = curl_getinfo( $ch );

    curl_close( $ch );

    if ( $info[‚http_code‘] !== 200 )
    return false;

    return json_decode( $response );
    }
    }

    ?>

  3. DBpedia.php sieht so aus:

    $query,
    ‚format‘ => $format,
    );

    $ch = curl_init();

    curl_setopt( $ch, CURLOPT_URL, self::BASE . http_build_query( $params ) );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true);

    $response = curl_exec( $ch );
    $info = curl_getinfo( $ch );

    curl_close( $ch );

    if ( $info[‚http_code‘] !== 200 )
    return false;

    return json_decode( $response );
    }
    }

    ?>

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *