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]