リンクドデータ通知

W3C 勧告

このバージョン
https://www.w3.org/TR/2017/REC-ldn-20170502/
最新公開バージョン
https://www.w3.org/TR/ldn/
前回バージョン
https://www.w3.org/TR/2017/PR-ldn-20170321/
最新エディタドラフト
https://linkedresearch.org/ldn/
編集者
Sarven Capadisli, ボン大学, info@csarven.ca
Amy Guy, エディンバラ大学, amy@rhiaro.co.uk
リポジトリ
Github
イシュー
実装レポート
https://linkedresearch.org/ldn/tests/summary
テストスイート
https://linkedresearch.org/ldn/tests/
関連チャーター
Social Web Working Group Charter

公開後に報告されたエラーや問題については 正誤表 をご確認ください。

この仕様の英語版のみが規範版です。非規範な翻訳が利用できる場合があります。


要約

リンクドデータ通知は、サーバー(受信者)がアプリケーション(送信者)からメッセージをプッシュ受信する方法、および他のアプリケーション(消費者)がそのメッセージを取得できる方法を記述したプロトコルです。あらゆるリソースは、メッセージ受信用のエンドポイント(Inbox)を通知できます。メッセージはRDFで表現され、任意のデータを含むことができます。

本ドキュメントの位置付け

ステータス更新(2017年5月):概要図のリンクが2017年5月22日にその場で修正されました。内部アンカーが誤っていました。

ステータス更新(2017年9月):ある概念URIが2017年9月5日にその場で修正されました。内部URIが誤っていました。

このセクションは、本ドキュメントの公開時点での位置付けを説明しています。他の文書が本ドキュメントにとって代わる場合があります。現在の W3C 発行文書やこの技術レポートの最新版は W3C 技術レポート一覧(https://www.w3.org/TR/)で確認できます。

本ドキュメントは ソーシャルWebワーキンググループによって勧告として公開されました。本ドキュメントへのコメントは public-socialweb@w3.org購読アーカイブ)までお寄せください。すべてのコメントを歓迎します。

ワーキンググループの実装レポートもご覧ください。

本ドキュメントは W3C メンバー、ソフトウェア開発者、他の W3Cグループや関係者によってレビューされ、ディレクターによってW3C勧告として承認されました。これは安定した文書であり、参照資料や他文書からの引用にも利用できます。W3C の勧告作成の役割は本仕様への注目を集め、普及を促進することです。これによりウェブの機能性と相互運用性が高まります。

本ドキュメントは、2004年2月5日 W3C 特許ポリシーのもとで作成されました。W3C は、グループの成果物に関してなされた 特許開示の公開リスト を公開しています。そのページには特許の開示方法も記載されています。ある個人が本当に必須特許だと考える特許に関する実際の知見を持つ場合は、W3C特許ポリシー第6節に従い情報を開示する必要があります。

本ドキュメントは2017年3月1日 W3Cプロセス文書に基づいて管理されています。

1. はじめに

Web上のデータは特定のシステムにロックインされたり、それを作成したアプリケーションだけが読める形にはすべきではありません。ユーザーはアプリケーション間で自由に切り替え、データを共有できるべきです。アプリケーションは、アクティビティ・やりとり・新情報に関する通知を生成します。これらはユーザーに提示されたり、さらなる処理のために用いられることがあります。

Linked Data Notifications(LDNは、それら通知がどのように生成されたかに関わらず、アプリケーション間での通知の共有・再利用を支援します。これにより、データの保存をデータを表示する、もしくは利用するアプリケーションから切り離した、よりモジュラーなシステムが実現できます。本プロトコルは、通知の送信者・受信者・利用者が独立して実装され、異なる技術スタック上で動作していても、Web上で分散的に連携して動作できることを目指しています。

本仕様では通知を一時的・非持続的なエンティティではなく、それぞれがURIを持つ個別エンティティとして扱う概念を導入します。通知は取得・再利用できます。さまざまな応用分野(ソーシャルやその他)を支援するため、通知の内容はアプリケーションに委ねます。通知の認証・検証は推奨されていますが、その仕組みは受信者・利用者の裁量に委ねられます。通知の種類や応用分野によって必要となる方法が異なるためです。

1.1 ソーシャルWebワーキンググループ

LDNは、ソーシャルWebワーキンググループが策定している関連仕様のひとつです。代替アプローチや補完プロトコルに関心のある実装者は、まず概要文書Social Web Protocolsをお読みください。Social Web Protocolsの特定のサブセクションは、本仕様において他のプロトコルとの拡張性・相互運用性を強調する箇所で参照されています。

1.2 概要

Linked Data Notifications の概要

送信者(sender)は、人間または自動プロセスによってトリガされ、サーバーへ通知を送ります。この通知は受信者(receiver)への注意喚起を目的としたデータです。たとえば:友人からの個人的なメッセージ、pingbackリンク、ブログ記事へのコメント、コラボレーションへの招待、カレンダーのリマインダー、科学的な観測結果などです。

送信者は通知送信先の対象リソースを決め、送信先のInboxの場所を発見し、そこに通知を送ります。どのリソースもInboxを広告できます。受信者は(適切なアクセス制御のもとで)通知データを利用者のために公開します。

利用者(consumer)も送信者と同じ方法でInboxの場所を発見し、通知をさらに処理したり、他のデータと統合したり、もしくは単純に人間が読める形で表示することもできます。

1.3 要約

送信者と利用者は、リソースのInbox URLを、HTTP Linkヘッダーやリソースの本体にある関連付けから発見します。

送信者(Sender)

  • アプリケーションの要件に従って通知の本文を作成します。
  • 通知をInboxのURLへPOSTリクエストで送信し、本文はJSON-LDやサーバーが受理可能な他のシリアライズで送ります。

受信者(Receiver)

  • InboxのURLへのGETリクエストに対して、すでに受理した通知のURLの一覧を返します。
  • 個々の通知URLへのGETリクエストには、JSON-LD(または任意で他のシリアライズ)で応答します。
  • InboxのURLへのPOSTリクエストで通知の新規作成を受け付けます。
  • 任意で、Inboxへ送られる通知に制約を課すこともできます。

利用者(Consumer)

  • Inbox URLの内容をGETリクエストで取得し、アプリケーションの要件に従って利用します。

1.4 Linked Data Platformとの関係

LDNは通知の送信・消費のためのLinked Data Platform [LDP] の応用例であり、LDP全体の実装は不要で、最小限でも実装しやすい部分集合です。LDPの知識がなくとも本仕様は理解できますが、LDPに馴染みのある方にはいくつかの概念が馴染み深いでしょう。本仕様では通知の分散的かつ相互運用可能な交換を容易にするために必要な特徴のみを具体的に説明します。LDNのInboxはLDPのBasicContainerに相当します。

2. 適合性

本ドキュメント中の "MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、"MAY" および "OPTIONAL" は、[RFC2119] で述べられている通りに解釈してください。「非規範的」と明記されたセクションのほか、本仕様におけるすべての著者向けガイドライン・図・例・注記も非規範的です。

2.1 適合クラス

LDN実装送信者受信者利用者のいずれかであり得ます。それぞれの役割の適合要件は本仕様の該当セクションに記載されています。

3. プロトコル

このセクションでは、通知が配信または読み取られるURL(Inbox)の検出方法と配信メカニズムについて説明します。通知の内容はPayloadで記述されます。

3.1 検出(Discovery)

Inbox(通知が送信される、またはそこから消費されるエンドポイント)は、ブログ記事、ユーザープロファイル、データセット、ビデオなど任意のリソースから検出できます。検出の出発点は通知が送られる、または関連するリソース、すなわちtargetです。どのリソース(RDFでも非RDFでも)が独自のInboxを持ち得るため、どのtargetリソースから検出を始めるかは送信者またはコンシューマの裁量によります。

送信者とコンシューマはInboxのURLを検出するために次の操作を行います:

  • ターゲットURLに対してHTTPのHEADまたはGETリクエストを行い、rel値がhttp://www.w3.org/ns/ldp#inboxであるLinkヘッダーを使用する。
  • ターゲットURLに対してHTTPのGETリクエストを行い、RDF表現([RDF 1.1])を取得する。そのエンコードされたRDFグラフにhttp://www.w3.org/ns/ldp#inbox型の関係が含まれていることを利用する。関係の主語がtargetで、オブジェクトがInboxである。

これらはどちらの順序でも実行できますが、最初の方法でInboxが見つからなかった場合は、二番目の方法がMUST試みられるべきです。送信者とコンシューマは、フラグメント識別子を持つURIを明示的にターゲットとする場合はLinkヘッダーによる検出をSHOULD省略するべきです。

注意

ターゲットがフラグメント識別子を含む場合、そのフラグメントはサーバーへのリクエストの一部ではありません。送信者とコンシューマは、Linkヘッダーで発見されるInboxは解決されたURL(フラグメントを含まない)に対するものであることを認識しておくべきです。[Cool URIs for the Semantic Web - Hash URIs]を参照してください。

リソースはMUSTひとつのInboxのみを公開しなければなりません。ひとつのInboxは複数のリソースで共有して使ってもMAY(例:すべてのブログ投稿への返信やすべての写真の共有に同じInboxを使う場合など)。

検出例 1: Link ヘッダー

HEAD /article HTTP/1.1
Host: example.org
Accept: application/ld+json

HTTP/1.1 200 OK
Link: <http://example.org/inbox/>; rel="http://www.w3.org/ns/ldp#inbox"
HEAD リクエストでInboxを検出し、Linkヘッダーを受け取る際の要求と応答。

検出例 2: JSON-LD

GET /profile HTTP/1.1
Host: example.org
Accept: application/ld+json

HTTP/1.1 200 OK
Content-Type: application/ld+json

{
  "@context": "http://www.w3.org/ns/ldp",
  "@id": "http://example.org/profile",
  "inbox": "http://example.org/inbox/"
}
JSON-LD を取得するための GET リクエストによるInbox検出。JSON-LDのコンパクト形式での応答。

検出例 3: 可視HTML

GET /event HTTP/1.1
Host: example.org
Accept: text/html, application/ld+json

HTTP/1.1 200 OK
Content-Type: text/html;charset=utf-8

<p about="http://example.org/event" typeof="http://schema.org/Event" lang="en">
  <a rel="http://www.w3.org/ns/ldp#inbox" href="/inbox/">RSVP</a> to event
</p>
HTML を取得するための GET リクエストによるInbox検出。Inboxリンクは人間に見える形で、機械が検出できるようRDFaでマークアップされています。

検出例 5: 非表示のHTML(フラグメント対象)

GET /article HTTP/1.1
Host: example.org
Accept: text/html, application/ld+json

HTTP/1.1 200 OK
Content-Type: text/html;charset=utf-8

<section id="results" about="#results"
  property="http://www.w3.org/ns/ldp#inbox" resource="/inbox/">
</section>
HTML を取得するための GET リクエストによるInbox検出。RDFaのproperty属性で表現された非表示のInboxにより、フラグメントURIで識別されるリソースをターゲットにできる。

検出例 6: Turtle

GET / HTTP/1.1
Host: csarven.ca
Accept: text/turtle, application/ld+json

HTTP/1.1 200 OK
Content-Type: text/turtle;charset=utf-8

<http://csarven.ca/#i>
  <http://www.w3.org/ns/ldp#inbox> <http://csarven.ca/inbox/> .
Turtle を取得するための GET リクエストによるInbox検出。

サーバーがこのプロトコルを認識していない可能性のあるサーバーに対する検出方法については、Social Web Protocolsの推奨を参照してください。

3.2 送信者(Sender)

検出(discovery)の後、通知を送信したい送信者は、InboxのURLに対してMUST POSTリクエストで配信しなければならない。送信者は成功したリクエストに対して201 CreatedLocationヘッダー付き)または202 Acceptedを期待できます。

送信者は、サーバーが受け入れるRDFコンテンツタイプを判断するためにOPTIONSリクエストを使用することがMAYあります。サーバーが返すAccept-Postヘッダーの値に従って通知をシリアライズします。そうでない場合は、POSTリクエストの本文はJSON-LD形式の通知ペイロード(payload)を含まなければならない(ヘッダーはContent-Type: application/ld+jsonContent-Typeヘッダーはprofile URIを含めることがMAYあります([RFC6906]参照)。

送信者は認証や認可の目的で追加のヘッダーやコンテンツ(例:Authorization: Bearer XXX)を含めることがMAYあります。

送信者が認証不要でlocalhostで待機するサービスを持っている場合、悪意あるスクリプトがInboxエンドポイントで実行され、送信者自身に任意のPOSTを行わせる可能性があります。そのため送信者は localhost やループバックIPアドレスへのPOSTリクエストを行うべきではない(SHOULD NOT)。

送信リクエストの例

POST /inbox/ HTTP/1.1
Host: example.org
Content-Type: application/ld+json;profile="https://www.w3.org/ns/activitystreams"
Content-Language: en

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "@id": "",
  "@type": "Announce",
  "actor": "https://rhiaro.co.uk/#me",
  "object": "http://example.net/note",
  "target": "http://example.org/article",
  "updated": "2016-06-28T19:56:20.114Z"
}
Inboxに送信するためのリクエスト例。

送信の応答例

HTTP/1.1 201 Created
Location: http://example.org/inbox/5c6ca040
InboxへのPOSTリクエストに対する応答の例。

3.3 受信者(Receiver)

受信者はInboxのURLでGETおよびPOSTリクエストをサポートしなければならない(MUST)。 LDPの用語では、InboxはContainerです。

3.3.1 通知の受信

受信者はPOSTリクエストを受け取り、通知リソースを正常に処理した場合、ステータスコード201 Createdで応答し、通知データを取得できるURLを示すLocationヘッダーを設定しなければなりません(Consumer参照)。リクエストが非同期的にキューに入れられた場合は、受信者はステータスコード202 Acceptedで応答し、応答本文にリクエストの状態に関する情報を含めなければなりません(MUST)。

受信者が通知に対して制約を強制する場合(Constraints参照)、制約が満たされないときは通知の処理を失敗させ、適切な4xxエラーコードを返すべきです(SHOULD)。

受信者は、リクエスト本文がJSON-LD(Content-Type: application/ld+json)である通知を受け入れなければならず(MUST)、そのContent-Typeprofile URIを含めてもよい(MAY)[RFC6906]。

受信者は他のRDFコンテンツタイプ(例:text/turtle, text/html)を受け入れることがMAYあり、その場合Inbox URLに対するOPTIONSリクエストへの応答でAccept-Postヘッダーを用いて受け入れるコンテンツタイプを公開することがSHOULD推奨されます([Accept-Post]参照)。

受信者例 1: OPTIONS 応答

OPTIONS /inbox/ HTTP/1.1
Host: example.org

HTTP/1.1 200 OK
Allow: GET, HEAD, OPTIONS, POST
Accept-Post: application/ld+json, text/turtle
OPTIONSリクエストに対してAccept-Postを返す受信者。

受信者例 2: POST 応答

POST /inbox/ HTTP/1.1
Host: example.org
Content-Type: application/ld+json;profile="https://www.w3.org/ns/activitystreams"
Content-Language: en

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "@id": "",
  "@type": "Announce",
  "actor": "https://rhiaro.co.uk/#me",
  "object": "http://example.net/note",
  "target": "http://example.org/article",
  "updated": "2016-06-28T19:56:20.114Z"
}

HTTP/1.1 201 Created
Location: http://example.org/inbox/92d72f00
InboxへのPOSTリクエストに応答して通知を作成する受信者。

3.3.2 Inboxの内容をコンシューマに提供すること

Inboxに対する成功したGETリクエストは、要求者のアクセス権に従って通知のURIを含むHTTP 200 OKを返さなければなりません(適宜4xxエラーを返す)。受信者はInbox内でコンシューマがアクセス可能な通知のURIのみを列挙してもMAYです。 InboxのURLは通知を参照するためにhttp://www.w3.org/ns/ldp#contains述語を使用しなければなりません(MUST)。

各通知はMUST RDFソースでなければなりません。非RDFリソースが返された場合、コンシューマはそれらを無視してもMAYです。通知URIに対する成功したGETリクエストは、要求者のアクセス権に従ってHTTP 200 OKを返さなければなりません(適宜4xxを返す)。

JSON-LDのコンテンツタイプはすべてのリソースで提供可能でなければならず(MUST)、クライアントは他のコンテンツタイプを優先するAcceptヘッダーを送信してもよい(RFC7231 Section 3.4 - Content Negotiation参照)。 クライアントがAcceptヘッダーを送信しない場合、サーバーはJSON-LDまたは同等の情報を忠実に伝える任意のフォーマット(例:Turtle)でデータを送ることができます(MAY)。

Inbox自体に関する追加の説明(例:Constraints)も返してもMAYです。

注意

本仕様はInbox内の通知一覧を提供するためのページング機構を定義していません。ページングを有効にしたい実装は、効率的な取得を可能にする既存の機構(例:Linked Data Platform Paging 1.0Activity Streams 2.0 Collection)を利用することを検討してください。

受信者例 3: GET 応答

GET /inbox/ HTTP/1.1
Host: example.org
Accept: application/ld+json
Accept-Language: en-GB,en;q=0.8, en-US;q=0.6

HTTP/1.1 200 OK
Content-Type: application/ld+json
Content-Language: en

{
  "@context": "http://www.w3.org/ns/ldp",
  "@id": "http://example.org/inbox/",
  "contains": [
    "http://example.org/inbox/5c6ca040",
    "http://example.org/inbox/92d72f00"
  ]
}
InboxへのGETリクエストに対して通知の一覧で応答する受信者。

3.3.3 送信者の検証(Sender Verification)

受信者は送信者の検証を行うことがSHOULD推奨されます。例えば:

  • Inboxへの書き込みアクセスを持つ送信者のホワイトリストを用意する
  • 受信者がすべての送信者を把握できるよう認証を要求する
  • 通知のコピーを送信者のドメインから取得して起源を検証する
  • 通知に付随するデジタル署名を検査する

3.3.4 悪用防止(Preventing Abuse)

受信者は不当な通知がサーバー上で作成されInboxで公開されるのをフィルタリングするために、制約(constraints)を使用することがSHOULD推奨されます。

受信者はInbox URLへの書き込みを信頼できる送信者のホワイトリストに制限するなど、アクセス制御の実装を検討してもよいでしょう。

3.4 コンシューマ(Consumer)

コンシューマはInboxのURLに対してGETリクエストを行い、Inbox内の通知のURIを取得します(Inbox URLの取得方法はdiscoveryを参照)。

通知のURIはInbox URLのhttp://www.w3.org/ns/ldp#contains述語を通じて発見可能でなければなりません(Inbox内容のを参照)。

Inboxまたは個々の通知を取得する際、コンシューマは好ましいコンテンツタイプ(JSON-LDを含む)を示すために明示的にAcceptヘッダーを設定することがSHOULD推奨されます。個々の通知をいつ、いくつ、あるいは特定の条件(例:コンテンツ長、タイムスタンプ)に従って取得するかはコンシューマの裁量です。

コンシューマは認証や認可の目的で追加のヘッダーやコンテンツを含めることがMAYあります。

コンシューマはペイロードからの追加取得(例:通知内で参照されているリソースをデリファレンスしてその内容を取得する)や推論を任意で行ってもよく、通知をさらに処理・利用する前にInboxが公表する制約を確認することもMAYあります。

注意

取得した通知のURIには、要求したURI自身とは異なる主語IRIを含むRDFステートメントが含まれる場合があります。コンシューマは通知が要求URIを主語とするいかなるトリプルも必ず含むとは仮定すべきではありません。これは通知本文が相対IRIを使用する場合にも関連します。実装は通知URIを通知ペイロードのRDFを含むグラフとして扱うことを検討してもよいでしょう。

注意

何でもInboxに投稿できる(受信者側の制約に依存するが、本プロトコルで定義されない)ことをコンシューマは認識しておくべきです。したがって通知データを利用する際は、その内容の真偽を確認するために予防措置を講じることが望ましいです。

コンシューマ例: 通知の取得

GET /inbox/14a792f0 HTTP/1.1
Host: example.org
Accept: application/ld+json, text/turtle, application/xhtml+xml, text/html
Accept-Language: en-GB,en;q=0.8, en-US;q=0.6

HTTP/1.1 200 OK
Content-Type: application/ld+json;profile="https://www.w3.org/ns/activitystreams"
Content-Language: en

{
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    { "@language": "en" }
  ],
  "@id": "http://example.org/inbox/14a792f0",
  "@type": "Announce",
  "actor": {
    "@id": "http://csarven.ca/#i",
    "name": "Sarven Capadisli"
  },
  "object": {
    "@context": "http://www.w3.org/ns/anno.jsonld",
    "@id": "http://example.net/note",
    "@type": "Annotation",
    "motivation": "http://www.w3.org/ns/oa#assessing",
    "rights": "http://creativecommons.org/licenses/by/4.0/"
  },
  "target": "http://example.org/article",
  "updated": {
    "@type": "http://www.w3.org/2001/XMLSchema#dateTime",
    "@value": "2016-06-28T19:56:20.114Z"
  }
}
Inboxで見つかった個別通知に対するGETリクエストの結果。

4. ペイロード

通知のペイロードは、受信者と他のRDF構文で合意しない限り必ずJSON-LDである必要があります。さまざまなユースケースに対応するため、ペイロードで使用する語彙自体はここではあえて指定しません。

4.1 ペイロードの例

このセクションは規範的ではありません。

ペイロード例 1

{
  "@context": "http://schema.org/",
  "@id": "http://example.net/note#foo",
  "citation": { "@id": "http://example.org/article#results" }
}
schema.org語彙を用いて、1つの記述で表現された文献情報(citation)。

ペイロード例 2

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "@id": "",
  "@type": "Announce",
  "actor": "https://rhiaro.co.uk/#me",
  "object": "http://example.net/note",
  "target": "http://example.org/article",
  "updated": "2016-06-28T19:56:20.114Z"
}
ActivityStreams 2.0 語彙を使い、日付やアクターも含めて一つのリソースを別のリソースへアナウンスする例。

ペイロード例 3

{
  "@context": { "pingback": "http://purl.org/net/pingback/" },
  "@id": "",
  "@type": "pingback:Item",
  "pingback:source": { "@id": "http://example.net/note#foo" },
  "pingback:target": { "@id": "http://example.org/article#results" }
}
Semantic Pingback語彙で記述されたpingback通知。

ペイロード例 4

{
  "@context": "http://schema.org/",
  "@id": "",
  "@type": "RsvpAction",
  "event": { "@id": "http://example.org/event" },
  "agent": { "@id": "https://rhiaro.co.uk/#me" }
}
schema.org語彙で記述されたイベントRSVP。

通知は任意の情報を含むことができ、その中にはURIを持つ複数のリソースへの参照も含めることができます。特定の外部リソースやデータの出典に必ずしも言及する必要はありません。消費者によって通知がリクエストされたとき、受信者は最初に送られたすべての三つ組(triple)を返すことが期待されます。

ペイロード例 5

{
  "@context": {
    "@language": "en",
    "sioc": "http://rdfs.org/sioc/ns#",
    "foaf": "http://xmlns.com/foaf/0.1/"
  },
  "@id": "",
  "@type": "sioc:Comment",
  "sioc:reply_of": { "@id": "http://example.org/article" },
  "sioc:created_at": {
    "@type": "http://www.w3.org/2001/XMLSchema#dateTime",
    "@value": "2015-12-23T16:44:21Z"
  },
  "sioc:content": "This is a great article!",
  "sioc:has_creator": {
    "@id": "http://example.org/profile",
    "@type": "sioc:UserAccount",
    "sioc:account_of": { "@id": "http://example.org/profile#alice" },
    "sioc:avatar": { "@id": "http://example.org/profile/avatar.png" },
    "foaf:name": "Alice"
  }
}
コメントやコメント投稿者についてのデータを持つ通知の例。Semantically Interlinked Online Communities (SIOC)とFriend-of-a-Friend (FOAF)の語彙で記述。

ペイロード例 6

{
  "@context": [{"prov": "http://www.w3.org/ns/prov#"}],
  "@id": "http://example.org/activity/804c4e7efaa828e146b4ada1c805617ffbc79dc7",
  "@type": "prov:Activity",
  "http://www.w3.org/2000/01/rdf-schema#label": {
    "@language": "en",
    "@value": "Make it so"
  },
  "prov:endedAtTime": {
    "@type": "http://www.w3.org/2001/XMLSchema#dateTime",
    "@value": "2016-06-14T20:57:39.000Z"
  },
  "prov:generated": {
    "@id": "http://example.org/entity/804c4e7efaa828e146b4ada1c805617ffbc79dc7",
    "@type": "prov:Entity",
    "prov:specializationOf": { "@id": "http://example.org/entity/file" },
    "prov:wasGeneratedBy": {
      "@id": "http://example.org/activity/804c4e7efaa828e146b4ada1c805617ffbc79dc7"
    }
  },
  "prov:wasAssociatedWith": {
    "@id": "http://csarven.ca/#i",
    "@type": "prov:Agent",
    "http://xmlns.com/foaf/0.1/name": {
      "@language": "hy",
      "@value": "Սարվէն Չափատիշլի"
    }
  }
}
Provenance語彙で記述された変更履歴エントリー。

5. セキュリティ・プライバシーおよび内容に関する考慮事項

このセクションは規範的ではありません。 セキュリティやプライバシーに関する規範的要件は仕様の該当箇所で記載されています。

5.1 制約

InboxのURLはHTTPのLinkヘッダーまたはリソース本体で、rel値がhttp://www.w3.org/ns/ldp#constrainedByの形で、独自の制約(例:SHACLWeb Annotation Protocolなど)を告知できます。送信者は制約仕様に従うべきであり、従わない場合は受信者が通知を拒否して適切な4xxエラーコードを返すことがあります。

5.2 ターゲット所有権

Inbox(ターゲット)を告知するリソースの発行者は、信頼できるサーバー上で公開すべきです。発行者は、サードパーティがヘッダーや内容にアクセスできると通知がリダイレクトされる場合があることに注意する必要があります。

5.3 通知の購読

この仕様は、消費者が受信者から通知をプルで読み取る方法を記述しますが、消費者が新しい通知やInbox内容の更新をプッシュで受け取れるよう要求したい場合もあります。同様に、受信者が特定の送信者からの通知を自らリクエストしたい場合もあるでしょう。このようなサブスクリプション機構は範囲外ですが、送信者・受信者・消費者がそのような連携を独自に設定することは妨げられません。購読を有効にしたい実装は、ActivityPubWebSubWebSocket プロトコルHTTP Web Pushなど既存の仕組みを利用できます。

5.4 Activity Streams 2.0対応

Activity Streams 2.0 Core 対応を目指す受信者実装者は、Content-Typeや語彙の等価性に関する情報として Social Web Protocols - Inbox Interop を参照できます。

5.5 自然言語コンテンツ

分散ネットワークにおいて国際的なユーザーベースを築くことは重要です。いくつかのLDNインタラクションは、HTML断片や要約項目など自然言語テキストを持つ内容を返す場合がありますが、すべてに対して多言語表現を用意するのが常に可能とは限りません。実装には、利用可能な言語の探索や言語交渉の手段(HTTPのAccept-Languageヘッダーによるリクエストごとの最適な言語選択など)を提供することが推奨されます。

5.6 認証付きInbox

受信者が送信者または消費者に認証を期待する場合は、他のデータ(他のエラーコードを含みます)を返す前に資格情報の有効性を必ずチェックすべきです。たとえば、認証されていない要求者に対してInboxの存在確認を先に行い404 Not Foundを返すべきではありません

トークンパス方式による認証はHTTPS経由で行う必要があります。

5.7 セキュリティ・プライバシーレビュー

以下の設問は、Self-Review Questionnaire: Security and Privacy のガイドラインに基づき、この仕様のセキュリティやプライバシーの検討点を確認するものです。

この仕様は個人識別可能な情報(PII)を扱いますか?
通知ペイロードには送信者や受信者を識別する情報など、あらゆるデータが含まれる可能性があります。通知データへのアクセス管理は受信者側で制御されます。機微な情報を送信する場合、受信者側がInboxの内容の公開読み出しを許可するアクセス制御を行う場合があることに注意すべきです。
この仕様は高価値データを扱いますか?
(上述の)通知ペイロード内の個人識別情報と同様の影響があります。
この仕様はオリジンに新たにブラウザセッションをまたいで残る新しい状態を導入しますか?
いいえ。
この仕様はWeb上で永続的かつクロスオリジンな状態を公開しますか?
いいえ。
この仕様はオリジンが現在アクセスできない他のデータを公開しますか?
いいえ。
この仕様は新しいスクリプト実行/ローディング機構を導入しますか?
いいえ。
この仕様はオリジンにユーザーの位置情報へのアクセスを認めますか?
いいえ。
この仕様はオリジンにユーザー端末のセンサーへのアクセスを認めますか?
いいえ。
この仕様はオリジンにユーザー端末ローカル環境の側面へのアクセスを認めますか?
いいえ。
この仕様はオリジンに他デバイスへのアクセスを認めますか?
いいえ。
この仕様はオリジンにユーザーエージェントのネイティブUIの何らかの制御を許可しますか?
いいえ。
この仕様はWeb上に一時的な識別子を公開しますか?
いいえ。
この仕様はファーストパーティ/サードパーティ文脈ごとに挙動を区別しますか?
いいえ。
この仕様はユーザーエージェントの「シークレット」モードでどのように動作すべきですか?
Webサイトがユーザーが「シークレット」モードであることを判断できないように動作します。
この仕様はユーザー端末にデータの永続化を行いますか?
いいえ。
この仕様には「セキュリティ考慮事項」「プライバシー考慮事項」セクションがありますか?
:)
この仕様はデフォルトのセキュリティ特性のダウングレードを認めますか?
いいえ。

A. 出口基準

本仕様は、各機能について少なくとも2つの独立した相互運用可能な実装が存在する状態で勧告案に進みました。各機能は異なる製品セットにより実装されました。すべての機能が一つの製品によって実装される必要はありませんでした。

出口基準の評価のために、以下の各項目が機能(feature)と見なされました:

B. 謝辞

この仕様への貢献に対し、下記の方々に感謝の意を表します:

C. 変更履歴

このセクションは規範的ではありません。

REC-ldn-20170502PR-ldn-20170321CR-ldn-20170223CR-ldn-20161101WD-ldn-20161011WD-ldn-20160926WD-ldn-20160913WD-ldn-20160824WD-ldn-20160726

2017年3月21日PRから本バージョンまでの変更点

  • 例中の構文エラー修正
  • Social Web Group Charterへの「in reply to」リンク追加
  • 仕様の過去バージョンへのリンク追加
  • 参考文献の更新

2017年2月23日CRから2017年3月21日PRまでの変更点

  • 謝辞の更新

2016年11月1日CRから2017年2月23日CRまでの変更点

  • 謝辞追加
  • 通知の暗黙の応答コードやリクエストURIに関する説明を明確化
  • 参考文献の更新

2016年10月11日WDから2016年11月1日CRまでの変更点

  • Considerations配下に「自然言語コンテンツ」セクション追加
  • PubSubへの参照修正
  • 実装レポートとテストスイートにURL追加
  • SVGに凡例追加
  • AS2 bib fragment修正
  • payload verificationの表現修正
  • 「認証付きInbox」セキュリティガイダンスを追加

2016年9月26日WDから2016年10月11日WDまでの変更点

  • 例の追加と更新
  • HTTP HEAD/GETによる検出表現の改善
  • 編集面の修正(文法・言い換え)
  • Accept-Post参照修正、OPTIONSでの出現について明示
  • 国際化レビューのフィードバック(例)統合

2016年9月13日WDから2016年9月26日WDまでの変更点

  • 誤字、リンク修正
  • セクション順序をSending, Receiving, Consumingに変更
  • 例の更新
  • RFC7231の参照追加
  • URI検出の表現明確化
  • Considerations配下の非規範セクションにサブ見出し追加
  • 全体概要図追加
  • 「Considerations」配下にRetry Discoveryの非規範サブセクション追加
  • 検出について丁寧さに言及
  • Preventing Abuseを各規範セクションへ移動
  • Sender VerificationをReceiving配下へ移動
  • ActivitStreams 2.0 SupportをConsiderationsへ移動
  • Payload VerificationをConsumingのNoteに移動
  • 規範・一部非規範記述をConsiderationsから前方セクションへ移動
  • 「セキュリティ・プライバシーレビュー」セクション追加
  • はじめにの更新

2016年8月24日WDから2016年9月13日WDまでの変更点

  • 誤字・句読点・命名修正
  • 出口基準の追加
  • Acceptヘッダー利用時・省略時の挙動を明確化
  • Linkヘッダーフィールドのrelation主語に関するノート追加
  • GETによるLinkヘッダーの検出追加、リンク主語URI(そのInbox用)をターゲットURLで明確化
  • 要約の表現改訂
  • Target Ownershipに関する考察追加
  • 「どのリソースもInboxを持つことができる」に言及
  • 通知の購読セクション追加

2016年7月26日WDから2016年8月24日WDまでの変更点

  • 例の改善(例の追加・更新・構文修正、@contextのhttps化)
  • 誤字・句読点・命名の修正
  • payload記述におけるnon-normativeな配慮記述を反映

D. 参考文献

規範参考文献

[ldp]
Steve Speicher; John Arwe; Ashok Malhotra. W3C. Linked Data Platform 1.0. 2015年2月26日. W3C勧告. URL: https://www.w3.org/TR/ldp/
[rdf11-concepts]
Richard Cyganiak; David Wood; Markus Lanthaler. W3C. RDF 1.1 概念および抽象構文. 2014年2月25日. W3C勧告. URL: https://www.w3.org/TR/rdf11-concepts/
[rfc2119]
S. Bradner. IETF. RFCで必須レベルを示すキーワード. 1997年3月. Best Current Practice. URL: https://tools.ietf.org/html/rfc2119
[rfc6906]
E. Wilde. IETF. 'profile'リンクリレーション型. 2013年3月. Informational. URL: https://tools.ietf.org/html/rfc6906

参考情報

[accept-post]
Steve Speicher; John Arwe; Ashok Malhotra. W3C. Accept-Post応答ヘッダー(Linked Data Platform 1.0). 2015年2月26日. W3C勧告. URL: https://www.w3.org/TR/ldp/#header-accept-post
[activitypub]
Christopher Webber; Jessica Tallon; Owen Shepherd. W3C. ActivityPub. 2017年4月13日. W3C Candidate Recommendation. URL: https://www.w3.org/TR/activitypub/
[activitystreams-core]
James Snell; Evan Prodromou. W3C. Activity Streams 2.0. 2017年4月13日. W3C Proposed Recommendation. URL: https://www.w3.org/TR/activitystreams-core/
[annotation-protocol]
Robert Sanderson. W3C. Web Annotation Protocol. 2017年2月23日. W3C Proposed Recommendation. URL: https://www.w3.org/TR/annotation-protocol/
[cooluris]
Leo Sauermann; Richard Cyganiak. W3C. Semantic WebのためのCool URI. 2008年12月3日. W3Cノート. URL: https://www.w3.org/TR/cooluris
[ldp-paging]
Steve Speicher; John Arwe; Ashok Malhotra. W3C. Linked Data Platform Paging 1.0. 2015年6月30日. W3Cノート. URL: https://www.w3.org/TR/ldp-paging/
[websub]
Julien Genestoux; Aaron Parecki. W3C. WebSub. 2017年4月11日. W3C Candidate Recommendation. URL: https://www.w3.org/TR/websub/
[rfc6455]
I. Fette; A. Melnikov. IETF. WebSocketプロトコル. 2011年12月. 標準案. URL: https://tools.ietf.org/html/rfc6455
[rfc7231]
R. Fielding, Ed.; J. Reschke, Ed.. ハイパーテキスト転送プロトコル (HTTP/1.1): セマンティクスおよび内容. 2014年6月. 標準案. URL: https://tools.ietf.org/html/rfc7231
[security-privacy-questionnaire-20151210]
Mike West. W3C. 自己レビュー質問票: セキュリティとプライバシー. 2015年12月10日. W3Cノート. URL: https://www.w3.org/TR/2015/NOTE-security-privacy-questionnaire-20151210/
[shacl]
Holger Knublauch; Dimitris Kontokostas. W3C. Shapes Constraint Language (SHACL). 2017年2月2日. W3C作業草案. URL: https://www.w3.org/TR/shacl/
[social-web-protocols]
Amy Guy. W3C. Social Web Protocols. 2016年11月2日. W3C作業草案. URL: https://www.w3.org/TR/social-web-protocols/
[webpush]
M. Thomson; E. Damaggio; B. Raymor. IETF. HTTPプッシュを用いた一般的なイベント配信. 2016年12月. 標準案. URL: https://tools.ietf.org/html/rfc8030