W3C home > Mailing lists > Public > public-socialweb@w3.org > May 2015

on Agent identifiers

From: <henry.story@bblfish.net>
Date: Tue, 12 May 2015 09:07:47 +0200
Message-Id: <77960783-75DE-469F-95A8-E2528B323EF1@bblfish.net>
To: Social Web Working Group <public-socialweb@w3.org>
Over on the ActivityPump space there is a discussion on Identifiers [1], which I have seen come up again and again in discussions here around the question: "what is the correct way to identify some agent?". So people here might expect me to say WebID and so start a religious war. But in fact that is not my position at all. My position is that for Linked Data WebIDs are the most efficient for software agents to discover further information. But all the others have their advantages and they can all be used together in one happy family if one just takes a bit of care.  

One can tie together all the indentifiers in a way that creates no logical conflict: one just needs to notice that there are direct and indirect identifiers.

Direct Identifiers such as WebID <http://www.w3.org/2005/Incubator/webid/spec/identity/#the-webid-http-uri>
indirect identifiers, such as e-mail addresses, account profiles, blogs, home pages, telephone numbers, and public keys.
You can do this using inverse functional properties ( eg. :openid, :mbox, :homePage, :account, cert:key ) like this

@prefix : <http://xmlns.com/foaf/0.1/> .
@prefix cert: <http://www.w3.org/ns/auth/cert#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

<http://bblfish.net/people/henry/card#me> 
     :openid <http://bblfish.net/>;
     :mbox <mailto:henry.story@bblfish.net> ;
     :homePage <http://bblfish.net/> ;
     :account [ :accountName "bblfish";
                :accountServiceHomepage <http://facebook.com/> ] ;
      cert:key [ a cert:RSAPublicKey;
                 cert:exponent 65537 ;
                 rdfs:comment "KeyChain OSX laptop";
                 cert:modulus "DAB9D1E941F6F85A0863169D0DB6328D1D4A15A71DFFE3D4F4D08752A52FB1454D7358E4A5ECF3501E3924BC0252F3004B0BB21A0D6B64CA053F0FBCB5A54EC93EBE2DC9B91E4C432B827884C4CC2AD8A102B46D2A2017BF45D9D4C88A564D420234484A1B2E446DBB4CD438E79C2466CE310F327773A779D24ED7B60A05A618B984757B946D67BA79F2E064E6AED38BD6559CE7FC9502720823D56DB1C034099367D7DB27B6BDAFDA8CC48347133F4A14675F675FB484CE32DF66C11A3638FA84D5BE69B1A6F238115DEF9B0F79BB25C0CB7E4A39459A0829B1FD35C0D1DBDD60F9C679D89415ED7EA41EB02FBC016FC0E792CB9698C9F4DB842CDAD5B5F5C9"^^xsd:hexBinary;
                ] .
This describes me via a number of my different identifiers, declaratively, without breaking RDF semantics. 
A <mailto:henry.story@bblfish.net> address directly identifies a mailbox - as per mailto: rfc spec. But it indirectly identifies my in the graph via the foaf:mbox relation

_:x mbox <mailto:henry.story@bblfish.net>
because mbox is a relation that for the same object can only have one subject. ie you can think of the inverse of foaf:mbox as a function. Call that mbInv. Then

mbInv(<mailto:henry.story@bblfish.net>)= _:x 
So here _:x is a blank node that refers to me. Blank nodes cannot be used outside of the document in which they appear. But the mailto: uri can. So <mailto:henry.story@bblfish.net> indirectly identifies me via the mailto relation.

This is very handy, because  for example allows one to write access control rules declaratively, and allow different authentication methods:

E-mail addresses by sending an e-mail
facebook by using their OAuth system
openid by using the OpenId protocol, etc...
public key by using WebID over TLS <http://www.w3.org/2005/Incubator/webid/spec/tls/> for example, though others methods are possible too here.

As a result it is means there is no need to get out of the way to make weird modelling decisions to fit a allegedly prefered  psychologically  identifier type. There is no need to conflate mail boxes with human beings or documents. As common sense has it one can distinguish all these things, and yet one can indirectly identify somone via those relations to things that they are not. For example one could use :ownerOf to identify someone via an object via the ownership relation.  One could have another relation to the same object :creatorOf to identify another person.

 :joe ownerOf <baseBallCap#obj> .
 :jane creatorOf <baseBallCap#obj> .
 
Here two different people can be indirectly identified to some Baseball cap, which was somehow named with a URL. 

Henry

[1] https://github.com/w3c-social/activitypump/issues/20

Social Web Architect
http://bblfish.net/


Received on Tuesday, 12 May 2015 07:08:18 UTC

This archive was generated by hypermail 2.4.0 : Friday, 17 January 2020 17:26:17 UTC