WebID-Authentifizierung mit Node.js

Ein Leser des letzten Artikels hatte Schwierigkeiten, die Signatur von foafssl.org mit Hilfe von Node.js zu überprüfen. Es war etwas tricky, aber ich habe es inzwischen hinbekommen und möchte die Lösung niemandem vorenthalten:

Grundsätzlich funktioniert die Überprüfung der Signatur bei Node.js mit verifier.verify(object, signature, [signature_format]). Als 1. Parameter gebt ihr den (PEM encodierten) Public Key an, als zweites die Signatur und als letztes das Format ‚base64‘.

Allerdings ist die übermittelte Signatur nicht Base64, sondern Base64-URL encodiert! Ihr müsst also in der Signatur zunächst alle ‚_‘ durch ‚/‘ und alle ‚-‚ durch ‚+‘ ersetzen. Bevor ihr die Signatur an die verify-Function übergebt, müsst ihr aber außerdem noch ‚==‘ hinten anfügen. Die korrekte Signatur ergibt sich also wie folgt:

var signature = signatureBase64Url.replace(/\_/g, '/').replace(/-/g, '+') + '=='

Ein funktionierendes, online ausführbares Code-Beispiel habe ich auf der Plattform jsapp.us hinterlegt.

FrOSCon – Folien des Vortrags „Linked Open Data“

Auf der FrOSCon habe ich abermals über Linked Open Data referiert.

Der Vortrag baut sehr stark auf meiner SIGINT12-Präsentation auf, setzt jedoch auch einen Fokus auf die praktische Bereitstellung von Linked Data in Open-Source-Projekten.

Wie immer steht alles unter Creative Commons Lizenzen.

Demnächsttm wird auch eine Aufzeichnung online gestellt.

Warum „Open“ nicht genug ist – Vortragsvideo der SIGINT 12

Der CCC hat inzwischen die Vortragsvideos der SIGINT 2012 online gestellt. Auch mein Vortrag „Linked Open Data- Warum ‚open‘ nicht genug ist und wir Daten verlinken müssen.“ ist mit dabei. Leider klappt das Einbetten gerade nicht.

Der Vortrag ist zum einen eine Einführung in das Thema Linked Data, die keine Vorkenntnisse benötigt. Zum anderen soll er Menschen, die bereits Open Data kennen und lieben verdeutlichen, wie durch Verlinkung ein zusätzlicher Mehrwert entsteht. Auch die sehr interessanten Rückfragen und Kommentare während und nach des Vortrags wurden mit aufgezeichnet.

Wer tiefer in das Thema Semantic Web einsteigen möchte, dem empfehle ich anschließend den Vortrag von Carina Haupt.

Die Folien sind hier verlinkt.

[important]Fragen unbeantwortet? Nutze die Kommentarfunktion ;-)[/important]

WebID: Vortragsvideo & Folien vom Webmontag

Auf dem 6. Braunschweiger Webmontag habe ich einen Vortrag zum Thema „Dezentrale Soziale Netzwerke mit Linked Data und WebID gehalten“. Ich habe maßlos überzogen und viel zu schnell gesprochen. Der Vortrag kam trotzdem sehr gut an und führte zu vielen interessierten Fragen.

Wer nicht die Gelegenheit hatte, live dabei zu sein, kann sich die Aufzeichnungen auf Vimeo ansehen.

Mein Vortrag beginnt in Teil 2 bei Minute 13:55:

und setzt sich fort in Teil 4:

[important]Meine Vortragsfolien habe ich wie immer mit allen Sourcen und unter freier Lizenz bei GitHub hochgeladen. Hier ist auch nochmal die PDF-Fassung.[/important]

Linked Open Data – Vortragsfolien

Ich habe die Vortragsfolien meiner „Linked Open Data“-Präsentation auf der SIGINT 2012 inzwischen online gestellt:

Wie immer alles Creative-Commons-lizenziert!

Nochmals vielen Dank für das rege Interesse und das positive Feedback. Ich bin immer froh, wenn viele Rückfragen gestellt werden und eine Interaktion mit dem Publikum entsteht. Ich freue mich auch weiterhin über Fragen und Feedback per Mail oder in den Kommentaren.

Der Vortrag wurde aufgezeichnet und wird wohl innerhalb der nächsten Wochen online gestellt (Hoffentlich vollständig, denn es gab leider ein technisches Problem während der Aufzeichnung). Ich werde nochmal darauf hinweisen, wenn es soweit ist.

Der Semantic-Web -Vortrag von Carina Haupt war übrigens (wenn auch leider zeitlich vorher platziert) eine prima Ergänzung zu meinem Einstieg ins Thema. Schaut euch auch dessen Aufzeichnung an, wenn ihr nicht vor Ort sein konntet!

Für die FrOSCon 7 habe ich den Vortrag gerade ebenfalls eingereicht, würde dort den Fokus aber stärker auf Entwickler-Bedürfnisse setzen, wenn er angenommen wird.

[important]Da ich den Eindruck habe, dass das konkrete Interesse am Thema wächst und auch viele Rückfragen zur praktischen Umsetzung kamen, plane ich für die nächste SIGINT einen Workshop zum Thema einzureichen. Was haltet ihr davon?[/important]

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. 

Linked Data & Semantic Web auf der SIGINT 2012

Mein Vortrag „Linked Open Data“ wurde für die Konferenz SIGINT des Chaos Computer Clubs angenommen. Mit besonderem Fokus auf die Chancen für die Open Data Bewegung werde ich dort die Grundlagen von Linked Data erläutern.

Aus der Vortragsbeschreibung:

Open Data ist auf dem Vormarsch. Doch es reicht nicht CSV-Daten in ein Zip-Archiv zu packen und zum Download anzubieten. Wenn wir die Stärken von frei verfügbaren Behördendaten voll ausschöpfen wollen, dann müssen wir ein „Web of Data“ schaffen, in dem Rohdaten miteinander verlinkt sind, so wie im WWW HTML-Seiten miteinander verlinkt sind. Der Vortrag stellt das Konzept „Linked Data“ vor, erklärt, wie wir zum „Web of Data“ beitragen können und erläutert das gesellschaftliche Potential von Linked Open Data.

Ebenfalls angekündigt ist der Vortrag „The Semantic Web – Raising of the Dead?“ von Carina Haupt:

A lot of people say that the semantic web is dead, but why is then google announcing that they plan to make the biggest change in their web search ever by introducing it. So, what is the semantic web actually? Which technologies are behind it? Why was it called dead? And why is it coming back?

Das komplette Programm der SIGINT 2012 findet ihr hier.

Die SIGINT ist eine Konferenz zu den Diskursen im digitalen Zeitalter und findet vom 18. bis 20. Mai 2012 im KOMED in Köln statt. Nähere Infos unter http://sigint.ccc.de

 

Schnellstart für Entscheidungsträger

Mit „Linked Open Data: The Essentials – A Quick Start Guide for Decision Makers“ ist kürzlich ein Buch erscheinen, dass Entscheidungsträgern in Unternehmen (und womöglich auch in der Politik?) das Thema Linked Open Data und seine Vorzüge näher bringen will.

Das Buch gibt es nicht nur im Handel, sondern ist auch als PDF herunterladbar. Einer der Autoren beschreibt das Buch wie folgt:

Linked Open Data: The Essentials provides answers to the following key questions:

  • What do the terms Open Data, Open Government Data and Linked Open Data actually mean, and what are the differences between them?
  • What do I need to take into account in developing a LOD strategy?
  • What does my organisation need to do technically in order to open up and publish its datasets?
  • How can I make sure the data is accessible and digestible for others?
  • How can I add value to my own data sets by consuming LOD from others?
  • What can be learned existing best practices?
  • What are the key potentials of sharing and consuming open datasets?

Obwohl das Buch mit unter 70 Seiten nicht sehr lang ist und beim Überfliegen auch sehr übersichtlich aussieht, bin ich leider noch nicht dazu gekommen es zu lesen. Ich möchte es euch trotzdem nicht vorenthalten und werde ein Review nachliefern 🙂 (Wer es schon gelesen hat, darf übrigens auch gerne einen Gastartikel schreiben)

Linked Open Data: Erklärungsvideo

Dir ist noch nicht ganz klar, was Linked (Open) Data eigentlich ist oder warum und wofür es nützlich sein kann? Das folgende knapp vierminütige Erklärungsvideo bringt das Wesentliche knapp und verständlich auf den Punkt:

[important]Hat jemand Lust, das Video auf Deutsch (oder auch andere Sprachen) zu übersetzen oder in irgendeiner Form daran mitzuwirken?[/important]