Re: Activity Streams and Annotations

Hi James,

Thanks so much for your amazingly fast response, and thanks also to all
those who were part of the joint WG session!

Some comments inline below....

On Thu, Oct 30, 2014 at 8:08 AM, James M Snell <jasnell@gmail.com> wrote:

>
> Based on what I've been able to gather, the Annotation WG appears to
> be using the Open Annotation Data Model [1] as the starting point,
> with JSON-LD as the primary serialization.


Yes, that's correct, with an emphasis on starting point :)



> An Activity is effectively an Actor-Verb-Object statement. [...]

Looking over the Open Annotations Data Model, I see that there are a
> number of modules. The core, properties, however, seem to be hasBody,
> hasTarget, annotatedBy, annotatedAt, serializedBy, serializedAt, and
> motivatedBy.


Yes, and from those the core set of properties are the ones that you focus
on below.



> 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).


>   "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.

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"

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.

2. Can there be a target without an object?
If not, as body is optional, option B would not work for bookmark or
highlight.

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?

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.


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.

Rob

-- 
Rob Sanderson
Technology Collaboration Facilitator
Digital Library Systems and Services
Stanford, CA 94305

Received on Thursday, 30 October 2014 21:06:59 UTC