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

Re: Activity Streams and Annotations

From: Benjamin Young <bigbluehat@hypothes.is>
Date: Mon, 6 Jul 2015 20:26:19 -0400
Message-ID: <CAE3H5FJxAPWv+D-_=QEHhF9AyYi060SaH0k=pOeGEGHb-iL78g@mail.gmail.com>
To: James M Snell <jasnell@gmail.com>
Cc: W3C Public Annotation List <public-annotation@w3.org>, public-socialweb@w3.org, Robert Sanderson <azaroth42@gmail.com>
Hey James & Rob,

I wondered if either of you had thoughts on the things below.

My first send bounced on the social list... I wasn't signed up yet. So I
wasn't sure it hit all the usual radars. :)

Thanks!
Benjamin
--
Developer Advocate
http://hypothes.is/
On Jun 16, 2015 10:15 AM, "Benjamin Young" <bigbluehat@hypothes.is> wrote:

> James, thanks so much for diving in at TPAC last year!
>
> I'm going to top post (sorry) what I *think* is the output of the thread
> below--and hopefully matches your in-person chat with Rob last year.
>
> One or both of you can tell me it's incorrect. ^_^
>
> Based on Option A (which seemed to be the immediate "winner"), I made this:
>
> http://tinyurl.com/pe8grco
> (JSON-LD playground view of the below doc)
>
> ```
> {
>   "@context": "http://asjsonld.mybluemix.net",
>   "@type": "http://example.org/verbs/Upload",
>   "actor": "acct:sally@example.org",
>   "object": {
>     "@context": {....elided for space...},
>     "body": "A simple value",
>     "target": {
>       "@id": "http://example.org/foo##a text-fragment"
>     },
>     "annotatedBy": "acct:sally@example.org",
>     "annotatedAt": "2014-10-30T12:34:56Z",
>     "motivation": "oa:editing"
>   }
> }
> ```
>
> That reads rather nicely, I'd say. :)
>
> According to the JSON-LD Playground, the N3 output looks like this:
> ```
> _:b0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <
> http://example.org/verbs/Upload> .
> _:b0 <http://www.w3.org/ns/activitystreams#actor> <acct:sally@example.org>
> .
> _:b0 <http://www.w3.org/ns/activitystreams#object> _:b1 .
> _:b1 <http://www.w3.org/ns/oa#annotatedAt> "2014-10-30T12:34:56Z" .
> _:b1 <http://www.w3.org/ns/oa#annotatedBy> <acct:sally@example.org> .
> _:b1 <http://www.w3.org/ns/oa#hasBody> "A simple value" .
> _:b1 <http://www.w3.org/ns/oa#hasTarget> <http://example.org/foo##a
> text-fragment> .
> _:b1 <http://www.w3.org/ns/oa#motivatedBy> <
> http://www.w3.org/ns/oa#editing> .
> ```
>
> Which I think is what both vocabularies would expect.
>
> Does that look correct to you both (et al)?
>
> If this is it (or if we're close) I'd like to suggest we add an appendix
> to the draft in the same way we have for the PROV model/vocab:
> http://www.w3.org/TR/annotation-model/#mapping-to-provenance-model
>
> Rob, I'd be happy to help with the clerical work of doing that, but would
> need some oversight to make sure it's correct. :)
>
> Thanks again James for being involved here, and thanks (as ever) Rob for
> herding all these vocabularies!
>
> Cheers!
> Benjamin
> --
> Developer Advocate
> http://hypothes.is/
>
> On Thu, Oct 30, 2014 at 5:39 PM, James M Snell <jasnell@gmail.com> wrote:
>
>> On Thu, Oct 30, 2014 at 2:06 PM, Robert Sanderson <azaroth42@gmail.com>
>> wrote:
>> >
>> [snip]
>> >
>> >>
>> >> Let's just focus on a couple of these:
>> >> {
>> >>   "@context": "...",
>> >>   "oa:hasBody": {
>> >>     "@type": "xsd:string",
>> >>     "@value": "A simple value"
>> >>   },
>> >
>> >
>> > As a note, this is not valid in the CG's Open Annotation model (the Body
>> > must be a resource, not a Literal) and would also not be a valid
>> > serialization in the ED coming from discussions this week (the Body may
>> be a
>> > Literal, but must be represented as a simple string rather than with an
>> > explicit data type).
>> >
>>
>>
>> Ok, good to know. When I was looking around I came across a number of
>> different examples so wasn't exactly sure what direction things were
>> heading so figured I'd just hand wave that part for now ;-)
>>
>> >>
>> >>   "oa:hasTarget": {
>> >>      "@id": "http://example.org/foo##a+text-fragment
>> <http://example.org/foo#%23a+text-fragment>
>> >>   },
>> >>   "oa:annotatedBy": "acct:sally@example.org",
>> >>   "oa:annotatedAt": "2014-10-30T12:34:56Z",
>> >>   "oa:motivatedBy": "oa:editing"
>> >> }
>> >>
>> >> Within Activity Streams, we have two possible ways of moving forward:
>> >> A. We can use the OA vocabulary within the direct object of an
>> >> Activity statement:
>> >
>> >
>> > +1
>> >
>> > User: Sally
>> > Action: Created / Uploaded
>> > Object: Annotation
>> >
>> >
>> >> Which works reasonably well but has some issues. Even more
>> >> interesting, however, is that we can...
>> >>
>> >> B. We can leverage the JSON-LD to map somewhat seamlessly between the
>> >> Activity Streams and OA Vocabularies:
>> >>
>> >>
>> >> {
>> >>   "@context": [
>> >>     "http://asjsonld.mybluemix.net",
>> >>     {
>> >>       "oa": "http://www.w3.org/ns/oa#",
>> >>       "object": "oa:hasBody",
>> >>       "target": "oa:hasTarget",
>> >>       "actor": "oa:annotatedBy",
>> >>       "published": "oa:annotatedAt",
>> >>       "generator": "oa:serializedBy"
>> >>     }
>> >>   ],
>> >>
>> >>   "@type": "oa:Annotation",
>> >>   "actor": "acct:sally@example.org",
>> >>   "object": {
>> >>     "@type": "xsd:string",
>> >>     "@value": "This is a simple annotation"
>> >>   },
>> >>   "target": "http://example.org/something##this+is+something
>> <http://example.org/something#%23this+is+something>",
>> >>   "oa:motivatedBy": {
>> >>     "@type": "oa:Motivation",
>> >>     "@id": "oa:editing"
>> >>   }
>> >> }
>> >
>> >
>> > As I understand it, please correct me if I'm wrong, this version
>> amounts to:
>> >
>> > User: Sally
>> > Action: Annotated
>> > Object: "This is a simple annotation"
>> > and the target in Activity Streams speak is the indirect object, which
>> > happens to be the Target in Open Annotation speak.
>> >
>>
>> In AS, the target property is used to indicate the object to which the
>> activity has been directed. I admit that it's a bit convoluted, but
>> the example above amounts to "Sally posted-as-an-annotation the string
>> "This is a simple annotation" on <target>". Here, the verb becomes the
>> idiomatic "posted as an annotation" as opposed to just "created" or
>> "uploaded", etc. It does require a different way of thinking about the
>> Activity (the verb becomes a noun) which is often not entirely
>> intuitive. Activity Streams supports both ways of modeling it so it
>> really depends on what point of view y'all want to take on the
>> Activity.
>>
>> > As confusing as it sounds, I think these are the other way round, and
>> the
>> > as:target is actually the oa:body. If the verb is "annotated", and
>> > example.org/something is "Something" in natural language:
>> >
>> > Sally annotated Something with "This is a simple annotation"
>> > Actor Verb Object [preposition] Target
>> >
>> > Whereas the version above seems more like:
>> > Sally created a comment with the value "This is a simple annotation"
>> about
>> > Something
>> >
>> >
>> > Option C.
>> >
>> > Instead, we could represent the annotation as an activity that the user
>> > takes on the target resource, with the body of the annotation as the
>> extra
>> > information.  We could map the motivation to the verb, and keep the
>> class as
>> > Annotation...
>> >
>> > {
>> >   "@type": "oa:Annotation",
>> >   "verb" : "oa:commenting",
>> >   "actor": "acct:sally@example.org",
>> >   "object": "http://example.org/something##this+is+something
>> <http://example.org/something#%23this+is+something>",   //
>> > oa:target
>> >   "target": "This is a simple annotation"  // oa:body
>> > }
>> >
>> > User: Sally
>> > Action: commenting [on]
>> > Object: http://example.org/something
>> > [IndirectObject: "This is a simple annotation"]
>> >
>> > And thus the English sentence:
>> > Sally commented on Something with "This is a simple annotation"
>> >
>>
>> Yes, this is absolutely possible but the object and target would be
>> switched.
>>
>> > Equivalently, for some of the other motivations:
>> >  * Sally bookmarked Something
>> >  * Sally identified Something as SomethingElse
>> >  * Sally replied to Something with "a simple reply"
>> >  * Sally highlighted Something
>> >  * Sally classified Something as a SomethingElse
>> >  * Sally described Something as "a simple description"
>> >
>> >
>> > Also, some questions that I couldn't figure out from AS-core and
>> > AS-vocabulary:
>> >
>> > 1. Can there be multiple objects and targets?
>> > We allow multiple bodies and multiple targets in the current
>> specification,
>> > without using the multiplicity constructs and just by repeating the
>> > predicate (in RDF terms).  In JSON(-LD) terms, the values of object and
>> > target would be arrays.
>> >
>>
>> Yes.
>>
>> > 2. Can there be a target without an object?
>> > If not, as body is optional, option B would not work for bookmark or
>> > highlight.
>> >
>>
>> In the case of "bookmark" and "highlight" (as used in this context),
>> there typically is not a target to which the action is performed. So
>> those would typically end up as "object"... e.g.
>>
>> {
>>   "actor": "acct:sally@example.org",
>>   "verb": "oa:bookmarking",
>>   "object": "http://example.org/foo"
>> }
>>
>> But that would violate the @context mapping above so it gets a bit
>> tricky. This is where the Activity Vocabulary gets a bit murky because
>> it has really been designed to model actions in relation to direct and
>> indirect objects which can shift depending on exactly how the verb is
>> being used and has been defined. Given this possible ambiguity then,
>> Option A is looking more and more attractive ;-), especially in that
>> it provides a much cleaner layering between the vocabularies.
>>
>> > 3.  Can there be a class /and/ a verb as above in option C, to support
>> the
>> > class and motivation?  And if so, should the AS-core spec describe the
>> > precedence between the two?
>>
>> Yes, but the WG is currently evaluating this further. As I've
>> mentioned, there are cases where it is extremely helpful to model the
>> verbs as nouns (e.g. rather than "Sally liked a thing" it's "Sally
>> created a Like about a thing", treating the Like as a resource in it's
>> own right). We have to think about this particular bit more, however,
>> because there are strengths and weaknesses in both points of view.
>>
>> >
>> > The rationale for both at once is that the resource is an Annotation,
>> and it
>> > was created with some intent.  For example, the annotation created with
>> the
>> > intent to describe the target is not /itself/ a Description... it links
>> the
>> > description in the body to the resource that it describes.
>> >
>>
>> Absolutely. I'll be stewing over this a bit more over the next couple
>> of days. Generally we have two paths forward on this:
>>
>> 1. Model the Annotation as "Just another objectType" layered on top of
>> Activity Streams (my Option A above); or
>>
>> 2. Map oa:Annotation onto the Activity Vocabulary which would likely
>> require some tweaks here and there to either vocabulary to make it
>> work.
>>
>> The "Right Answerâ„¢" is likely some mix of these two but for right now,
>> the first choice is probably the path of least resistance.
>>
>> >
>> > Thanks again James, and if you're still at TPAC (and get this on
>> Thursday
>> > afternoon) and would like to discuss, I'm happy to jump out of the
>> Digital
>> > Publishing IG to do so.
>> >
>>
>> I actually just walked through the door back at home in Fresno just a
>> short while ago but will definitely have time to kick this around in
>> email over the next couple of days. If necessary we can see about
>> jumping into IRC as well.
>>
>> - James
>>
>> > Rob
>> >
>> > --
>> > Rob Sanderson
>> > Technology Collaboration Facilitator
>> > Digital Library Systems and Services
>> > Stanford, CA 94305
>>
>>
>
Received on Tuesday, 7 July 2015 00:26:49 UTC

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