Activity Streams (http://activitystrea.ms)                      J. Snell
Internet-Draft                                                       IBM
Intended status: Standards Track                                M. Marum
Expires: June 19, 2014                                          SugarCRM
                                                       December 16, 2013


              JSON Activity Streams 2.0 - Action Handlers
                 draft-snell-activitystreams-actions-02

Abstract

   This specification defines Action Handlers for use with the Activity
   Streams 2.0 format.

Author's Note

   Note that this document is a work-in-progress draft specification
   that does not yet represent a "standard".  It is the intention of
   this specification to propose a few new ideas and openly solicit
   feedback on their definition and use.  While this document might
   eventually evolve into an RFC the ideas described herein have not yet
   been broadly implemented and have definitions that will evolve
   through successive iterations of this draft.

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at http://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on June 19, 2014.

Copyright Notice

   Copyright (c) 2013 IETF Trust and the persons identified as the
   document authors.  All rights reserved.





Snell & Marum             Expires June 19, 2014                 [Page 1]


Internet-Draft               ActivityStreams               December 2013


   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.

Table of Contents

   1.  Overview  . . . . . . . . . . . . . . . . . . . . . . . . . .   2
   2.  Action Handlers . . . . . . . . . . . . . . . . . . . . . . .   2
   3.  HTTP Action Handler . . . . . . . . . . . . . . . . . . . . .   5
   4.  Embed Action Handler  . . . . . . . . . . . . . . . . . . . .  10
   5.  Intent Action Handler . . . . . . . . . . . . . . . . . . . .  13
   6.  Using "service" and "application" objects as action handlers   13
   7.  HTML Form Objects . . . . . . . . . . . . . . . . . . . . . .  14
   8.  URL Template Objects  . . . . . . . . . . . . . . . . . . . .  15
   9.  Parameters Object . . . . . . . . . . . . . . . . . . . . . .  16
   10. Styles Object . . . . . . . . . . . . . . . . . . . . . . . .  17
   11. Security Considerations . . . . . . . . . . . . . . . . . . .  18
   12. IANA Considerations . . . . . . . . . . . . . . . . . . . . .  18
   13. Normative References  . . . . . . . . . . . . . . . . . . . .  18
   Appendix A.  Using Action Handlers From Other Vocabularies  . . .  18
     A.1.  Schema.org Actions Proposal . . . . . . . . . . . . . . .  19
     A.2.  Google's "Actions in the Inbox" . . . . . . . . . . . . .  19
     A.3.  Mixing Vocabularies . . . . . . . . . . . . . . . . . . .  20
     A.4.  Example Drawing From Multiple Vocabularies  . . . . . . .  21
   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  23

1.  Overview

   The Activity Streams 2.0 [I-D.snell-activitystreams] specification
   introduces the notion of "actions" that can be associated with
   objects.  Using the "actions" property described in Sections 3.6 and
   3.6.1 of the Activity Streams 2.0 document, the producer of an object
   can declare a specific set of verbs appropriate for the object and
   map each of those to one or more objects ("action handlers") or
   resources capable of "carrying out" the verb.  This document expands
   on that mechanism by defining and describing a core set of action
   handler object types.

2.  Action Handlers

   An action handler is an Activity Streams 2.0 object whose objectType
   and member properties instruct a consuming application how to carry



Snell & Marum             Expires June 19, 2014                 [Page 2]


Internet-Draft               ActivityStreams               December 2013


   out the verb the action handler has been associated with.  For
   instance, given the following example:

     {
       "objectType": "note",
       ...,
       "actions": {
         "share": {
           "objectType": "HttpActionHandler",
           "url": "http://example.org/share"
         },
         "like": {
           "objectType": "EmbedActionHandler",
           "mediaType": "text/plain",
           "content": "Hello World"
         }
       }
     }

   The "note" object has two declared actions, "share" and "like".  Each
   of those is associated with one action handler object.  The "share"
   action has a action handler of type "HttpActionHandler", while the
   "like" action has an "EmbedActionHandler".

   As illustrated in the example, action handlers are represented as
   Activity Streams 2.0 objects.  All such objects share a common set of
   base member properties as defined in the following table:

   +---------+--------------------------+---------+--------------------+
   | Propert | Value                    | Require | Description        |
   | y       |                          | d       |                    |
   +---------+--------------------------+---------+--------------------+
   | confirm | Boolean                  | No      | True if the        |
   |         |                          |         | consuming          |
   |         |                          |         | application ought  |
   |         |                          |         | to seek            |
   |         |                          |         | confirmation prior |
   |         |                          |         | to using the       |
   |         |                          |         | action handler to  |
   |         |                          |         | carry out it's     |
   |         |                          |         | associated action. |
   |         |                          |         | Defaults to False. |
   | context | JSON Object              | No      | Contextual         |
   |         |                          |         | information        |
   |         |                          |         | associated with    |
   |         |                          |         | the action         |
   |         |                          |         | handler,           |
   |         |                          |         | represented as a   |



Snell & Marum             Expires June 19, 2014                 [Page 3]


Internet-Draft               ActivityStreams               December 2013


   |         |                          |         | JSON Object        |
   |         |                          |         | without any        |
   |         |                          |         | particular         |
   |         |                          |         | structure. How the |
   |         |                          |         | context is used is |
   |         |                          |         | dependent entirely |
   |         |                          |         | on the action      |
   |         |                          |         | handler definition |
   |         |                          |         | and on how a       |
   |         |                          |         | consuming          |
   |         |                          |         | application        |
   |         |                          |         | chooses to         |
   |         |                          |         | implement the      |
   |         |                          |         | action handler.    |
   | expects | Type Value [I-D.snell-ac | No      | For action         |
   |         | tivitystreams]           |         | handlers with a    |
   |         |                          |         | distinct input     |
   |         |                          |         | requirement (e.g.  |
   |         |                          |         | HttpActionHandler) |
   |         |                          |         | , the expects      |
   |         |                          |         | property provides  |
   |         |                          |         | a description of   |
   |         |                          |         | the expected       |
   |         |                          |         | input.             |
   | returns | Type Value [I-D.snell-ac | No      | For action         |
   |         | tivitystreams]           |         | handlers with a    |
   |         |                          |         | distinct output,   |
   |         |                          |         | the returns        |
   |         |                          |         | property provides  |
   |         |                          |         | a description of   |
   |         |                          |         | the expected       |
   |         |                          |         | output.            |
   +---------+--------------------------+---------+--------------------+

   This specification defines three specific base types of action
   handler:

   o  The HTTP Action Handler (Section 3),

   o  The Embed Action Handler (Section 4), and

   o  The Intent Action Handler (Section 5).









Snell & Marum             Expires June 19, 2014                 [Page 4]


Internet-Draft               ActivityStreams               December 2013


   Implementations are free to use Activity Stream objects of any
   objectType as an action handler.  Consuming applications MAY ignore
   any object it encounters that use objectTypes that are not recognized
   or supported as action handlers.  Alternatively, the consuming
   application MAY treat such objects as implied Intent Action Handlers
   (Section 5).

   Multiple independent action handlers can be associated with any
   single verb using a JSON Array.  The ordering of objects within such
   an array is not considered to be significant.

   For example, in the following, the "share" action has two associated
   action handlers:

     {
       "objectType": "note",
       ...,
       "actions": {
         "share": [
           {
             "objectType": "HttpActionHandler",
             "method": "GET",
             "url": "http://example.org/share-action"
           },
           {
             "objectType": "EmbedActionHandler",
             "mediaType": "text/plain",
             "content": "Hello World!"
           }
         ]
       }
     }

3.  HTTP Action Handler

   An HTTP Action Handler describes an HTTP request/response flow that
   is used to carry out an action.  It is identified using an objectType
   value of "HttpActionHandler".













Snell & Marum             Expires June 19, 2014                 [Page 5]


Internet-Draft               ActivityStreams               December 2013


   +----------+----------------------------+----------+----------------+
   | Property | Value                      | Required | Description    |
   +----------+----------------------------+----------+----------------+
   | url      | Link Value                 | Yes      | Specifies the  |
   |          |                            |          | HTTP or HTTPS  |
   |          |                            |          | URL to which   |
   |          |                            |          | the HTTP       |
   |          |                            |          | request is     |
   |          |                            |          | directed.      |
   | method   | HTTP Method String (e.g.   | No       | The HTTP       |
   |          | "GET", "POST", "PUT", etc) |          | method to use. |
   |          |                            |          | Defaults to    |
   |          |                            |          | "GET"          |
   | target   | "DEFAULT" - Consumer       | No       | Specifies the  |
   |          | defined default; "NONE" -  |          | intended       |
   |          | No navigation or UI        |          | target of the  |
   |          | context (e.g. a hidden     |          | HTTP action.   |
   |          | HTTP action that does not  |          | This           |
   |          | result in the creation or  |          | determines     |
   |          | use of a browser window);  |          | whether the    |
   |          | "NEW" - A new navigation   |          | action results |
   |          | or UI context (e.g. show   |          | in a new       |
   |          | the results of the HTTP    |          | navigation     |
   |          | request in a browser       |          | context (e.g.  |
   |          | window or tab.); "CURRENT" |          | new browser    |
   |          | - Reuse the existing       |          | window) or     |
   |          | navigation or UI context   |          | whether the    |
   |          | (e.g. show the results of  |          | action is      |
   |          | the HTTP request in an     |          | "hidden". When |
   |          | existing browser window or |          | not specified, |
   |          | tab.); {Other token value} |          | defaults to    |
   |          | - Any other TOKEN value.   |          | "DEFAULT",     |
   |          | Interpretation and support |          | meaning that   |
   |          | of such extension tokens   |          | the consuming  |
   |          | is dependent on the        |          | application is |
   |          | consuming application.     |          | free to        |
   |          | Unknown or unsupported     |          | determine an   |
   |          | values MUST be ignored.    |          | appropriate    |
   |          |                            |          | target         |
   |          |                            |          | context.       |
   +----------+----------------------------+----------+----------------+

   For example:








Snell & Marum             Expires June 19, 2014                 [Page 6]


Internet-Draft               ActivityStreams               December 2013


     {
       "objectType": "note",
       ...,
       "actions": {
         "view": {
           "objectType": "HttpActionHandler",
           "url": "http://example.org/foo",
           "method": "GET"
         }
       }
     }

   As a shortcut, HttpActionHandlers that use the "GET" method and a
   "DEFAULT" target can be specified using a JSON string containing the
   absolute URL.  For instance:

     {
       "objectType": "note",
       ...,
       "actions": {
         "view": "http://example.org/foo"
       }
     }

   In the Activity Streams 2.0 format, the "url" property is defined as
   a "Link Value", this means that it is possible for the value of the
   "url" property to be an Activity Stream object that a consuming
   application can use to resolve the actual target URL.  This
   specification defines a new UrlTemplate (Section 8) objectType
   specifically intended for such use.

   The UrlTemplate object can be used within an HTTP Action Handler, for
   instance, whenever carrying out the HTTP request requires the
   construction of a new URL that includes variable parameters:

















Snell & Marum             Expires June 19, 2014                 [Page 7]


Internet-Draft               ActivityStreams               December 2013


     {
       "objectType": "note",
       ...,
       "actions": {
         "review": {
           "objectType": "HttpActionHandler",
           "url": {
             "objectType": "UrlTemplate",
             "method": "POST",
             "template": "http://example.org/note/123{?rating}",
             "parameters": {
               "rating": {
                 "id": "http://schema.org/ratingValue",
                 "displayName": "Rating",
                 "bestRating": 5,
                 "worstRating": 1
               }
             }
           },
           "method": "GET",
           "target": "NEW"
         }
       }
     }

   If the intended HTTP request uses the GET method and DEFAULT target,
   the UrlTemplate object itself can be used directly as the action
   handler.























Snell & Marum             Expires June 19, 2014                 [Page 8]


Internet-Draft               ActivityStreams               December 2013


   "GET" HttpActionHandler shortcut using a URL Template:

     {
       "objectType": "note",
       ...,
       "actions": {
         "review": {
           "objectType": "UrlTemplate",
           "template": "http://example.org/note/123{?rating}",
           "parameters": {
             "rating": {
               "id": "http://schema.org/ratingValue",
               "displayName": "Rating",
               "bestRating": 5,
               "worstRating": 1
             }
           }
         }
       }
     }

   If the HTTP request requires an input payload, the HttpActionHandler
   object can contain an "expects" property.  The value of "expects" is
   an Activity Streams 2.0 "Type Value" represented either as a simple
   JSON string containing a fully qualified IRI or as an Activity Stream
   object.  This specification defines a new HtmlForm (Section 7)
   objectType to be used whenever the input of the HTTP request is an
   HTML Form POST.

   For example, the following describes an HTML Form post with a single
   "foo" parameter submitted using the "application/x-www-form-
   urlencoded" format:



















Snell & Marum             Expires June 19, 2014                 [Page 9]


Internet-Draft               ActivityStreams               December 2013


     {
       "objectType": "note",
       ...,
       "actions": {
         "share": {
           "objectType": "HttpActionHandler",
           "method": "POST",
           "url": "http://example.org/foo",
           "expects": {
             "objectType": "HtmlForm",
             "mediaType": "application/x-www-form-urlencoded",
             "parameters": {
               "foo": {
                 "id": "http://example.org/foo",
                 "type": "http://www.w3.org/2001/XMLSchema#string",
                 "displayName": "Foo Property"
               }
             }
           }
         }
       }
     }

4.  Embed Action Handler

   An Embed Action Handler defines static or dynamic content to be
   visually rendered to carry out an action.  Examples of embeds can
   include static HTML, images, videos, gadgets and applications.  It is
   identified using an objectType value of "EmbedActionHandler".






















Snell & Marum             Expires June 19, 2014                [Page 10]


Internet-Draft               ActivityStreams               December 2013


   +-----------+------------+--------------+---------------------------+
   | Property  | Value      | Required     | Description               |
   +-----------+------------+--------------+---------------------------+
   | url       | Link Value | Yes if       | The URL from which to     |
   |           |            | "content" is | retrieve the content for  |
   |           |            | not          | this embed.               |
   |           |            | specified.   |                           |
   | content   | String     | Yes if "url" | The character based       |
   |           |            | is not       | "static" content to be    |
   |           |            | specified.   | embeded. The "mediaType"  |
   |           |            |              | parameter specifies the   |
   |           |            |              | MIME media type of the    |
   |           |            |              | content.                  |
   | mediaType | MIME Media | No (but      | The MIME Media Type of    |
   |           | Type       | strongly     | the embedded content.     |
   |           |            | recommended) |                           |
   | style     | Styles     | No           | Visual CSS styling hints  |
   |           | Object     |              | to apply to the element   |
   |           | (Section   |              | containing the embedded   |
   |           | 10)        |              | content.                  |
   | preview   | Link Value | No           | A reference to a          |
   |           |            |              | "preview" representation  |
   |           |            |              | of the embedded content.  |
   |           |            |              | Typically, this would a   |
   |           |            |              | URL to a thumbnail or     |
   |           |            |              | screenshot image of the   |
   |           |            |              | content.                  |
   | target    | "DEFAULT"; | No           |                           |
   |           | "INLINE";  |              |                           |
   |           | {Other     |              |                           |
   |           | token      |              |                           |
   |           | value}     |              |                           |
   +-----------+------------+--------------+---------------------------+

   In the following example, the "view" action is associated with an
   "EmbedActionHandler" containing a static fragment of HTML markup:















Snell & Marum             Expires June 19, 2014                [Page 11]


Internet-Draft               ActivityStreams               December 2013


     {
       "objectType": "note",
       ...,
       "actions": {
         "view": {
           "objectType": "EmbedActionHandler",
           "content": "<div>This is some bit of embedded HTML</div>",
           "mediaType": "text/html",
           "style": {
             "height": "100px",
             "width": "100px",
             "box-shadow": "10px 10px 5px #888888"
           },
           "displayName": "Some embedded content",
           "preview": "http://example.org/preview/123.jpg"
         }
       }
     }

   Alternatively, the embedded content can be referenced by URL:

     {
       "objectType": "note",
       ...,
       "actions": {
         "view": {
           "objectType": "EmbedActionHandler",
           "url": "http://example.org/foo",
           "mediaType": "text/html"
         }
       }
     }

   The mediaType parameter specifies the type of content to be embedded.
   Consuming applications MAY ignore Embed Action Handlers that specify
   unrecognized or unsupported mediaTypes.

   Example:













Snell & Marum             Expires June 19, 2014                [Page 12]


Internet-Draft               ActivityStreams               December 2013


     {
       "objectType": "note",
       ...,
       "actions": {
         "view": {
           "objectType": "EmbedActionHandler",
           "url": "http://example.org/foo.mpg",
           "mediaType": "video/mpeg"
         }
       }
     }

5.  Intent Action Handler

   An Intent Action Handler provides a generic way for the publisher of
   an Activity object to tell the consuming application to figure out
   how to handle the action on it's own.  The consumer can, for
   instance, pass the object off to some other native platform
   application.  It is identified using an objectType value of
   "IntentActionHandler".

   For example:

     {
       "objectType": "note",
       ...,
       "actions": {
         "share": {
           "objectType": "IntentActionHandler",
           "displayName": "Share This",
           "context": {
             "foo": "ABC",
             "bar": 123
           }
         }
       }
     }

6.  Using "service" and "application" objects as action handlers

   The "service" and "application" object are existing objectTypes
   defined by the Activity Streams 1.0 core schema.  While these objects
   were not originally designed to be used as action handlers, they can
   be.  Specifically, the "service" objectType can be used when the
   action is to be carried out using some specific third party service
   interface; the "application" objectType can be used when the action
   is to be carried out by deferring some some specific native platform
   application.



Snell & Marum             Expires June 19, 2014                [Page 13]


Internet-Draft               ActivityStreams               December 2013


   For example:

     {
       "objectType": "note",
       ...,
       "actions": {
         "share": {
           "objectType": "service",
           "displayName": "My Sharing Service",
           "url": "http://share.example.org/api"
         },
         "save": {
           "objectType": "application",
           "displayName": "Read this later!",
           "platform": "android",
           "id": "123",
           "url": "http://play.google.com/..."
         }
       }
     }

7.  HTML Form Objects

   +----------+-----------+----------+---------------------------------+
   | Property | Value     | Required | Description                     |
   +----------+-----------+----------+---------------------------------+
   | mediaTyp | MIME      | No       | Defaults to "application/x-www- |
   | e        | Media     |          | form-urlencoded"                |
   |          | Type      |          |                                 |
   | paramete | Parameter | No       | Defines the HTML form           |
   | rs       | s Object  |          | parameters.                     |
   |          | (Section  |          |                                 |
   |          | 9)        |          |                                 |
   +----------+-----------+----------+---------------------------------+

   For example:















Snell & Marum             Expires June 19, 2014                [Page 14]


Internet-Draft               ActivityStreams               December 2013


     {
       "objectType": "note",
       ...,
       "actions": {
         "review": {
           "objectType": "HttpActionHandler",
           "method": "POST",
           "url": "http://example.org/foo",
           "expects": {
             "objectType": "HtmlForm",
             "mediaType": "application/x-www-form-urlencoded",
             "parameters": {
               "foo": {
                 "displayName": "Foo",
                 "id": "http://example.org/FooProperty",
                 "type": "http://www.w3.org/2001/XMLSchema#string",
                 "required": True
               },
               "bar": {
                 "displayName": "Bar",
                 "id": "http://example.org/BarProperty",
                 "type": "http://www.w3.org/2001/XMLSchema#",
                 "required": True,
                 "value": "Provided Value"
               }
             }
           }
         }
       }
     }

8.  URL Template Objects

   Objects with the "UrlTemplate" object type represent [RFC6570] URL
   Templates.

   +------------+-------------------+----------+-----------------------+
   | Property   | Value             | Required | Description           |
   +------------+-------------------+----------+-----------------------+
   | template   | URL Template      | Yes      | The [RFC6570] URL     |
   |            |                   |          | Template              |
   | parameters | Parameters Object | No       | Defines the URL       |
   |            | (Section 9)       |          | Template parameters   |
   +------------+-------------------+----------+-----------------------+







Snell & Marum             Expires June 19, 2014                [Page 15]


Internet-Draft               ActivityStreams               December 2013


   {
     "objectType": "note",
     ...,
     "actions": {
       "review": {
         "objectType": "UrlTemplate",
         "template": "http://example.org/foo/123{?rating}",
         "parameters": {
           "rating": {
             "displayName": "Rating",
             "id": "http://example.org/RatingProperty",
             "required": True
           }
         }
       }
     }
   }

9.  Parameters Object

   A Parameters Object is used to provide descriptions of the variable
   inputs of objects such as HTML Forms (Section 7) and URL Templates
   (Section 8).  The object is expressed as a JSON dictionary mapping
   parameter names to Type Values [I-D.snell-activitystreams] describing
   the parameters.

   By default, all parameters defined within the object are assumed to
   be required.  When a parameter is described using an Object, the
   object MAY contained a boolean "required" member.  If "required" is
   false, use of the parameter is assumed to be optional.

   Using the Parameters Object in UrlTemplate objects:

     {
       "objectType": "UrlTemplate",
       "template": "http://example.org{/foo,bar}"
       "parameters": {
         "foo": "http://example.org/FooProperty",
         "bar": {
           "id": "http://example.org/BarProperty",
           "displayName": "Bar",
           "required": False
         }
       }
     }

   Using the Parameters Object in HtmlForm objects:




Snell & Marum             Expires June 19, 2014                [Page 16]


Internet-Draft               ActivityStreams               December 2013


     {
       "objectType": "HtmlForm",
       "mediaType": "application/x-www-form-urlencoded",
       "parameters": {
         "foo": "http://example.org/FooProperty",
         "bar": {
           "id": "http://example.org/BarProperty",
           "displayName": "Bar",
           "required": False
         }
       }
     }

10.  Styles Object

   A Styles Object is used by EmbedActionHandlers to provide CSS style
   hints for the container within which embedded content is to be
   displayed.  The object is expressed as either a single JSON
   dictionary object mapping CSS property names to appropriate CSS
   values, or an array of JSON dictionary objects.  An optional "media"
   member can be included within the dictionary providing a CSS Media
   Query.

   Example style hints:

   {
     "objectType": "note",
     ...,
     "actions": {
       "view": {
         "objectType": "EmbedActionHandler",
         "content": "Some plain text content",
         "mediaType": "text/plain",
         "style": {
           "height": "100px",
           "width": "100px",
           "box-shadow": "10px 10px 5px #888888"
         }
       }
     }
   }

   Multiple style hints for specific media query targets:








Snell & Marum             Expires June 19, 2014                [Page 17]


Internet-Draft               ActivityStreams               December 2013


   {
     "objectType": "note",
     ...,
     "actions": {
       "view": {
         "objectType": "EmbedActionHandler",
         "content": "Some plain text content",
         "mediaType": "text/plain",
         "style": [
           {
             "media": "print",
             "height": "100px",
             "width": "100px",
             "box-shadow": "10px 10px 5px #888888"
           },
           {
             "media": "screen and (orientation: landscape)",
             "height": "100px",
             "width": "100px",
             "box-shadow": "10px 10px 5px #888888"
           }
         ]
       }
     }
   }

11.  Security Considerations

   TBD

12.  IANA Considerations

   TBD

13.  Normative References

   [I-D.snell-activitystreams]
              Snell, J., "JSON Activity Streams 2.0", draft-snell-
              activitystreams-05 (work in progress), November 2013.

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119, March 1997.

   [RFC6570]  Gregorio, J., Fielding, R., Hadley, M., Nottingham, M.,
              and D. Orchard, "URI Template", RFC 6570, March 2012.

Appendix A.  Using Action Handlers From Other Vocabularies




Snell & Marum             Expires June 19, 2014                [Page 18]


Internet-Draft               ActivityStreams               December 2013


   The Activity Streams 2.0 Actions mechanism is specifically designed
   to allow Action Handlers from multiple vocabularies.

A.1.  Schema.org Actions Proposal

   Based on http://www.w3.org/wiki/images/b/b9/Actionsinschema.org.pdf:

     {
       "objectType": "video",
       ...,
       "actions": {
         "watch": [
           {
             "objectType": "http://schema.org/WebPageHandler",
             "url": "http://movies.example.com/player?id=123"
           },
           {
             "objectType": "http://schema.org/AndroidHandler",
             "url": "http://movies.example.com/player?id=123",
             "package": "com.movies"
           }
         ]
       }
     }

A.2.  Google's "Actions in the Inbox"

   Based on https://developers.google.com/gmail/actions/reference/
   review-action:






















Snell & Marum             Expires June 19, 2014                [Page 19]


Internet-Draft               ActivityStreams               December 2013


     {
       "objectType": "note",
       ...,
       "actions": {
         "review": {
           "objectType": "http://schema.org/ReviewAction",
           "review": {
             "objectType": "http://schema.org/Review",
             "itemReviewed": {
               "objectType": "http://schema.org/FoodEstablishment",
               "name": "Joe's Diner"
             },
             "reviewRating": {
               "objectType": "http://schema.org/Rating",
               "bestRating": "5",
               "worstRating": "1"
             }
           },
           "handler": {
             "objectType": "http://schema.org/HttpActionHandler",
             "url": "http://reviews.com/review?id=123",
             "requiredProperty": {
               "objectType": "http://schema.org/Property",
               "name": "review.reviewRating.ratingValue"
             },
             "method": "http://schema.org/HttpRequestMethod/POST"
           }
         }
       }
     }

A.3.  Mixing Vocabularies



















Snell & Marum             Expires June 19, 2014                [Page 20]


Internet-Draft               ActivityStreams               December 2013


     {
       "objectType": "video",
       ...,
       "actions": {
         "watch": [
           {
             "objectType": "HttpActionHandler",
             "url": "http://movies.example.com/player?id=123",
             "target": "NEW"
           },
           {
             "objectType": "http://schema.org/AndroidHandler",
             "url": "http://movies.example.com/player?id=123",
             "package": "com.movies"
           }
         ]
       }
     }

A.4.  Example Drawing From Multiple Vocabularies

     {
       "objectType": "video",
       "displayName": "A Movie!",
       ...,
       "actions": {
         "watch": [
           {
             "objectType": "EmbedActionHandler",
             "displayName": "HD",
             "mediaType": "video/mpeg",
             "url": "http://cdn.example.org?id=123amp;fmt=HD",
           },
           {
             "objectType": "EmbedActionHandler",
             "displayName": "SD",
             "mediaType": "video/mpeg",
             "url": "http://cdn.example.org?id=123&fmt=SD",
           },
           {
             "objectType": "application",
             "displayName": "Watch on Netflix",
             "url": "http://netflix.com..."
           }
         ],
         "like": {
           "objectType": "EmbedActionHandler",
           "mediaType": "text/html",



Snell & Marum             Expires June 19, 2014                [Page 21]


Internet-Draft               ActivityStreams               December 2013


           "url": "http://www.facebook.com/plugins/like.php...",
           "style": {
             "width": "150px",
             "height": "50px"
           }
         },
         "share": [
           {
             "objectType": "HttpActionHandler",
             "displayName": "Twitter",
             "url": "https://twitter.com/share?url=...",
             "target": "DIALOG"
           },
           {
             "objectType": "HttpActionHandler",
             "displayName": "Facebook",
             "url": "https://www.facebook.com/sharer/sharer.php?u=...",
             "target": "DIALOG"
           }
         ],
         "save": [
           {
             "objectType": "service",
             "id": "http://getpocket.com",
             "displayName": "Pocket",
             "context": {
               "url": "http://example.org/movie?id=123",
               "title": "A Movie!",
               "tags": "foo, bar, baz"
             }
           },
           {
             "objectType": "service",
             "id": "http://instapaper.com",
             "displayName": "Instapaper",
             "context": {
               "url": "http://example.org/movie?id=123",
               "title": "A Movie!",
               "selection": "An action movie!"
             }
           }
         ],
         "review": {
           "objectType": "HttpActionHandler",
           "displayName": "Rate this movie!",
           "url": "http://review.example.org/movie?id=123",
           "method": "POST",
           "expects": {



Snell & Marum             Expires June 19, 2014                [Page 22]


Internet-Draft               ActivityStreams               December 2013


             "objectType": "HtmlForm",
             "mediaType": "application/x-www-form-urlencoded",
             "parameters": {
               "rating": {
                 "id": "http://schema.org/ratingValue",
                 "bestRating": 5,
                 "worstRating": 0,
                 "displayName": "Rating",
                 "required": true
               },
               "comments": {
                 "id": "http://schema.org/commentText",
                 "displayName": "Comments",
                 "required": "false"
               }
             }
           }
         }
       }
     }

Authors' Addresses

   James M Snell
   IBM

   Email: jasnell@gmail.com


   Matthew Marum
   SugarCRM

   Email: mgmarum@gmail.com


















Snell & Marum             Expires June 19, 2014                [Page 23]