W3C home > Mailing lists > Public > public-annotation@w3.org > July 2015

Fwd: First User Story implementation, now using social web WG vocab (AS 2.0)

From: Robert Sanderson <azaroth42@gmail.com>
Date: Fri, 17 Jul 2015 08:51:08 -0700
Message-ID: <CABevsUEBqKaSKTc1wGH41hRcMsb-dy2mGeUqrercydfpXiLXFA@mail.gmail.com>
To: Web Annotation <public-annotation@w3.org>
Social Web implementation using LDP, which if you tilt your head slightly
looks similar to our protocol use cases too :)

(Add a target, and make as:content into oa:body)

R

---------- Forwarded message ----------
From: Melvin Carvalho <melvincarvalho@gmail.com>
Date: Thu, Jul 16, 2015 at 6:05 PM
Subject: First User Story implementation, now using social web WG vocab (AS
2.0)
To: "public-socialweb@w3.org" <public-socialweb@w3.org>


This example is taken from W3C's Social Web WG
<http://www.w3.org/wiki/Socialwg/> user stories, where it is called "user
posts a note"
<http://www.w3.org/wiki/Socialwg/Social_API/User_stories#User_posts_a_note>:


   1. Eric writes a short note to be shared with his followers.
   2. After posting the note, he notices a spelling error. He edits the
   note and re-posts it.
   3. Later, Eric decides that the information in the note is incorrect. He
   deletes the note.

Here is how SoLiD would handle the three steps, using curl
<http://curl.haxx.se/> as the client application:

1) Eric writes a short note to be shared with his followers. The *Slug*
header is optional but useful for controlling the resulting URL.

curl -H"Content-Type: text/turtle" \
     -H"Slug: social-web-2015" \
     -X POST \
     --data ' @prefix as: <http://www.w3.org/ns/activitystreams#>. <>
a as:Note; as:content "Going to Social Web WG".' \
     https://eric.example.org/notes/

The URL of the new note can be found in the *Location* header returned by
the server. In this example it is likely to be:
https://eric.example.org/notes/social-web-2015

2) After posting the note, he notices a spelling error. He edits the note
and re-posts it. SoLiD servers can handle updates in two different ways:
PUT (overwrite) or PATCH with *sparql-update* content type.

Use HTTP PUT, when you just want to replace the data:

curl -H"Content-Type: text/turtle" \
     -X PUT \
     --data ' @prefix as: <http://www.w3.org/ns/activitystreams#>. <>
a as:Note; as:content "Going to Social Web WG in Paris".' \
     https://eric.example.org/notes/social-web-2015

Or you can use HTTP PATCH with SPARQL if you only want to change certain
parts of the resource, leaving the others unchanged (perhaps because other
applications are modifying them):

curl -H"Content-Type: application/sparql-update" \
     -X PATCH \
     --data 'DELETE DATA {<>
<http://www.w3.org/ns/activitystreams#content> "Going to Social Web
WG" .}; INSERT DATA {<> <http://www.w3.org/ns/activitystreams#content>
"Going to Social Web WG in Paris" .} ' \
     https://eric.example.org/notes/social-web-2015

If no match is found for the triple to DELETE, the request safely aborts
without changing any data.

3) Later, Eric decides that the information in the note is incorrect. He
deletes the note.

curl -X DELETE https://eric.example.org/notes/social-web-2015

Note that all three actions have been performed through RESTful HTTP
requests.

In these example, data was sent to the server using text/turtle (which is
mandated in LDP), but other content types (such as JSON-LD) could be used
if implemented by servers.



-- 
Rob Sanderson
Information Standards Advocate
Digital Library Systems and Services
Stanford, CA 94305
Received on Friday, 17 July 2015 15:51:36 UTC

This archive was generated by hypermail 2.4.0 : Friday, 17 January 2020 18:54:38 UTC