Please check the errata for any errors or issues reported since publication.
The English version of this specification is the only normative version. Non-normative translations may also be available.
Copyright © 2018 W3C® (MIT, ERCIM, Keio, Beihang). W3C liability, trademark and permissive document license rules apply.
この仕様では、JSON形式を使って、潜在的なアクティビティと完了したアクティビティを表現するためのモデルについて詳しく説明する。これは、アクティビティの構造を詳細に記述し、特定の型のアクティビティを定義する語彙とともに使うを目的とする。
この節は、発行時点でのこの文書の状態を説明している。他の文書がこの文書に取って代わることがある。現在の W3C による発行物と この技術報告の最新版は https://www.w3.org/TR/ の W3C technical reports index にある。
この文書は Social Web Working Group によって 勧告として発行された。この文書に関するコメントを歓迎する。public-socialweb@w3.org(購読,アーカイブ)に送ってほしい。
Working Group の implementation report を参照のこと。
この文書は、W3Cメンバー、ソフトウェア開発者、およびその他のW3Cグループと関係者によってレビューされ、W3C勧告としてディレクターによって承認されています。これは安定した文書であり、参考資料として使用したり、他の文書から引用したりすることができる。この勧告を作成する上でのW3Cの役割は、仕様に注意を喚起し、その広範な展開を促進することである。これは、Webの機能性と相互運用性を向上させる。
この文書は、5 February 2004 W3C Patent Policyの下で活動しているグループによって作成された。W3Cは、グループの成果物に関連して作成された特許開示の公開リストを保守しており、そのページには特許を開示するための手順も含まれている。Essential Claim(s)を含むと信じる特許について実際の知識を有する者は、W3C Patent Policy第6条に従って情報を開示しなければならない。
この文書は、1 March 2017 W3C Process Documentに準拠する。
最も基本的な感覚では 「アクティビティ」(Activity) は行動の意味論的な 記述である。この仕様のゴールは、アクティビティについて、 リッチで人間に優しいけれども、機械で処理可能かつ拡張可能な形で メタデータを記述するのに十分な JSON ベースの文法を提供することである。これには、アクティビティに関する自然言語記述やビジュアル表現の構築、 様々な型のオブジェクトと行動可能な情報の関連付け、 アクティビティログの通信や記録、 可能性のある行動の他のアプリケーションへの委譲を含む。
この文書における次の各キーワード「しなければならない(MUST)」、 「してはならない(MUST NOT)」、 「要求されている(REQUIRED)」、 「することになる(SHALL)」、 「することはない(SHALL NOT)」、 「する必要がある(SHOULD)」、 「しないほうがよい(SHOULD NOT)」、 「推奨される(RECOMMENDED)」、 「してもよい(MAY)」、 「選択できる(OPTIONAL)」は、 [RFC2119] で述べられているように解釈されるべきものである。
この節は非規範的である。
Activity Streams 2.0 はソーシャルデータ文法に適している。これは [SWP] スイートの一部を形成する。
この節は非規範的である。
JSON Activity Streams 1.0 [AS1] 仕様は 2011 年 5 月に発行され、 完全なアクティビティの表現のための、基準となる拡張可能な文法を提供した。この仕様は、広範な実装、コミュニティのフィードバック、および他のさまざまなコミュニティからの関連する進行中の作業を通じて学んだ教訓を組み込むことによって、その初期の基盤の上に構築されている。
特に Activity Streams 1.0 から Activity Streams 2.0 への進化の動機となった 問題は次のようなものである:
displayName
, verb
, title
, objectType
という用語は 予約語として扱われるべきであり、 Activity Streams 2.0 文書の中で使われるべきではない(SHOULD NOT)。Activity Streams 2.0 文書でこれらに遭遇した場合、B. Deprecated Activity Streams 1.0 Syntaxに上げられているガイドラインに従って 処理されるべきである(SHOULD)。
この仕様は、[JSON-LD] 制限の部分集合に準拠するが JSON-LD 処理を要求しない Activity Vocabulary のための JSON [RFC7159] ベースの直列化を記述する。他の直列化形式も可能であるが、そのような選択肢はこの文書では議論しない。
直列化されるとき、値の無い属性は、 (a) 属性の値を null に設定するか、 (b) 属性宣言自体を省略するかで表現され、 これは発行者の選択である。これらの表現は意味論的に等価である。属性が配列を持つ場合、その配列に値が無い場合は、 属性全体を省略するか値に null を設定することで表現しなければならない(MUST)。省略されたか明示的な null 値の適切な解釈は、 値が設定されなかったか、与えられた値が空または nil であったかということである。
Activity Streams 文書 とは、ルート値が (Collection を含む)任意の型の Activity Streams Object で、 MIME メディアタイプが "application/activity+json
" である JSON 文書である。
Activity Streams 2.0 文書は UTF-8 文字エンコーディングを使って 直列化しなければならない(MUST)。
Activity Streams 2.0 文書の直列化された JSON 形式は、 少なくとも、ここ で提供されている規定の JSON-LD @context 定義を使って、 標準の JSON-LD 1.0 Processing Algorithms と API [JSON-LD-API] Compaction Algorithm で生成されるものと矛盾しないものでなければならない(MUST)。実装は提供された @context を追加の @context で増加させてもよい(MAY)が、 規範的なコンテキストを上書きしたり変更してはならない (MUST NOT)。実装はまた、標準の JSON-LD アルゴリズムを使う消費者実装から 無視されるであろうことを理解した上で、JSON-LD @context に定義されていない 追加の属性と値を使ってもよい(MAY)。Activity Streams 2.0 文書の中での拡張の扱いに関するさらなる情報については Extensibility 節を参照のこと。
JSON-LD は processing context を 定義するために特別な @context
属性を使う。@context
属性の値は [JSON-LD] 仕様で定義されている。Activity Streams 2.0 文書を生成する実装は、 URL "https://www.w3.org/ns/activitystreams
" を使って 標準の Activity Streams 2.0 JSON-LD @context 定義 への参照を含む値を @context
属性に 指定するべきである(SHOULD)。実装は代わりに代替URL "http://www.w3.org/ns/activitystreams
" を 使うことができる(MAY)。これは文字列、オブジェクト、配列を使って行える。
JSON-LD を有効にした Activity Streams 2.0 実装が "application/activity+json
" MIME メディアタイプを使って 識別された JSON ドキュメントに遭遇し、 そのドキュメントに標準的な Activity Streams 2.0 JSON-LD @context definition を参照する値を持つ @context
属性がない場合、 実装はそれでも標準的な @context 定義があるものと仮定しなければならない(MUST)。
この仕様は IRI [RFC3987] を 使っている。全ての URI [RFC3986] は IRI でもあるので、IRI という名前が付いているところでは URL を使うことが出来る。特別に考慮することが二つある: (1) URI ではない IRI が逆参照として与えられた場合、 [RFC3987] の 3.1 節のステップを使って URI にマッピングしなければならず(MUST)、 (2) IRI が "id" 値として提供された場合、そのようにマッピングしてはならない(MUST NOT)。
相対 IRI (及び URL) 参照は Activity Streams 2.0 文書の中で 使うべきではない(SHOULD NOT); 多くの JSON パーサ実装は、相対参照を適切に解決するために必要な 基底コンテキストを確実に保存する能力を持たないからである。
全ての日付と時刻の属性は [RFC3339] の "date-time" 生成に従わなければならない(MUST); 但し例外として秒は省略しても良い(MAY)。日付と時刻を分けるために大文字の "T" を使わなければならず(MUST)、 タイムゾーンオフセット値がない場合は大文字の "Z" を 使わなければならない(MUST)。
これは以下の [ABNF] 文法記述を使って指定される。"time-hour", "time-minute", "time-second", "time-secfrac", "time-offset", "full-date" 構造は [RFC3339] で定義される。
as2-partial-time = time-hour ":" time-minute [":" time-second]
[time-secfrac]
as2-full-time = as2-partial-time time-offset
as2-date-time = full-date "T" as2-full-time
`time-offset` 要素はタイムゾーンとは関係なく、 `time-offset` 要素を含む時刻はタイムスタンプとして上手く動作するが、 追加の情報と処理なしにこれとローカルの「壁時計時間」とを確実に変換することは できないということに注意することは重要である。
この節は非規範的である。
次に、様々な詳細度を持つ三つのアクティビティの例を挙げる。
それぞれの例は、この仕様で定義されてい標準 JSON 直列化を使って示している。
Activity Vocabulary は Activity Streams 2.0 のためのコアオブジェクトと属性を形式的に定義している。
語彙によって定義されたオブジェクト型は、八つのコア型と、 多くのソーシャル Web アプリケーションで共通に使われる Activity 型と Object 型の拡張集合に分けられる。コア型は以下のものである:
OrderedCollection
,CollectionPage
,OrderedCollectionPage
Activity Streams 2.0 で定義されている全ての JSON オブジェクトは、 Object
か Link
である。Activity Vocabulary に定義されているそれ以外の型は、全ての拡張型を含めて、 これら二つの基底型の派生である。
Activity Streams 2.0 文書の中の JSON オブジェクトは、次のどちらかの場合に
Link
である:(a) 値が "Link
" である type
属性を持つオブジェクト、 または (b) type
属性の値が、Link の拡張として定義されている型 (例えば、 Mention を参照のこと); さもなければこの JSON オブジェクトは Object
の実体または 拡張である。
Object
は Activity Streams vocabulary の基本基底クラスである。
(id
属性を使った絶対 IRI で記述された)グローバル修飾子と(type
属性を使って記述された)「オブジェクト型」に加えて、 Object
型の全ての実体は、 Activity Vocabulary で規定的に定義された属性の一般的な集合を共有する。これは次のものである:
attachment
| attributedTo
| audience
| content
| context
| contentMap
| name
| nameMap
| endTime
| generator
| icon
| image
| inReplyTo
| location
| preview
| published
| replies
| startTime
| summary
| summaryMap
| tag
| updated
| url
| to
| bto
| cc
| bcc
| mediaType
| duration
(id
と type
を含めて) 全ての属性は オプションである。
Activity Vocabulary は 多くのソーシャル Web アプリケーションで一般的である、幅広い Object
型を定義する。この仕様は、これらのアクティビティのほとんどについて特定の属性を 意味論的に定義するには至っていない。外部語彙は Activity Vocabulary で触れられていない 追加の詳細を記述するために使われる。
さらに、実装はActivity Vocabularyによって定義されたものを超えた新しい型ののObjectを自由に導入することができるが、アプリケーションが他の実装によって認識されない拡張型に依存しすぎると、相互運用性の問題が発生する可能性がある。既存のObject型と過度に重なったり、重複したりしないように注意するべきである。
実装がコア語彙型と重複する拡張型を使用する場合、実装はコア語彙型も指定しなければならない(MUST)。例えば、いくつかの語彙(例えば、The Good Relations Vocabulary)は、位置を記述するための独自の型を定義する。例えば、http://purl.org/goodrelations/v1#Location
をオブジェクト型として使用したい実装は、以下に示すように、そのオブジェクトをPlace
としても識別しなければならない。
外部語彙で定義されている属性は、 Activity Vocabulary で定義されている属性と重複および複製できる。そのような重なりが存在する場所では、一貫した相互運用性のために、 Activity Vocabulary て定義されている属性の仕様を 優先しなければならない(MUST)。
Activity Streams 消費者はしばしば、 例えば Web ブラウザやコンソールインターフェースに表示するために、 Activity Streams オブジェクトのテキスト表現を必要とする。
name
属性は 作成者または他のユーザーによる入力から生成されるべきである(SHOULD)。
summary
属性は、おそらく発行者によって自動的に生成される、 フォールバックテキスト表現として使われるべきである(SHOULD)。name
属性がない場合、 summary
属性はマークアップを含むべきではなく(SHOULD NOT)、 オブジェクトの妥当なテキスト表現として使われるのに 十分短いものであるべきである(SHOULD)。
name
と summary
はなくてもよく(MAY)、 エンドユーザーの現在の言語での明示的な値がなくてもよく(MAY)、 現在の言語コンテキストでの Object のテキスト表現として使うのに 適切でないぐらい長くてもよい(MAY)。消費者実装はこれらの場合の Object のテキスト表現に対する フォールバック戦略を持つべきである(SHOULD)。
Link
は、修飾された、他のリソースへの間接参照であり、 [RFC5988] で設定された Links の概念モデルと深く関係している。Link オブジェクトの属性は参照されたリソースの属性ではなく、 表示するエージェントがそのリソースをどのように使うかを理解するための ヒントとして提供される。例えば、height
と width
は参照されたイメージの 実際のピクセル数ではなく、参照されたイメージが要求した 表示サイズかもしれない。
Link のターゲット URI は必須の href
属性を使って表現される。さらに、全ての Link
実体は、 Activity Vocabulary で規準的に定義されている、次のオプションの属性の一般的な集合を共有する: id
| name
| hreflang
| mediaType
| rel
| height
| width
例えば、すべてのObjectには、含まれるオブジェクトのグラフィカル表現を表すimage
属性を含めることができる。この属性は通常、ユーザに表示可能なイメージ(JPEG、GIF、PNGなど)リソースへのURLを提供するために使われる。任意のオブジェクトは、複数のそのような視覚的表現、例えば、複数のスクリーンショット、または異なる解像度での同じ画像を保持することができる。Activity Streams 2.0には、このような参照を記述する方法が基本的に3種類ある。
正式には、前者の例はイメージリソースとの非修飾直接関係を確立し、後者は修飾された間接関係を作成して、関係に関する追加の属性を指定できるようにする。
このような配列に含まれる個々の項目は互いに独立しており、順序に意味はない。
RFC 5988では、すべての"Link"には、リンクのコンテキスト目的を記述する「リンク関係」があると定義される。Link内では、rel
属性がリンク関係の値を提供する。rel
属性が指定されていない場合、リンク関係は未指定と見なされる。任意のLinkは、複数のリンク関係値を持つことができる。JSON直列化では、単一のリンク関係が単一のJSON文字列として表現される。複数のリンク関係は、JSON文字列の配列として表現される。
リンク関係のスコープは、Linkが直接の子であるオブジェクトである。
次の例では、二つの別々の参照が提供される。第1のリンク関係は未指定であり、第2のリンク関係は"thumbnail
"である。
[HTML5]仕様は、[RFC5988]定義とわずかに異なる「リンク関係」の独自の代替定義を提供していることに注意すべきである。HTML5の定義では、「スペース」U+0020、「タブ」(U+0009)、「LF」(U+000A)、「FF」(U+000C)、「CR」(U+000D)、「,」(U+002C)文字を含まない任意の文字列を有効なリンク関係として使える。相互運用性を促進するために、Activity Streams 2.0実装は、[RFC5988]と[HTML5]の両方の定義に関して構文的に有効なリンク関係のみを使わなければならない。実装は、登録されていないリンク関係値を使っても良い。(MAY)
Actor オブジェクトは、 Activity を実行する能力を持つ実体を表現する、基底 Object 型の特化である。Activity Vocabulary は Actor の 5 種類の特定の型の規定定義を提供する: Application
| Group
| Organization
| Person
| Service
.
この仕様書は意図的に Actor を最も一般的な形でのみ定義し、 それぞれについて意味論的に特定の属性を定義することまではしない。全ての Actor オブジェクトは Object
の特化であり、 全ての Object に共通の全てのコア属性を継承する。外部語彙は Activity Vocabulary で触れられていない 追加の詳細を記述するために使われる。Person, Group, Organization 実体の 追加メタデータとして提供するために VCard [[vcard-rdf]] が使われるべきである(SHOULD)。
実装は、Activity Vocabularyによって定義されたものを超えて新しいタイプのアクターを自由に導入することができるが、アプリケーションが他の実装によって認識されない拡張タイプに過度に依存する場合、相互運用性の問題が生じる可能性がある。既存のアクター型と過度に重なったり、複製したりしないように注意すること。
実装がコア語彙型と重複する拡張型を使用する場合、実装はコア語彙型も指定しなければならない(MUST)。例えば、いくつかの語彙(例えばVCard)は、人を記述するために独自の型を定義する。例えば、vcard:Individual
をアクターとして使いたい実装は、前の例で説明したように、そのアクターをPerson
としても識別しなければならない。
Activity オブジェクトは、既に起きた、今起きている途中、 将来起きるかもしれないアクションに関する情報を提供する、 基底 Object 型の特化である。
全ての Object の実体で対応している一般的な属性に加えて、 Activity
オブジェクトは Vocabulary で 定義されている次の追加の属性に対応している: actor
| object
| target
| origin
| result
| instrument
type
属性は Activity Statement が表現するアクションの型を 識別するために使われる。
Activity Vocabulary は 多くのソーシャル Web アプリケーションで一般的である、少数の Activity
型を定義する。この仕様は、これらのアクティビティのほとんどについて特定の属性を 意味論的に定義するには至っていない。外部語彙は Activity Vocabulary で触れられていない 追加の詳細を記述するために使われる。
実装は、Activity Vocabularyによって定義されたものを超えた新しい型のActivityを自由に導入することができるが、アプリケーションが他の実装によって認識されない拡張型に過度に依存する場合、相互運用性の問題が生じる可能性がある。既存のアクティビティ型と過度に重なったり、複製したりしないように注意すること。
実装がコア語彙型と重複する拡張型を使用する場合、実装はコア語彙型も指定しなければならない(MUST)。For instance, some vocabularies (e.g.Schema.org) define their own types for describing actions. An implementation that wishes, for example, to use http://schema.org/LikeAction
as an Activity MUST also identify that Object as being a
Implementations are free to use Activity objects in both passive and imperative operations. In the passive sense, the Activity is used to record that an activity has or is occurring. In the imperative sense, the Activity can be used as a form of command, instructing an application to modify state in some manner consistent with the action being described. However, because this specification does not define a normative processing model that constrains how applications make use of the format, the distinction about whether an Activity statement is to be interpreted as a passive notification or as an imperative command can vary across implementations.
IntransitiveActivity オブジェクトは、自動的なアクションを表現する Activity 型の特化である。IntransitiveActivity オブジェクトは object
特性を持たない。
Collection
オブジェクトは、 他の Object や Link の コンテナとして動作する基底 Object
の特化である。
Collection
型は、 Objects
から全て継承された 基底属性に加えて、追加の属性を含む: items | totalItems | first | last | current
Collection
の中のアイテムは順序が ある場合とない場合がある。OrderedCollection
型は、 アイテムに常に順序がある Collection であることを識別するために使っても良い (MAY)。JSON シリアル化において、Collection の順序のないアイテムは items
属性を使って表現される一方、 順序のあるアイテムは orderedItems
属性を使って表現される。
Collection は大量のアイテムを含むことができる。しばしば、 items
(または orderedItems
) 属性だけを使って Collection に含まれている全てのアイテムをシリアル化するのは 実装上非実用的になる。このような場合、Collection に含まれているアイテムは 相異なる部分集合、つまり「ページ」に分割できる。ページは CollectionPage
型を使って識別される。
型は基底 CollectionPage
Collection
型から拡張され、 その全ての属性を継承する。以下の追加の属性も定義されている: partOf | next | prev |
partOf
属性は、 CollectionPage
に含まれているアイテムが属する Collection
を識別する。
first
, next
, prev
, last
, current
属性は、 親コレクションからのアイテムの追加の部分集合を含む、他の
実体を参照するために使われる。
CollectionPage
Collection
オブジェクトと同様、 CollectionPage
の中のアイテムは順序ありと順序なしの場合がある。OrderedCollectionPage
型は アイテムが順序ありのもののページを識別するために使われる。
型は OrderedCollectionPage
と CollectionPage
の両方を拡張する。これらから継承した属性に加えて、 OrderedCollection
OrderedCollectionPage
は追加の startIndex
属性を持つ; この値は、このページが示す OrderedCollection
の中で、ページに含まれている最初のアイテムの相対インデックス位置を示す。
順序付きでも順序なしでも、 Collection
のページは 並びに配置される (シングルリンクリストかダブルリンクリスト)。first
属性はこの並びの最初のページを識別するために使われ、 一方 last
属性は並びの最後のページを識別するのに使われる。prev
と next
属性はそれぞれ直前と直後のページを 識別する。
current
属性は、Collection
の中で、 最も最近に作成または更新されたアイテムの部分集合を含むページを識別する。
first
, last
, next
, prev
, current
属性は 単一の
、 または CollectionPage
を含む別のリソースを参照する CollectionPage
Link
である。
OrderedCollection
のページングはトリッキーな場合がある; 実装がページの並びを何らかの推測可能な順序で処理することが 保証されないからである。論理的なコレクションのメンバアイテムを適切で完全な順序に再構築したい実装は、 並びの最初(または最後)のページに移動して、それから全てのページを処理するまで next
(または prev
) リンクを再帰的に 辿るべきである。ある OrderedCollection
のページは OrderedCollectionPage
の実体であるべきである(SHOULD)。OrderedCollection
のページが OrderedCollectionPage
の実体でない場合、 消費者はアイテムの適切な順序を再構築するために信頼性のある手段はない。
Vocabulary で定義されている属性のいくつかは自然言語値を持つと定義されている。これは、複数の言語を使った人間可読の文字列である。JSON シリアル化の中で、これらは以下のどちらかで表現される: (1) 単一の JSON 文字列、または (2) 同じ文字列値の地域化された等価な翻訳への整形された [BCP47] Language-Tags にマッピングされたJSONオブジェクト。シリアル化された JSON において、これら二つの型式は単純な属性命名規則によって 区別される; 例えば: "name
" は name
属性の JSON 文字列形式を識別し、 一方 "nameMap
" はオブジェクト形式を表現する。
オブジェクト形式の全てのキーは整形された [BCP47] Language-Tag でなければならない(MUST)。関連付けられた値は文字列でなければならない(MUST)。
Activity Vocabulary は 自然言語値を使う三つの属性を定義している: name
, summary
, content
. それぞれ、JSON シリアル化では " name
", "summary
", and "content
" は JSON 文字列形式を表現する; "nameMap
", "summaryMap
", "contentMap
" は オブジェクト形式を表現する。
特別な言語タグ "und"
は、 言語が不明または未定義の値を明示的に識別するために オブジェクト形式の中で使用できる。
Activity Streams 2.0 文書を生成または処理するのに [JSON-LD] 機構を使う場合、 デフォルト言語を識別するために @context
の中で @language
属性を使っても良い(MAY)。この機構は、JSON-LD を使って Activity Streams 2.0 文書を処理することを 選ばなかった実装によっては理解されないかもしれない。
Activity Streams 2.0文書内の自然言語値は、双方向テキストを含んでもよい(MAY)。Activity Streams 2.0 文書のデフォルト基本方向は左から右である。個々の自然言語値の基本方向は後述のようにして修正してもよい(MAY)。
When specifying bidirectional text for a natural language value, and the base direction of the text cannot be correctly identified by the first strong directional character of that text, publishers SHOULD explicitly identify the default direction either by prefixing the value with an appropriate Unicode bidirectional control character, or by using HTML directional markup where permitted.
Consumers of Activity Streams 2.0 documents that contain bidirectional text SHOULD identify the base direction of any given natural language value by either scanning the text for the first strong directional character not contained within a markup tag; or by utilizing directional markup where provided. Once the base direction has been identified, consumers MUST determine the appropriate rendering and display of natural language values, according to the Unicode Bidirectional Algorithm [BIDI]. This may necessitate wrapping additional control characters or markup around the string prior to display, in order to apply the base direction.
属性 | 値 | 方向 | 手法 |
---|---|---|---|
name |
"פעילות הבינאום, W3C" |
Right-to-Left | First strong directional character |
name |
"The document was titled, '\u2067פעילות הבינאום, W3C\u2069'" |
Left-to-Right | First strong directional character |
name |
"\u200FHTML היא שפת סימון" |
Right-to-Left | Bidi Control Character |
name |
"\u200E'سلام' is hello in Persian." |
Left-to-Right | Bidi Control Character |
summary |
<p dir=\"rtl\">HTML היא שפת סימון>/p> |
Right-to-Left | HTML Markup |
summary |
<p>פעילות הבינאום, W3C</p> |
Right-to-Left | First strong directional character (ignoring markup) |
summary |
<p title="سلام">Hello</p> |
Left-to-Right | First strong directional character (ignoring markup) |
Activity Streams 2.0 発行者は、分かっている場合には、map 属性か デフォルト言語タグを使って、自然言語属性の言語を明示的に マークアップするべきである(SHOULD)。
この仕様のすべての例が、自然言語属性の言語を明示的に示しているわけではない。これは意図的である。著者とワーキンググループは、実装者が新しい文書のテンプレートとして明示的な言語マークアップを持つ文書から例をカットアンドペーストし、その結果、不正確な言語マークアップが含まれることになることを避けたいと望んだ。
Activity Streams 2.0では、「拡張」は、Activity Vocabularyによって定義されていない任意の属性、アクティビティ、アクター、またはオブジェクト型である。未知の拡張に遭遇した消費実装は、処理を停止したりエラーを通知したりしてはならず(MUST NOT)、それらの属性が存在しないかのようにアイテムの処理を継続しなければならない(MUST)。拡張の対応は実装によって異なる可能性があり、拡張の標準的な処理モデルは定義されていないことに注意すること。したがって、拡張の使用に過度に依存する実装は、他の実装との相互運用性の低下を経験する可能性がある。
拡張については、拡張を定義し、明確にするための主要な機構として[JSON-LD]が使われる。拡張を完全にサポートしたい実装は、[JSON-LD]機構を使用すべきである。
いくつかの一般的な拡張機能は、Activity Streams 2.0名前空間文書に含まれており、https://www.w3.org/ns/activitystreams#extensionsで確認できる。Social Web Incubator Community Groupは、Activity Streams Extensionsのwikiページを保守している。
JSON-LD Processing Algorithms[JSON-LD-API]は、現在定義されているように、JSON-LD @contextで定義されていない属性を暗黙に無視することに注意することは重要である。拡張属性を含むActivity Streams 2.0文書を公開する実装は、すべての拡張に対して@context定義を提供すべきである(SHOULD)。
また、JSON-LD文書内では使用できない、妥当なJSON構造体があることに注意することも重要である。例として、JSON-LDは、例えば一般的なGeoJSON仕様で使用されている「配列の配列」を禁止している。実装はActivity Streams 2.0文書内の拡張としてこのような構造体を自由に使用できるが、標準のJSON-LD処理アルゴリズムを使用する消費者は、JSON-LDアルゴリズムを適用する前に、このような拡張を無視するか、互換性のある別の構造体にマッピングする必要がある。例えば、単純なGeoJSONポイントはPlace
オブジェクトにマップすることができ、より複雑なジオメトリはGeoSparqlの"Well-Known Text"表現に変換できる。
JSON-LD文法は、"Compact URI"に対応している。"Compact URI"は、直列化を単純化するために定義された接頭辞を使用するURIの代替エンコーディングである。例えば、URIhttp://example.org/term
は、ex:
接頭辞にhttp://example.org/
の値を割り当てることで、ex:term
として表すことができる。
JSON-LD内では、Compact URI接頭辞はJSON-LD@context
定義内で定義される。例:
この例では、属性名term
と値ex:Foo
の両方がCompact URIである。属性名term
がhttp://example.org/term
に展開され、値ex:Foo
がhttp://example.org/Foo
に展開される。
JSON-LDでは、valuesのCompact URI展開は@context
定義の中で"type": "id"
として明示的に定義された属性に適用される。特に、Compact URIはIRI(またはURI)値が想定されるどこでも使われる可能性がある。
拡張に完全に対応することを望むActivity Streams 2.0実装は、JSON-LD仕様で定義されているCompact URI展開に対応しなければならない(MUST)。このような展開は、JSON-LDの@contextで@id
型として明示的に定義されている全ての属性名および属性値に適用される。
Compact URI形式に過度に依存することは、実装間の曖昧さと相互運用性の問題を引き起こす可能性がある。従って、Compact URIの使用は、属性名とtype
属性の値以外の全ての場合で避けるべきである(SHOULD)。
パースにJSON-LD機構を使い、それから拡張属性を含むActivity Streams 2.0文書を再直列化する実装は、元の文書にある拡張属性が保存され、適切に直列化されるように十分な注意をするべきである(SHOULD)。
例えば次の、架空のfoo
とbar
拡張属性を含む単純なActivity Streamを考える。foo
拡張はJSON-LD @context
の中で定義されているが、bar
拡張属性は定義されていない。
An implementation that receives this Note object can choose to parse the object as an ordinary JSON object or it can use the standard JSON-LD Expansion algorithm.
If the implementation chooses to parse the object as ordinary JSON and then reserializes the object (e.g. for storage or redistribution), then it would simply preserve the values of the @context
, foo
and bar
properties as they are and include those in the reserialized output.
However, if the implementation chooses to use the JSON-LD expansion algorithm, the @context
will be removed from the expanded result and the bar
property will be mapped to the "blank node" _:bar
. If this document is then reserialized using the normative Activity Streams 2.0 context, the JSON-LD compacted form would be:
これはオリジナルに近いが、foo
属性に完全に展開されたURIラベルを使用するのは同一ではない。To ensure that the reserialized object is serialized correctly, implementations that perform JSON-LD expansion of received documents SHOULD preserve the original @context
used when performing the JSON-LD expansion, then reuse that when reserializing the object into the JSON-LD compacted form.
Activity Streams 2.0 documents can (and likely will) contain potentially sensitive personal information such as identity, contact information, physical location, physical characteristics, and so forth. Furthermore, Activity data, in general, can be analyzed to generate profiles of the behavior of individual or groups of Actors.
Implementations that produce or consume Activity Streams 2.0 documents MUST take steps to openly and publicly document and communicate to all potential users: (a) the kinds of potentially sensitive personal information published, consumed or collected by the implementation, (b) the reasons for publishing, consuming and collecting that information, (c) the manner in which that information is being used, (d) the identity of any other party with whom that information is being shared, and (e) the reason the information is being shared with other parties.
Implementations that publish Activity Streams 2.0 documents SHOULD assume a default position of limiting both the kind and amount of sensitive personal information included in the document unless users have "opted in" to sharing additional detail.
Implementations that consume Activity Streams 2.0 documents SHOULD NOT, by default, store or share sensitive personal information included within consumed documents unless users have "opted in" to allowing that information to be stored or shared.
In this context, "opting in" does not necessarily require explicit action on the part of the user. If, for instance, the use of certain sensitive personal information is clearly implicit in the use of an implementation (a location tracking service, for example), then any use of that implementation can be considered an implicit acknowledgement that the sensitive personal information will be used and shared so long as the documentation guidelines listed above are followed.
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 implementations.
Publishers should take reasonable measures to ensure 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 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 untrusted 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はJSON文書であり、[RFC7159]で説明されているのと同じセキュリティ上の考慮事項に従う。
Activity Streamsの実装はURIを扱う。[RFC3986]の7章を参照のこと。
Activity Streamsの実装はIRIを扱う。[RFC3987]の8章を参照のこと。
application/activity+json
メディア型
この仕様は、Activity Streams 2.0 型式に準拠した文書を識別するために application/activity+json
MIME Media Type を 登録する。
Type name: | application |
Subtype name: | activity+json |
Required parameters: | None |
Optional parameters: | profile: application/activity+json メディアタイプの profile 引数は 一つ以上のプロファイル URI を指定できる。これらのプロファイル URI は [RFC6906] で定義された意味論を持つ。"profile" メディアタイプ引数はクォートされなければならない(MUST)。これは空白で区切られた URI (プロファイル URI) の空でないリストである。profile-param = "profile=" profile-value
profile-value = <"> profile-URI 0*( 1*SP profile-URI ) <">
profile-URI = URI 上記の文法での "URI" は [RFC3986] の Section 3 で定義される "URI" を参照する。 |
Encoding considerations: | "application/activity+json "メディア型を使用するリソースは、"application/json "メディア型のすべての要件に準拠する必要があるため、[RFC7159]の11章で指定されているのと同じエンコーディングの考慮事項に従う。 |
Security considerations: | この仕様で定義している通り。 |
Contact: | James M Snell <jasnell@gmail.com> |
Activity Streams 2.0 型式は JSON-LD 仕様を使う一方、 この特定のメディアタイプの使用を正当化する Activity Streams 2.0 実装のためには、多くの制限と追加の要求があることに 注意すること。
Activity Streams 2.0 は JSON-LD の制限されたプロファイルと考えることも 出来るため、実装は `application/ld+json; profile="https://www.w3.org/ns/activitystreams"` メディアタイプを `application/activity+json` と等価なものとして 扱うべきである(SHOULD)。
この仕様における、非規範的とされている節および、全ての図、例、注記は非規範的である。この仕様におけるその他の全ては規範的である。
適合文書とは、文書のすべての適合基準に適合する文書である。For readability, some of these conformance requirements are phrased as conformance requirements on publishers; such requirements are implicitly requirements on documents: by definition, all documents are assumed to have a publisher.
Conforming documents must not include deprecated or obsolete syntax from Activity Streams 1.0. Conforming documents must include properties and types from the Activity Vocabulary. Conforming documents that use other vocabularies must also include equivalent Activity Vocabulary properties and types as illustrated in Section C. Conforming documents must not use features of JSON-LD or other serialization features disallowed in this specification, as in Section 2. Conforming documents that include types or properties beyond those defined in the Activity Streams 2.0 Vocabulary must use the extensibility features defined in section 5.
文書の例の非網羅的なリストには、以下が含まれる:
Conforming implementations are software that publish, store, analyze, consume or otherwise process conforming documents. The two main kinds of implementations are publishers and consumers.
Conforming publishers are implementations that create and publish conforming documents. Conforming publishers must make conforming documents available according to the serialization requirements of section 2. Conforming publishers must consider privacy as described in section 6. Conforming publishers must consider security as described in section 7.
発行者の例の非網羅的なリストには、以下が含まれる:
Conforming consumers are implementations that read and analyze conforming documents. Conforming consumers must tolerate deprecated or obsolete properties or types from Activity Streams 1.0. Conforming consumers must ignore properties or types that are not applicable to their application domain.
Conforming consumers may re-publish conforming documents in other other data formats. Conforming consumers may present conforming documents to a user on screen, in print, in audio format, or using other presentation mechanisms. Conforming consumers must faithfully translate the information represented in conforming documents into these other formats or media. Conforming consumers that re-publish conforming documents must consider privacy as described in section 6 and security as described in section 7.
消費者の例の非網羅的なリストには、以下が含まれる:
Activity Streams 2.0仕様は、W3CSocial Web Working Groupの成果物である。編集者は、現在の仕様を形成するのに役立った会話、問題、テストに貢献したすべてのワーキンググループメンバーに感謝する。
編集者はまた、W3CSocial Web Working Groupへの貢献として仕様が取り上げられる前にActivity Streamsに貢献したすべての人々に感謝したい。Activity Streams 1.0はコミュニティ主導の活動であり、次の方々を含む(しかしそれに限定されない)コミュニティからの初期の貢献がなければ、仕様は現在のような形にはならなかった: 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 Messina, Chris Toomey, Christian Crumlish, Dan Brickley, Dan Scott, Daniel Chapman, Danny Ayers, Dare Obasanjo, Darren Bounds, David Cramer, David Nelson, David Recordon, DeWitt Clinton, Douglas Pearce, Ed Summers, Elias Bizannes, Elisabeth Norris, Eric Marcoullier, Eric Woods, Evan Prodromou, Gee-Hsien Chuang, Greg Biggers, Gregory Foster, Henry Saputra, Hillary Madsen, Howard Liptzin, Hung Tran, Ian Kennedy, Ian Mulvany, Ivan Pulleyn, Jacob Kim, James Falkner, James Pike, James Walker, Jason Kahn, Jason Kantz, Jeff Kunins, Jeff Martin, Jian Lin, Johannes Ernst, John Panzer, Jon Lebkowsky, Jon Paul Davies, Jonathan Coffman, Jonathan Dugan, Joseph Boyle, Joseph Holsten, Joseph Smarr, Josh Brewer, Jud Valeski, Julien Chaumond, Julien Genestoux, Jyri Engestroem, Kaliya Hamlin, Kevin Marks, Laurent Eschenauer, Laurie Voss, Leah Culver, Libby Miller, Manu Mukerji, Mark Weitzel, Marko Degenkolb, Marshall Kirkpatrick, Martin Atkins, Martin Svensson, Marty Alchin, Mary Hoder, Matt Leventi, Matt Wilkinson, Matthias Mueller-Prove, Max Engel, Max Wegmueller, Melvin Carvalho, Michael Buckbee, Michael Chan, Michael Richardson, Michael Sullivan, Mike Macgirvin, Mislav Marohnić, Mo Jangda, Monica Wilkinson, Nate Benes, NeilFred Picciotto, Nick Howard, Nick Lothian, Nissan Dookeran, Nitya Narasimhan, Pablo Martin, Padraic Brady, Pat Cappelaere, Patrick Aljord, Peter Ferne, Peter Reiser, Peter Saint-Andre, Phil Wolff, Philip (flip) Kromer, Richard Cunningham, Richard Zhao, Rick Severson, Robert Hall, Robert Langbert, Robert Dolin, Robin Cover, Ryan Boyd, Sam Sethi, Scott Raymond, Scott Seely, Simon Grant, Simon Wistow, Stephen Garcia, Stephen Sisk, Stephen Paul Weber, Steve Ivy, Steve Midgley, Steven Livingstone-Perez, Sylvain Carle, Sylvain Hellegouarch, Tantek Çelik, Tatu Saloranta, Tim Moore, Timothy Young, Todd Barnard, Tosh Meston, Tyler Gillies, Will Norris, Zach Copley, Laurent-Walter Goix, Matthew Marum, Andy Smith, Zach Shepherd。
この節は非規範的である。
注意: この付録は非規範的であるが、MUSTのような規範的用語を使う。Where used, the meaning is to indicate what would be required to properly implement the Activity Streams 1.0 backwards compatibility model described in this appendix if an implementer chose to do so.
While the syntax defined by this specification diverges from that defined by JSON Activity Streams 1.0, the fundamental model defined by that original specification remains intact. Specific processing rules are defined by this specification that allow existing Activity Streams 1.0 documents to be mapped to and processed as an Activity Streams 2.0 document.
The JSON syntax defined by this specification differs somewhat from that defined in the original JSON Activity Streams 1.0 [ AS1] specification in ways that are not backwards compatible. Implementations can choose to continue supporting the JSON Activity Streams 1.0 syntax but ought consider it to be deprecated. This means that while implementations can continue to consume the 1.0 syntax, they should not output the 1.0 syntax unless specifically interacting with older non-2.0 compliant implementations.
Specifically:
application/stream+json
" MIME media type when producing a JSON serialization using the Activity Streams 1.0 syntax, and "application/activity+json
" when producing a serialization conforming to the 2.0 syntax.application/stream+json
" or the more generic "application/json
" MIME media type MUST follow the syntax and processing rules set by [AS1]. The 2.0 syntax and processing rules apply only when handling serializations using the "application/activity+json
" media type.id
as an alias for the JSON-LD @id
key word; and the objectType
and verb
properties as aliases for the JSON-LD @type
keyword.displayName
property which has been renamed to name
in Activity Streams 2.0. Implementations ought to treat displayName
as an alias for name
.title
property which has been dropped from Activity Streams 2.0. Implementations processing Activity Streams 1.0 documents as Activity Streams 2.0 ought to treat instances of the title
property as an extension.content
and summary
properties as natural language values which means their values can be expressed as either a string or an object mapping language tags to string values. In the 1.0 syntax, these are expressed solely as String values. Because the 1.0 values are a valid subset allowed by this specification, implementations are not required to take any specific action to continue supporting those values.upstreamDuplicates
and downstreamDuplicates
properties defined by Activity Streams 1.0 and does not provide a replacement. This is due largely to lack of any reasonable implementation evidence. While the upstreamDuplicates
and downstreamDuplicates
properties MAY continue to be used, implementations SHOULD avoid them.post
" verb was defined to describe the action of both creating an object and "posting" or uploading it to a service. This specification replaces the "post
" verb with separate Create
and Add
Activity types. When processing Activity Streams 1.0 documents and converting those into 2.0, implementations SHOULD treat instances of the " post
" verb as equivalent to Create
if there is no target
property specified; and equivalent to Add
if there is a target
property specified.By following these guidelines, all JSON Activity Streams 1.0 serializations can be processed successfully by 2.0 implementations.
この節は非規範的である。
It is possible use multiple vocabularies to cover particular characteristics of the activities like data provenance and annotations, which can compliment the Activity Vocabulary. For example: Eric writes a short note to be shared with his followers. After posting the note, he notices a spelling error. He edits the note and re-posts it. Later, Eric decides that the information in the note is incorrect. He deletes the note.
この節は非規範的である。
前回の候補勧告2016-12-15以降、以下の注目すべき変更が本文書に加えられた。
CollectionPage
properties.@vocab
keyword and a prefix for extension terms. 'http://www.test.example/martin' created 'http://example.org/foo.jpg'
. No additional detail is given. id
and type
properties to express the global identifier and object type: Place
and a gr:Location
:Like
and a http://schema.org/LikeAction
:Collection
, OrderedCollection
, CollectionPage
, and OrderedCollectionPage
: "und"
language tag:"@language"
within the JSON-LD @context
: Place
alternative: