Gestern bin ich auf das Portable Contacts Projekt gestoßen…

The momentum began building for ‚data portability‘ last year, and we are now at a point where there is strong support for the principle that users should be in control of their data and have the freedom to access it from across the web.

[…]

The goal of Portable Contacts is to make it easier for developers to give their users a secure way to access the address books and friends lists they have built up all over the web.

[…]

…we’re using existing standards wherever possible, including vCard, OpenSocial, XRDS-Simple, OAuth, etc.

…was für mich nichts anderes als eine Trotzreaktion auf Data Portability ist!

Da spricht man von einheitlichen Standards und Portabilität, schafft es aber nicht, gemeinsam an einem Projekt zu arbeiten… Ich sehe kaum Erleichterung darin, statt verschiedener proprietärer APIs (z.B. Google’s GData Contacts API oder Microsoft’s Live Contacts API) wahrscheinlich mind. genauso viele unterschiedliche standard APIs (Data Portability oder Portable Contacts) implementieren zu müssen!

…irgendwie ironisch!

microformats.jpg

Da ich mich in den letzten Monaten viel mit Themen wie DataPortability oder dem Semantic Web beschäftigt habe, kam mir die Frage welche Rolle Microformats in Zukunft einnehmen werden.

Microformats und DataPortability

Bisher sind zwei (mit hAtom drei) Mikroformate im DataPortability-Konzept enthalten:

  • hCard – zum Austausch von Profildaten
  • XFN – zum Austausch von Freundschafts-Netzen
  • (hAtom – als Alternative zu ATOM oder RSS)

Ich denke aber nicht, dass Microformats (zumindest in der klassischen HTML-Version) über längeren Zeitraum diese Position in der DataPortability-Idee einnehmen werden. Microformats sind zwar weit verbreitete und simple Formate um Informationen semantisch aufzubereiten, sind aber schwer zu parsen (HTML) und bieten keinen wirklichen Authentifizierungsmechanismus (da sie direkt im HTML-Quelltext stehen).

Ich bin der Meinung dass OpenID und FoaF alle Eigenschaften von Microformats auf eine wesentlich bessere Weise lösen können. FoaF ist losgelöst von der normalen Webseite und kann so problemlos über OAuth oder OpenID geschützt werden und bildet sogar Profildaten und Freundesnetze ab. Noch einfacher wäre OpenID Attribute Exchange, da so SingleSignOn, Portabilität und Authentifizierung mit einem Standard abgedeckt sind.

Den einzigen DP-Anwendungsfall den ich mir für Microformats vorstellen könnte wäre eine Alternativ-Form (zu HTML) wie z.B. JSON oder XML, da sie sich im Gegensatz zu Attribute Exchange oder FoaF an bestehende Standards (z.B. vCard) halten und wohl definiert sind, würde aber nicht mehr viel mit der klassischen Idee der Microformats zu tun haben.

Microformats und das Semantic Web

Microformats werden auch immer wieder (fälschlicherweise) als Teil des Semantic Web bezeichnet und lassen sich dank GRDDL auch problemlos in dieses integrieren, bieten aber sonst keinerlei Semantic-Web-Eigenschaften. Nach der Veröffentlichung von RDFa haben Microformats aber auch einen schlechten Stand als „real world semantics“.

Ein wesentliches Defizit der µF im Vergleich zu RDFa ist die schlechte Skalierbarkeit und das Problem der fehlenden Triples.

Sieht man das Semantische Web als Zukunft des Internets, werden µF wohl in nächster Zeit auch auf diesem Gebiet von dem wesentlich semantischeren RDFa abgelöst.

Jedem offenen Standard eine Nische

Bei Medientheoretikern gibt es die These dass „bislang noch kein Medium von einem anderen überflüssig oder verdrängt worden wäre„, warum sollte das nicht auch für offene Standards gelten 🙂

Ich kann mir zwei sinnvolle Anwendungsgebiete für Microformats vorstellen (über die ich auch noch etwas detaillierter schreiben möchte), in denen es (noch) keine bessere Alternative gibt.

searchmonkeyLogo147x150.gif

Microformats sind direkt in die Webseite integriert und benötigen keinen Backchannel wie z.B. bei XML-Schnittstellen wie RSS, deshalb bietet es auch eine Ideallösung für Semantische Suchmaschinen wie z.B. Yahoo!s Search Monkey oder Technorati Kitchen. Suchmaschinen haben durch µF die einmalige Möglichkeit, strukturierte Inhalte zu indexieren und auf deren Basis, Systeme wie z.B. Kalender, online Telefonbücher und Musiksuchen abzubilden. Hier haben Mikroformate durch die Anzahl der schon definierten Formate und deren weite Verbreitung auch einen enormen Vorteil gegenüber RDFa.

Eine zweite Niesche beschreibt Sascha Konietzke in seinem Artikel What Are Microformats and What Do They Mean to Mobile?. Die meisten Handys unterstützen mittlerweile normales XHTML und wären somit ein idealer Client für Microformats. Der Hauptfokus neben dem Telefonieren und dem SMS schreiben liegt bei Handys auf dem Adressbuch oder dem Kalender, also genau den zwei weit verbreitetsten Mikroformaten hCard und hCalendar. Auch die, ursprünglich für Twitter entworfenen, Nanoformats wären ein idealer Standard um semantisch zu SMSen 🙂

Auch wenn Microformats keine Ideallösungen für DataPortability sind und nicht der Semantic Web Idee entsprechen, gibt es sicherlich genug sinnvolle Anwendungsgebiete.

Nach seinem Artikel über DataPortability und Chris Saads Antwort, äußert sich Chris Messina nochmals sehr kritisch zu dem Thema in der DP Google-Group.

Gerade nach den Pressemeldungen über MySpaces „Data Availability“:

[…] MySpace is announcing a broad ranging embrace of data portability standards today, along with data sharing partnerships with Yahoo, Ebay, Twitter and their own Photobucket subsidiary. […] #

…oder über Googles „Friend Connect“:

As we reported on Friday, Google will be launching its own data portability effort called Friend Connect. […] #

…ist (meiner Meinung nach) einer der treffendsten Punkte in Chris‘ Kommentar:

The behavior indicates […] that the DP-PR machine is simply more effective at taking credit for big moves that they had nothing directly to do with than to promote smaller independent, more „grassroots“ groups who are *actually* making moves towards effective data portability, like Dopplr, like TripIt, like Satisfaction and Twitter and the rest. I don’t believe I’ve seen any press releases go out about them, and yet I would consider them to be on the vanguard giving people access to their data in real-world, useful ways.

Ich muss Chris Messina leider recht geben, keines der groß angekündigten (und mit DataPortability in Verbindung gebrachten) Systeme betreibt wirklich DataPortability (zumindest zum aktuellen Zeitpunkt). Sowohl MySpace als auch Google verwenden zwar offene Standards (Facebook nutzt sogar keinen der erwähnten Standards für „Facebook Connect“) wie OAuth oder OpenID, aber bisher leider nur hinter ihren „Walled Gardens„.
Was ist mit den wahren DP „Helden“ wie Dopplr, Magnolia oder Satisfaction, die wirkliche Anwendungsfälle schaffen und sich dem Ziel der portablen Daten Schritt für Schritt nähern?

Carsten Pötter beschreibt das bestehende Problem auch noch einmal von einer etwas anderen Seite:

DataPortability, Data Availability, Facebook Connect, Google Friend Connect, DiSo,… […] All the mentioned initiatives just lead to confusion. We can’t be sure if we mean the same thing when talking about data portability anymore. It’s probably best to abandon that term and just focus on single issues. Can I export my profile or can it just be accessed by a third party?

Man sollte in Zukunft vielleicht etwas sparsamer mit dem Titel DataPortability umgehen und ihn nicht für jede „simple“ hCard vergeben.

Liest man die letzten Meldungen über Digg bei Techcrunch könnte man meinen eine hCard und ein bisschen XFN reichen um DataPortability zu betreiben.

The DataPortability Project has gained another adherent in Digg, which announced on its blog today that it has implemented three under-the-hood enhancements.

Natürlich ist es wichtig, dass Standards wie Microformats oder RDFa eine große Akzeptanz finden und große und bekannte Dienste wie Digg dazu beitragen diese Standards zu verbreiten… aber das ist in meinen Augen noch lange kein Grund von DataPortability zu sprechen, zumal Microformats (meines erachtens) auch nicht der beste Weg sind, Daten auszutauschen.

Es ist langsam an der Zeit Anwendungsfälle für die ganzen angebotenen Standards wie Microformats, OPML, APML und OAuth zu schaffen. Eine hCard oder XFN zu implementieren ist eine Sache von fünf Minuten und sollte für künftige Webseiten State of the Art sein, sie weiterzuverarbeiten macht für mich DataPortability aus.

Das ist DataPortability:

Vor ein paar Wochen wurde XRDS-Simple 1.0 (Draft 1) veröffentlicht. XRDS-Simple ist ein Standard, der auf bestehenden Standards der XRI Community aufbaut, auf den z.B. auch das von OpenID bekannte Yadis-Format basiert.

XRDS-Simple provides a format and workflow for the discovery of resources metadata, and other linked resources. As web services continue to grow, applications utilize a wider range of web services and resources across multiple providers. XRDS-Simple allows providers to document their resources in a machine-readable way, which can be automatically discovered by consumer applications.

XRDS-Simple bietet also ein recht simples Format um auf Services und andere „linked recources“ zu verweisen.

XRDS-Simple als zentraler ServiceCatalogue

Wie man dieses Format für das DataPortability Projekt nutzen kann hat Christian Scholz in seinem Post „The first Data Portability Use Case (somewhat technical)“ schön zusammengefasst.

Nehmen wir an, ich melde mich bei einem neuen Dienst an und möchte meine Daten, die ich an anderen Stellen im Internet angegeben habe, wiederverwenden. Um nicht alle meine Profil-URLs immer wieder per Hand angeben zu müssen, kam die Idee eines ServiceCatalogues auf.

Der ServiceCatalogue soll an zentraler Stelle alle Informationen die über mich im Web verfügbar sind (z.B. als hCard, XFN, FoaF, usw. formatiert) bereitstellen.

<XRDS xmlns="xri://$xrds">
  <XRD xmlns:simple="http://xrds-simple.net/core/1.0" xmlns="xri://$XRD*($v*2.0)" version="2.0">
    <Type>xri://$xrds*simple</Type>
    <Service priority="10">
      <Type>http://www.w3.org/2006/03/hcard</Type>
      <URI simple:httpMethod="GET">http://pownce.com/pfefferle</URI>
    </Service>
    <Service priority="20">
      <Type>http://gmpg.org/xfn/11</Type>
      <URI simple:httpMethod="GET" priority="10">http://twitter.com/pfefferle</URI>
      <URI simple:httpMethod="GET" priority="20">http://pownce.com/pfefferle</URI>
    </Service>
  </XRD>
</XRDS>

Das Beispiel zeigt z.B. die URL zu meiner hCard bei Pownce und meinen Freundesnetzen bei Pownce und Twitter. Um diese Information vor unerlaubten Zugriffen zu schützen, könnte die XRDS-Simple URL mit OAuth geschützt oder per OpenID AX angefragt werden.

XRDS-Simple mit AX abfragen

Um XRDS-Simple via AX anzufragen, müsste man zuerst ein AX-Schema definieren:http://dataportability.org/schema/serviceCatalogue Label service catalogue Description The url to a XRDS-Simple formatted service catalogue Example http://example.org/sc.xrds Formatting http://www.w3.org/2001/XMLSchema#anyURI

und unter http://dataportability.org/schema/serviceCatalogue bereitstellen. Leider funktioniert diese Art der Bereitstellung nur wenn einige OpenID-Provider diese AX-ServiceCatalogue-URL auch implementieren.

Eigentlich wollte ich NoseRub schon vor ner ganze Weile mal testen, jetzt habe ich die seit vorgestern erhältliche Version 0.6 zum Anlass genommen, NoseRub mal auf meinem Server zu installieren: pfefferle.org

Wer NoseRub, wie ich als SingleUser-System auf seinem Server/Webspace hosten will (anstatt als Service wie Identoo.com) muss nur zwei Dinge beachten:

NoseRub Registration Type

Zuerst sollte man sicherstellen dass sich keiner bei NoseRub registrieren kann, dazu einfach die Datei „app/config/noserub.php“ öffnen und den NOSERUB_REGISTRATION_TYPE auf none setzen.

define('NOSERUB_REGISTRATION_TYPE', 'none');

SocialStream durch „My Profile“ ersetzen

Im zweiten Schritt kann man die Startseite (SocialStream) durch sein eigenes Profil ersetzen. Hierzu muss man in der „app/config/routes.php“ einfach nur die Zeile

Router::connect('/', array('controller' => 'identities', 'action' => 'social_stream'));

…mit…

Router::connect('/', array('controller' => 'identities', 'action' => 'index', 'username' => 'USERNAME'));

…ersetzen und statt USERNAME den eigenen Benutzernamen eintragen. Das wars eigentlich schon.

Viel Spaß beim ausprobieren 🙂