Cover page images (keys)

Linking Social Networks and the Semantic Web using GRDDL

Harry Halpin, University of Edinburgh
European Semantic Web Conference
Tenerife, Spain
June 2008

Overview

Opening the Social Graph

Users and developers want to stop having to re-invite their friends. facebook pic

Users are increasingly wanting more and more powerful applications to access their social data - and having that data behind a firewall just won't do in 2008.

The DataPortability.org to the rescue.. Danny Ayer's Video

Two Stories

Social Data Portability requires:
  1. The Social Graph Story: How do we actually get the social graph, merge social graphs from different services, and query graphs. RDF has the best story, with lots of tested software implementations
  2. The Authentication Story: How can you use a single login to securely access multiple services, both to download, modify, and upload social data? OpenID is the best story with an upswing in implementation

data portability

The Data Portability Group

data portability

Has been tremendously successful - over a 1000 subscribes, action groups, and every single major vendor from Google to Facebook has joined.

Seems to soon be based on an OpenID-like model, but has currently evolving structure.

Putting the word out and attracting interest - mostly from developers, and those who see their business model based on providing applications for portable social graphs instead of forcing users to recreate them.

A Rose by another Name

For example...

roses

Except using OpenID to access the file system and transporting data around in JSON...actually, quite similar to SPARQL minus OpenID!

RDF already a perfect file format for data transfer issues!

Work needed to be done to integrate OpenID into the Semantic Web stack!

And not enough research and working, running code around on the Web to convince development community that the Semantic Web is the way to go!

Virtual Schizophrenia

ClaimID: Your data is spread throughout the online world...and mostly not under your control

claimid

Myspace, Facebook, and OpenSocial

Similar to "browser wars," there now are competing ways to share social graph data on the Internet.

  1. OpenSocial Alliance: Started by Google and Myspace, and endorsed by Yahoo! and virtually all the minor players in the social networking world. Open Source implementation: Shindig
  2. Facebook: The dominant player in the social networking world, has mysterious plans to offer "Facebook" connect. Microsoft has a large amount of shares in Facebook.

Obviously a W3C-approved Semantic Web compatible standard way of doing this would be ideal.

The State of Play

claimid

Issues with OpenSocial

At first it was released had standardized input and output in Atom, and so could be easily converted to RDF.

But in later versions has more and more become a standardized API not for "widget" applications and not for end-users to control and access their data.

Has accessibility issues as any pure API does.

REST API is still forthcoming but looks very encouraging, possibly have SemWeb serialization!

Social Networking: Microformats?

More and more sites are allowing their social data to be available in microformats...

Microformats are centralized data formats for different types of data, often (nearly) isomorphic to already widely adopted non-Web standards:

Microformats and the Semantic Web?

What is VCard?

VCard (RFC2445):

BEGIN:VCARD
SOURCE:http://www.ibiblio.org/hhalpin
VERSION:3.0
N;CHARSET=utf-8:Halpin;Harry;Reeves;;
ORG;CHARSET=utf-8:University of Edinburgh
FN;CHARSET=utf-8:Harry Reeves Halpin
ADR;CHARSET=utf-8:;;2 Buccleuch Place;Edinburgh;Scotland;;UK
TEL:+44-131-650-4421
END:VCARD

vcard screen shot

Make your own VCard using this web-form maker!

What is hCard?

hCard = vCard in HTML

<table border="1">
<tr><td>
<span class="fn n">
<span class="given-name">Harry</span>
<span class="additional-name">Reeves</span>
<span class="family-name"> Halpin</span>
</span></td></tr>
<tr><td><span class="tel">+44-131-650-4421</span></td></tr>
<div class="adr">
<tr><td><span class="street-address">2 Buccleuch Place</span></td></tr>
<tr><td><span class="locality">Edinburgh</span></td></tr>
<tr><td><span class="postalcode">EH8 9LW</span></td></tr>

Make your own using hCalendar creator

Why hCard?

Microformats Logo

hCard and other microformats have shared tools, knowledge, process...

Demo of Microformat Browsing using Tails

What is XFN?

XFN, "XHTML Friends Network"

The earliest microformat, used to describe social relationships

XFN quick reference
relationship categoryXFN values
friendship (at most one): friend acquaintance contact
physical: met
professional: co-worker colleague
geographical (at most one): co-resident neighbor
family (at most one): child parent sibling spouse kin
romantic: muse crush date sweetheart
identity: me
    <li class="vcard"><a href="http://www.ihmc.us/users/user.php?UserID=42" class="url fn"
    rel="met collegue">Pat Hayes</a></li>
      <li class="vcard"><a href="http://www.w3.org/People/Connolly/" class="url fn"
    rel="met collegue friend">Dan Connolly</a></li>
    </ul>   
    rel="met friend">Tom Heath</a></li>
      <li class="vcard"><a href="http://kmi.open.ac.uk/people/tom/html" class="url fn"

Deployed by quite a few sites, usually in conjunction with hCard

  1. Dopplr
  2. Last.Fm
  3. WordPress

The Limits of Microformats

Enter FOAF and the Semantic Web

FOAF: Friend of a Friend - see FOAF Project

One of the earliest and most popular Semantic Web vocabularies.

FOAF RDF markup for Person, mbox, homepage, workplaceHomepage, schoolHomepage, knows and also for things that we are in or make, like primaryTopicOf and depicts. Linked in a (semantic) Web to other FOAF files and arbitrary RDF Data. Designed to be independently extended without breaking due to using RDF technologies.

Data Portability Using FOAF

FOAF

The Internals of FOAF

My hand-made FOAF is here: http://www.ibiblio.org/hhalpin/foaf.rdf


<rdf:RDF>
	<foaf:PersonalProfileDocument rdf:about="http://www.ibiblio.org/hhalpin/foaf.rdf">
<foaf:maker rdf:resource="http://www.ibiblio.org/hhalpin#"/>
<foaf:primaryTopic rdf:resource="http://www.ibiblio.org/hhalpin/"/>
</foaf:PersonalProfileDocument>
	<foaf:Person rdf:about="http://www.ibiblio.org/hhalpin#">
<foaf:name>Harry Halpin</foaf:name>
<foaf:title>Mr. </foaf:title>
<foaf:givenname>Harry </foaf:givenname>
<foaf:family_name>Halpin</foaf:family_name>
<foaf:nick>hhalpin</foaf:nick>
<foaf:nick>harry</foaf:nick>
<foaf:nick>hrhalpin</foaf:nick>
<foaf:homepage rdf:resource="http://www.ibiblio.org/hhalpin/index.html"/>
<foaf:weblog rdf:resource="http://www.harryhalpin.blogspot.com/"/>
<foaf:mbox_sha1sum>c5e75a0dd882184416c8680f5c402a261314bb79</foaf:mbox_sha1sum>
<foaf:workplaceHomepage rdf:resource="http://www.inf.ed.ac.uk"/>
−
	<foaf:depiction>
−
	<foaf:image rdf:about="http://www.ibiblio.org/hhalpin/homepage/images/harrytrain.png">
<foaf:depicts rdf:resource="http://www.ibiblio.org/hhalpin#me"/>
</foaf:image>
</foaf:depiction>
<foaf:gender>male</foaf:gender>
<foaf:schoolHomepage rdf:resource="www.inf.ed.ac.uk"/>
<foaf:phone rdf:resource="tel:(44)-0-131-650-4421"/>
−
	<foaf:geekcode>
gcs/gp>go d-- s++,s- a- c++ ul++ p++ L++ E+ W+++ N o-- K- w--- O M- V? PS++ PE-- Y++ PGP++ t+ 5? X++ R+ !tv b+++ DI++ D+ G e+++>e++++$ h* r z+
</foaf:geekcode>
<foaf:jabberID>hhalpin@jabber.org/Gaim</foaf:jabberID>
<foaf:aimChatID>HarryRHalpin</foaf:aimChatID>
−
	<foaf:knows>
−
	<foaf:Person>
<rdfs:seeAlso rdf:resource="http://dit.unitn.it/~bouquet/foaf.rdf"/>
<foaf:name>Paolo Bouquet</foaf:name>
</foaf:Person>
</foaf:knows>
−
	<foaf:knows>
−
	<foaf:Person rdf:nodeID="IanDavis">
<foaf:name>Ian Davis</foaf:name>
<foaf:mbox_sha1sum>dd7085aa3616597958f2deb0dc0c483514857082</foaf:mbox_sha1sum>
</foaf:Person>
</foaf:knows>
−
	<foaf:knows>
−
	<foaf:Person>
<foaf:name>Dan Connolly</foaf:name>
<foaf:mbox_sha1sum>94b6eb0c835f928c5ed565dc3ed1a355ac1b41e5</foaf:mbox_sha1sum>
<rdfs:seeAlso rdf:resource="http://www.w3.org/People/Connolly/home-smart.rdf"/>
<foaf:homepage rdf:resource="http://www.w3.org/People/Connolly/"/>
</foaf:Person>
</foaf:knows>

...

Getting Started with FOAF

You can create a FOAF file with
FOAF-o-matic. There are already great tools out there, like foafnaut.

Check out Alexander Passant's marvelous foafmap.net mash-up of FOAF and Google Maps.

foafnaut

Mixing VCards and FOAF

FOAF and VCard share some overlapping properties, such as nicknames.

They do names a bit differently, with VCard splitting names while FOAF doesn't

Just convert VCard to RDF, as in the new VCard ontology.

Some of VCard may be get brought into a future version of FOAF.

hCard can be GRDDL'ed into RDF as well. http://www.w3.org/2006/vcard/hcard2rdf.xsl

Batch convert VCard to FOAF at: http://toxi.co.uk/foafgen/

Mixing XFN and FOAF

One can convert XFN over to FOAF, by viewing it as sub-species.

And almost all XFN properties are sub-properties of the more generic foaf:knows, so fixing can be done.

See the XFN GRDDL that converts XFN to FOAF: grokXFN

A mapping of VCard, FOAF, and XFN is available in this table.

The main issue is that FOAF uses separate URIs for people than for documents

Just breaking the Mainstream!

Foaf is natively expored by sites such as my.opera.com and . You can even get it off of Facebook via using this plug-in yahoo semsearch

FOAF to be supported in Yahoo!'s Semantic Search

From Yahoo's Open Search Strategy: Without a killer semantic web app for consumers, site owners have been reluctant to support standards like RDF, or even microformats. We believe that app can be web search...we plan to support vocabulary from Dublin Core, Creative Commons, FOAF, GeoRSS, MediaRSS, and others. ... we will support RDFa and eRDF markup to embed these into existing HTML pages. yahoo semsearch

Google's Social Graph API: Mixing FOAF and XFN

Brad Fitzpatrick over at Google is working on using the hCard and XFN microformats to create and track identities.

Contact Finder follows relationships and indexes whose linked to whom...

social graph demo

See Plaxo's open source Social Graph code.

Hotel Review Mash-Up: Problem

Hotel Review Mash-Up: Problem Solved

A hotel with a ranking of 5 reviewed by a trusted friend:

reviews Data in RDF query

Answer

ratingnameregion homepage hotelname
5 PeterS Edinburgh http://peter.example.org Witch's Caldron Hotel, Edinburgh

"How did you do that?"

Data Mash-Up

hotel review query answer diagram

XFN and FOAF on the Semantic Web

arrow tail, body and head are l are subject, property and value.

<#p> foaf:name "PeterS";
<#p> foaf:homepage <http://peter.example.org>.

Note the relationship to HTML links, especially with the re-discovery of the rel attribute.

Use URIs to name relationships

@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
@prefix foaf: <http://xmlns.com/foaf/0.1/>.
@prefix rev: <http://www.purl.org/stuff/rev#>.
@prefix vcard: <http://www.w3.org/2006/vcard/ns#>.
@prefix xfn: <http://gmpg.org/xfn/11#>.

_:hotel
  vcard:adr [ vcard:locality "Amsterdam" ];
  rev:hasReview [
  rev:rating 5;
  rev:reviewer _:who;
  rdfs:label "Witch's Caldron Hotel, Edinburgh"
 ].

<jane> xfn:friend _:who.

_:who
   foaf:name "PeterS";
   foaf:homepage < http://peter.example.org>.

Using GRDDL to get RDF from XML, XHTML

GRDDL (Gleaning Resource Descriptions from Dialects of Languages) is a way to boostrap RDF out of XML and in particular XHTML data by explicitly linking transformations from RDF to XML.

GRDDL terminology:

  1. Source Document: an XML document which references at least one GRDDL transformation and hence licenses a GRDDL-aware to extract RDF.
  2. GRDDL-aware agent: a software agent able to identify the GRDDL transformations and run them to extract RDF.
  3. GRDDL Transformation: an algorithm for getting RDF from a source document

GRDDL and HTML

One problem with GRDDL is that it only works with HTML...

tidying diagram

However, you can use tidy or tagsoup parser to automatically convert HTML to XHTML.

HTML 5 will include an standardized XML serialization of HTML (XHTML 5) that then lets us use GRDDL - see html5lib

.

Note that HTML 5 may deprecate the profile attribute used by GRDDL, in which case we can update GRDDL to use just just the typed Link attributes.

Also note that HTTP is likely adding in a Link header back into HTTP, so that GRDDL can be added to pages without touching the HTML.

Describing your Social Network

Recall Jane needs to her list of trusted sources in some machine readable format.

As long as they can be mapped to RDF, they can be mapped to each other.

Xhtml Friends Network (XFN): an XHTML profile

  1. XFN is an microformat for social network data; this profile of HTML is named with a URI.
  2. The page of Jane's friends adds one attribute to declare this profile:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  <head profile="http://gmpg.org/xfn/11">
	<title>Jane's XFN List</title>
</head>
<body>
  <h1>Jane's <abbr title="XHTML Friends Network">XFN</abbr> List</h1>
  <ul class="xoxo">
    <li class="vcard"><a href="http://peter.example.org" class="url fn"
    rel="met collegue friend">Peter Smith</a></li>
      <li class="vcard"><a href="http://john.example.org" class="url fn"
    rel="met">John Doe</a></li>
      <li class="vcard"><a href="http://paul.example.org" class="url fn"
    rel="met">Paul Revere</a></li>
    </ul>
</body>
</html>

* actually, the XFN profile isn't quite GRDDL-happy yet; but the eRDF profile is.

Out comes mergeable RDF data

magic* happens here...

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix h: <http://www.w3.org/1999/xhtml> .
@prefix xfn: <http://gmpg.org/xfn/11#> .

[]
    foaf:homepage <http://www.w3.org/2001/sw/grddl-wg/doc29/janefriends.html>;
    xfn:friend [
        foaf:homepage <http://peter.example.org>
    ];
    xfn:met [
        foaf:homepage <http://peter.example.org>
    ], [
        foaf:homepage <http://john.example.org>
    ], [
        foaf:homepage <http://paul.example.org>
    ] .

*we'll explain the trick later.

Using a GRDDL Transformation Directly

The hReview microformat doesn't have an established profile yet, so the Hotel Review data uses GRDDL directly:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  <head profile="http://www.w3.org/2003/g/data-view">
    <title>Hotel Reviews from Example.com</title>
    <link rel="transformation" 
       href="http://www.w3.org/2001/sw/grddl-wg/doc29/hreview2rdfxml.xsl"/>
</head>
<div class="hreview" id="_665">
  <div class="item vcard">
  <b class="fn org">Witch's Caldron Hotel, Edinburgh</b>
  <span><span class="rating">5</span> out of 5 stars</span>
  1. The transformation link tells a GRDDL-aware agent how to find an transformation, ../hreview2rdfxml.xsl from this syntax to standard RDF/XML syntax.
  2. The http://www.w3.org/2003/g/data-view profile shows that this document uses rel="transformation" as specified in by GRDDL.

SQL * URIs = SPARQL

table subject/property/value
  PREFIX foaf: <http://xmlns.com/foaf/0.1/>
  PREFIX c: <http://www.w3.org/2002/12/cal/icaltzd#>
  SELECT ?name, ?summary, ?when
   FROM <myFriendsBlogsData>
   WHERE { ?somebody foaf:name ?name; foaf:mbox ?mbox.
           ?event c:summary ?summary;
                  c:dtstart ?ymd;
                  c:attendee [ c:calAddress ?mbox ]
         }.
?name?summary?when
Tantek ÇelikWeb 2.02005-10-05
Norm WalshXML 20052005-11-13
Dan ConnollyW3C tech plenary2006-02-27

See SPARQL Query Language for RDF of course.

Putting RDF to Work with SPARQL

"Find reviews better than 2 stars and tell me the name of the hotel and the reviewer."


PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rev: <http://www.purl.org/stuff/rev#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT DISTINCT ?name ?rating ?hotelname

FROM <http://www.w3.org/2001/sw/grddl-wg/doc29/review.rdf>

WHERE {
?x rev:hasReview ?review.
?review rev:rating ?rating;
  rdfs:label ?hotelname; 
  rev:reviewer [ foaf:name ?name ].
FILTER (?rating > 2).
}

Details: hotelquery1.rq

SPARQL results from hReview data

The query worked, but it's not precise enough:

name rating hotelname
"PeterS" 5 "Enlightenment Amsterdam Hotel"
"RexR" 5 "Pilgrim Hostel"
"PeterS" 4 "Fano Hotel"
"MaryV" 5 "Franklin Hotel, Philadelphia"
"Simon" 5 "Forest Cafe Youth Hostel, Edinburgh"
"JennyR" 3 "Merton Atlanta"
"JohnD" 4 "Walter Scot Hotel, Edinburgh"
"PeterS" 5 "Royal Moon Hotel, Boston"
"JohnD" 5 "Elena Plaza Hotel"
"PeterS" 5 "Witch's Caldron Hotel, Edinburgh"
"RexR" 3 "Bond Plaza Hotel"
"RexR" 5 "McRae Palace, Edinburgh"
"RexR" 5 "Ritchie Centre, Edinburgh"
"PeterS" 5 "Maximus New York Hotel & Towers"

More precise SPARQL query

"Find reviews of hotels in Edinburgh better than 2 stars and tell me the name of the hotel and the reviewer."


SELECT DISTINCT ?name ?rating ?homepage

FROM <hotel-data.rdf>
FROM <janefriends.rdf>

WHERE {
?x rev:hasReview ?review;
  vcard:adr [ vcard:locality "Edinburgh" ].

?review rev:rating ?rating;
  rdfs:label ?hotelname; 
  rev:reviewer [ foaf:name ?name ].
FILTER (?rating > 2).

Sample Query Online

SPARQL results from hReview and vcard locality data

This shows hotels with a rating of 2 stars or higher that are located in Edinburgh, but there might be review spam:

rating name hotelname region
5 "RexR" "Ritchie Centre, Edinburgh" "Edinburgh"
5 "PeterS" "Witch's Caldron Hotel, Edinburgh" "Edinburgh"
5 "Simon" "Forest Cafe Youth Hostel, Edinburgh" "Edinburgh"
5 "RexR" "McRae Palace, Edinburgh" "Edinburgh"
4 "JohnD" "Walter Scott Hotel, Edinburgh" "Edinburgh"

Mashing up Friends and Hotel Reviews

Querying for Trusted Reviews

"Find reviews by my friends of hotels in Edinburgh better than 2 stars and tell me the name of the hotel and the reviewer."


PREFIX xfn: <http://gmpg.org/xfn/11#>

SELECT DISTINCT ?rating ?name ?homepage ?hotelname
FROM <review.rdf>
FROM <xfn.rdf>
WHERE {
?place rev:hasReview ?review;
  vcard:adr [ vcard:Locality "Edinburgh"].
?review
  rdfs:label ?hotelname;
  rev:rating ?rating;
  rev:reviewer ?reviewer.

FILTER (?rating > 2).

?reviewer foaf:name ?name;
  foaf:homepage ?homepage.

[ foaf:homepage <janefriends.html> ]
   xfn:friend [ foaf:homepage ?homepage ].
}

Details: hotelquery3.rq

Hotel query diagram

"Find reviews by my friends of hotels in Edinburgh better than 2 stars and tell me the name of the hotel and the reviewer."

hotel review query diagram

Trusted Reviews from SPARQL via GRDDL

Just right:

ratingnameregion homepage hotelname
5 PeterS Edinburgh http://peter.example.org Witch's Caldron Hotel, Edinburgh

Meeting Your Friends - a Calendar Mash-up

When can Jane, David, and Robin meet?

Embedded RDF

David has chosen to mark up his schedule using Embedded RDF (an alternative to RDFa), a way to use GRDDL to get out RDF from documents.

Embedded RDF file online

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head profile="http://purl.org/NET/erdf/profile">
    <title>Where Am I</title>
    <link rel="schema.cal" href="http://www.w3.org/2002/12/cal#" />
  </head>

  <body>
    <p class="-cal-Vevent" id="tiddlywinks">
      From <span class="cal-dtstart" title="2006-10-07">7 October, 2006</span>
      to <span class="cal-dtend"  title="2006-10-13">12 October, 2006</span> 
      I will be attending the <span class="cal-summary">National Tiddlywinks
      Championship</span> in 
      <span class="cal-location">Bognor Regis, UK</span>.
    </p>

   
    <p class="-cal-Vevent" id="holiday">
      Then I'm <span class="cal-summary">on holiday</span> in the 
      <span class="cal-location">Cayman Islands</span> between
      <span class="cal-dtstart" title="2006-11-14">14 November, 2006</span>

      and <span class="cal-dtend"  title="2007-01-02">1 January, 2007</span>. 
    </p>

    <p class="-cal-Vevent" id="award">
      I then visit Scotland on <span class="cal-dtstart" title="2007-01-08">the 8th
      January</span> to <span class="cal-summary">pick up a lifetime
      achievement award from the world gamers association</span>. This time
      the ceremony is in <span class="cal-location">Edinburgh, UK</span>. I'll be
      taking the train home on the <span class="cal-dtend"  title="2007-01-11">10th</span>. 
    </p>

  </body>
</html>
  

The magic trick: GRDDL Recursion

GRDDL has gone meta!

This allows the HTML profile document to be GRDDL-enabled to link the standard library transformation of <link rel="transformation" href="http://www.w3.org/2003/g/glean-profile" /> and so extract the http://www.w3.org/2003/g/data-view#profileTransformation whose object is the transformation itself.

A diagram indicating the sequence of steps for obtaining RDF from a document using the profile URI as described in the preceding paragraph

Linking GRDDL to a Profile Document

Embedded RDF has a link to a GRDDL transformation in its profile document.

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

  <head profile="http://www.w3.org/2003/g/data-view">
    <title>Embedded RDF HTML Profile</title>
    <link rel="transformation" href="http://www.w3.org/2003/g/glean-profile" />
  </head>
  <body>
    <p>
      <a rel="profileTransformation" 
          href="http://purl.org/NET/erdf/extract-rdf">GRDDL transform</a>
    </p>
  </body>
</html>

GRDDL in Namespace Documents

No Transformation Links - just go to the namespace document!

In RDF, OWL, RDF Schema:

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dataview="http://www.w3.org/2003/g/data-view#">
 <rdf:Description rdf:about="http://www.w3.org/2004/01/rdxh/p3q-ns-example">
   <dataview:namespaceTransformation
       rdf:resource="http://www.w3.org/2004/01/rdxh/grokP3Q.xsl"/>
 </rdf:Description>
</rdf:RDF>

In XML Schema:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns="http:.../Order-1.0"
            targetNamespace="http:.../Order-1.0"
            version="1.0"
            ...
            xmlns:data-view="http://www.w3.org/2003/g/data-view#"
            data-view:transformation="http://www.w3.org/2003/g/embeddedRDF.xsl" >
    <xsd:element name="Order" type="OrderType">
    <xsd:annotation 
      <xsd:documentation>This element is the root element.</xsd:documentation>
    </xsd:annotation>
                 ...
  <xsd:annotation>
    <xsd:appinfo>
      <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
	<rdf:Description rdf:about="http://www.w3.org/2003/g/po-ex">
	  <data-view:namespaceTransformation
	      rdf:resource="grokPO.xsl" />
	</rdf:Description>
      </rdf:RDF>
    </xsd:appinfo>
  </xsd:annotation>
...

RDF for Free

Is it too much work to ask people to add the transformation and profile to their individual instance data?

Creators or maintainers of vocabularies can also give users of their data the option of having their data transformed into RDF without having to even add any new markup to individual documents

Since once the tranformation has been linked to the profile or namespace document, all the users of the dialect get the added value of RDF for free

In either the namespace document or profile URI there has to be the following RDF property: http://www.w3.org/2003/g/data-view#profileTransformation whose subject is the namespace doc or profile document and whose object is the transformation itself.

RDFa

While GRDDL has primarily in the wild been used to convert widely deployed microformats to RDF, it can actually be used with the W3C RDFa work item that allows one to "microformat-style" embed arbitary RDF statements in HTML

RDFa is useful because microformats exist as a number of centralized vocabularies, and what if you want to mark-up meta-data in a web-page about a subject there isn't a microformat about?

Since RDFa is still a moving target, we personally recommend people use Embedded RDF for the time being unless they are willing to track the changes in RDFa, but RDFa is more expressive than Embedded RDF (allowing XML Schema datatypes, etc.

HTML Contains Implicit Structure

This document is licensed under a

<a href="http://cc.org/licenses/by/3.0/">
   CC License
</a>

and was written by TimBL.

Basic Stuff: Typing a Link

    This document is licensed under a

    <a href="http://cc.org/licenses/by/3.0/"
       xmlns:cc="http://cc.org/ns#" rel="cc:license">
       CC License
    </a>

    and was written by TimBL.
    

More Complex Structure: RDFa goes Deep

    This document 
    ...
    <div rel="dc:creator" class="foaf:Person"
       xmlns:dc="http://..." xmlns:foaf="http://...">
       and was written by
       <span property="foaf:nickname">
          TimBL
       </span>.
    </div>
    

yields

    <> dc:creator [a foaf:Person ; foaf:nickname "TimBL"] .

GRDDL Does RDFa

RDFa for Jane's schedule online

RDFa After GRDDL

<html xmlns:cal="http://www.w3.org/2002/12/cal/icaltzd#" xmlns:xs="http://www.w3.org/2001/XMLSchema#">
<head profile="http://www.w3.org/2003/g/data-view"> <title>Jane's Blog</title> <link rel="transformation"
href="http://www.w3.org/2001/sw/grddl-wg/td/RDFa2RDFXML.xsl"/>
</head> <body> <p about="#event1" class ="cal:Vevent"> <b property="cal:summary">Weekend off in Iona</b>:
<span property="cal:dtstart" content="2006-10-21" datatype="xs:date">Oct 21st</span>

to <span property="cal:dtend" content="2006-10-21" datatype="xs:date">Oct 23rd</span>.
See <a rel="cal:url" href="http://freetime.example.org/">FreeTime.Example.org</a> for
info on <span property="cal:location">Iona, UK</span>.
</p>
<p about="#event2" class ="cal:Vevent">
<b property="cal:summary">Holiday in Ireland</b>:
<span property="cal:dtstart" content="2006-12-23" datatype="xs:date">Dec 23rd</span>

to <span property="cal:dtend" content="2006-12-27" datatype="xs:date">Dec 27th</span>.
See <a rel="cal:url" href="http://vacation.example.org/">Vacation.Example.org</a> for
info on <span property="cal:location">Belfast, Ireland</span>.
</p>
<p><b>New Years!</b> Now it's 2007...</p>
<p about="#event3" class ="cal:Vevent">

<b property="cal:summary">Web Conference</b>:
<span property="cal:dtstart" content="2007-01-08" datatype="xs:date">Jan 8th</span>
to <span property="cal:dtend" content="2007-01-11" datatype="xs:date">Jan 11th</span>.
See <a rel="cal:url" href="http://webconf.example.org/">webconf.example.org</a> for
info on <span property="cal:location">Edinburgh, UK</span>.
</p>

From Data to Authentication?

We're done with the data side of the story, where the Semantic Web easily has the most mature stack.

But what about the authentication side of the story?

As easy as encrypting FOAF files? Not quite...

OpenID

Log-in once. No more "I forgot more password and username"! openid

OpenID is a way of a user "logging-in once" to a service provider and then having their log-in details be verified by a trusted identity provider.

Your new OpenID username is a globally-unique URI:

a href="http://openid.claimid.com/hhalpin">http://openid.claimid.com/hhalpin

ClaimID gave me...so can many others...

Sound familiar?

Tim Berners-Lee: "The AWWW says that everything of importance deserves a URI. Go ahead and give yourself a URI. You deserve it!"

How does OpenID work?

  • Service Provider fetches HTML from User OpenID URI to discover identity provider.
  • 
    <html><head>
    <meta http-equiv="X-XRDS-Location" content="http://openid.claimid.com/hhalpin/xrds" />
    <link rel="openid.server" href="http://openid.claimid.com/server" />
    </head><body>
    <p>OpenID identity page for hhalpin</p>
    </body></html>
    
    
  • Establishes shared secret code with identity provider, using Diffie-Hellman key exchange.
  • Redirects the user to the identity provider
  • If user can log-in or is already logged in, the user is redirected back with their identity verified.
  • OpenID is decentralized

    No lock-in into your provider

    A user can change their provider - a user can eve use the same URI using delegatation Just put this code in the page that moves my provider from LiveJournal to ClaimID:
    
    <link rel="openid.server"
     href="http://www.livejournal.com/openid/server.bml">
    <link rel="openid.delegate"
     href="http://openid.claimid.com/">
    </code>
    
    
    There is no set way to verify the user's identity in the OpenID specification, although most just use username and password.

    Could use client-side SSL certificates, live SMS identification (ala Twittr), other out-of-band information.

    OpenID in a Picture

    openid

    Protecting Identity?

    Identity Thefit hasn't gone away!

    An untrusted site redirects a user to their trusted OpenID provider.

    Yet this is still basically what Ebay and other sites do

    Also, OpenID gives at minimum very little information about you.

    Not even your name or whether you are human or not. Just the URI and the fact that a OpenID server trusts it! How to stop phishing?

    OpenID is taking off!

    See this great OpenID tutorial, from which we took this list and other details: Just the start - AOL.com now has an OpenID for everyone of their users, and Mozilla has announced OpenID support.. estimated 120 million OpenID users

    Go use your OpenID (list from LifeWiki

    OAuth

    OAuth is a standard way for developers to offer their services via an API without forcing their users to expose their passwords or credentials. oauth

    Built in support for desktop applications, mobile devices, set-top boxes, and of course websites.

    OAuth prevents it by explicitly asking you if you want to let Facebook grab your details from the provider. While OpenID 2.0 providers (using OpenID Attribute Exchange) may hold general information about you (avatar photo, addresses, phone numbers) that it can with your consent to service providers so users don't have to re-enter profile details, it's not really extensible on a Web-scale or meant to compete with OAuth.

    Enter FOAF and RDF?

    OAuth and the Semantic Web

    Uses HTTP Headers WWW-Authenticate combined with digital signatures to authorize tokens that let one machine authorize the use of user's data on another server.

    Once you verify that someone is trusted (perhaps via OpenID), you can offer them services via handing out keys via OAuth. It's Web Services Redux with a good authentication story!

    No reason it can not be used to exchange Semantic Web Data

    http://www.ibiblio.org/hhalpin/foaf.rdf Authorization: OAuth realm="http://openid.claimid.com/hhalpin", oauth_consumer_key="dpf43f3p2l4k3l03", oauth_token="nnch734d00sl2jdk", oauth_signature_method="HMAC-SHA1", oauth_signature="tR3%2BTy81lMeYAr%2FFid0kMTYa%2FWM%3D", oauth_timestamp="1191242096", oauth_nonce="kllo9940pd9333jh", oauth_version="1.0"

    OAuth: The Big Picture

    oauth diagram

    Privacy: POWDER

    While OAuth works for requesting access to data hosted on URIs, the W3C has also developed POWDER (Protocol for Web Description Resources) for describing access to groups of resources.

    Features an easy to read XML format that is converted to OWL via GRDDL.

    Could be combined with OAuth to allow access to groups of resources - the requested URI maybe could be a POWDER document
    <code>
    <wdr:iriset>
      <wdr:includeSchemes>http https</wdr:includeSchemes>
      <wdr:includeHosts>ibiblio.org</wdr:includeHosts>
      <wdr:includePathStartsWith>/hhalpin</wdr:includePathStartsWith>
      <wdr:excludePathEndsWith>.rdf</wdr:excludePathEndsWith>
    </wdr:iriset> 
    </code>
    

    Privacy: Rules and Proofs

    People want different levels of access and different profiles for different people.

    If all your data is stored in RDF, then you could use rules to determine what parts of it you want to release.

    Different rules for different levels of access.

    Data could carry a proof of where it's been generated, where it is supposed to go, and so on. policy

    The Future

    semantic web There is no technical reason why the social data in your e-mail account is kept artificially separated in your mobile phone, your social networking site, blog ...

    The two questions are:

  • What will the technical solution be? (OpenID, FOAF, OpenSocial...),
  • Can the major vendors commit to one web of social data? (Can W3C help?)
  • The first easy-to-use Semantic Web application that integrates these etechnologies to let people manage their social data across real world services are going to make a large splash...

    And we are going to try to build one in the next session!

    Role of the W3C

    w3c

    Seen is slow, semi-closed, and old-fashioned - surely not the place for hip Web 2.0 developers and entrepreneurs! And we all know standards by committee are a disaster...

    The W3C would be useful would to ratify, double-check, and flesh out corner-cases for existing best practices that are already implemented, and kept up with by a small and fast-moving group!

    An optimal solution would be, in conjunction with other groups like DataPortability.org, to outline a working technical solution using an Incubator Group, and then the W3C to ratify it through a Working Group.

    The W3C Royalty-Free Patent Policy

    troll One problem is without a patent policy we might inadvertently build a software patent into our standard.

    Having a patent in supposed open standard that companies unwittingly implement is an instant business plan for troll.

    For examples, see the conflict over XRIs (used in some ideas about data portability!) in the W3C, which led to the development of the W3C's patent policy.

    Royalty-Free might discourage both large corporations with huge numbers of patents from participating...but social data portability is only going to work if everyone comes to the table honestly and openly.

    The Social Web XG

    girl cartoon This is the first semi-official announcement!

    Allows a much-looser and quicker moving forum than a Working Group for exploratory purposes, allows creation of a Working Group in a year to be sped up!

    Can be a front-group inside the W3C to push social data portability work and standards from other groups.

    A litmus test for companies deciding if they are going to make their work to be royalty-free or not.

    Getting Started

    Help think through the Semantic Web story for moving open social graphs

    Maybe stabilize relevant standards such as FOAF, VCard/OWL, and think through the interface of OpenID with the Semantic Web.

    Complements the OpenID story being told by Data-Portability.org and can explore into other stories, such as those based on APIs and XML.

    Anyone can join as an Invited Expert and completely open - contact me or Harry Halpin.

    If a W3C Member - interested in joining or co-sponsoring group's initial take-off?

    Starting end of February - help us create the charter on a wiki

    Break..then onwards!

    Time for a break!

    Afterwards, guest presentations by Alexander Passant on SIOC and Dan Brickley on the Future of FOAF...

    And then some hands-on work

    Hands on Work!

    Two Options:
    1. Easy: Add GRDDL and microformats to your homepage, merge with FOAF and play with Social Graph API
    2. Hard: looking at setting up OpenSocial so that it adds in user's OpenID, and then allows export of user's friends in FOAF only to authorized OpenID users

    For OpenSocial Setup, see tutorial on setting up OpenSocial and a database.

    Then let's see Bizer's Page about D2R mappings from databases to RDF