.
[responses]
Snell, J., "Responses for Activity Streams", March 2012,
.
Appendix A. Acknowledgements
The author wishes to thank the Activity Streams community and
implementers for their support, encouragement, and enthusiasm
including but not limited to: Abdul Qabiz, Adina Levin, Adrian Chan,
Adriana Javier, Alan Hoffman, Alex Kessinger, Alexander Ovchinnikov,
Alexander Zhuravlev, Alexandre Loureiro Solleiro, Amy Walgenbach,
Andres Vidal, Angel Robert Marquez, Ari Steinberg, Arjan
Scherpenisse, Arne Roomann-Kurrik, Beau Lebens, Ben Hedrington, Ben
Metcalfe, Ben Werdmuller, Benjamin Goering, Bill de hOra, Bo Xing,
Snell Expires November 28, 2014 [Page 34]
Internet-Draft ActivityStreams May 2014
Bob Aman, Bob Wyman, Brett Slatkin, Brian Walsh, Brynn Evans, Charlie
Cauthen, Chris Chabot, Chris Messina, Chris Toomey, Christian
Crumlish, Dan Brickley, Dan Scott, Daniel Chapman, Danny Ayers, Dare
Obasanjo, Darren Bounds, David Cramer, David Nelson, David Recordon,
DeWitt Clinton, Douglas Pearce, Ed Summers, Elias Bizannes, Elisabeth
Norris, Eric Marcoullier, Eric Woods, Evan Prodromou, Gee-Hsien
Chuang, Greg Biggers, Gregory Foster, Henry Saputra, Hillary Madsen,
Howard Liptzin, Hung Tran, Ian Kennedy, Ian Mulvany, Ivan Pulleyn,
Jacob Kim, James Falkner, James Pike, James Walker, Jason Kahn, Jason
Kantz, Jeff Kunins, Jeff Martin, Jian Lin, Johannes Ernst, John
Panzer, Jon Lebkowsky, Jon Paul Davies, Jonathan Coffman, Jonathan
Dugan, Joseph Boyle, Joseph Holsten, Joseph Smarr, Josh Brewer, Jud
Valeski, Julien Chaumond, Julien Genestoux, Jyri Engestroem, Kaliya
Hamlin, Kevin Marks, Laurent Eschenauer, Laurie Voss, Leah Culver,
Libby Miller, Manu Mukerji, Mark Weitzel, Marko Degenkolb, Marshall
Kirkpatrick, Martin Atkins, Martin Svensson, Marty Alchin, Mary
Hoder, Matt Leventi, Matt Wilkinson, Matthias Mueller-Prove, Max
Engel, Max Wegmueller, Melvin Carvalho, Michael Buckbee, Michael
Chan, Michael Richardson, Michael Sullivan, Mike Macgirvin, Mislav
Marohnić, Mo Jangda, Monica Wilkinson, Nate Benes, NeilFred
Picciotto, Nick Howard, Nick Lothian, Nissan Dookeran, Nitya
Narasimhan, Pablo Martin, Padraic Brady, Pat G. Cappalaere, Patrick
Aljord, Peter Ferne, Peter Reiser, Peter Saint-Andre, Phil Wolff,
Philip (flip) Kromer, Richard Cunningham, Richard Zhao, Rick
Severson, Robert Hall, Robert Langbert, Robert Dolin, Robin Cover,
Ryan Boyd, Sam Sethi, Scott Raymond, Scott Seely, Simon Grant, Simon
Wistow, Stephen Garcia, Stephen Sisk, Stephen Paul Weber, Steve Ivy,
Steve Midgley, Steven Livingstone-Perez, Sylvain Carle, Sylvain
Hellegouarch, Tantek Celik, Tatu Saloranta, Tim Moore, Timothy Young,
Todd Barnard, Tosh Meston, Tyler Gillies, Will Norris, Zach Copley,
and Zach Shepherd.
Appendix B. Processing as JSON-LD
The following non-normative JSON-LD @context document MAY be used
when processing an Activity Streams 2.0 document using the JSON-LD
model.
{ "@context": [{
"dc": "http://purl.org/dc/elements/1.1/",
"dct": "http://purl.org/dc/terms/",
"dctypes": "http://purl.org/dc/dcmitype/",
"foaf": "http://xmlns.com/foaf/0.1/",
"vcard": "http://www.w3.org/2006/vcard/ns#",
"org": "http://www.w3.org/ns/org#",
"prov": "http://www.w3.org/ns/prov#",
"link": "http://www.iana.org/assignments/link-relations/"
},{
Snell Expires November 28, 2014 [Page 35]
Internet-Draft ActivityStreams May 2014
"as" : "http://activitystrea.ms/2.0/",
"id": "@id",
"language": "@language",
"objectType": {
"@id": "as:objectType"
},
"displayName": {
"@id": "as:displayName",
"@container": "@language"
},
"url": {
"@id": "as:url",
"@type": "@id",
"@container": "@set"
},
"rel": "as:rel",
"mediaType": "as:mediaType",
"verb": {
"@id": "as:verb"
},
"actor": {
"@id": "as:actor",
"@type": "@id",
"@container": "@set"
},
"object": {
"@id": "as:object",
"@type": "@id",
"@container": "@set"
},
"target": {
"@id": "as:target",
"@type": "@id",
"@container": "@set"
},
"result": {
"@id": "as:result",
"@type": "@id",
"@container": "@set"
},
"instrument": {
"@id": "as:instrument",
"@type": "@id",
"@container": "@set"
},
"participant": {
"@id": "as:participant",
"@type": "@id",
Snell Expires November 28, 2014 [Page 36]
Internet-Draft ActivityStreams May 2014
"@container": "@set"
},
"priority": {
"@id": "as:priority",
"@type": "xsd:float"
},
"status": {
"@id": "as:status",
"@type": "@vocab"
},
"completed": {
"@id": "as:CompletedStatus"
},
"active": {
"@id": "as:ActiveStatus"
},
"canceled": {
"@id": "as:CanceledStatus"
},
"pending": {
"@id": "as:PendingStatus"
},
"tentative": {
"@id": "as:TentativeStatus"
},
"to": {
"@id": "as:to",
"@type": "@id",
"@container": "@set"
},
"bto": {
"@id": "as:bto",
"@type": "@id",
"@container": "@set"
},
"cc": {
"@id": "as:cc",
"@type": "@id",
"@container": "@set"
},
"bcc": {
"@id": "as:bcc",
"@type": "@id",
"@container": "@set"
},
"alias": {
"@id": "as:alias",
"@type": "@id",
Snell Expires November 28, 2014 [Page 37]
Internet-Draft ActivityStreams May 2014
"@container": "@set"
},
"author": {
"@id": "as:author",
"@type": "@id",
"@container": "@set"
},
"content": {
"@id": "as:content",
"@container": "@language"
},
"duplicates": {
"@id": "as:duplicates",
"@type": "@id",
"@container": "@set"
},
"icon": {
"@id": "as:icon",
"@type": "@id",
"@container": "@set"
},
"image": {
"@id": "as:image",
"@type": "@id",
"@container": "@set"
},
"location": {
"@id": "as:location",
"@type": "@id",
"@container": "@set"
},
"published": {
"@id": "as:published",
"@type": "xsd:dateTime"
},
"generator": {
"@id": "as:generator",
"@type": "@id",
"@container": "@set"
},
"provider": {
"@id": "as:provider",
"@type": "@id",
"@container": "@set"
},
"summary": {
"@id": "as:summary",
"@container": "@language"
Snell Expires November 28, 2014 [Page 38]
Internet-Draft ActivityStreams May 2014
},
"updated": {
"@id": "as:updated",
"@type": "xsd:dateTime"
},
"startTime": {
"@id": "as:startTime",
"@type": "xsd:dateTime"
},
"endTime": {
"@id": "as:endTime",
"@type": "xsd:dateTime"
},
"validFrom": {
"@id": "as:validFrom",
"@type": "xsd:dateTime"
},
"validUntil": {
"@id": "as:validUntil",
"@type": "xsd:dateTime"
},
"validAfter": {
"@id": "as:validAfter",
"@type": "xsd:dateTime"
},
"validBefore": {
"@id": "as:validBefore",
"@type": "xsd:dateTime"
},
"rating": {
"@id": "as:rating",
"@type": "xsd:float"
},
"tags": {
"@id": "as:tags",
"@type": "@id",
"@container": "@set"
},
"title": {
"@id": "as:title",
"@container": "@language"
},
"duration": {
"@id": "as:duration"
},
"height": {
"@id": "as:height",
"@type": "xsd:nonNegativeInteger"
Snell Expires November 28, 2014 [Page 39]
Internet-Draft ActivityStreams May 2014
},
"width": {
"@id": "as:width",
"@type": "xsd:nonNegativeInteger"
},
"inReplyTo": {
"@id": "as:inReplyTo",
"@type": "@id",
"@container": "@set"
},
"actions": {
"@id": "as:actions",
"@container": "@index"
},
"scope": {
"@id": "as:scope",
"@type": "@id",
"@container": "@set"
},
"totalItems": {
"@id": "as:totalItems",
"@type": "xsd:nonNegativeInteger"
},
"itemsPerPage": {
"@id": "as:itemsPerPage",
"@type": "xsd:nonNegativeInteger"
},
"startIndex": {
"@id": "as:startIndex",
"@type": "xsd:nonNegativeInteger"
},
"items": {
"@id": "as:items",
"@container": "@list"
},
"itemsAfter": {
"@id": "as:itemsAfter",
"@type": "xsd:dateTime"
},
"itemsBefore": {
"@id": "as:itemsBefore",
"@type": "xsd:dateTime"
},
"first": {
"@id": "as:first",
"@type": "@id",
"@container": "@set"
},
Snell Expires November 28, 2014 [Page 40]
Internet-Draft ActivityStreams May 2014
"last": {
"@id": "as:last",
"@type": "@id",
"@container": "@set"
},
"prev": {
"@id": "as:prev",
"@type": "@id",
"@container": "@set"
},
"previous": {
"@id": "as:prev",
"@type": "@id",
"@container": "@set"
},
"next": {
"@id": "as:next",
"@type": "@id",
"@container": "@set"
},
"current": {
"@id": "as:current",
"@type": "@id",
"@container": "@set"
},
"self": {
"@id": "as:self",
"@type": "@id",
"@container": "@set"
},
"replies": {
"@id": "as:replies",
"@container": "@index"
}
}]
}
Appendix C. Activity Statement Linguistic Forms
The Activity Streams format has been intentionally designed to be
flexible in how statements about past, present or future actions can
be expressed.
C.1. Intransitive Activity
In many situations, the "actor" of an Activity also serves as the
"direct object". For example, if I say, "The process terminated",
Snell Expires November 28, 2014 [Page 41]
Internet-Draft ActivityStreams May 2014
then the "process" is both the "actor" and the "object". Such
statements are formally known as being "intransitive".
To describe intransitive actions using the Activity Streams syntax,
simply omit the "object" property:
{
"actor": {
"objectType": "process",
"displayName": "Build Process"
},
"verb": "terminate"
}
C.2. Transitive Activity
In a "transitive" activity, the actor and direct object are distinct
entities. This is the form most commonly expressed using the
Activity Streams format. For instance, if I say, "Joe posted a blog
entry", the actor is "Joe" and the "blog entry" is the direct object.
{
"actor": "acct:joe@example.org",
"verb": "post",
"object": {
"objectType": "article",
"title": "A Blog Entry",
"content": "..."
}
}
C.3. Ditransitive Activity
In "ditransitive" activities, there exist distinct actor, direct and
indirect objects. The indirect object specifies the target to which
the action on the direct object has been directed. For instance, in
"Joe posted a blog entry to his Weblog", the indirect object (or
"target") is "Joe's Weblog".
Snell Expires November 28, 2014 [Page 42]
Internet-Draft ActivityStreams May 2014
{
"actor": "acct:joe@example.org",
"verb": "post",
"object": {
"objectType": "article",
"title": "A Blog Entry",
"content": "..."
},
"target": {
"objectType": "blog",
"title": "Joe's Weblog"
}
}
C.4. Expressing tense and aspect
By using the "startTime", "endTime", "duration" and "status"
properties, Activity statements can be used to express past, present
or future actions. Implementations should never rely on an activity
statement's verb identifier to determine the tense or aspect of the
action.
For instance, to indicate an activity that has already concluded, the
startTime and endTime properties would be used to indicate past
points in time:
{
"actor": "acct:joe@example.org",
"verb": "post",
"object": "http://example.org/blog/entry/1",
"startTime": "2012-12-12T12:12:12Z",
"endTime": "2012-12-12T12:12:12Z"
}
If specific start and end times for a concluded activity are not
available, the "status" property can be used to expressly indicate
that the action has completed:
{
"actor": "acct:joe@example.org",
"verb": "post",
"object": "http://example.org/blog/entry/1",
"status": "completed"
}
To indicate an activity that began in the past but is still ongoing,
only the startTime property would be used:
Snell Expires November 28, 2014 [Page 43]
Internet-Draft ActivityStreams May 2014
{
"actor": "acct:joe@example.org",
"verb": "watch",
"object": "http://movies.example.org/movie/1",
"startTime": "2014-03-18T04:32:43Z"
}
The status property value "active" can also be used to identify
ongoing activities:
{
"actor": "acct:joe@example.org",
"verb": "watch",
"object": "http://movies.example.org/movie/1",
"status": "active"
}
To indicate an activity that is expected to begin in the future, the
startTime property would indicate a future point in time:
{
"actor": "acct:joe@example.org",
"verb": "cook",
"object": "http://recipes.example.org/recipe/1",
"startTime": "2015-12-23T12:34:21Z"
}
Or, alternatively:
{
"actor": "acct:joe@example.org",
"verb": "cook",
"object": "http://recipes.example.org/recipe/1",
"status": "pending"
}
The status values "pending" and "tentative" differ in that the former
is used to mark actions that are expected to happen while the latter
is used to mark proposed actions that may (or may not) happen.
As an alternative to explicitly stating the "startTime" or "endTime"
properties, the "duration" property can be used to indicate a
specific duration of time relative to either the "startTime" or
"endTime". For instance, specifying an "endTime" of
"2015-12-23T12:23:23Z" with a duration of "PT1H", implies a startTime
of exactly "2015-12-23T11:23:23Z" (1 hour before the specified
endTime).
Snell Expires November 28, 2014 [Page 44]
Internet-Draft ActivityStreams May 2014
Note that the value of the "duration" property can be expressed
either as a non-negative integer specifying a number of seconds, or
as an [RFC3339] "duration" string such as "PT1H", "P1DT1H", etc. For
Activity Streams 2.0 implementations for which backwards
compatibility with the Activity Streams 1.0 syntax is not critical,
the RFC 3339 string format is strongly recommended.
C.5. Activity Duration
Actions expressed via the Activity Streams format can either be
instantaneous (semelfactive) or durative (having distinct start and
end times). The specific duration of an activity can be optionally
expressed using the "startTime", "endTime" and "duration" properties.
By default, all activities are assumed to occur instantaneously, that
is, occuring at one point in time without any specific duration.
Such events are indicated by omitting the "startTime", "endTime" or
"duration" properties:
{
"actor": "acct:sally@example.org",
"verb": "post",
"object": "http://example.org/notes/1"
}
An activity that occurs within a specific period of time can be
expressed using combinations of either: "startTime" and "endTime",
"startTime" and "duration", or "endTime" and "duration". For
example:
Snell Expires November 28, 2014 [Page 45]
Internet-Draft ActivityStreams May 2014
{
"actor": "acct:sally@example.org",
"verb": "watch",
"object": "http://movies.example.org/movies/1",
"startTime": "2014-05-23T12:23:12Z",
"endTime": "2014-05-23T13:25:15Z"
}
{
"actor": "acct:sally@example.org",
"verb": "watch",
"object": "http://movies.example.org/movies/1",
"startTime": "2014-05-23T12:23:12Z",
"duration": "PT1H2M3S"
}
{
"actor": "acct:sally@example.org",
"verb": "watch",
"object": "http://movies.example.org/movies/1",
"duration": "PT1H2M3S",
"endTime": "2014-05-23T13:25:15Z"
}
Appendix D. Motivational Use Cases
This specification defines a number of syntax changes relative to the
JSON Activity Streams 1.0 specification. The sections that follow
describe some of the general motivations for these changes with
illustrative examples.
D.1. Internationalization (i18n)
The JSON Activity Streams 1.0 syntax has no inherent notion of a
"language context". That is, the core syntax has no internal
mechanism a publisher can use to identify the language used when
constructing the Activity Streams document. Nor are there any
existing mechanisms at the JSON syntax level that an Activity Streams
implementation can inherit. This specification introduces the
"language" property and Natural Language Value concepts to fill this
gap.
Imagine a scenario with a service that receives Activity objects from
users and republishes those to a distributed audience of interested
parties. This service spans international boundaries and the users
speak a multitude of different languages. Within this system, a
native English speaker might subscribe to notifications about
activities posted by a native French speaker.
Snell Expires November 28, 2014 [Page 46]
Internet-Draft ActivityStreams May 2014
For instance, let's suppose that our native French speaker posts the
following activity to this system:
POST /activity/feed HTTP/1.1
Content-Type: application/activity+json
{
"verb": "post",
"language": "fr",
"object": {
"objectType": "article",
"displayName": "Un exemple basique",
...
}
}
The system receives this activity post and prepares to notify our
native English speaking user. Knowing that this user prefers English
and does not speak a word of French, the system can inspect the
Activity and detect automatically that a translation ought to be
provided. Rather than replacing the original French text, however,
the service can simply add in the English translation along side it.
{
"verb": "post",
"language": "fr",
"actor": {
"id": "urn:example:person:abc",
"displayName": "Jean Valjean"
},
"object": {
"type": "article",
"displayName": {
"fr": "Un exemple basique",
"en": "A basic example"
}
...
}
}
It is also possible for a Natural Language Value to express
alternative same-language representations of a string that utilize
different writing systems or regions. For instance, it is common for
Japanese translations to provide equivalent ideographic (kanji) and
phonetic (katakana or hiragana) alternatives:
Snell Expires November 28, 2014 [Page 47]
Internet-Draft ActivityStreams May 2014
{
"title": {
"ja-Hani": "...",
"ja-Kana": "..."
}
}
D.2. Extensibility (e11y)
Arguably, the two most important extensibility points in the Activity
Streams format are the object type and verb properties.
Implementations are free to come up with their own types and verbs at
any point. While such extensibility is extremely powerful, it comes
with a cost. Namely, implementations that encounter previously
unknown verbs and object types may not have enough to knowledge about
those to do anything significant with them.
For instance, the most common use case for Activity Streams today is
the generation of a human-readable "activity feed" that translates
Activity objects into sentences just as "John uploaded a new photo"
or "Jane checked in at a hotel", etc. Given an extension verb such
as "http://example.org/whatever", an implementation might not have
sufficient information about that verb to generate a readable
sentence describing the activity that occurred.
With Activity Streams 1.0, a number of different approaches have been
tried to address this problem, but all of the solutions essentially
deal with the need to provide additional metadata about extension
verbs and object types so that an implementation can dynamically
learn and adapt. The notion of "type values" is added by this
specification to specifically deal with this issue.
For example, suppose I have an implementation that generates Activity
objects that use a new extension verb "urn:example:verbs:upload".
Knowing that consumers of these objects might not have encountered
this verb before, I want to make it possible for those
implementations to automatically discover metadata about the new
verb. To do so, I can use a type value to provide some basic
information.
Snell Expires November 28, 2014 [Page 48]
Internet-Draft ActivityStreams May 2014
{
"verb": {
"id": "urn:example:verbs:upload",
"url": "http://example.org/verbs.json",
"mediaType": "application/ld+json",
"displayName": {
"en": "upload",
"fr": "televersement"
},
"alias": "post"
},
"actor": {
"type": "person",
"displayName": "John"
},
"object": {
"type": "photo",
"displayName": "cats.jpg"
}
}
An implementation receiving this has several choices. It could
choose to ignore everything other than the verb's identifier,
treating it generically as one would have to today using the 1.0
syntax; or, it could inspect the metadata provided and notice that
the extension verb can be treated generally as an alias of "post" or
displayed in English as "upload" and in French as "televersement";
or, it can choose to attempt discovering more information about the
verb by dereferencing the provided URL.
The point is, these options are built into the core syntax, making
extension verbs and object types significantly more usable,
particularly when combined with the new language context features.
D.2.1. Publishing Extension objectType and verb Libraries
By treating extension objectTypes and verbs as objects in their own
right, it becomes trivially possible to use the Activity Streams
format as a means of publishing metadata about extension verbs.
For example:
Snell Expires November 28, 2014 [Page 49]
Internet-Draft ActivityStreams May 2014
{
"displayName": "My object types and verbs",
"items": [
{
"objectType": "verb",
"id": "urn:example:verbs:create",
"alias": "post",
"displayName": "Create"
},
{
"objectType": "objectType",
"id": "urn:example:types:article",
"displayName": "Article"
}
]
}
Implementations could use such documents to dynamically learn about
new verbs and objectTypes.
D.3. First Class Links
Linking in the 1.0 syntax is largely undefined and inconsistent.
There is a general notion of Media Link objects that are used for
some things like images and videos, along with a "url" property that
in some cases is used to always point to HTML represenations while in
other cases might point to JSON documents or image files, and there
is no reusable concept of a generic link provided for extensions to
leverage which has led to inconsistent implementation. The 2.0
syntax introduced here deals with these issues by introducing a
clear, consistent, reusable first class linking model.
For instance, using the 2.0 syntax, an "image" object type can be
represented simply as:
{
"objectType": "image",
"url": "http://example.org/cats.jpg",
"mediaType": "image/jpeg",
"displayName": "A picture of my cats",
"alternate": {
"url": "http://example.org/gallery?i=cats.jpg",
"mediaType": "text/html"
}
"preview": "http://example.org/thumbnails/cats.jpg"
}
Snell Expires November 28, 2014 [Page 50]
Internet-Draft ActivityStreams May 2014
Essentially, any 2.0 object that contains a "url" property can be
interpreted as a link. That "url" property points to a
representation of the object, while the "mediaType" property
identifies the content type of that linked resource. RFC 5988 Link
Relations can be used directly within the 2.0 syntax to provide
additional data -- in this case, an alternative HTML representation
of the image as well as a thumbnail preview.
Another case that the more flexible linking approach allows us to
address is providing multiple links for a single property. For
instance, it is not uncommon for there to be several alternative
versions of an image resource offered at various resolutions to
support multiple types of devices. With the 2.0 syntax, multiple
choices for a single link can be easily provided.
{
"objectType": "application",
"displayName": "My application",
"icon": [
{
"url": "http://example.org/sd/icon.png",
"width": 57,
"height": 57
},
{
"url": "http://example.org/hd/icon.png",
"width": 114,
"height": 114
}
],
"preview": [
"http://www.example.org/screenshots/1.jpg",
"http://www.example.org/screenshots/2.jpg",
"http://www.example.org/screenshots/3.jpg"
]
}
D.4. Use of External Vocabularies
Use of an "external vocabulary" within Activity Streams means using
object types, verbs and properties that are not defined by the core
Activity Streams specification. An example would be using concepts
defined within a microdata vocabulary such as that defined by
Schema.org (http://schema.org).
Implementations that wish to use a Activity Streams with such
external vocabularies face the challenge that, often times, identical
or overlapping concepts can be expressed in a multitude of ways
Snell Expires November 28, 2014 [Page 51]
Internet-Draft ActivityStreams May 2014
depending on which vocabulary is selected. This can make it
difficult to map abstract data models into a specific JSON
serialization.
For instance, suppose an application uses the Schema.org model to
represent an article, described here: http://schema.org/Article.
Within this model, there are several properties defined that directly
overlap properties defined by the core Activity Streams syntax. Such
properties include "name", "contentLocation", and "articleBody". In
order to encode the abstact model of a Schema.org/Article into the
JSON Activity Streams model, the application needs to determine
precisely how to map the abstract properties to the serialized
format. In Activity Streams 1.0, no guidance was given on how to
achieve such a mapping, within the 2.0 syntax, the JSON Serialization
for Linked Data (JSON-LD) provides a foundation.
Using JSON-LD I can maintain basic Activity Streams 2.0 syntax while
mapping the physical serialization to the abstract model inline.
{
"objectType": "article",
"displayName": "My article about things",
"content": "This is my article",
"@context": {
"objectType": "@type",
"article": "http://schema.org/Article",
"displayName": "http://schema.org/name",
"content": "http://schema.org/Article/articleBody"
}
}
For any non-JSON-LD aware implementation, this can be processed just
as if it were an ordinary Activity Streams object, without any
additional consideration given. For a JSON-Ld aware implementation,
however, the addition of the "@context" property allows the
serialized JSON to be unambiguously mapped to the Schema.org concept
of an "Article". The fact that we can support such a mapping allows
the Activity Streams format to extend to a broader range of scenarios
without requiring alternative, incompatible vocabulary specific
models of "actions" or "activities" to be developed.
D.5. Embedded Actions
Every Activity Streams object represents a discreet modular component
that can be distributed, shared, or acted upon in a variety of ways.
The 2.0 syntax allows these components to not only express
information about the content but also about the specific types of
actions that can be performed with the object.
Snell Expires November 28, 2014 [Page 52]
Internet-Draft ActivityStreams May 2014
For example, an email that is automatically generated by an expense
reporting system could embed a structured Activity Stream object that
contains a listing of the possible actions the recipient of the email
can take. An intelligent email agent can interpret this embedded
metadata and provide a tailored, in-context UI experience:
Your employee, John Doe, has submitted a new expense
report for "John's trip to San Francisco"....
Author's Address
James M Snell (editor)
IBM
Email: jasnell@gmail.com
Snell Expires November 28, 2014 [Page 53]