Activity Streams Working Group                                  J. Snell
                                                                     IBM
                                                               M. Atkins
                                                               SAY Media
                                                               W. Norris
                                                                  Google
                                                              C. Messina
                                                  Citizen Agency, Google
                                                            M. Wilkinson
                                           MySpace, Facebook, Socialcast
                                                                R. Dolin
                                                               Microsoft
                                                                May 2011
                       JSON Activity Streams 1.0
Abstract
   This specification details the serialization of a stream of social
   activities using the JSON format.  Activities are important in that
   they allow individuals to process the latest news of people and
   things they care about.
Snell, et al.                                                   [Page 1]
                             ActivityStreams                    May 2011
Table of Contents
   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  3
   2.  Notational Conventions . . . . . . . . . . . . . . . . . . . .  3
   3.  JSON Serialization . . . . . . . . . . . . . . . . . . . . . .  4
     3.1.  Example Activities . . . . . . . . . . . . . . . . . . . .  4
     3.2.  Activity Serialization . . . . . . . . . . . . . . . . . .  7
     3.3.  Media Link Serialization . . . . . . . . . . . . . . . . .  9
     3.4.  Object Serialization . . . . . . . . . . . . . . . . . . . 10
     3.5.  Collection Serialization . . . . . . . . . . . . . . . . . 13
   4.  The Activity Stream JSON Document  . . . . . . . . . . . . . . 14
   5.  Comparison of Identifier Values  . . . . . . . . . . . . . . . 14
   6.  The "post" Verb  . . . . . . . . . . . . . . . . . . . . . . . 15
     6.1.  Implied "post" Activity  . . . . . . . . . . . . . . . . . 15
   7.  The "activity" Object Type . . . . . . . . . . . . . . . . . . 16
   8.  Extension Object Types and Verbs . . . . . . . . . . . . . . . 17
   9.  Other Representations  . . . . . . . . . . . . . . . . . . . . 17
   10. Requirements for Re-publishers . . . . . . . . . . . . . . . . 18
   11. Security Considerations  . . . . . . . . . . . . . . . . . . . 18
   12. IANA Considerations  . . . . . . . . . . . . . . . . . . . . . 19
   13. License  . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
   14. Errata . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
   15. Normative References . . . . . . . . . . . . . . . . . . . . . 20
   Appendix A.  Acknowledgements  . . . . . . . . . . . . . . . . . . 20
   Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 21
Snell, et al.                                                   [Page 2]
                             ActivityStreams                    May 2011
1.  Introduction
   In its simplest form, an "activity" consists of an "actor", a "verb",
   an an "object", and a "target".  It tells the story of a person
   performing an action on or with an object -- "Geraldine posted a
   photo to her album" or "John shared a video".  In most cases these
   components will be explicit, but they may also be implied.
   It is a goal of this specification to provide sufficient metadata
   about an activity such that a consumer of the data can present it to
   a user in a rich human-friendly format.  This may include
   constructing readable sentences about the activity that occurred,
   visual representations of the activity, or combining similar
   activities for display.
   The basic properties that comprise the description of an "activity"
   are defined in the following sections.
   Within this specification, an "object" is a thing, real or imaginary,
   which participates in an activity.  It may be the entity performing
   the activity, or the entity on which the activity was performed.  An
   "object" consists of properties defined in the following sections.
   Certain object types may further refine the meaning of these
   properties, or they may define additional properties.
   Some types of objects may have an alternative visual representation
   in the form of an image, video or embedded HTML fragments.  A "Media
   Link" represents a hyperlink to such resources.
   An "Activity Stream" is a collection one or more individual
   activities.  The relationship between the activities within the
   collection is undefined by this specification.
2.  Notational Conventions
   The text of this specification provides the sole definition of
   conformance.  Examples in this specification are non-normative.
   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in [RFC2119].
   This specification allows the use of IRIs [RFC3987].  Every URI
   [RFC3986] is also an IRI, so a URI may be used wherever below an IRI
   is named.  There are two special considerations: (1) when an IRI that
   is not also a URI is given for dereferencing, it MUST be mapped to a
   URI using the steps in Section 3.1 of [RFC3987] and (2) when an IRI
Snell, et al.                                                   [Page 3]
                             ActivityStreams                    May 2011
   is serving as an "id" value, it MUST NOT be so mapped.
3.  JSON Serialization
   Activities are serialized using the JSON format, as defined in
   [RFC4627].  Alternative serializations MAY be used but are outside
   the scope of this specification.
   In the JSON serialization, absent properties MAY be represented
   either by an explicit declaration of the property whose value is null
   or by omitting the property declaration altogether at the option of
   the publisher; these two representations are semantically equivalent.
   If a property is having a value whose type is a JSON array, the
   absence of any items in that array MUST be represented by omitting
   the property entirely or publishing it with the value null, and MUST
   NOT be represented as an empty array, except as otherwise stated in
   the definition of a specific property.
   Unless otherwise specified, all properties specifying date and time
   values within the JSON serialization, including extensions, MUST
   conform to the "date-time" production in [RFC3339].  In addition, an
   uppercase "T" character MUST be used to separate date and time, and
   an uppercase "Z" character MUST be present in the absence of a
   numeric time zone offset.
3.1.  Example Activities
   Following is a simple, minimal example of a JSON serialized
   "activity":
Snell, et al.                                                   [Page 4]
                             ActivityStreams                    May 2011
     {
       "published": "2011-02-10T15:04:55Z",
       "actor": {
         "url": "http://example.org/martin",
         "objectType" : "person",
         "id": "tag:example.org,2011:martin",
         "image": {
           "url": "http://example.org/martin/image",
           "width": 250,
           "height": 250
         },
         "displayName": "Martin Smith"
       },
       "verb": "post",
       "object" : {
         "url": "http://example.org/blog/2011/02/entry",
         "id": "tag:example.org,2011:abc123/xyz"
       },
       "target" : {
         "url": "http://example.org/blog/",
         "objectType": "blog",
         "id": "tag:example.org,2011:abc123",
         "displayName": "Martin's Blog"
       }
     }
   A more extensive, single-entry "Activity Stream" follows.  In
   addition to containing a number of required and optional core
   properties, the example contains the additional, undefined extension
   properties "foo" and "foo2" for illustrative purposes only.
    {
      "items" : [
        {
          "published": "2011-02-10T15:04:55Z",
          "foo": "some extension property",
          "generator": {
            "url": "http://example.org/activities-app"
          },
          "provider": {
            "url": "http://example.org/activity-stream"
          },
          "title": "Martin posted a new video to his album.",
          "actor": {
            "url": "http://example.org/martin",
            "objectType": "person",
            "id": "tag:example.org,2011:martin",
            "foo2": "some other extension property",
Snell, et al.                                                   [Page 5]
                             ActivityStreams                    May 2011
            "image": {
              "url": "http://example.org/martin/image",
              "width": 250,
              "height": 250
            },
            "displayName": "Martin Smith"
          },
          "verb": "post",
          "object" : {
            "url": "http://example.org/album/my_fluffy_cat.jpg",
            "objectType": "photo",
            "id": "tag:example.org,2011:my_fluffy_cat",
            "image": {
              "url": "http://example.org/album/my_fluffy_cat_thumb.jpg",
              "width": 250,
              "height": 250
            }
          },
          "target": {
            "url": "http://example.org/album/",
            "objectType": "photo-album",
            "id": "tag:example.org,2011:abc123",
            "displayName": "Martin's Photo Album",
            "image": {
              "url": "http://example.org/album/thumbnail.jpg",
              "width": 250,
              "height": 250
            }
          }
        }
      ]
    }
Snell, et al.                                                   [Page 6]
                             ActivityStreams                    May 2011
3.2.  Activity Serialization
   +-------------+---------------+-------------------------------------+
   | Property    | Value         | Description                         |
   +-------------+---------------+-------------------------------------+
   | "actor"     | Object        | Describes the entity that performed |
   |             | (Section 3.4) | the activity.  An activity MUST     |
   |             |               | contain one "actor" property whose  |
   |             |               | value is a single Object            |
   |             |               | (Section 3.4).                      |
   | "content"   | JSON          | Natural-language description of the |
   |             | [RFC4627]     | activity encoded as a single JSON   |
   |             | String        | String containing HTML markup.      |
   |             |               | Visual elements such as thumbnail   |
   |             |               | images MAY be included.  An         |
   |             |               | activity MAY contain a "content"    |
   |             |               | property.                           |
   | "generator" | Object        | Describes the application that      |
   |             | (Section 3.4) | generated the activity.  An         |
   |             |               | activity MAY contain a "generator"  |
   |             |               | property whose value is a single    |
   |             |               | Object (Section 3.4).               |
   | "icon"      | Media Link    | Description of a resource providing |
   |             | (Section 3.3) | a visual representation of the      |
   |             |               | object, intended for human          |
   |             |               | consumption.  The image SHOULD have |
   |             |               | an aspect ratio of one (horizontal) |
   |             |               | to one (vertical) and SHOULD be     |
   |             |               | suitable for presentation at a      |
   |             |               | small size.  An activity MAY have   |
   |             |               | an "icon" property.                 |
   | "id"        | JSON          | Provides a permanent, universally   |
   |             | [RFC4627]     | unique identifier for the activity  |
   |             | String        | in the form of an absolute IRI      |
   |             |               | [RFC3987].  An activity SHOULD      |
   |             |               | contain a single "id" property.  If |
   |             |               | an activity does not contain an     |
   |             |               | "id" property, consumers MAY use    |
   |             |               | the value of the "url" property as  |
   |             |               | a less-reliable, non-unique         |
   |             |               | identifier.                         |
Snell, et al.                                                   [Page 7]
                             ActivityStreams                    May 2011
   | "object"    | Object        | Describes the primary object of the |
   |             | (Section 3.4) | activity.  For instance, in the     |
   |             |               | activity, "John saved a movie to    |
   |             |               | his wishlist", the object of the    |
   |             |               | activity is "movie".  An activity   |
   |             |               | SHOULD contain an "object" property |
   |             |               | whose value is a single Object      |
   |             |               | (Section 3.4).  If the "object"     |
   |             |               | property is not contained, the      |
   |             |               | primary object of the activity MAY  |
   |             |               | be implied by context.              |
   | "published" | [RFC3339]     | The date and time at which the      |
   |             | date-time     | activity was published.  An         |
   |             |               | activity MUST contain a "published" |
   |             |               | property.                           |
   | "provider"  | Object        | Describes the application that      |
   |             | (Section 3.4) | published the activity.  Note that  |
   |             |               | this is not necessarily the same    |
   |             |               | entity that generated the activity. |
   |             |               | An activity MAY contain a           |
   |             |               | "provider" property whose value is  |
   |             |               | a single Object (Section 3.4).      |
   | "target"    | Object        | Describes the target of the         |
   |             | (Section 3.4) | activity.  The precise meaning of   |
   |             |               | the activity's target is dependent  |
   |             |               | on the activities "verb", but will  |
   |             |               | often be the object the English     |
   |             |               | preposition "to".  For instance, in |
   |             |               | the activity, "John saved a movie   |
   |             |               | to his wishlist", the target of the |
   |             |               | activity is "wishlist".  The        |
   |             |               | activity target MUST NOT be used to |
   |             |               | identity an indirect object that is |
   |             |               | not a target of the activity.  An   |
   |             |               | activity MAY contain a "target"     |
   |             |               | property whose value is a single    |
   |             |               | Object (Section 3.4).               |
   | "title"     | JSON          | Natural-language title or headline  |
   |             | [RFC4627]     | for the activity encoded as a       |
   |             | String        | single JSON String containing HTML  |
   |             |               | markup.  An activity MAY contain a  |
   |             |               | "title" property.                   |
   | "updated"   | [RFC3339]     | The date and time at which a        |
   |             | date-time     | previously published activity has   |
   |             |               | been modified.  An Activity MAY     |
   |             |               | contain an "updated" property.      |
Snell, et al.                                                   [Page 8]
                             ActivityStreams                    May 2011
   | "url"       | JSON          | An IRI [RFC3987] identifying a      |
   |             | [RFC4627]     | resource providing an HTML          |
   |             | String        | representation of the activity.  An |
   |             |               | activity MAY contain a "url"        |
   |             |               | property.                           |
   | "verb"      | JSON          | Identifies the action that the      |
   |             | [RFC4627]     | activity describes.  An activity    |
   |             | String        | SHOULD contain a "verb" property    |
   |             |               | whose value is a JSON String that   |
   |             |               | is non-empty and matches either the |
   |             |               | "isegment-nz-nc" or the "IRI"       |
   |             |               | production in [RFC3339].  Note that |
   |             |               | the use of a relative reference     |
   |             |               | other than a simple name is not     |
   |             |               | allowed.  If the "verb" is not      |
   |             |               | specified, or if the value is null, |
   |             |               | the "verb" is assumed to be "post"  |
   |             |               | (Section 6).                        |
   +-------------+---------------+-------------------------------------+
3.3.  Media Link Serialization
   +------------+---------------+--------------------------------------+
   | Property   | Value         | Description                          |
   +------------+---------------+--------------------------------------+
   | "duration" | JSON          | A hint to the consumer about the     |
   |            | [RFC4627] int | length, in seconds, of the media     |
   |            |               | resource identified by the "url"     |
   |            |               | property.  A media link MAY contain  |
   |            |               | a "duration" property when the       |
   |            |               | target resource is a time-based      |
   |            |               | media item such as an audio or       |
   |            |               | video.                               |
   | "height"   | JSON          | A hint to the consumer about the     |
   |            | [RFC4627] int | height, in pixels, of the media      |
   |            |               | resource identified by the "url"     |
   |            |               | property.  A media link MAY contain  |
   |            |               | a "height" property when the target  |
   |            |               | resource is a visual media item such |
   |            |               | as an image, video or embeddable     |
   |            |               | HTML page.                           |
   | "url"      | String        | The IRI of the media resource being  |
   |            |               | linked.  A media link MUST have a    |
   |            |               | "url" property.                      |
Snell, et al.                                                   [Page 9]
                             ActivityStreams                    May 2011
   | "width"    | JSON          | A hint to the consumer about the     |
   |            | [RFC4627] int | width, in pixels, of the media       |
   |            |               | resource identified by the "url"     |
   |            |               | property.  A media link MAY contain  |
   |            |               | a "width" property when the target   |
   |            |               | resource is a visual media item such |
   |            |               | as an image, video or embeddable     |
   |            |               | HTML page.                           |
   +------------+---------------+--------------------------------------+
3.4.  Object Serialization
   +------------------------+---------------+--------------------------+
   | Property               | Value         | Description              |
   +------------------------+---------------+--------------------------+
   | "attachments"          | JSON          | A collection of one or   |
   |                        | [RFC4627]     | more additional,         |
   |                        | Array of      | associated objects,      |
   |                        | Objects       | similar to the concept   |
   |                        | (Section 3.4) | of attached files in an  |
   |                        |               | email message.  An       |
   |                        |               | object MAY have an       |
   |                        |               | "attachments" property   |
   |                        |               | whose value is a JSON    |
   |                        |               | Array of Objects         |
   |                        |               | (Section 3.4).           |
   | "author"               | Object        | Describes the entity     |
   |                        | (Section 3.4) | that created or authored |
   |                        |               | the object.  An object   |
   |                        |               | MAY contain a single     |
   |                        |               | "author" property whose  |
   |                        |               | value is an Object       |
   |                        |               | (Section 3.4) of any     |
   |                        |               | type.  Note that the     |
   |                        |               | author field identifies  |
   |                        |               | the entity that created  |
   |                        |               | the object and does not  |
   |                        |               | necessarily identify the |
   |                        |               | entity that published    |
   |                        |               | the object.  For         |
   |                        |               | instance, it may be the  |
   |                        |               | case that an object      |
   |                        |               | created by one person is |
   |                        |               | posted and published to  |
   |                        |               | a system by an entirely  |
   |                        |               | different entity.        |
Snell, et al.                                                  [Page 10]
                             ActivityStreams                    May 2011
   | "content"              | JSON          | Natural-language         |
   |                        | [RFC4627]     | description of the       |
   |                        | String        | object encoded as a      |
   |                        |               | single JSON String       |
   |                        |               | containing HTML markup.  |
   |                        |               | Visual elements such as  |
   |                        |               | thumbnail images MAY be  |
   |                        |               | included.  An object MAY |
   |                        |               | contain a "content"      |
   |                        |               | property.                |
   | "displayName"          | JSON          | A natural-language,      |
   |                        | [RFC4627]     | human-readable and       |
   |                        | String        | plain-text name for the  |
   |                        |               | object.  HTML markup     |
   |                        |               | MUST NOT be included.    |
   |                        |               | An object MAY contain a  |
   |                        |               | "displayName" property.  |
   |                        |               | If the object does not   |
   |                        |               | specify an "objectType"  |
   |                        |               | property, the object     |
   |                        |               | SHOULD specify a         |
   |                        |               | "displayName".           |
   | "downstreamDuplicates" | JSON          | A JSON Array of one or   |
   |                        | [RFC4627]     | more absolute IRI's      |
   |                        | Array of      | [RFC3987] identifying    |
   |                        | Strings       | objects that duplicate   |
   |                        |               | this object's content.   |
   |                        |               | An object SHOULD contain |
   |                        |               | a "downstreamDuplicates" |
   |                        |               | property when there are  |
   |                        |               | known objects, possibly  |
   |                        |               | in a different system,   |
   |                        |               | that duplicate the       |
   |                        |               | content in this object.  |
   |                        |               | This MAY be used as a    |
   |                        |               | hint for consumers to    |
   |                        |               | use when resolving       |
   |                        |               | duplicates between       |
   |                        |               | objects received from    |
   |                        |               | different sources.       |
Snell, et al.                                                  [Page 11]
                             ActivityStreams                    May 2011
   | "id"                   | JSON          | Provides a permanent,    |
   |                        | [RFC4627]     | universally unique       |
   |                        | String        | identifier for the       |
   |                        |               | object in the form of an |
   |                        |               | absolute IRI [RFC3987].  |
   |                        |               | An object SHOULD contain |
   |                        |               | a single "id" property.  |
   |                        |               | If an object does not    |
   |                        |               | contain an "id"          |
   |                        |               | property, consumers MAY  |
   |                        |               | use the value of the     |
   |                        |               | "url" property as a      |
   |                        |               | less-reliable,           |
   |                        |               | non-unique identifier.   |
   | "image"                | Media Link    | Description of a         |
   |                        | (Section 3.3) | resource providing a     |
   |                        |               | visual representation of |
   |                        |               | the object, intended for |
   |                        |               | human consumption.  An   |
   |                        |               | object MAY contain an    |
   |                        |               | "image" property whose   |
   |                        |               | value is a Media Link    |
   |                        |               | (Section 3.3).           |
   | "objectType"           | JSON          | Identifies the type of   |
   |                        | [RFC4627]     | object.  An object MAY   |
   |                        | String        | contain an "objectType"  |
   |                        |               | property whose value is  |
   |                        |               | a JSON String that is    |
   |                        |               | non-empty and matches    |
   |                        |               | either the               |
   |                        |               | "isegment-nz-nc" or the  |
   |                        |               | "IRI" production in      |
   |                        |               | [RFC3987].  Note that    |
   |                        |               | the use of a relative    |
   |                        |               | reference other than a   |
   |                        |               | simple name is not       |
   |                        |               | allowed.  If no          |
   |                        |               | "objectType" property is |
   |                        |               | contained, the object    |
   |                        |               | has no specific type.    |
   | "published"            | [RFC3339]     | The date and time at     |
   |                        | date-time     | which the object was     |
   |                        |               | published.  An object    |
   |                        |               | MAY contain a            |
   |                        |               | "published" property.    |
Snell, et al.                                                  [Page 12]
                             ActivityStreams                    May 2011
   | "summary"              | JSON          | Natural-language         |
   |                        | [RFC4627]     | summarization of the     |
   |                        | String        | object encoded as a      |
   |                        |               | single JSON String       |
   |                        |               | containing HTML markup.  |
   |                        |               | Visual elements such as  |
   |                        |               | thumbnail images MAY be  |
   |                        |               | included.  An activity   |
   |                        |               | MAY contain a "summary"  |
   |                        |               | property.                |
   | "updated"              | [RFC3339]     | The date and time at     |
   |                        | date-time     | which a previously       |
   |                        |               | published object has     |
   |                        |               | been modified.  An       |
   |                        |               | Object MAY contain an    |
   |                        |               | "updated" property.      |
   | "upstreamDuplicates"   | JSON          | A JSON Array of one or   |
   |                        | [RFC4627]     | more absolute IRI's      |
   |                        | Array of      | [RFC3987] identifying    |
   |                        | Strings       | objects that duplicate   |
   |                        |               | this object's content.   |
   |                        |               | An object SHOULD contain |
   |                        |               | an "upstreamDuplicates"  |
   |                        |               | property when a          |
   |                        |               | publisher is knowingly   |
   |                        |               | duplicating with a new   |
   |                        |               | ID the content from      |
   |                        |               | another object.  This    |
   |                        |               | MAY be used as a hint    |
   |                        |               | for consumers to use     |
   |                        |               | when resolving           |
   |                        |               | duplicates between       |
   |                        |               | objects received from    |
   |                        |               | different sources.       |
   | "url"                  | JSON          | An IRI [RFC3987]         |
   |                        | [RFC4627]     | identifying a resource   |
   |                        | String        | providing an HTML        |
   |                        |               | representation of the    |
   |                        |               | object.  An object MAY   |
   |                        |               | contain a "url" property |
   +------------------------+---------------+--------------------------+
3.5.  Collection Serialization
   A "collection" is a generic list of Objects (Section 3.4) of any
   object type.  The "objectType" of each item in the collection MAY be
   omitted if the type of object can be established through context.
   The collection is used primarily as the root of an Activity Streams
Snell, et al.                                                  [Page 13]
                             ActivityStreams                    May 2011
   document as described in Section 4, but can be used as the value of
   extension properties in a variety of situations.
   +--------------+---------------+------------------------------------+
   | Property     | Value         | Description                        |
   +--------------+---------------+------------------------------------+
   | "totalItems" | JSON          | Non-negative integer specifying    |
   |              | [RFC4627]     | the total number of activities     |
   |              | Integer       | within the stream.  The Stream     |
   |              |               | serialization MAY contain a        |
   |              |               | "count" property.                  |
   | "items"      | JSON          | An array containing a listing of   |
   |              | [RFC4627]     | Objects (Section 3.4) of any       |
   |              | Array of      | object type.  If used in           |
   |              | Objects       | combination with the "url"         |
   |              | (Section 3.4) | property, the "items" array can be |
   |              |               | used to provide a subset of the    |
   |              |               | objects that may be found in the   |
   |              |               | resource identified by the "url".  |
   | "url"        | JSON          | An IRI [RFC3987] referencing a     |
   |              | [RFC4627]     | JSON document containing the full  |
   |              | String        | listing of objects in the          |
   |              |               | collection.                        |
   +--------------+---------------+------------------------------------+
   A valid Collection object serialization MUST contain at least the
   "url" or "items" properties.
4.  The Activity Stream JSON Document
   The above defined JSON serialization can be used to represent
   activities, objects and media links in any JSON context.  This
   section defines one particular use of the above formats to publish a
   JSON document representing a stream of activities.
   Publishers using this format MUST produce a valid JSON document whose
   root value is a Collection (Section 3.5).  This object MUST, at a
   minimum, include the "items" property whose objects MUST be
   Activities (Section 3.2).
5.  Comparison of Identifier Values
   The values of multiple Object's (Section 3.4) "id",
   "upstreamDuplicates", and "downstreamDuplicates" properties can be
   compared to determine if the objects represent duplicate content.
   Processors MUST compare these values on a character-by-character
Snell, et al.                                                  [Page 14]
                             ActivityStreams                    May 2011
   basis (in a case-sensitive fashion).  Comparison operations MUST be
   based solely on the IRI character strings and MUST NOT rely on
   dereferencing the IRIs or URIs mapped from them.
   As a result, two IRIs that resolve to the same resource but are not
   character-for-character identical will be considered different for
   the purposes of identifier comparison.
6.  The "post" Verb
   This specification defines one initial verb and defers to other
   specifications to define additional verb and object types as defined
   in Section 8.
   The "post" verb describes the act of authoring an object and then
   publishing it online.  The "actor" can be any entity; the "object"
   can be of any object type; and the "target", if specified, can be of
   any object type.  A "target", however, is not required.
6.1.  Implied "post" Activity
   Because the "post" verb is defined to include the act of publishing
   an object online, it is possible to assume an implied "post" activity
   for any object even if such an activity was never explicitly
   published or received.  The properties of this implied activity are
   as follows; any property not explicitly listed here is absent from
   the resulting activity unless the consumer is able to infer a value
   based on out-of-band information outside the scope of this
   specification:
   actor  The "actor" of the implied activity is unknown unless the
      consumer is able to infer an "actor" based on information outside
      the scope of this specification.  For example, the consumer may
      know via some out-of-band information that all of the objects in a
      particular document were posted by a particular user.
   object  The "object" of the implied activity is the object for which
      this implied activity is being constructed.
   verb  The "verb" of the implied activity is "post".
   published  The "published" of the implied activity is unknown unless
      the consumer is able to infer a time based on information outside
      the scope of this specification.
Snell, et al.                                                  [Page 15]
                             ActivityStreams                    May 2011
7.  The "activity" Object Type
   The "activity" object type indicates that an Object represents an
   Activity.  It can be used whenever an event involving another
   activity is described within an Activity Stream.  For instance, when
   one user "shares" or "reposts" an activity from another user.
   In addition to the core Object properties, an "activity" object MAY
   contain any combination of the properties defined for an Activity
   (Section 3.2).  The values of the object's "id" and "url" fields MUST
   match those of the activity being described.
   Note that an "activity" object MUST be processable as both an Object
   (Section 3.4) and an Activity (Section 3.2) and may contain fields
   from either construct, some of which may overlap or duplicate
   content.  When duplication of content may occur, an implementation
   SHOULD choose to use the fields from the Activity (Section 3.2)
   object.  For instance, in an "activity" object, the Activity's
   "title" property and the Object's "displayName" properties serve
   identical functions, therefore the use of the "title" property SHOULD
   be favored over the use of "displayName".
   The example below illustrates an activity in which one user, Jane, is
   sharing another activity performed by a second user, John.
     {
       "published": "2011-02-10T15:04:55Z",
       "actor": {
         "objectType" : "person",
         "id": "tag:example.org,2011:jane"
       },
       "verb": "share",
       "object" : {
         "objectType":"activity",
         "title": "John posted a photo",
         "id": "tag:example.org,2011:abc123",
         "verb": "post",
         "actor": {
           "objectType":"person",
           "id":"tag:example.org,2011:john"
         },
         "object": {
           "objectType":"photo",
           "url":"http://example.org/album/my_fluffy_cat.jpg"
         }
       }
     }
Snell, et al.                                                  [Page 16]
                             ActivityStreams                    May 2011
8.  Extension Object Types and Verbs
   Other specifications MAY define new object types and verbs for use
   with the concepts and serializations defined in this specification.
   To be clear, new extension properties can be added anywhere in the
   JSON serialization of an object or activity.
   When defining a new verb, the defining specification MUST provide a
   verb identifier for the new verb and MUST define the meaning of the
   verb in terms of the "actor", "object" and "target" properties of the
   activity, and MUST define whether a "target" is required and what it
   represents when present.
   When defining a new object type, the defining specification MUST
   provide an object type identifier for the new object type.  The
   definition of the new object type MAY define additional properties
   specific to that object type; if so, the specification SHOULD define
   how these additional properties are to be serialized within the JSON
   document, and the specification MAY define how these additional
   properties are to be represented in other serialization formats.  The
   definition of the new object type MAY impose additional meaning or
   constraint on the core object properties as long as the new
   definition remains compatible with the definition of the base
   component.
   Additional extension properties MAY also be defined for Activities
   (Section 3.2) and Media Links (Section 3.3).  The specification of
   these properties SHOULD define how they are to be serialized within
   the JSON document, and the specification MAY define how they are to
   be represented in other serialization formats.
   New properties SHOULD be defined such that the Object (Section 3.4),
   Activity (Section 3.2) or Media Link (Section 3.3) would remain
   useful if those properties are omitted or removed during processing,
   to enable graceful fallback by consumers that do not implement the
   extension properties or alternative representations that are unable
   to represent the extensions.
   Processors that encounter unfamiliar extension properties within an
   Object (Section 3.4), Activity (Section 3.2) or Media Link
   (Section 3.3) MUST NOT stop processing or signal an error and MUST
   continue processing the items as if the extension properties were not
   present.
9.  Other Representations
   This specification defines the primary representation for
Snell, et al.                                                  [Page 17]
                             ActivityStreams                    May 2011
   "activities", "objects" and "media links" in terms of the JSON
   serialization format.  Other specifications MAY define additional
   serializations of these items.  If the new serialization is
   compatible with the JSON data model, the new representation SHOULD be
   defined as a transformation of the raw JSON structures.
   Defining a new representation as a transformation from JSON will
   allow the new representation to automatically support additional
   properties added for new object types as described in Section 8.
   Otherwise the representation of these new properties must be defined
   on a case-by-case basis.
10.  Requirements for Re-publishers
   A Re-publisher is an agent which receives "activities" or "objects"
   and then transmits these items to other agents.
   When a Re-publisher transmits an "activity", the Re-publisher MUST
   preserve the original "verb", "published", "actor", "object" and
   "target" properties.  The Re-publisher MAY preserve the remaining
   properties, OR the Re-publisher MAY omit these properties entirely or
   replace these properties with locally-determined values.
   When a Re-publisher transmits an "object", the Re-publisher MUST
   maintain the full integrity of the "object", including any extension
   properties, and retain the original "id" value OR, if maintaining
   full fidelity is not possible the Re-publisher MUST assign this copy
   a new "id" and include the "id" of the original object as a value of
   the "upstreamDuplicates" property of the new copy.  In the latter
   case, a new "object" is created which is considered to be a duplicate
   of the original.
11.  Security Considerations
   Publishers or Consumers implementing Activity Streams as a stream of
   public data may also want to consider the potential for unsolicited
   commercial or malicious content and should take preventative measures
   to recognize such content and either identify it or not include it in
   their stream implementations.
   Publishers should take reasonable measures to make sure potentially
   malicious user input such as cross-site scripting attacks are not
   included in the Activity Streams data they publish.
   Consumers that re-emit ingested content to end-users MUST take
   reasonable measures if emitting ingested content to make sure
Snell, et al.                                                  [Page 18]
                             ActivityStreams                    May 2011
   potentially malicious ingested input is not re-emitted.
   Consumers that re-emit ingested content for crawling by search
   engines should take reasonable measures to limit any use of their
   site as a Search Engine Optimization loophole.  This may include
   converting un-trusted hyperlinks to text or including a
   rel="nofollow" attribute.
   Consumers should be aware of the potential for spoofing attacks where
   the attacker publishes activities or objects with falsified property
   values with the intent of injecting malicious content, hiding or
   corrupting legitimate content, or misleading users.
   Activity Streams are JSON Documents and are subject to the same
   security considerations described in [RFC4627].
   Activity Streams implementations handle URIs.  See Section 7 of
   [RFC3986].
   Activity Streams implementations handle IRIs.  See Section 8 of
   [RFC3987].
12.  IANA Considerations
   None.
13.  License
   As of [date], the following persons or entities have made this
   Specification available under the Open Web Foundation Agreement
   Version 1.0, which is available at
   .
      [List of persons or entities]
   You can review the signed copies of the Open Web Foundation Agreement
   Version 1.0 for this Specification at
   , which may also include
   additional parties to those listed above.
   Your use of this Specification may be subject to other third party
   rights.  THIS SPECIFICATION IS PROVIDED "AS IS."  The contributors
   expressly disclaim any warranties (express, implied, or otherwise),
   including implied warranties of merchantability, non-infringement,
   fitness for a particular purpose, or title, related to the
   Specification.  The entire risk as to implementing or otherwise using
Snell, et al.                                                  [Page 19]
                             ActivityStreams                    May 2011
   the Specification is assumed by the Specification implementer and
   user.  IN NO EVENT WILL ANY PARTY BE LIABLE TO ANY OTHER PARTY FOR
   LOST PROFITS OR ANY FORM OF INDIRECT, SPECIAL, INCIDENTAL, OR
   CONSEQUENTIAL DAMAGES OF ANY CHARACTER FROM ANY CAUSES OF ACTION OF
   ANY KIND WITH RESPECT TO THIS SPECIFICATION OR ITS GOVERNING
   AGREEMENT, WHETHER BASED ON BREACH OF CONTRACT, TORT (INCLUDING
   NEGLIGENCE), OR OTHERWISE, AND WHETHER OR NOT THE OTHER PARTY HAS
   BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
14.  Errata
   Changes and clarifications to this document are available at
   .
15.  Normative References
   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", March 1997.
   [RFC3339]  Klyne, G., "Date and Time on the Internet: Timestamps",
              July 2002.
   [RFC3986]  Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
              Resource Identifier (URI)", January 2005.
   [RFC3987]  Duerst, M. and M. Suignard, "Internationalized Resource
              Identifiers (IRIs)", January 2005.
   [RFC4627]  Crockford, D., "The application/json Media Type for
              JavaScript Object Notation (JSON)", July 2006.
Appendix A.  Acknowledgements
   The authors wish 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,
   Bob Aman, Bob Wyman, Brett Slatkin, Brian Walsh, Brynn Evans, Charlie
   Cauthen, Chris Chabot, Chris Toomey, Christian Crumlish, Dan
   Brickley, Dan Scott, Daniel Chapman, Danny Ayers, Dare Obasanjo,
   Darren Bounds, David Cramer, David Nelson, David Recordon, DeWitt
Snell, et al.                                                  [Page 20]
                             ActivityStreams                    May 2011
   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 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,
   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, 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, Zach Copley, and Zach
   Shepherd.
Authors' Addresses
   James M Snell
   IBM
   Martin Atkins
   SAY Media
   Will Norris
   Google
   Chris Messina
   Citizen Agency, Google
Snell, et al.                                                  [Page 21]
                             ActivityStreams                    May 2011
   Monica Wilkinson
   MySpace, Facebook, Socialcast
   Rob Dolin
   Microsoft
Snell, et al.                                                  [Page 22]