[foaf-protocols] webid vs distributed social networks

Kingsley Idehen kidehen at openlinksw.com
Sun Feb 27 20:21:46 CET 2011

On 2/26/11 9:27 PM, peter williams wrote:
> Ok. Lets work it though
> Go get opera browser at http://www.opera.com/. Why? Because it's a team
> member, that's all.
> Get a client cert using Opera by
> 1)	Registering at
> http://webid.myxwiki.org/xwiki/bin/register/XWiki/Register
> 2)	Logging in to the registration portal
> 3)	Goto Profile page
> 4)	Complete the enrollment  form, and viola, you have cert in your
> browser.
> So my profile is http://webid.myxwiki.org/xwiki/bin/view/XWiki/homepw4#me
> <http://webid.myxwiki.org/xwiki/bin/view/XWiki/homepw4%23me>   with at least
> RDFa of the cert ontology. It may also do n3, turtle, or xml if one
> negotiates, for all I know.
> Test it (or rather yours): at https://test.gnutls.org:5556/

Yes, that worked when I visited your data space via my browser.

> Let's assume now I run my own instance of https://test.gnutls.org:5556/
> acting as a resource server, capable of doing the validation steps of the
> webid protocol spec. That is, it shall ping uriburner, to validate the
> authentication claims. If that works, it shall do authorization logic A.
> The validation agent issues request to  http://uriburner.com/spaql
> indicating the SAN URI and the pubkey, both encoded into the sparql query.
> Uriburner returns result-set to gnutls, which completes webid protocol run.
> So, what is the (quite complex) URI request I GET - to have the uriburner
> service test that the pubkey (below, in 2 args) is present in the container
> at
> http://webid.myxwiki.org/xwiki/bin/view/XWiki/homepw4

Here's what you do via SPARQL (ultimately SPARQL protocol):


PREFIX cert: <http://www.w3.org/ns/auth/cert#>
PREFIX rsa: <http://www.w3.org/ns/auth/rsa#>
SELECT ?m ?e
FROM <http://webid.myxwiki.org/xwiki/bin/view/XWiki/homepw4>
    [] cert:identity ?webid ;
         rsa:modulus ?m ;
         rsa:public_exponent ?e .

When performing this query against a Virtuoso instance (e.g. URIBurner) 
you execute:

# Pragma for enabling Virtuoso's Sponger Middleware -- component that 
#  - HTTP GETs against resources that may or my not be RDF formats based 
data containers
#  - Transform data into a 3-tuple based graph
# Post actions above the SPARQL engine processes the SPARQL query pattern

DEFINE  get:soft "replace"
PREFIX cert: <http://www.w3.org/ns/auth/cert#>
PREFIX rsa: <http://www.w3.org/ns/auth/rsa#>
SELECT ?m ?e
FROM <http://webid.myxwiki.org/xwiki/bin/view/XWiki/homepw4>
    [] cert:identity ?webid ;
         rsa:modulus ?m ;
         rsa:public_exponent ?e .

For now, you can simply paste the above into my SPARQL endpoint at: 
http://kingsley.idehen.net/sparql . The URIBurner service is undergoing 
some weekend maintenance.

Note: the query above is just a simple example. In a network of SPARQL 
endpoints, I could issue SPARQL-FED where by I dispatch SPARQL to a 
remote data space instead of performing a wholesale HTTP GET against the 
RDF data container at a URL.

> and body content
> 		<div xmlns:foaf="http://xmlns.com/foaf/0.1/"
> 		xmlns:dct="http://purl.org/dc/terms/"
> 		xmlns:cert="http://www.w3.org/ns/auth/cert#"
> 		xmlns:rsa="http://www.w3.org/ns/auth/rsa#"
> 		xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
> 		about="" typeof="foaf:PersonalProfileDocument"
> 		class="vcard"
> 		rel="foaf:primaryTopic" href="#me">
> 		<table title="Existing Keys" summary="A list of public keys
> identifying this user">
> 		<tbody typeof="rsa:RSAPublicKey">
> 		<tr><td colspan="2" bgcolor="white" rel="cert:identity"
> href="#me" align="center">homepw4</td></tr>
> 		<tr><td>hex modulus</td><td rel="rsa:modulus"><pre
> class="hidden" property="cert:hex"
> datatype="xsd:string">b520f38479f5803a7ab33233155eeef8ad4e1f575b603f7780f3f6
> 0ceab1
> 		34618fbe117539109c015c5f959b497e67c1a3b2c96e5f098bb0bf2a6597
> 		779d26f55fe8d320de7af0562fd2cd067dbc9d775b22fc06e63422717d00
> 		a6801dedafd7b54a93c3f4e59538475673972e524f4ec2a3667d0e1ac856
> 		d532e32bf30cef8c1adc41718920568fbe9f793daeeaeeaa7e8367b7228a
> 		895a6cf94545a6f6286693277a1bc7750425ce6c35d570e89453117b88ce
> 		24206afd216a705ad08b7c59
> 		</pre>b520f38479f5803 ...</td>
> 		</tr>
> 		<tr><td>exponent</td>
> 		<td rel="rsa:public_exponent"><pre property="cert:decimal"
> datatype="xsd:string">65537</pre></td>
> 		</tr>
> 		</tbody>
> 		</table>
> -----Original Message-----
> From: foaf-protocols-bounces at lists.foaf-project.org
> [mailto:foaf-protocols-bounces at lists.foaf-project.org] On Behalf Of Kingsley
> Idehen
> Sent: Saturday, February 26, 2011 5:29 PM
> To: foaf-protocols at lists.foaf-project.org
> Subject: Re: [foaf-protocols] webid vs distributed social networks
> On 2/26/11 1:21 PM, peter williams wrote:
>> Is there anywhere a public sparql server willing to take a query on an
>> arbitrary uri (named graph?), pull the foaf card from the public web,
>> perform the query, and return the resultset?
> Yes.
>> Before it needed $10,000 to continue experimentation, I was once using
>> intellidimension's excellent sparql server. But even it, as I recall,
>> refused to go dynamically get the named graph in a sparql select query
>> from the web (acting as a proxy user agent) and then execute the
>> indicated query on the graph.
>> Is there something stopping the world doing what TBL advocates with
>> sparql servers?
> No, bar comprehension of Linked Data meme without RDF tax.
> SPARQL is a nice mechanism for implementing and delivering what is for all
> intents and purposes DataDNS  :-)
> Links:
> 1. http://uriburner.com/spaql -- deliberately named URIBurner 2.
> http://uriburner.com -- home page explaining the service 3.
> http://virtuoso.openlinksw.com/presentations/SPARQL_Tutorials/SPARQL_Tutoria
> ls_Part_7/SPARQL_Tutorials_Part_7.html#(25)
> -- example of how a SPARQL query can perform WWW or Intranet crawls via URIs
> in query patterns .



Kingsley Idehen	
President&  CEO
OpenLink Software
Web: http://www.openlinksw.com
Weblog: http://www.openlinksw.com/blog/~kidehen
Twitter/Identi.ca: kidehen

More information about the foaf-protocols mailing list