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 VideoFor example...
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!
ClaimID: Your data is spread throughout the online world...and mostly not under your control
Similar to "browser wars," there now are competing ways to share social graph data on the Internet.
Obviously a Semantic Web compatible standard way of doing this would be ideal.
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 for widget applications and not for end-users to control and access their data.
Has accessibility issues as pure REST API is mixed up wth Javascript.
Has accessibility issues as pure REST API is mixed up wth Javascript.
See Shindig OpenSocial open source implementation.
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:
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
Make your own VCard using this web-form maker!
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
hCard and other microformats have shared tools, knowledge, process...
XFN, "XHTML Friends Network"
The earliest microformat, used to describe social relationships
relationship category | XFN 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
One of the earliest and most popular Semantic Web vocabularies.
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>
...
Check out Alexander Passant's marvelous foafmap.net mash-up of FOAF and Google Maps.
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.xslBatch convert VCard to FOAF at: http://toxi.co.uk/foafgen/
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: grokXFNA mapping of VCard, FOAF, and XFN is available in this table.
The main issue is that FOAF uses separate URIs for people than for documentsAnd remember Microsoft just bought Powerset
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...
See Plaxo's open source Social Graph code.
She doesn't trust the wisdom of crowds. He trusts:
A hotel with a ranking of 5 reviewed by a trusted friend:
rating | name | region | homepage | hotelname |
---|---|---|---|---|
5 | PeterS | Edinburgh | http://peter.example.org | Witch's Caldron Hotel, Edinburgh |
"How did you do that?"
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:
One problem with GRDDL is that it only works with HTML...
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.
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.
<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.
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> ] .
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>
"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).
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" |
"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
"Find reviews by my friends of hotels in Edinburgh better than 2 stars and tell me the name of the hotel and the reviewer."
Just right:
rating | name | region | homepage | hotelname |
---|---|---|---|---|
5 | PeterS | Edinburgh | http://peter.example.org | Witch's Caldron Hotel, Edinburgh |
But what about the authentication side of the story?
As easy as encrypting FOAF files? Not quite...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!"
<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>
Go use your OpenID (list from LifeWiki
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?
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"
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.See all this work together via SUN Microsystem's FOAF+SSL implementation.
The two questions are:
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...
So ask Royal Enterprise Society for some cash to fund a semantic start-up!The standards body that preserved HTML as an open standard, created XML, RDF, etc...
The W3C is now planning on creating a Social Web Incubator Group!University of Edinburgh is a member, so you can join the fun