Schlagwort-Archive: URI

Linked Data: Mehr als nur RDF

Das Beispiel offenerhaushalt.de zeigt, dass zur Partizipation am Web of Data mehr gehört, als die Veröffentlichung von RDF/XML-Daten. Es lohnt sich dennoch, den Schritt zu „Linked Data“ zu gehen.

Die Veröffentlichung von Daten im RDF-Format gehört zu den Linked Data Grundprinzipien, die Tim Berners-Lee aufgestellt hat. Daher freue ich mich, dass immer mehr Open-Data-Projekte neben JSON und XML, auch Daten in einer RDF-Syntax veröffentlichen.

Das allein reicht aber leider nicht aus, um von Linked Data sprechen zu können, wie ich am Beispiel der RDF/XML-Daten von offenerhaushalt.de zeigen möchte.

Rufen wir uns zunächst die Grundprinzipien noch einmal ins Gedächtnis:

  1. Use URIs as names for things
  2. Use HTTP URIs so that people can look up those names
  3. When someone looks up a URI, provide useful information, using the standards (RDF, SPARQL)
  4. Include links to other URIs. so that they can discover more things

Ich werde diese Prinzipien nun nacheinander mit den RDF-Daten des Haushaltspostens „Bundesministerium für Bildung und Forschung“ von offenerhaushalt.de abgleichen, welche sich im Dokument http://bund.offenerhaushalt.de/30.rdf befinden.

[important]Disclaimer: Auch wenn ich in Sachen Linked Data in diesem Artikel einiges an offenerhaushalt.de zu kritisieren habe, möchte ich dies nicht als generelle Kritik am Projekt verstehen. Im Gegenteil: Ich halte das Projekt für ein Vorzeigebeispiel der Open-Data-Bewegung und spreche allen Beteiligten großen Dank und Respekt aus! Meine Kritik ist im Vergleich zu dem, was bereits geleistet wurde, eine Kleinigkeit. Ich möchte sie eher als Anregung verstanden wissen. Auch bin ich gerne bereit zu helfen, wenn Interesse besteht, die offenen Haushaltsdaten ins Web of Data zu hieven.[/important]

Use URIs as names for things

Wesensmerkmal des Web of Data ist, dass dort nicht nur reine Dokumente („Informationsressourcen„), sondern auch Daten über reale und abstrakte „Dinge“ aufzufinden sind. Diese Dinge benötigen einen global eindeutigen Namen. Genau diese Anforderung erfüllen URIs.

Bei der Namensgebung ist zu beachten, dass das „Ding“ welches beschrieben wird und die Dokumente welche es beschreiben unterschiedlich sind und deshalb auch über unterschiedliche URIs identifiziert werden müssen. Getreu dem Merksatz: „Du bist nicht deine Website„!

Das Datendokument http://bund.offenerhaushalt.de/30.rdf beschreibt ein Subjekt namens http://bund.offenerhaushalt.de/30. Unklar bleibt dabei, um was für eine Art von „Ding“ es sich dabei handelt. Ein rdf:type ist nicht hinterlegt.

Nun liegt die Vermutung nahe, dass bei offenerhaushalt.de Haushaltsposten beschrieben werden. Ruft man jedoch die URI http://bund.offenerhaushalt.de/30 im Browser oder mit Hilfe eines Tools wie curl ab, so wird ein HTML-Dokument zurückgeliefert:

user@pc:~$ curl -I http://bund.offenerhaushalt.de/30
HTTP/1.1 200 OK
Date: Wed, 02 May 2012 18:38:32 GMT
Server: Apache/2.2.14 (Ubuntu)
Pragma: no-cache
Cache-Control: no-cache
Content-Length: 73434
Vary: Accept-Encoding
Content-Type: text/html; charset=utf-8

Auch wenn man den Accept-Header explizit auf application/rdf+xml oder text/turtle setzt, wird ausschließlich text/html zurück geliefert.

Bei http://bund.offenerhaushalt.de/30 handelt es sich also schlichtweg um ein herkömmliches HTML-Dokument und nicht um einen Haushaltsposten.

Interessant sind unter diesem Aspekt Aussagen wie zum Beispiel folgende¹:

<http://bund.offenerhaushalt.de/30> openhaushalt:is_department "true".

Das HTML-Dokument ist also eine Abteilung, soso 🙂

Wobei wir streng genommen gar nicht wissen können, was openhaushalt:is_department überhaupt bedeutet. Das Prädikat ist nämlich nicht auflösbar, womit wir beim nächsten Punkt angelangt sind:

Use HTTP URIs so that people can look up those names

Die URI des Prädikats erhält man, indem man das Namespace-Prefix durch die Namespace-URI ersetzt. Für openhaushalt:is_department ergibt sich somit http://offenerhaushalt.de/schema/0.3/is_department. Bei Abruf dieser URI erhält man leider nichts weiter als den HTTP-Fehlercode 404: Not Found. Zwar wurden HTTP-URIs verwendet, diese sind aber nicht abrufbar.

Provide useful information

Bei den abrufbaren URIs scheitert es an „nützlichen Informationen“. Wie schon im ersten Abschnitt bemerkt, liefert http://bund.offenerhaushalt.de/30 lediglich ein HTML-Dokument zurück, wohingegen die RDF-Daten eher auf ein abstraktes „Ding“, wie einen Haushaltsposten oder eine Abteilung, hindeuten.

Dieses „Ding“ müsste zunächst einmal einen eigenen Namen bekommen, z.B. http://bund.offenerhaushalt.de/30#item

Beim Abruf mittels Browser würde durch den Wegfall des Fragment-Identifiers weiterhin das HTML-Dokument http://bund.offenerhaushalt.de/30 ausgeliefert werden, wodurch die „nützlichen Informationen“ zumindest für den menschlichen Klienten weiterhin gewährleistet wären.

Fordert ein Client mittels HTTP-Accept-Header jedoch ausdrücklich RDF, dann muss dieses ebenfalls über die URI http://bund.offenerhaushalt.de/30#item respektive http://bund.offenerhaushalt.de/30 verfügbar sein, da der Client entscheidet, welches Datenformat für ihn nützlich ist. Derzeit wird aber immer HTML ausgeliefert.

Nützlich sind die Daten aber auch deshalb nicht, weil die URIs der Prädikate nicht abrufbar sind. Die verwendete Ontologie ist somit ohne API-Dokumentation nicht zu verstehen. Es bleibt unklar, was Prädikate wie openhaushalt:is_department tatsächlich bedeuten. Die RDF-Daten sind damit kein Zugewinn im Vergleich zu z.B. JSON. Die Semantik fehlt in beiden Varianten.

Include links to other URIs

Die Verlinkung beschränkt sich auf andere URIs innerhalb des Projekts offenerhaushalt.de. Eine Verlinkung ins offene Web of Data findet derzeit nicht statt. Problematisch ist auch hier wieder, dass die URIs lediglich HTML-Dokumente identifizieren und somit auch kein „internes Web of Data“ entsteht. Was bleibt sind RDF/XML-Dokumente mit Links zu HTML-Seiten.

Na und?

Nun stellt sich dem ein oder anderen sicher die Frage, wozu man diese manchmal recht akademisch anmutenden Ansätze überhaupt verfolgen sollte? Die offenen Haushaltsdaten, die derzeit vom Projekt angeboten werden, sind zweifelsohne bereits in der vorliegenden Form sehr wertvoll. Die vorliegenden RDF/XML-Daten bieten aber nach meiner Auffassung keinen Mehrwert gegenüber dem JSON-Format. Im Gegenteil: Sie sind für einen Programmierer eher noch schwerer zu verarbeiten.

In Form von Linked Data können die Daten aber ein Potential entfalten, das deutlich über den Status quo hinaus geht. Eindeutige URIs für Haushaltsposten (nicht die HTML-Seiten!) könnten z.B. auch von anderen Projekten genutzt werden um strukturierte Aussagen über diese Haushaltsposten zu treffen. Denkbar wären zum Beispiel Tools zum Bürgerhaushalt, welche ihre Nutzer die Budgets für die einzelnen Haushaltsposten neu verteilen lassen. Dadurch dass alle über die gleichen (durch URIs global benannten!) Haushaltsposten „sprechen“, ist es dabei völlig egal, auf welchem Server mit welchem Tool solch ein Bürgerhaushalt erstellt wurde. Man kann sich das ähnlich vorstellen wie heute Verlinkungen und Pingbacks in der Blogosphäre, nur dass eben nicht über Dokumente/Blogeinträge „gesprochen“ wird, sondern über Daten und Dinge, wie z.B. Haushaltsposten.

Die Verwendung von einheitlichen Ontologien macht diesen Austausch ebenfalls leichter. Zudem wird eine „API“-Dokumentation letztlich überflüssig, wenn die Prädikate der Ontologien im Web abrufbar sind uns sich auf diese Weise selbst erklären.

Fazit

Das Projekt offenerhaushalt.de stellt RDF/XML-Daten bereit, ist damit aber noch kein Teil des Web of Data. Die folgenden Kritikpunkte zeigten sich bei einem Abgleich mit den Linked Data Prinzipien von Tim Berners-Lee:

  1. URIs identifizieren lediglich Dokumente, aber keine „Dinge“ wie Haushaltsposten.
  2. Die „Ontologie“ besteht nur aus toten Links und ist damit genauso ausdruckslos wie JSON.
  3. Es findet keine Content-Negotiation statt, die Wünsche des Clients werden ignoriert.
  4. Aufgrund von 1. kann es auch keine Links auf „Dinge“ geben. Es entsteht somit kein Web of Data.
  5. Es gibt keine Verlinkungen ins Web of Data.

Werden diese Aspekte angepasst und die Linked Data Prinzipien beachtet, können die Daten von offenerhaushalt.de Teil des Web of Data werden und dadurch ihr volles Potential entfalten.


¹ Zur besseren Lesbarkeit verwende ich hier die TURTLE-Notation, obwohl die Daten im Original als RDF/XML vorliegen. Semantisch macht dies keinen Unterschied. 

Das Web als Social Network

Linked Data eignet sich hervorragend um Soziale Netzwerke im Web abzubilden, die genauso dezentral funktionieren wir das altbekannte WWW. Wie ich bereits erklärt habe, gibt es im „Web of Data“ nicht nur Dokumente, sondern alle möglichen „Dinge“ können durch URIs identifiziert werden. Zu diesen „Dingen“ gehören auch Personen und ihre Beziehungen.

Zunächst müssen wir uns dazu noch einmal ins Gedächtnis rufen, dass Personen und die Dokumente, die sie beschreiben, zwei völlig unterschiedliche Dinge sind: You are not your Website!

Folgende URI identifiziert mich als Person: http://data.kontroversen.de/foaf.rdf#me

Man beachte das #me am Ende! Diese URI ist eine andere URI als http://data.kontroversen.de/foaf.rdf (ohne #me). Beide URIs führen im Web-Browser zwar zum gleichen RDF-Dokument, nur die letztere jedoch identifizert das RDF-Dokument, während http://data.kontroversen.de/foaf.rdf#me die Person „Angelo Veltens“ identifiziert.

Das abgerufene Dokument enthält RDF-Daten über die Resource http://data.kontroversen.de/foaf.rdf#me (mich), unter anderem meinen Namen und ein Verweis auf ein Bild von mir. Die Datei ist damit so etwas ähnliches wie ein Social-Network-Profil und legt damit den Grundstein für ein dezentrales soziales Netzwerk mit Hilfe von Linked Data.

Aber wie zur Hölle kann ich jetzt Freundschaften schließen, Status-Updates senden, Bilder sharen, Sachen liken, kommentieren, anstupsen, retweeten?! Eins nach dem anderen.

Beziehungen zwischen Personen sind sehr leicht über RDF-Tripel zum Ausdruck zu bringen. Die FOAF-Ontologie bietet zum Beispiel das Prädikat foaf:knows um zu sagen „A kennt B“. (Da FOAF sich prima für Social Networks eignet, ist auch häufig vom „FOAF-Profil“ die Rede, auch wenn natürlich weitere Ontologien im Profil verwendet werden können) Ein Beispiel aus meinem Profil:

<http://data.kontroversen.de/foaf.rdf#me>
  <foaf:knows>
    <http://fcns.eu/people/andrei/card#me>

Hinter http://fcns.eu/people/andrei/card#me verbirgt sich Andrei Sambra, was ein einfacher Abruf der URI verrät. Dank Content-Negotiation liefert ein normaler Webbrowser bei seiner URI sogar eine menschenlesbare HTML-Datei aus. Das habe ich für mein Profil leider noch nicht eingerichtet, kommt aber noch!

Jetzt mag das alles für Laien noch etwas kompliziert erscheinen, aber genausowenig wie man heute nicht mehr manuell an HTML-Dateien herumeditieren muss um ein Blog zu betreiben, wird man schon bald kein RDF mehr verstehen müssen um sein eigenes Profil im Social Web zu hosten. Es wird Anbieter geben, bei denen man mit wenigen Klicks ein Profil anlegen kann und wer mag installiert sich eine kleine Software auf seinem eigenen Webspace / Server um sein Profil zu hosten. Der Knackpunkt ist: Egal wo auch immer euer Profil liegt und wo die eurer Freunde liegen: Ihr könnt euch miteinander vernetzen. Ihr könnt euch nennen wie ihr möchtet. Ihr allein könnt bestimmen wem ihr welche Daten preisgebt. Ihr seid nicht von der Willkür einzelner Anbieter wie Google und Facebook abhängig. Das Web wird zum Social Network. Das gesamte Web mit all seinen Inhalten und Möglichkeiten!

Damit sind wir beim nächsten Punkt: Alles im Web lässt sich über Linked Data verknüpfen. Fotos, Videos, Blogartikel… Alles was im Web ist, hat auch eine URI und ich kann damit Aussagen treffen wie z.B.

<http://data.kontroversen.de/foaf.rdf#me>
  <ex:likes>
    <http://datenwissen.de/2011/09/das-web-als-social-network/>

um kenntlich zu machen, dass ich diesen Blogartikel „mag“. Ich kann Bilder hochladen wo immer ich möchte und sie mit meinem Profil verknüpfen. Ich kann Sie auf meinen eigenen Server laden. Oder bei Flickr. Das Social Web ist vollkommen dezentral. Nicht nur sind die einzelnen Profile auf viele verschiedenen Server verteilt, auch die Daten meines Profils kann ich beliebig im Web verteilen. Ein paar Bilder auf Flickr, ein paar in meinem Blog, Status-Updates bei Anbieter A, Social Bookmarks bei Anbieter B. Und das alles mit nur einem einzigen Profil, dass sich unter meiner Kontrolle befindet.

Um dies technisch zu ermöglichen muss ich mich in irgendeiner Form auf anderen Servern, bzw. bei den unterschiedlichen Anbietern mit meinem Profil „einloggen“ können. Erfreulicherweise arbeitet das W3C gerade an WebID, einem Protokoll, welches bereits heute mit allen Browsern funktioniert, da es auf SSL-Zertifikaten basiert, welche schon seit Jahrzehnten unterstützt werden. Mit WebID ist ein Login per Mausklick, ohne Username und Passwort, möglich. Ich werde das aber in einem späteren Artikel erklären, für heute soll es erst einmal reichen.

Ich hoffe es ist ungefähr klar geworden, wie ein dezentrales Social Web mit Hilfe von Linked Data möglich wird. Ansonsten zögert nicht Rückfragen zu stellen! Wer gleich ausprobieren möchte, was heute bereits möglich ist, der kann sich bei http://foaf.me/ oder http://webid.fcns.eu/ ein FOAF-Profil anlegen und sich mit mir verlinken. Egal wo ihr eurer Profil eingerichtet habt, könnt ihr dann hier etwas an die Wall posten.

Du bist nicht deine Website

Auf die Grundprinzipien von Linked Data bin ich bereits eingegangen. Auch einen kurzen Ausflug ins „Web of Data“ haben wir schon gewagt. Nun möchte ich die unterschiedlichen Arten von Ressourcen näher vorstellen. Das Datenweb ist mehr als ein Web aus Dokumenten. Wir können alle möglichen Dinge über URIs identifizieren und Daten über sie abrufbar machen.

Die W3C Technical Architecture Group unterscheidet zwischen Informations- und Nicht-Informationsressourcen. Im WWW ist diese Unterscheidung von untergeordneter Bedeutung, da es quasi nur Informationsressourcen gibt. Darunter fallen nämlich alle Arten von Dokumenten und das WWW ist nunmal ein Web aus Dokumenten. Im Datenweb kommen abstrakte und konkrete „Dinge“ hinzu, die ebenfalls über eine URI identifiziert werden wollen. Dabei handelt es sich dann um Nicht-Informationsressourcen. Denn die Ressourcen sind in diesem Fall keine Informationen, sondern z.B. Personen, Orte, Bücher, Produkte etc.

Die Unterscheidung zwischen Informations und Nicht-Informationsressourcen ist dabei weniger trivial, als auf den ersten Blick scheint. Ein oft gemachter Fehler ist es, die Beschreibung einer Ressource mit der Ressource selbst gleich zu setzen.

Wir wissen dass gemäß der Linked Data Grundprinzipien beim Abruf der ein Ding identizifierenden URI „nützliche Informationen“ bereitgestellt werden müssen. Dazu liefert z.B. ein Webserver ein RDF-Dokument aus. Ich möchte das kurz am Beispiel meiner eigenen FOAF-Datei demonstrieren. Ich (ja tatsächlich ich, nicht die Datei!) werde durch folgende URI im Datenweb identifiziert:

http://data.kontroversen.de/foaf.rdf#me

Beim Abruf mit einem Browser (Egal ob Web- oder Datenbrowser) wird folgende Datei ausgeliefert:

http://data.kontroversen.de/foaf.rdf

Diese Datei ist ein RDF-Dokument, welches Informationen über mich (d.h. die Ressource http://data.kontroversen.de/foaf.rdf#me) enthält. Die Datei und ich sind jedoch zwei völlig unterschiedliche Dinge (Weshalb ich im übrigen auch eine andere URI als die Datei habe). Die Datei ist eine Informationressource identifiziert durch die URI http://data.kontroversen.de/foaf.rdf. Ich bin eine Nicht-Informationsressource identifziert durch http://data.kontroversen.de/foaf.rdf#me.

Einmal verstanden erscheint dies selbstverständlich, führt jedoch anfangs oft zu Verwirrungen und paradoxen RDF-Dokumenten. So hat zum Beispiel die New York Times (erfreulicherweise!) beachtliche Datenbestände als Linked Data verfügbar gemacht. Anfangs wurden dabei jedoch typische Fehler gemacht, die aus der Verwechslung von Informations- und Nicht-Informationsressourcen herrühren.

Die URI http://data.nytimes.com/N31738445835662083893 identifiziert den Schauspieler Paul Newman. Über diese Person finden sich in dem Datensatz leider kaum Informationen, nützlich ist hauptsächlich der Verweis auf die DBpedia. Das ist jedoch nicht wirklich schlimm. Problematisch war eine Zeit lang (mittlerweile wurde es zum Glück korrigiert) die Vermischung von Daten und Metadaten: Was zum Beispiel sagt das Prädikat „dc:creator“ in Bezug auf eine Person aus? Heitere Zeigenossen möchten dort vielleicht die Eltern der Person eintragen, oder Gott, wenn sie gläubig sind. Ganz sicher ist jedoch nicht „The New York Times Company“ der „Ersteller“ von Paul Newman.

Die New York Times hatte die Nicht-Informationsressource „Paul Newman“ mit der Informationsressource verwechselt die ihn beschreibt. Was sie eigentlich ausdrücken wollten ist, dass „The New York Times Company“ der Ersteller des RDF-Dokumentes ist. Das RDF-Dokument ist jedoch eine eigene Ressource und bekommt eine eigene URI.

Die New York Times wurde zwischenzeitlich auf den Fehler hingewiesen und hat ihn korrigiert. Die Informationsressource wird nun über http://data.nytimes.com/N31738445835662083893.rdf identifiziert und „dc:creator“ bezieht sich auf diese Ressource und nicht mehr auf Paul Newman selbst.

Ich hoffe ich konnte die Unterscheidung zwischen Informations- und Nicht-Informationsressource einigermaßen verständlich darlegen. Mir hat dabei der Merkspruch „You are not your Website“ sehr geholfen. Denn im „Web of Data“ gibt es nicht nur deine Website, sondern auch dich selbst. Und das sind natürlich zwei völlig unterschiedliche Dinge.

RDF – Die Sprache des Web of Data

Nach unserem kurzen Ausflug ins Web of Data, wollen wir nun die Sprache näher betrachten, die diese Daten beschreibt. Was HTML im „normalen“ Web ist, ist hier RDF. RDF beschreibt Ressourcen und steht deshalb – oh Wunder – für Resource Description Framework.

Wir erinnern uns: Im Datenweb gibt es nicht nur Dokumente, sondern alle möglichen Dinge über die wir Daten hinterlegen können, z.B. Städte, Personen, Medikamente, Bücher, Ereignisse, … Diese Dinge nennt man im Datenweb Ressourcen. Die Grammatik von RDF ist einfach: Eine Ressource beschreibt man in der Form Subjekt – Prädikat – Objekt. Dieses Dreigespann heißt RDF-Tripel. Subjekt ist die Ressource, die beschrieben wird, Prädikat ist die Aussage die wir über diese Ressource treffen und Objekt ist der Wert oder Gegenstand dieser Aussage.

Wir können zum Beispiel sagen „Angelo Veltens interessiert sich für Linked Data“ Ich bin in diesem Fall das Subjekt, also die Ressource die wir beschreiben, „interessiert sich“ ist Prädikat und „Linked Data“ das Objekt. Soweit ist es erstmal ein gewöhnlicher deutscher Satz. In RDF-XML sieht der gleiche Sachverhalt folgendermaßen aus:

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:foaf="http://xmlns.com/foaf/0.1/">

  <foaf:Person rdf:about="http://data.kontroversen.de/foaf.rdf#me">
    <foaf:interest rdf:resource="http://dbpedia.org/resource/Linked_Data"/>
  </foaf:Person>
</rdf:RDF>

http://data.kontroversen.de/foaf.rdf#me ist die URI die mich identifiziert und das Subjekt dieser Aussage. Durch die Verwendung des Tags <foaf:Person> wird zusätzlich noch ausgedrückt, dass die beschriebene Ressource vom Typ foaf:Person ist. Das Tag <foaf:interest> ist ein Prädikat, welches Interesse an einem Themengebiet formal beschreibt. Das Attribut rdf:resource verweist auf das Objekt dieser Aussage. Ich habe hier einen Link in die Dbpedia genutzt um das Themengebiet Linked Data zu identifizieren.

Achtung: RDF ist nicht das selbe wie RDF-XML! XML ist lediglich eine Darstellungsform von RDF. Andere Darstellungsformen sind Notation 3 (N3) oder ein RDF-Graph. In Notation 3 sieht unser Beispiel folgendermaßen aus:

@prefix foaf: <http://xmlns.com/foaf/0.1/>
<http://data.kontroversen.de/foaf.rdf#me>
  foaf:interest
    <http://dbpedia.org/resource/Linked_Data>.

Und hier als RDF-Graph:

simple_rdf_graph

Die eigentliche Herausforderung beim Beschreiben von Ressourcen mittels RDF liegt nicht in der Grammatik, die wie ihr seht wirklich mehr als einfach ist, sondern bei der Wahl und ggf. Neudefinition von Vokabularen, auch Ontologien genannt. Auf einige dieser Ontologien, z.B. das in diesem Beispiel verwendeten FOAF, werde ich in kommenden Artikeln näher eingehen. Zur Definition von Ontologien haben sich zwei Sprachen etabliert: Die Web Ontology Language (kurz OWL) und RDF-Schema. Auch der Eigendefinition von Vokabularen werde ich noch einen Beitrag widmen. Allerdings sollte man damit sehr sparsam umgehen und nach Möglichkeit eine bestehende Ontologie wiederverwerten oder bei Bedarf ergänzen, damit wir ihm Datenweb nicht enden wie beim Turmbau zu Babel und niemand mehr den anderen versteht.

Weiterführende Links:

Data-Browsing – Ein kurzer Ausflug ins Web of Data

Wie versprochen, werden wir das Thema Linked Data nun etwas praktischer angehen. Wenn man mal selbst durch das Datenweb gesurft ist, versteht man viel eher worum es eigentlich geht. Wir brauchen:

  1. Einen Datenbrowser
  2. Einen Einstiegspunkt
  3. Neugier

Es gibt gibt schon einige Datenbrowser, allerdings scheinen die mehr Proof-of-Concept zu sein, als nutzbare Tools. Ich persönlich komme aktuell immer noch am besten mit Tabulator zurecht, obwohl der nicht sonderlich intuitiv zu bedienen ist. Das schöne an Tabulator ist aber, dass es dafür ein Firefox-Addon gibt, das schnell installiert ist. Außerdem lädt Tabulator automatisch „sameAs-Links“ nach, d.h. Daten die unter einer anderen URI verfügbar sind, aber das gleiche Objekt beschreiben werden gleich mitgeladen. Ich werde unsere kleine Erkundungstour durch das Datenweb anhand von Tabulator beschreiben. Wer erstmal nichts installieren mag, kann aber auch einen der Online-Browser verwenden, z.B. den OpenLink Data Explorer, Disco oder Marbles.

Teilweise geht es sogar ganz ohne Datenbrowser, nämlich dann wenn die Datenquellen ihre Daten auch gleich in einer HTML-Variante bereitstellen. Das ist zum Beispiel bei dbpedia.org der Fall. DBpedia ist das Abbild der Wikipedia im Web of Data. Das Projekt liest systematisch Daten aus der Wikipedia aus und veröffentlicht sie als RDF. Unter der URI http://dbpedia.org/resource/Karlsruhe finden sich zum Beispiel Daten zur Stadt Karlsruhe. Ruft man diese URI mit einem normalen Web-Browser ab, werden die Daten als HTML-Dokument angezeigt. Das passiert sogar, wenn man die Tabulator-Erweiterung installiert hat, weil Firefox immer noch primär ein HTML-Browser ist. Wie man das ändern kann erkläre ich in einem späteren Artikel (Tipp für Neugierige: Spielt mal mit Modify Headers am Accept-Header herum). Für den Moment reicht es, explizit die URI http://dbpedia.org/data/Karlsruhe abzurufen, um an die Rohdaten zu kommen [1]. Wir erfahren so tolle Sachen wie die Einwohnerzahl, die Telefonvorwahl und das Bundesland.

Mit Linked Data hat das alles aber noch recht wenig zu tun. Aufgrund der Informationsfülle wird zwar sehr gerne in die DBpedia hinein verlinkt, aber nur sehr wenige Links führen wieder hinaus. Wir suchen uns deshalb einen anderen Startpunkt, am besten von jemandem der sich auskennt: Tim Berners-Lee. Ja, klickt ruhig auf den Link, er führt direkt zu Daten über die Person Tim Berners-Lee, mitsamt einer ganzen Menge Links zu weiterführenden Daten, irgendwo in den Weiten des Webs. Wir erfahren zum Beispiel, dass er der Organisation „World Wide Web Consortium“ angehört und wenn ihr auf den kleinen grauen Pfeil daneben klickt, klappen zusätzliche Infos zu dieser Organisation aus. Wir erfahren auch, dass Berners-Lee der Autor von „Weaving the Web“ ist. Wenn man Shift gedrückt hält, wenn man auf den Pfeil klickt, werden die Daten zu diesem Buch im kompletten Browser-Tab geladen, statt nur ausgeklappt.

Leider stoßen wir dann schon recht schnell an die Grenzen des Datenwebs. Zum Beispiel wird der Verlag des Buches (Harper Paperbacks) zwar genannt, aber nicht verlinkt. Wir können also keine weiteren Daten zum Verlag abrufen. Es liegt an uns allen, diese Grenzen zu sprengen, so wie wir schon das WWW groß gemacht haben und täglich vergrößern. Aber schaut euch einfach mal ein bisschen um, es gibt schon einiges zu entdecken. Unter http://data.kontroversen.de/foaf.rdf#me habe ich auch ein paar Daten über mich online gestellt und mit meinem Identi.ca- sowie Twitter-Account verknüpft. (Ja, dem Thema Datenschutz und informationelle Selbstbestimmung in Bezug zu Linked Data werde ich auch noch einen Beitrag widmen)

So, ich denke das genügt erstmal als kleines, anschauliches Praxisbeispiel bzw. als Startpunkt für eigene Experimente. Bei Fragen und Problemen meldet euch einfach in den Kommentaren.

[1] Genau genommen ist das nicht ganz richtig, denn http://dbpedia.org/data/Karlsruhe verweist auf ein RDF-Dokument mit Daten über die Stadt Karlsruhe, während http://dbpedia.org/resource/Karlsruhe die Stadt selbst identifiziert. Dieser kleine aber feine Unterschied äußert sich auch in der Art wie Tabulator die Daten darstellt.

Alles bekommt eine URI

Im vorherigen Beitrag habe ich einen kurzen Vorgeschmack auf das Thema Linked Data gegeben. Doch was genau hat es damit auf sich? Wie sieht ein „Web of Data“ aus? Lässt es sich mit den heutigen Techniken überhaupt realisieren, oder müssen wir das Internet neu erfinden? Die gute Nachricht lautet: Nein müssen wir nicht. Linked Data beruht im wesentlichen auf 4 einfachen Grundprinzipien, die Tim Berners-Lee 2006 in „Linked Data: Design Issues“ beschrieben hat:

  1. Use URIs as names for things
  2. Use HTTP URIs so that people can look up those names.
  3. When someone looks up a URI, provide useful information, using the standards (RDF, SPARQL)
  4. Include links to other URIs. so that they can discover more things.

Die erste Regel fordert, dass wir alles mögliche über URIs identifizieren können. Es geht nicht mehr nur um Dokumente, wie im WWW. Wir wollen Daten bereitstellen, über Personen, Orte, Gegenstände, Organisationen, Pflanzen, Tiere, Gebäude… Daten über alles Mögliche. All diese Dinge bekommen eine URI.

Weiterhin fordert Regel 2, dass als Protokoll HTTP genutzt wird. Das stellt sicher, dass die URI über das Domain Name System auflösbar ist. Das ist keinesfalls selbstverständlich, es gibt nämlich zahlreiche weitere Typen von URIs, zum Beispiel sind auch tel:+1-816-555-1212 und mailto:John.Doe@example.com gültige URIs. Es gibt sogar URIs für ISBN. Jetzt könnte man auf die Idee kommen, dass doch letztere eine wunderbare Möglichkeit wären um Bücher im „Web of Data“ eindeutig zu identifizieren. Nur dummerweise haben solche URIs die Eigenschaft, dass sie eben nicht auflösbar sind, das heißt ich kann damit nichts im Web abrufen.

Genau das erfordert aber die dritte Regel. Hinter unserer URI müssen sich nützliche, standardisierte Informationen verbergen. Zum Beispiel könnte ein Webserver unter dieser URI ein XML-Dokument ausliefern, welches RDF-Daten enthält. RDF ist ein Standard zur Beschreibung von Informationen, sodass diese leicht automatisiert verarbeitet und ausgewertet werden können. Ich werde auf RDF noch genauer in einem späteren Artikel eingehen.

Die vierte und letzte Regel verknüpft unsere Daten miteinander: Die Informationen die wir ausliefern stehen nicht für sich alleine, sondern enthalten selbst wieder URIs und verweisen so auf weiterführende Informationen. Man stelle sich zum Beispiel vor, dass unter einer URI Daten über ein Buch abrufbar sind. Wir erhalten dann zum Beispiel die Information, wieviele Seiten das Buch hat und wann es erschienen ist. Aber anstatt nur den Namen des Autors, enthalten die Daten eine URI, die den Autor selbst identifiziert! Wenn wir diesem Link dann folgen, erhalten wir Informationen über den Autor, zum Beispiel sein Geburtsjahr und Links zu weiteren Büchern die er veröffentlicht hat. Diesen Links können wir wiederum folgen und so das „Web of Data“ erkunden.

Das wars! Vier einfache Grundprinzipien, so einfach wie genial! Praktische Beispiele und nähere Details wie man selbst Linked Data im Web veröffentlichen kann folgen demnächst.