see also sparqlPuSH, an interface that can be plugged on any SPARQL
endpoint and that broadcast notifications to clients interested in
what's happening in the store using the pubsubhubbub protocol:

http://apassant.net/blog/2010/04/18/sparql-pubsubhubbub-sparqlpush

Story Henry wrote:
> Hi,
> 
>    I often get asked how one solve the friend request problem on open social 
> networks that use foaf in the hyperdata way. 
> 
> On the closed social networks when you want to make a friend, you send them a 
> request which they can accept or refuse. It is easy to set up, because all 
> the information is located in the same database, owned by the same company. 
> In a distributed social foaf network anyone can link to you, from anywhere, 
> and your acceptance can be expressed most clearly by linking back. The 
> problem is: you need to find out when someone is linking to you.
> 
> 
>     So then the problem is how does one notify people that one is linking to 
> them. Here are the solutions in order of simplicity.
> 
>    0. Search engine solution
>    -------------------------
> 
>    Wait for a search engine to index the web, then ask the search engine 
> which people are linking to you. 
> 
>  Problems:
> 
>    - This will tend to be a bit slow, as a search engine optimised to search 
> the whole web will need to be notified first, even if this is only of minor 
> interest to them
>    - It makes the search engine a core part of the communication between two 
> individuals, taking on the role of the central database in closed social 
> networks
>    - It will not work when people deploy foaf+ssl profiles, where they access 
> control who can see their friends. Search engines will not have access to 
> that information, and so will not be able to index it.
> 
>    1. HTTP Referer Header
>    ----------------------
> 
>    The absolute simplest solution would be just to use the mis-spelled HTTP 
> Referer Header, that was designed to do this job. In a normal HTTP request 
> the location from which the requested URL was found can be placed in the 
> header of the request.
>  
>     http://en.wikipedia.org/wiki/HTTP_referrer
> 
>    The server receiving the request and serving your foaf profile, can then 
> find the answer to the referrer in the web server logs.
> 
> Perhaps that is all that is needed! When you make a friend request, do the 
> following:
>   
>    1. add the friend to your foaf profile
> 
>   <http://bblfish.net/#hjs> foaf:knows 
> <http://kingsley.idehen.name/dataspace/person/kidehen#this> .
> 
>    2. Then just do a GET on their Web ID with the Referrer header set to your 
> Web Id. They will then find in their apache logs, something like this:
> 
> 93.84.41.131 - - [31/Dec/2008:02:36:54 -0600] "GET /dataspace/person/kidehen 
> HTTP/1.1" 200 19924 "http://bblfish.net/"; "Mozilla/5.0 (Windows; U; Windows 
> NT 5.1; ru; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5"
> 
>   This can then be analysed using incredibly simple scripts such (as 
> described in [1] for example)
> 
>    3. The server could then just verify that information by 
>      
>   a. doing a GET on the Referer URL to find out if indeed it is linking to 
> the users WebId 
>   b. do some basic trust analysis (is this WebId known by any of my 
> friends?), in order to rank it before presenting it to the user
> 
>    The nice thing about the above method is that it will work even when the 
> initial linker's server does not have a Ping service for WebIDs. If the pages 
> linking are in html with RDFa most browsers will send the referrer field.
> 
>   There is indeed a Wikipedia entry for this: it is called Refback.
>   http://en.wikipedia.org/wiki/Refback
> 
>   Exactly why Refback is more prone to spam than the ping back or linkback 
> solution is still a bit of a mystery to me.
> 
>   2. Referer with foaf+ssl
>   ------------------------
> 
>   In any case the SPAM problem can be reduced by using foaf+ssl [2]. If the 
> WebId is an https WebId - which it really should be! - then the requestor 
> will authentify himself, at least on the protected portion of the foaf 
> profile. So there are the following types of people who could be making the 
> request on your WebId.
>  
>   P1. the person making the friend request
> 
>    Here their WebId and the referer field will match.
>    (this can be useful, as this should be the first request you will receive 
> - a person making a friend request, should at least test the link!) 
> 
>   P2. A friend of the person making the friend request
> 
>    Perhaps a friend of P1 goes to his page, comes across your WebId, clicks 
> on it to find out more, and authentifies himself on your page. If P2 is a 
> friend of yours too, then your service would have something somewhat similar 
> to a LinkedIn introduction!
> 
>   P3. Just someone on the web, a crawler...
> 
>     Then you know that he is making his friendship claim public. :-)
> 
>    The above seems to be just some of the interesting information one could 
> get 
> from the analysing the Referer field logs.
>    
> 
>   3. Pingback
>   -----------
> 
>   For some reason though the Referer Header solution was not enough, and so 
> the pingback protocol was invented. 
>  
>     http://www.hixie.ch/specs/pingback/pingback
> 
> I am still not quite clear what this solution brings in addition to the 
> refback one, other than that 
> 
>  - it declares the method of the pingback declaratively. If there is a ping 
> back header, then it is clear that it can be used. The referer header is so 
> much part of the web, it won't be clear to anyone if the WebId server is 
> using it.
> 
>  - it makes it possible for the web page owner to decide who should process 
> the
> pings, rather than leaving that to the apache server owner (though that is 
> not true of the HTTP Header mechanism proposed)
> 
>  - it makes it easy to chose another server as the ping server
> 
>     
> Looking at the specification one has a feeling that it is pretty well thought 
> through. Mostly. One glaringly archaic piece now is the requirement on the 
> xmlrpc response. Essentially in order to notify someone of something that is 
> referring to them they have set up an xmlrpc system, where a simple HTML FORM 
> would have done! XMLRPC I think is no longer the flavour du jour, and people 
> have moved on. HTML FORMS remain used by everyone everywhere. They don't seem 
> to go out of fashion. They are also really easy to use, and every developer 
> needs to know how to use them.
> 
> 
>    4. Semantic Ping Back
>    ---------------------
> 
> The linked data movement developed an enhancement of the Ping Back service 
> described in 3 above. Essentially it adds an ontology to the link system 
> described in the ping back service above, and the details are described here
> 
>      http://aksw.org/Projects/SemanticPingBack
> 
> Most important perhaps is the pingback service relation
> 
>      http://purl.org/net/pingback/service
> 
> defined as
> 
>  <http://purl.org/net/pingback/service> a owl:ObjectProperty ;
>     :comment "This property is used to link the target resource with a 
> pingpack RPC service URI. It is the RDF " ;
>     :isDefinedBy <http://purl.org/net/pingback/> ;
>     :label "pingback service" .
> 
> 
>   5. Improved Semantic Ping Back
>   ------------------------------
> 
> 
> So my guess is that being the early days of the semantic web, 4 is still new 
> enough that it can be changed. Ie, none of the xmlrpc agents are going to be 
> looking for that relation, and so we have a chance either to add a new 
> relation, or to create a very similar relation to fix the bugs of pingback. 
> Here is what I propose
> 
> @prefix ping: <http://purl.org/net/pingback/> . 
> @prefix owl: <http://www.w3.org/2002/07/owl#> .
> @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
> @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
> 
> 
> service:ping a rdf:Property;
>    rdfs:domain foaf:Agent;  #probably a restriction to be removed, or be 
> refined...
>    rdfs:range xxx:POSTResource;
>    rdfs:comment """
>       This relation specifies a method for services that wish to let 
>     document owner know that they are linking to this resource.
> 
>       The relation relates a WebId to a collection (named ?coll from here
>    on). A new resource of type PingEvent can be created in that collection 
>    by POST ing a  URL that mentions the given WebId.    
> 
>    The content that should be sent to the collection is what would be the 
> result
> of POSTing the following form
> 
>     <form action="POST" action="?coll">
>         referer: <input type="text" name="referer"/><br/>
>         comment: <input type="text" name="comment"/>
>     </form>
> 
>    The representation returned by a GET on the POSTResource can even return 
>    the above html form, making it human readable.
> 
>    ( A nice improvement would be for the form to contain rdfa markup, that
>     would make it clear what the semantics of the form was, by using relations
>     described in this ontology )
> 
>    The resource created should be a named ping request, which itself
>   can be described using this ontology.
>    """ .
> 
> 
> This it seems to me would be so transparently simple as to be self explanatory
> to any web developer, increasing uptake and reducing the need for explanation 
> -
> especially if the resource returns a web form as described above.
> 
>       
>    6. Improving Semantic PingBack with foaf+ssl
>    --------------------------------------------
> 
> 
>   Just as with 2, semantic ping back can be improved with foaf+ssl, helping
> the ping back service identify the user making the ping request. This can be 
> very
> useful in linked data worlds between large databases that may be pinging each 
> other
> very often. This would allow trusted agent's pings to be accepted more 
> automatically
> than new ones.
> 
> 
>       Henry Story
>   
> 
> [1] http://www.the-art-of-web.com/system/logs/
> [1] http://esw.w3.org/Foaf%2Bssl/FAQ
> 
> Social Web Architect
> http://bblfish.net/
> 
> 
> 
> 


Reply via email to