このドキュメントは

Platform for Privacy Preferences (P3P) Syntax Specification
W3C Working Draft 2-July-1998
http://www.w3.org/TR/WD-P3P10-syntax/

の和訳です。

このドキュメントには和訳上の誤りがありえます。
内容の保証はいたしかねますので、必ずW3C Webサイトの正式版ドキュメントを参照して下さい。
また、著作権については本ドキュメントに含まれる記述に加え、こちらも必ず参照してください。

Copyright(C) 1995-1998 World Wide Web Consortium, (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University). All Rights Reserved.


 W3C WD-P3P-syntax-19980702

 

 

Platform for Privacy Preferences (P3P)
Syntax Specification

W3C Working Draft 2-July-1998

 

Latest Version: 
http://www.w3.org/TR/WD-P3P10-syntax 
This Version 
http://www.w3.org/TR/1998/WD-P3P10-syntax-19980702
Previous Version: 
http://www.w3.org/TR/1998/WD-P3P10-syntax-19980519.html
Editors 
Massimo Marchiori, W3C (massimo@w3.org
Dan Jaye, Engagetech (djaye@engagetech.com

Status of This Document 

本文書は、W3Cメンバー他によるW3Cワーキングドラフト公式第2版である。本文書は勧告案に昇格する前に(6週間以内に)もう1度アップデートされる予定である。この文書は、P3P活動の一部として作成されて来たものであり、最終的にはW3C勧告案に昇格する。W3Cのワーキングドラフトを参考資料として使ったり、"進行中の作業"としてではない引用を行うことは好ましくない。このドラフト基本コンセプトはかなりしっかりとしており、我々は仕様へのフィードバックのために実験的な実装やプロトタイプの開発を行うことを奨励する。しかしこのワーキンググループでは、今後のバージョンの文書を変更する可能性のある早期の実装は認めないであろう。

このドラフトはW3C processに従い、W3Cとそのメンバーにより考えられている。この文書はP3Pの実装、承認、採用に影響を与えそうな問題に関して、W3Cの会員およびスタッフに送られるコメントを受け取る目的で公開されている。

コメントがある方は以下にお願いしたい。
p3p-comments@w3.org
会員用のアーカイブは以下にまとめられている。
http://lists.w3.org/Archives/Member/p3p-comments/

___

Copyright (C)  1998 W3C (MIT, INRIA, Keio), All Rights Reserved. W3Cの 責任、 登録商標、, 文書の使用、そして ソフトウエアライセンスに関する規則が適用される。


Index

  1. Introduction(はじめに)
    1. Problem Space
    2. About this Specification(この仕様書について)
    3. Operational Description and Design(オペレーションに関する記述と設計)
    4. Terminology(専門用語)
    5. Assumptions(仮定)
  2. Agreement Scenarios(同意のシナリオ)
    1. No existing agreement, site sends proposal and requests PUID(同意は存在しない。サイトはプロポーザルを送りPUIDを要求する。)
    2. Existing realm agreement(レルム同意が存在する。)
    3. Existing realm agreement, new proposal(レルム同意が存在し、新しいプロポーザルが発生する。)
    4. Service wants data from client repository(サービスがクライアントのレポジトリからデータを要求する。)
  3. Transport, Primitives and Reason Codes
    1. Data Transport
    2. P3P Requests
    3. Negotiation Primitives(交渉の原語)
      1. Success (OK)
      2. Here's A Proposal (PROP)
      3. Sorry (SRY)
      4. Transmit Data (TXD)
      5. Ending Negotiation with final
      6. Syntax of Negotiation Primitives
    4. Reason Codes Definition
      1. Success コード
      2. Rejection コード
      3. Error コード
  4. P3P スキーマ
    1. プロポーザル
    2. RDF Encoding of プロポーザル
      1. The PROP element
      2. Realms and URI's
      3. The STATEMENT element
      4. The source 属性
      5. The DISCLOSURE element
    3. Data Transfer
      1. Referencing data: the ref タグ
      2. Prefixing references using <with><prefix>
      3. The category attribute
      4. Client Side Writes: action 属性
      5. Unambiguous(明らかな)Optional Elements and Purposes
    4. Creating New Data Sets
      1. Data Definition
      2. Data Schema Format
  5. Base Data Set and Data Types
    1. Required (Base) Data Elements and Sets
    2. Data Types
    3. Abstract Elements
  6. Appendices(付録)

    Appendix 1: References (Normative:規範)
    Appendix 2: Fingerprints and Canonicalization (Normative:規範)
    Appendix 3: P3P XML DTDs (Non-normative)
    Appendix 3: Line-flow Scenario (Non-normative)
    Appendix 4: ABNF Notation (Non-normative)
    Appendix 5: Working Group Contributors (Non-normative)


1. Introduction(はじめに)

P3P(The Platform for Privacy Preferences)は、Webサイトが自分たちのプライバシープラクティスを表現し、 ユーザがそれらのプラクティスに対するプリファレンスを実行することを可能にする。 P3P準拠の製品は、ユーザが(マシンと人間の両方が解読できる書式で)サイトのプラクティスを知ること、 適切ならばコンピュータに決定を委ねること、そして特定サイトに結びつけることを許す。 ユーザのプリファレンスに適合したサイトのプラクティスは、ユーザの選択によりシームレスにアクセスすることができる。 そうでない場合は、ユーザはサイトのプラクティスを通知され、それらに同意する機会を与えられてブラウジングを続けることができる。

P3Pは、ユーザがWeb上で十分に説明された決定を行う能力と、彼らの情報の使用を制御する能力を与える。 サイトはP3Pを、サービス品質の向上・コンテンツのカスタマイズ・サイトアクセスの簡略化だけでなく、 サービス内での信頼ユーザの場所のレベルを上げるために使うことができる。

P3Pは、構造化データの交換と宣言のために [XML](とりわけ[RDF])を使う。 P3Pは将来のデジタル認証とデジタル署名の能力もサポートする予定。 P3Pはブラウザ、プラグイン、サーバ、もしくはクライアントとサーバ間のプロキシサーバに組み込むことができる。

1.1 Problem Space

P3P Specは、以下のメカニズムを与える。

1.2 About This Specification(この仕様書について)

このドキュメントは、統一されたP3Pアプリケーションのインプリメントに必要な全ての仕様を含む。 この仕様書は過去のワーキンググループの実績の上に築かれ、以下にあげるものを含んでいる。

  1. プロトコルの原型
  2. プロトコルのスキーマ(プロポーザルのプライバシープラクティス用語を含む)
  3. プロトコルの文法と記号化(データの構造と書式を含む)

    文章のステータスを表現するために以下の規約を用いる。

この仕様書で使われたABNF表記法は、RFC2234で規定され、要約が付録3にある。

1.3 Operational Description and Design(オペレーションに関する記述と設計)

P3Pプロポーザルは、1つまたはそれ以上のステートメントから成り立っている。 各々のステートメントは一連のデータエレメントに対するプライバシープラクティスを表現する。 P3Pプロポーザルはすべての関連したデータエレメントとプラクティスを含まなければならない。 もしサービスがデータエレメントを集めたければ、プロポーザルの中で述べなければならない。 P3Pのほとんどの宣言文は断定的で、やらないことよりもむしろやることを述べることに注意。

P3P Specの中心コンセプトは、P3P同意のそれである。P3P同意はサービスとユーザエージェントの双方に同意されたプロポーザルである。 ユーザエージェントはプロポーザルで規定されたプライバシープラクティスとユーザのプリファレンスを比較して、合意に入るかどうかを決定する。 1つの同意は特定のレルム内でユーザエージェントとサービス間で交換される全データに当てはまる。 レルムは1つのURIで参照されるWeb資源かもしくは複数のURIで参照されるWeb資源である。

いったん同意に達すると、同意したプロポーザルに含まれるデータエレメント群はサービスからのデータ要求ユーザエージェントに 解釈されるべきである。データエレメントを参照しない同意も可能である。そのような同意は"情報は集めない"と述べる。

プライバシープラクティスがユーザのプリファレンスと一致しない場合には、両サイドは代わりのプロポーザルを交換することで 同意に到達することができる。あらゆるプロポーザルはユーザが見ることができる一連の"結果"を持つことができる。 それは提案されたプラクティスが、たとえユーザが通常は同意しなくてもある特定の場合に大切であるかも知れないという理由を 説明するものである。我々はユーザエージェントが、合意に達した同意を同意IDという同意のフィンガープリントで表示された形で 記録することを期待する。

サイトは、接触のたびに新しいプロポーザルをユーザエージェントに送るのではなく、既存の同意IDを送っても良い。これは、 1)サービスとユーザエージェントが既に合意に達していることを示す、 2)どのプロポーザルとプライバシープラクティスがの下で動いているかを合図する、 3)同意で参照されているデータエレメントを要求する、という意味がある。 ユーザエージェントは断っても良いし、要求されたデータで応じても良いし、あるいは該当同意の記録がないか新しく欲しければ、 完全なプロポーザルを要求しても良い。

サイトはまた、プロポーザルの一部として、テンポラリIDあるいはペアワイズID(TUID/PUID)をユーザエージェントが戻った時に 自動的にサイトに送るよう要求する能力がある。PUIDはクッキーに似ているがP3P制御下にあり、数値に限られている。

我々の設計ではアプリケーションは、複数のやり取り、プロポーザルの保存能力、ユーザエージェントやサーバ側のデータレポジトリの使い方、 同意レポジトリのサイズに関する我々の仮定や期待とは独立したインプリメントが十分に可能である。

1.4 Terminology(専門用語)

Assuring Party(保証機関)
P3P内部において、保証機関は合法的な実体(個人 または 団体)であり、プロポーザルに関して保証を行うものである。 保証はサービス、または第三機関からくるものです。保証機関は、プロポーザル内において、保証文の一部として、何を 証明するか、特定されたURI、またはメタデータスキーマの意味を明らかにしなければならない。
Agreement(同意)
サービスとユーザーエージェント双方が同意したプロポーザル。この同意はレルム内におて使用され、しばしば同意ID として用いられる。このような同意性は、将来のP3Pにおける証明書や電子署名の将来性のサポートにより強固になります。
AgreementID(同意ID)
ある共通のプロポーザルに対してお互いのパーティーが同意に至った事を示す小さな単位情報。同意IDは、プロポーザルを 受け入れた事に対するフィンガープリントです。P3Pヘッダー内の同意IDの存在は、与えられたレルムにとって同意が 実施されていると言う決定的な宣言となります。
Data Element(データエレメント)
個々のデータ要素。例えば、名字、電話番号など。
Data Category(データカテゴリ)
データエレメント属性、またはTrust Engineがどんなエレメントタイプが審議中であるか決定するために使われるデータセット。 例えば、"Contact Information."。
Data Set(データセット)
グループ化されたデータエレメント。例えば、"User.Home.Postal."。データセットはピリオドの区切りにっよって 表現されている。
Fingerprint(Hash, Digest)(フィンガープリント)
あるいくつかのデータをハッシュ関数にかけた結果として出来た固定サイズの値。フィンガープリントは簡単に計算できますが、 ちょっとした変化を元の情報に加えても事実上予期できない値が結果として出来てきます。したがって、フィンガープリントは、 しばしばテーブルやデータベースへ入るキーまたは情報の安全保障の手段として用いられます。我々は、[MD5]というアルゴリズム をP3Pフィンガープリント用に使用しています。これは、128-bitの値を生み出し、P3Pのコミュニケーションのなかでその値は、 暗号化され交換されています。
Preference
ユーザーエージェントがどんな行動をするか、何時会話に入ることを許可するか、またはサービスとの交渉等に関する規則(規則集)。 プリファレンスは形式の整った計算できる文で表現される。(例:APPEL プリファレンスは言語を交換する) この文書のなかで、プリファレンスはユーザーエージェントとサービス間に達するいろんな同意を管理します。
Proposal
プロポーザルは、いくつかのプライバシーステートメント(主張された身元、URI、保証等の情報)の集まりです。 プロポーザルは常にサービスの観点から作り出されるもので、サービスにとっての情報の確認を含んでいます。 しかし、プロポーザルは、ユーザーによって作り出され、サーバーに許可のために送られる事もあります。
PUID
PUID := hash(UUID(Realm, agreementID)). PUIDは、長期間、特定の同意のもとに、自分自身をサービスに対しユーザーであると分からせるためのオプション。 直接、特殊なレルムと同意に相当する。また、Get 要求と一緒に ReturnID の一部として、P3Pヘッダー内で送られる。
Realm(レルム)
レルムは、与えられた同意が発行された元に要求したエクスペリエンス スペースです。レルムはプロポーザルを適用した領域として、 広い意味で定義されています。レルムは、いくつかのURIから参照されます。どの同意がURIで実施されているかの最終判断は、 同意IDの存在によって決定されます。それぞれのURIは、URIによって限定された特殊なリソースを名前付けます。例えば、 HTTP スキーマの中で、オブジェクト(home.html)で終了しているURIは、特殊なオブジェクトを適用します。また、URIが path http://www.w3.org/P3P/ の場合、URIは、path 配下の system tree を参照します。 もしプロポーザルに電子署名が無い場合、それぞれのURIはオリジナルのサーバーとドメインが同一でなければなりません。 ドメイン マッチングは、HTTP state management mechanism internet draft [STATE] に含まれています。
Repository
複数の個人情報をまとめて保存しておくファイルやデータベース。プリファレンスビューロは、この個人情報テーブルと同意IDテーブルから構成されている。
ReturnID
ReturnID=(agreementID, [PUID], [TUID])
Service
プロポーザルを発行しデータを要求するプログラム。この定義では、サービスはサーバー(サイト)、ローカルアプリケーション、 ローカルなアクティブコード(ActiveX や Java applet)または他のユーザーエージェントである。
Statement(ステートメント)
P3Pステートメントは、データエレメント、データセット、カテゴリの集まりに関連がある privacy practice disclosures の集まりです。 列挙された要素は、埋め込まれたデータ要求のように動きます。データを参照しないステートメントは、データを要求しません。
TUID
TUID := hash(UUID(session salt))。 セッションで使うためにサービスに返すための、ユーザエージェントで作られるテンポラリのIDである。 新しいTUIDは、各サービスと各セッション毎に作られなければならない。 もし、サービスが別のセッションにまたがって持続させたいならば、サービスはPUIDを要求すべきである。
URI
URI(A Uniform Resource Identifier)は、Webリソースを確認するために使う。 URIシンタックスとセマンティクスの情報を定義については、"Uniform Resource Identifiers (URI): Generic Syntax and Semantics," (RFCs 1738 and RFC 1808の置換)を参照のこと。このドキュメントは、以下のURIを参照する。

propURI:プロポーザルを発行するURI。
postURI:情報をどこに送るかを示すURI。
discURI:プロポーザルのプライバシーステートメントを自然言語で記述したURI。

User Agent
利用者が定義したプリファレンスをもとに、サービスと利用者間の仲介を行うことを目的としたプログラムである。 利用者は1つ以上のユーザエージェントを持つかもしれない。また、利用者のディスクトップにある必要はない。 しかし、どのエージェントも利用者だけが制御し、使えなければならない。 利用者とそのユーザエージェント間との信頼関係は、P3Pの範囲外で管理されるものである。 例えば、エージェントは利用者のOSまたはWebクライアントの一部、またはISPかプライバシーProxyの状況により信頼される。
UUID
PUIDとTUIDを作るためのメカニズムで使う。UUDは[UUID]で定義される。P3PではUUIDの方法を規定しない。

1.5 Assumptions(仮定)

P3Pは、動作する環境と解決すべき問題についていくつかの仮定を行っている。

  1. P3Pは、サービスがそれ自身の身元情報をプロポーザルに含むことを許す。登録したドメインのオーナーが サービス本体と一致しない場合もあるので、この情報は必ず提供されなければならない。
  2. 身元や同意に関する強い承認が、プロトコルの将来のバージョンで提供される。 この際P3Pには、使用されるはっきりした/有力なPKIモデルは存在しない。 将来的にはユーザとサービス両方が署名と認証を必要とするかも知れない。
  3. 我々は、通信のセキュリティがP3P自身以外の手段で達成されると仮定している。 (参考:[SSL])そのためP3Pでは、ディスクや通信中の暗号化による情報の保護については、 そのメカニズムを提供していない。
  4. P3P同意は、端末間のもの。つまりユーザーとサービス間のもの。回線プロバイダやインターネットプロバイダ、 プロキシのような仲介者は、サービスとユーザ間のデータ交換に関係しているかも知れないが、プラクティスについては、 同意に含まれていない。
  5. P3Pが[HTTP1.1]を元にしたプロトコル拡張 [MANDA]を有効に利用することができる一方で、P3Pは [HTTP1.0]サーバ/プロキシで動作できなければならない。
  6. P3Pは、HTTP経由で発生したり交換された全てのデータを扱う。

2. Agreement Scenarios(同意のシナリオ)

以下のシナリオは、P3Pが使われる可能性のあるいくつかの場面を図解するために設計されている。 各シナリオは、それぞれ異なるP3Pの特徴を強調している。シナリオ1はどのようにして基本的なP3P同意が確立されるかを示す。 シナリオ2、3は既に同意に達しているサイトにユーザが戻った際に何が起きるかを示す。シナリオ4、 5は同意を与えられたデータレポジトリの使用について強調している。

これらのシナリオは交渉が発生しない場合の相互作用を図解している。 しかしどのシナリオもサイトが初めから複数のプロポーザルを行うシナリオに拡張されたり、 サイトとユーザ間で一連のプロポーザルやカウンタープロポーザルが交わされるシナリオに拡張される可能性がある。 Appendix 1 のシナリオ拡張例は、交渉の一例を含んでいる。

以下の表は、各シナリオの特徴をまとめたもの。表中の"-"は、そのシナリオでは仮定されない(中立な) という意味を表す。
 
Scenario Existing Agreement New Proposal PUID Requested Data Requested Data Written
1 No Yes Yes - -
2 Yes No No - -
3 Yes Yes Yes - -
4 - - - Yes No
5 - - - Yes Yes

シナリオ1) 同意は存在しない。サイトはプロポーザルを送りPUIDを要求する。

  1. ユーザは、CoolCatalogのホームページ(CoolCatalog/*)に行く。 彼女はそこに1度も行ったことがないが、そこはP3P準拠である。
  2. CoolCatalogがプロポーザルを作る。そこにはプライバシープラクティス、情報開示、そして それらが当てはまるデータエレメントの情報が含まれている。この例では、サービスは自動的にReturnIDの一部として 将来PUIDが与えられることを要求する。
  3. ユーザはプロポーザルに合意し、プロポーザルに規定されたレルムに対する今後すべての要求上でReturnIDの中にPUIDを含めて 送ることに合意する。
プロトコルシナリオ:クライアントはOPTヘッダー([MANDA])参照)をサーバに送る。 サーバがP3Pをサポートしていない場合は、内容のみを送り返す。 (この内容とは、従来のCGIメソッドを使って情報をサーバに送るHTMLフォームになるだろう。) サーバがP3Pをサポートしていてかつ関連のプロポーザルを持っている場合は、 サーバは409コードとP3Pクライアントに対するプロポーザルをHTMLヘッダーもしくはURI参照の形で返す。

シナリオ2) レルム同意が存在する。

  1. ユーザは前にシナリオ1を終了している。
  2. ユーザはCoolCatalogのページに戻り(既存の同意に従いながら)同意のレルム中のすべてのページ 要求にReturnIDを与える。
プロトコルシナリオ:クライアントはサーバにOPTヘッダとすべての関連したReturnIDを送る。 サーバは関連した内容を返し、それに続くP3Pデータ要求(同意ID付きTXD)を送ることができる。

シナリオ3) レルム同意が存在し、新しいプロポーザルが発生する。

  1. ユーザは前にシナリオ1を完了している。
  2. ユーザはCoolCatalogに戻りすべてのページ要求に同意(1)のReturnIDを与える。
  3. ユーザはCoolCatalogの注文ページ(CoolCatalog/Order/*)に行き、同意(1)のReturnIDを送る。 サービスは注文ページのポリシーがサイトの他のページと異なるため、新しいプロポーザルを作る。 この場合、実際の注文情報を要求する。
  4. ユーザは新しいプロポーザルを考慮する。2つの場合があり、それらは新しいPUID(ReturnIDの一部 としての)が要求されるかどうかで違う。

シナリオ4) サービスがクライアントのレポジトリからデータを要求する。

シナリオ5)クライアントが情報をサービスに書き込む。

プロトコルシナリオ:シナリオ5シナリオ4の延長であり、 シナリオ4でユーザエージェントがサーバにOKと任意にTXD を送って終了したものと仮定している。今、サーバは自らのTXDと共に適切なデータエレメントをクライアントに送る。 もし成功すれば、ユーザエージェントはOK/200理由コードで応答する。失敗した場合にはクライアントはSRY/500理由コードで応答する。

3. Transport, Primitives and Reason Codes

以下のセクションは、同意を形成したりその後のデータを転送するのに必要な原型を規定している。

3.1 Data Transport

P3Pは、原型とP3P HTTP拡張のヘッダの内容を交換するように設計されている。しかし、何らかのHTTPインプリメント (例えば巨大なグラフィック画像)において、PROPTXD の原型がヘッダの予定した長さを越えてしまう場合が考えられる。 よってRDF/XMLのアプリケーションとして、P3Pインプリメントは、 RDF/XML交換の方法が完全に規定されている時、その方法に従うことができなければならない。 それらの方法とは、以下のものが考えられる。

  1. HTTP拡張ヘッダ内。
  2. クライアントまたはサーバがHTTP GETリクエストで得る特定のURI
  3. XMLまたはHTMLの中身の一部分として。HTMLであれば古いインプリメントで返されるべきではない。

P3P 1.0インプリメントは、上記1-3のそれぞれをサポートしなければならない。シナリオを使ってそれらを解説する。 以下の表は各シナリオの特徴、propURIpostURIを使うかどうか、 プロポーザルが内容に組み込まれているかどうかをまとめたもの。
Scenario Proposal-URI Post-URI Proposal Embedded in Content
6 Yes - No
7 No - Yes
8 - Yes -

シナリオ6)サービスがURIでプロポーザルを参照する。

サービスは、中継プロキシのキャッシュが長いHTTPヘッダを切り取るかあるいは、サービスのプロポーザ ルがプロキシに保存されることを願っている。

  1. ユーザはサービスにGETを送り、プロポーザルを要求する。
  2. サービスは、propURIを含んだpropメッセージを送る。
    <PROP agreeID="94df1293a3e519bb"
    propURI="http://www.CoolCatalog.com/P3P.RDF" />
  3. ユーザは、propURIにGETを送る。
  4. propURIでサービスはプロポーザルを送る。

propURIはレルムの定義に関係ない。レルムに基づいて信用を決定する必要のあるインプリメントは、プロポーザルで定義されているレルム またはシナリオ1で取って来た本来のURIについて、決定しなければならない。

シナリオ7)サービスがHTMLコンテント内のプロポーザルを組み込む。

コンテンツプロバイダは、修正したHTTPヘッダなしで簡単なプライバシープラクティスを宣言したがるかも知れない。 そのような場合、サイトはHTML HEADタグ内に簡単なP3Pプロポーザルを埋め込んでも良い。 P3Pプロポーザルはタグ(< tag> content</tag>)内に内容を含まないので、古いバージョンのHTMLブラウザがそのようなデータを 与えてしまうことを心配する必要はない。しかしそのような提案には以下のような制約がある。

  1. HEADタグ内に埋め込まれる必要がある。
  2. プロポーザルはpropURIを参照しなければならない。
  3. どのようなレルムに対してもただ1つのプロポーザルしか作成されない。重複したプロポーザルは認 められない。

従って、

  1. ユーザはサービスにGETを送り、オプションのヘッダーの存在を通してプロポーザルを要求する。
  2. サービスは、ヘッダなしで内容を返す。
  3. ユーザエージェントはプロポーザルのためにHTMLの内容のHEADタグを調べなければならない。
  4. そのようなヘッダを発見すると、シナリオ6に書かれているようにpropURIからプロポーザルを取ってくる。

注意:内容の中でプロポーザルを探さなければならないというオーバーヘッドが潜在的にあり、 また埋め込まれたプロポーザルでサイトを管理することが複雑なためこの方式を積極的に推奨できない。従ってこの方式は、 1)P3Pデータを使わない2)少数でシンプルで重複しないプロポーザルを持つサイトのみで使用されるべきである。

シナリオ8)クライアントがURIに情報をポストする。

サービスは大きなバイナリーファイルを要求するか、またはFORM/CGIのようにデータを処理することを好む。 そしてPOSTを使用して提供された情報を求める。

  1. ユーザはサービスにGETを送り、プロポーザルを要求する。
  2. サービスはpostURIを含むプロポーザルを送る。
  3. ユーザはRDF/XMLでエンコードされた情報をpostURIにポストする。

postURIはレルムの暗黙の部分である。従ってたとえURIがレルムURIの中にないとして も、情報は同意IDの下で提供されたpostURIに送られる。

3.2 P3P Requests

ユーザエージェントは、"GET"、"POST"などの標準的なHTTP方式を使ったサーバと通信する。 P3Pはエージェントとサービス間でデータを転送するために命令拡張メカニズム[MANDA]を使う。 サーバに最初の要求を設定する際、ユーザエージェントは自身がP3P準拠であることを知らせるためにp3p-opt-headerを含んで良い。 もしユーザエージェントがOPTヘッダを送り、サーバがP3Pプロトコルをインプリメントする場合には、サーバは以下を必ず行わなければならない。

  1. サーバがP3Pを理解することを示すOPTヘッダを送る。
  2. サーバが問題のページを含むプロポーザルを持っている場合、それを送らなければならない。
[1] p3p-request = start-line 
*message-header 
"OPT" ":" p3p-opt-header CRLF 
[p3p-header-prefix "-P3P1.0: " 1*p3p-content CRLF] 
[message-body] 

; start-line, message-header, CRLF, and  
; message-body are as defined in the  
; HTTP 1.1 specification [HTTP1.1]. 

[2]
p3p-opt-header
=
p3p-extension ";" "ns-" p3p-header-prefix
[3]
p3p-extension
=
`"` "http://www.w3.org/TR/1998/WD-P3P10-syntax-19980702/proposal.dtd" `"`
[4]
p3p-header-prefix
=
1*digit
[5] digit = "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"
[6] yesno = `"` ("0"|"1") `"` ; 0 = No, 1 = Yes

3.3 Negotiation Primitives(交渉の原語)

以下の表は、P3Pプリミティブの意味とその関連と項、内容、HTTP理由コードをまとめたもの。 すべてのプリミティブはサービスまたはエージェントから送られるだろう。
Message  Meaning  After Receiving  Expected Response  Data in Message  Optional in Message  HTTP Return Code
OK Proposal acceptable or data transfer successful PROP or TXD none MD5 hash of agreement or data transferred   2xx
PROP Here's a Proposal Any time OK, SRY, or PROP Text of a proposal Signature of initiator, fingerprint of previous Proposal 409
SRY Sorry - request not processed PROP, TXD PROP or none Reason code and MD5 hash of proposal or data transferred Which practices are unacceptable 409
TXD Transfer Data Any time none, OK or SRY Data element names and values to be written, as requested Agreement 2xx

このセクションでは各動作を説明し、誰が(ユーザまたはサービス)どんな状況で動作を始めることが できるかを規定する。

3.3.1 Success (OK)

このメッセージは参加者がプロポーザルに同意した時またはデータ転送が成功した時に送られる。 プロポーザルに対する返答がOKの場合、OKメッセージは 同意IDを含む。OKTXDメッセージに答えて 送られる場合、OKメッセージはすでに転送されたデータの MD5ハッシュ値を含む。

3.3.2 Here's A Proposal (PROP)

どんな場合でも、いずれかの参加者は相手側に1つかそれ以上のプロポーザルを送ることができ、これらは、prop-msgの中で送られる。 プロポーザルの条件は、片方がそれらに合意するまで(OK またはTXD 原語を使って返答することによって)固まっていない。 プロポーザルはもしそう望めば、それを作成する者が署名して良い。さらにPROPは、 片方から受け取ったプロポーザル同意IDを含まなければならない (これによって片方は交渉の記録をたどることができる)。サイトがデータエレメントが任意であることを表したい場合は、 プロポーザル内でそれを行っても良い。ユーザエージェントは、適切だと判断した時に任意のエレメントを返す。 任意の目的やクオリファイヤを持つプロポーザルに関する同意ははっきりしないが、ユーザエージェントが一方の目的が合意に達し、 一方は合意しなかったと表現するための明確な方法はない。従って、 任意の目的やクオリファイヤは複数のはっきりしたプロポーザルを通して表現されなければならない。

プロポーザルがユーザエージェントに自動的に受領されない場合、3つのオプションがある。 ユーザエージェントはどの返答が適切かどうかを決定するために、ユーザにガイダンスを指示することを含みながら何らかの方法で プログラムされていなければならない。

  1. プロポーザルを拒否する(SRY)。これは、サービスから新しいプロポーザルを受けたいということを意味する。 もし、ユーザエージェントがSRYメッセージを送り続ければたとえ同じプロポーザルが繰り返し送られても、 無限ループの可能性があるということに注目しなければならない。ユーザエージェントは、交渉の回数が十分であるかを決定した後、 この場合を検知しその他の技術を使って答えるための十分な状態を維持する責任がある。ユーザエージェントが十分に手におえない状態に見えたら、 サービスは結局プロポーザルを変更することを選択する。
  2. それ自身のプロポーザルを返す。これは拒否を意味するが、サービスが受け入れた場合ユーザが受け入れ可能と考えられるような代案を提供する。 サービスにはユーザが喜んでそれを受けるように申し込むことを仮定する権利がある。
    注意:ユーザエージェントによるカウンタープロポーザルの作成は、P3P1.0準拠には必要ではない。
  3. 交渉をやめる。ユーザエージェントが返答する必要は全くない。ユーザエージェントは、サービスに 新たな要求を送らない。

もしプロポーザルがユーザエージェントに承認されれば、ユーザエージェントはOKとともにデータをサービスに送らなければ ならない。 同意IDのもとでデータを送ることで、ユーザエージェントはプロポーザルを承認したことを示す。 TXDには承認されたプロポーザルの同意IDが含まれ、サービスは送られたデータを調べることで、 ユーザがどのデータエレメントを送ったのかを確定することができる。

3.3.3 Sorry (SRY)

このメッセージは、プロポーザル(PROP) またはデータ送信(TXD)に対し送られる。 これは、要求が処理されなかったことを示す。拒否には、 理由コード同意IDの2つの情報が含まれている。理由コードは どのようなタイプの要求が拒否されたのか、なぜ拒否されたのかを示す。複数のプロポーザルが送られるため、同意IDはどの要求が 拒否されたのかを知る必要がある。プロポーザル拒否の特定の原因は理由コードにある。

最後に、SRYメッセージは、データ送信が失敗した時にデータ送信(TXD)メッセージに対して使うことができる。 送信者は、TXDメッセージを再試行すべきではない。

注意:P3P1.0は、プロポーザルが拒否された場合プロポーザルのどの部分が拒否されたのかをはっきりと指摘することはできない。 そのような機能はP3Pプロトコルの将来版に追加される予定である。P3P1.0では、詳細な交渉を要求するサービスやユーザエージェントのための可能な 予備システムは、カウンタープロポーザルを送り、受け入れられない元々のプロポーザルの部分を修正、除去することである。 インプリメントする人は、ユーザのプライバシープリファレンスを公開することに配慮が必要である。

3.3.4 Transmit Data (TXD)

プロポーザルを受け取った後、ユーザエージェントは要求されたデータを送る。ユーザエージェントは、 同意IDを含む必要がある。サービスは、同意がまだ有効であるならそれを与えなければならない。 同意IDが有効でないまたは存在しない同意の時は、 サービスはSRYメッセージと共に レスポンスコードを430(Unrecognized Agreement)に設定してTXDに返さなければならない。

プロポーザルが任意のエレメントを要求した場合、TXDは要求されたデータエレメントの全てを含まないかもしれない。これらのうちいくつを転送するかを決定するのはユーザエージェントによる。同意は、ユーザにオプション項目を送った結果(おそらく報酬)を知らせてもよい。

3.3.5 Ending negotiation with final

交渉を終わらせるための原語はない。代わりに、この機能は、P3Pメッセージのクオリファイヤを通して提供される。 どんなPROPSRYメッセージも finalクオリファイヤに1を設定できる。サービスがfinal="1"クオリファイヤと共に PROPを受け取る時、それは、 OKまたはSRYで返答しなければならない。この返答は、 要求されたオブジェクトは同意なしでは返却されないと書かれているHTMLドキュメントと同じくらい簡単かも知れないが、 content本文を含んでいなければならない。ユーザエージェントがfinal="1"のクオリファイヤと共に PROPを受け取る時、ユーザエージェントは、 サービスがその"最終申し込み"を提示し、交渉を続けることは無意味であることを理解しなければならない。

3.3.6 Syntax of Negotiation Primitives

[7]
p3p-content
=
OK-msg | PROP-msg | SRY-msg | TXD-msg
[8]
OK-msg
=
"<OK" message-attribute "/>" 
[9]
SRY-msg
=
"<SRY"
[" final=" yesno] ; default is 0 (No)
message-attribute "/>"
[10]
TXD-msg
=
"<TXD" message-attribute ">" data-xfer "</TXD>"
[11]
message-attribute
=
agreementid-attribute |  
reason-attribute |  
data-hash-attribute
[12]
agreementid-attribute
=
" agreeID=" `"` agreement-id `"`
[13]
reason-attribute
=
" r=" `"` reason-code `"`
[14]
data-xfer
=
<XML formatted data element name-value pairs>
[15]
agreement-id
=
<base64 of 128 bit MD5 digest of proposal as per RFC 1864>
[16]
data-hash-attribute
=
" dh=" `"` <base64 of MD5 digest of data-xfer> `"` 
; used to acknowledge the receipt of data

3.4 Reason Codes Definitions

理由コードはP3Pヘッダの中でオプションとして送られる。全てのSRYメッセージは暗黙の400理由コードを持ち、 その他すべてのメッセージは、暗黙の200理由コードを持っている。これらのデフォルトを無効にする メッセージの中の理由コードも含まれる。 理由コードは大きく3つのクラスに分けられる。Successコード、rejectionコード、errorコードである。これらのクラスについての詳細を以下に示す。

3.4.1 Successコード

理由コードのこのクラスは、要求が正しく受け取られ、理解され、了承されたことを示す。

200 OK

3.4.2 Rejectionコード

理由コードのこのクラスは、要求が正しく受け取られ、理解されたが、了承されなかったことを示す。これらのコードは SRYメッセージでのみ送られなければならない。

400 Other Rejection

430 Unrecognized Agreement

431 Agreement Expired

432 Proposal Rejected

433 Data Unavailable

434 Data Not Accepted

3.4.3 Errorコード

理由コードのこのクラスは、要求が正しく受け取られなかったか、または受け入れられたが理解されなかったことを示す。 これらのコードはSRYメッセージでのみ送られなければならない。

500 Other Error

530 Invalid Format

531 Data Transfer Unsuccessful

[17]
reason-code
=
200 | 400 | 430 | 431 | 432 | 433 | 434 | 500 | 530 | 531

4. P3P スキーマ

このセクションでは、1) P3Pプロポーザル 2) データ転送のスキーマを説明する。プロポーザルで使用される英語の用語説明は、 [HARMV]に、より詳しく記載されている。

4.1 プロポーザル

以下の文をコード化する。ここでプロポーザルは1つ、ステートメントは2つでそれぞれに論理ANDを含んでいる。 "Other disclosures"は自動的にプロポーザル全体に当てはまる。

PrivacyAssuredのメンバーであるCoolCatalogは、Webページhttp://www.CoolCatalog.com/catalogue/に 以下のstatementを載せている。

私たちは、あなたの名前、年齢、性別を集める。それは、あなたが興味を持ちそうな衣服のタイプを見つけたり、または当方のリサーチ、 商品開発の目的でエントリーカタログページをカスタマイズするためである。この情報を身元が確認できるような方法では使用しない。また、 注文品を届けるためにあなたのお届け先情報を収集する。これは、当然であるが身元が判明する。この情報は社外に再び出ることはない。 あなたからの情報にアクセスできる可能性は提供しない。しかし、保持および脱退方針をもっている。詳しくは、 当方のプライバシーページ http://www.CoolCatalog.com/PrivacyPractice.htmlを参照のこと。

以下は良い形式的な記述である。コメントがセミコロンの後ろにある:

in proposal schema
CoolCatalog makes entity
this statement for http://www.CoolCatalog.com/catalogue/ ;   realm
with assurance from PrivacyAssured
we read ; read is default
   (User.Name.First) ; required is default
   (User.Bdate.Year optional)
   (User.Gender)
    for the purpose of  (2 3) ; Customization of the Site to Individuals, R&D
    in (0) ; Non-Identifiable Form
    and the recipients are (0) ; only ourselves and agents
    with consequence of ("a site with clothes you'd
                                        appreciate.") ; optional
we read&write
    (User.Shipping.) ; this is a whole data set.
    for the purpose of (0) ; Completing the Current Transaction
    in (1) ; Identifiable Form
    and the recipients are (0) ; only ourselves and agents

access disclosure (3) ; no access to identifiable data
other disclosures (0,1) ; we make disclosures
         regarding changing agreement and retention

at http://www.CoolCatalog.com/PrivacyPractice.html

4.2 RDF Encoding of プロポーザル

以下のRDFは、上記にあるような情報を捕捉する。P3Pプロポーザルとは、RDFおよび、 有効でよく形成されたXML構文モデルに基づいて 正しく表現された文章でなければならない。しかしプロポーザルを短くするために使われる、P3Pプロポーザルと標準RDFを わずかに区別する2つの仮定がある。

  1. RDF namespaceと<RDF:RDF>タグはオプションで省略されても良い。
  2. prefix name spaceのないタグは、P3P namespaceと仮定される。
<?xml:namespace ns="http//www.w3.org/TR/1998/WD-P3P10-syntax#proposal.DTD" prefix="p3p"?>
<?xml:namespace ns="http://www.w3.org/TR/WD-rdf-syntax#" prefix="RDF"?>
<RDF:RDF><PROP realm="http://www.CoolCatalog.com/catalogue/" 
 entity="CoolCatalog" agreeID="94df1293a3e519bb"
 assurance="http://www.TrustUs.org">
  <USES>
  <STATEMENT purp="2,3" recpnt="0" id="0"
   consq="a site with clothes you'd appreciate.">
    <WITH><PREFIX name="User.">
     <REF name="Name.First"/>
     <REF name="Bdate.Year" optional="1"/>
     <REF name="Gender"/>
    </PREFIX></WITH>
  </STATEMENT>
  </USES>
  <USES>
  <STATEMENT action="read&write" purp="0" recpnt="0" id="1">
    <REF name="User.Shipping."/>
  </STATEMENT>
  </USES>
  <DISCLOSURE discURI="http://www.CoolCatalog.com/PrivacyPractice.html" 
   access="3" other="0,1"/>
</PROP></RDF:RDF>

4.2.1 The PROP element.

<PROP>
1つかそれ以上のstatementを含む。各ステートメントはデータエレメントに適用されるような情報開示を含む。
agreeID
同意ID(受け入れられたプロポーザルのフィンガープリント)。
final
交渉の最終結果を示す。
propURI
プロポーザルが引き出されるURI。
postURI
情報が送られるURI。
realm
プロポーザルが適用されるURIのリスト。
entity
legal entityを記述するために使用されるテキストフィールドで、サービスを提供し、ユーザエージェントと同意を結ぶ。
assurance
entityがそのプロポーザルを守ることを証明するサービスで、データの処理においてガイドラインに従うか、あるいはその他の関係ある主張に従う。
agrexp
同意が期限切れになる日付。デフォルトは6ヶ月。同意の期間終了は、同意に基づいてユーザエージェントがサービスに データを転送することができる最後の日である。 サービスは、同意に基づいて 集められたデータに対し、期限切れの後でさえ同意の制限を受ける。 プロポーザルは、HTTPヘッダの"EXPIRES"に示された時間後に期限切れとなる。デフォルトは1時間。 
optional
プロポーザルがオプションかどうかを示す。(セクション4.3.5参照)

realm(レルム)属性は、同意の範囲を定義する。これは、ユーザエージェントにより使われるが、例えば、ReturnIDを 自動的に送るかや、データ転送要求に応じるかなどの決定を行う。プロポーザルがデジタル方式でサインされない場合は、 各レルムのURIは、サーバのドメインと、"domain-match"[Kristo参照] (ドメインが一致)しなければならない。 プロポーザルがデジタル署名される場合は、 元々のレルムの外のサーバが既存の同意に基づいてデジタル署名したプロポーザルを作成した時はいつでも、 レルムは拡大され現在の要求URIを含む。

注意点として、ユーザエージェントは現在の要求URIが既存の同意に影響されるのかどうかを決定するためにレルムを使う。 ユーザエージェントは、もし有効な同意がReturnIDを要求した場合、その要求とともに自動的にReturnIDを転送する。このことは、 サービスが状態を保持したり、客レベルの統計を保存したりする機能を与えている。
[18]
PROP-msg
=
`<?xml:namespace ns="http://www.w3.org/TR/1998/WD-P3P10-syntax-19980702/proposal.dtd" prefix="P3P"?>`
( short-proposal | long-proposal |
(`<?xml:namespace ns="http://www.w3.org/TR/WD-rdf-syntax#" prefix="RDF"?>`
<RDF:RDF>" (short-proposal | long proposal ) "</RDF:RDF>"))

ショートプロポーザルは、サイトがエージェントが同意を知っていると仮定したいとき、 あるいはエージェントにpropURIで示される完全なプロポーザルを参照させたいときに送られる。
[19]
short-proposal
=
( "<PROP agreeID=" `"` quoted-string `"` ">" |
  "<PROP propURI=" quoted-URI ">" )
 "</PROP>"

ロングプロポーザルは必要な属性のすべてを含んでいる。
[20]
long-proposal
=
"<PROP"
[" final=" yesno] ; default is 0 (No)
[agreementid-attribute]
[" agrexp=" `"` datetime `"`] ;default is six months
" realm=" `"` URI *(" " URI) `"`
" entity=" quoted-string  
[(" assurance=") quoted-URI]
[" postURI=" quoted-URI]
[" optional=" yesno] ;default is 0 (No)
">"
1*statement-block 
disclosure
"</PROP>" 
[21]
schemaURI
`"` "http://www.w3.org/TR/1998/WD-P3P10-syntax-19980702/proposal.dtd " `"`
[22]
quoted-string
=
`"` string `"`
[23]
strin
=
<[UTF-8] string (with " and & escaped)>
[24]
quoted-URI
=
`"` URI `"';`
[25]
URI
=
<URI as per RFC 2068 [URI]>
[26]
datetime
<date/time as per section 3.3 of RFC 2068>  

4.2.2 Processing Realms and URI's

Schemes(スキーマ)

P3Pは、HTTPと関連するschemes (HTTPSのような)用に設計されている。そのプロトコルは、将来拡大され、 FTPやNNTPなどのその他のスキーマを使ってデータ交換、交渉をサポートする可能性がある。特にHTTP、HTTPSの場合、 HTTPを使用して届いた同意は、HTTPS schemesを使用するURI要求をサポートする。例えば、 ユーザがrealm="http://www.romulus.com/"に同意した場合、 "https://www.romulus.com"は、レルムの一部と考えられる。しかし、 ユーザーがrealm="http://www.romulus.com/"に同意した場合、 "https://www.romulus.com"は、その同意の影響を受けない。

entity(実体)

entity属性は、legal entityと連携可能なドメイン名とパスを参照する。デジタル署名がない場合、 この機能はドメイン名登録から供給される権威のない確認メカニズムとドメイン名の責任機関を経由して legal entityの記録をたどる唯一の方法である。さらにentity属性は、証明がrealm属性として使用されていない時に、 realm内のURIがドメイン一致[KRISTOL]しなければならない"root" ドメインとして使用される。さらに、 客が要求したURIは、entity属性にドメイン一致しなければならない。

realm(レルム)

HTTP要求のための与えられたURIが特定の同意に従うかどうかを決定するために使用される URIを表すrealm属性。Realmは、entity属性にドメイン一致する1つまたは複数の URIであるか、あるいはURIrealmのセットを表すデジタル認証を示す URI。以下のシナリオを考えてみてもらいたい。

  1. ユーザがhttp://www.romulus.comを要求する。
  2. サービスがrealm="http://maps.romulus.com/ http://www.romulus.com/"とentity="romulus.com"のプロポーザルを返却する (www.romulus.com とmaps.romulus.com.は、要求URI のドメインのルートである romulus.com. とドメイン一致することに注目してもらいたい)。プロポーザルは、PUID(ID.PUID)、ユーザのニックネーム (User.Name.Nickname)、家の住所(User.Home.Postal.)誕生年月日(User.Bdate.YearUser.Bdate.Month) を要求するが、これはサイト管理とユーザの経験への適合を目的とした身元のわからない使用のためである。
  3. ユーザは、プロポーザルを受入れ、同意 ID=Xで同意する。
  4. ユーザは、同意 ID=Xの realmに当てはまるmaps.romulus.comを訪れ、自動的にPUIDを  maps.romulus.com.に送る。

4.2.3 The STATEMENT element

<STATEMENT>
データエレメントに適用される目的とそのクオリファイヤ。
purp
Webに関連したデータ処理の目的。
recpnt
データが分配されるサービスプロバイダやそのエージェント以外の組織の地域、領域。
id
個人的な身元確認可能な方法で使用されるデータ。他のソースからのあなたに関する身元確認可能な 情報とのリンクを含む。
action
データを読む。または読み書き。
source
ネイティブなP3Pエージェントのインタフェース以外の方法(例:フォーム)で情報を求めることができる。
[27]
statement-block
"<USES>"
"<STATEMENT" 
[" action=" `"` action `"`]
[" purp=" `"` purpose *("," purpose) `"` ] ; default is 0 (No)
[" id=" yesno] ; default is 0 (No)
[" recpnt=" `"` recipients *("," recipients) `"` ]  ; default is 0 (No)
[" consq=" quoted-string]
[" source=" `"` ("agent"|"form"|URI) `"`] ; default is agent
">"
*(datablock)
"</STATEMENT>"
"</USES>"
[28]
purpose
=
"0" | ; Completion and Support of Current Activity
"1" | ; Web Site and System Administration
"2" | ; Customization of the Site to Individuals
"3" | ; Research and Development
"4" | ; Contacting Visitors for Marketing of Services or Products
"5" [" (" string ")"] ; Other Uses
[29]
recipient
"0" | ; only ourselves and our agents
"1" | ; organizations following our practices
"2" | ; organizations following different practices
"3"   ; unrelated third parties or public forum
[30]
id
=
yesno ; default is 0 (No)
[31]
action
=
("r" | "rw") ; r=read, rw=read&write, default is read

4.2.4 The source 属性

この属性は、ネイティブなP3Pエージェントのインタフェースではなく、フォームを通して情報を求めることができる。これは、プロポーザルのエレメント名を連携したHTMLフォーム(HTTP content) のフォームのINPUT名と関連させることにより達成される。HTMLクライアント/P3Pエージェントは、適宜値を自動入力する可能性がある。

以下の場合にP3Pエレメントが要求される。

  1. source 属性は"フォーム"と同等で、フォームのなかのエレメントの1つは、Form.Data_のabstract デ ータエレメントである。
  2. HTMLフォームフィールドのINPUT名は、プロポーザルの中のデータエレメント名に該当する。

このフィールドの許容値は、以下の通りである。

agent.. デフォルト値。P3Pエージェントは、ユーザを要求しなければならない。
form.. 要求は、連携したHTML内容の暗黙のフォームを通して起こる。
URI.. 与えられた情報は、与えられたURIのresourceによって要求される。

例えば、サービスは自分の具象的な制御の下で要求を持ちたがる。また、サービスはデータをシナリオ8に書かれているpostメカニズムを通して受けたがっていると仮定する。

<?xml:namespace ns="http://www.w3.org/TR/1998/WD-P3P10-syntax-19980702/proposal.dtd" prefix="P3P"?>
<?xml:namespace ns="http://www.w3.org/TR/WD-rdf-syntax#" prefix="RDF"?>
<RDF:RDF><PROP realm="http://www.CoolCatalog.com/catalogue/" 
 entity="CoolCatalog" agreeID="94df1293a3e519bb"
 assurance="http://www.TrustUs.org"
 postURI="http://www.CoolCatalog.com/cgi-bin"/>
   <USES>
   <STATEMENT action="rw" purp="2,3" recpnt="0" id="0"
    source="form"
    consq="a catalogue of shoes that fit you.">
     <WITH><PREFIX name="Cool." dataschema="http://www.CoolCatalog.com/productschema.html">
     <REF name="ShoeSize"/>
     </PREFIX></WITH>
     <REF name="Form.Data_"/>
   </STATEMENT>
   </USES>
</PROP></RDF:RDF>
...
Content-Type: text/html
Content-Length: 110
<html><body> 
<h1>Welcome to Cool Catalogue</h1>
<p>We'd love to have the following information to 
   customize our online catalogue to you.</p>
<form method="POST" action="http://www.CoolCatalog.com/cgi-bin">
  <p><input type="submit" value="Submit" name="B1"><input
  type="reset" value="Reset" name="B2">First Name<input type="text" name="P3P_User_First"
  size="20" value="Your Name Here"> Shoesize <input type="text" name="Cool.ShoeSize"
  size="20" value="9 1/2"></p>
</form>
</body></html>

4.2.5 The DISCLOSURE element

<DISCLOSURE>
サービスのアクセス能力に関する簡単な情報開示能力で、entityがすでに集められたデータの同意の変更やデータの保持方法についての情報開示を行うかどうかに関するバイナリ値。
discURI
プロポーザルのわかりやすいURI。
access
個人情報、住所に関する質問、サービスプロバイダーへの憂慮事項等を個人が参照できること。
other
サイトはそのdiscURIで知られる同意の変更や保持に関してそのポリシーを作るのか?
[32]
disclosure
=
"<DISCLOSURE"
" discURI=" quoted-URI
" access=" `"` access-disclosure `"`
[" other=" `"` 
   other-disclosure *("," other-disclosure) `"`]
"/>"
[33]
access-disclosure
=
"0" | ; Identifiable Data is Not Used
"1" | ; Identifiable Contact Information
"2" | ; Other Identifiable Information
"3"   ; None
[34]
other-disclosure
=
["0" | ; change agreement
 "1" ] ; retention

より詳しい文法の説明は P3P Harmonized Vocabulary Specification を参照のこと。

4.3 Data Transfer

4.3.1 Referencing data: the <REF> タグ

data sets/elementsに対する参照は全て<REF>タグを使用したstatement内に囲まれている。 <REF>タグは、以下の属性を持っている。 namedataschemavalueoptionaltypetypeschemashortlongcategorysize

以下の6つの属性は新しい(P3P1.0ベースには定義されない)データエレメントやセットが参照された時のみに使用される。

[35]
data-reference
=
"<REF" " name=" quoted-string [" dataschema=" quoted-URI] 
[" optional=" yesno] [" value=" quoted-string] 
[" type="quoted-string] [" typeschema=" quoted-URI] 
[" template=" yesno] [" category=" categories] 
[" short=" quoted-string] [" long=" quoted-string]
[" size=" `"` 1*digit `"`] ; default is 0 (unlimited size)
"/>"

例として、ユーザのお届け先情報の都市名、User.Business.の全エレメント、そして(オプションとして)User.Home.Info.Phone.  の全エレメントを要求するために、サービスはP3Pプロポーザルの中で以下のようなreferenceを送る。

<REF name="User.Shipping.Postal.City"/>
<REF name="User.Home.Telecom.Phone." optional="1"/>
<REF name="User.Business."/>

ユーザがcity, business情報,自宅の電話番号の国際コードのみを返すことに同意する場合、txdタグの中で以下のreferenceを送る。

<REF name="User.Shipping.Postal.City" value="Boston"/>
<REF name="User.Home.Telecom.Phone.IntCode" value="1"/>
<REF name="User.Business.Postal.Street" value="12 Main St."/>
<REF name="User.Business.Postal.City" value="Cambridge"/>
... (the other values of User.Business.) ...

4.3.2 Prefixing references: <WITH><PREFIX>

データ参照の1セット中の多くのエレメント名は、1つのparentを共有する。例えば、上記にあるように"User"は、referenceのなかに共通して発生する。<WITH><PREFIX>タグは、文字列 prefixをref タグのすべての属性と連携させるのに使用することができる。従って、これは、名前の長さを短くしたり、新しいdata sets と elementsに参照文をつけるのに使うことができる。<REF>タグの一続きが&t;WITH><PREFIX> タグ内にある場合、そのブロックは入っている<WITH><PREFIX>タグが省略されたブロックと同等で、<REF>タグの各属性の値が<PREFIX>タグの属性の該当する値の前につけられる。例えば、上の例は以下のように書き換えることができる。

<WITH><PREFIX name="User.">
  <REF name="Shipping.Postal.City" value="Boston"/>
  <REF name="Home.Telecom.Phone.IntCode" value="1"/>
  <REF name="Business.Postal.Street" value="12 Main St."/>
  <REF name="Business.Postal.City" value="Cambridge"/>
  ... (the other values of User.Business.) ...
</PREFIX></WITH>

<WITH><PREFIX> は、一揃いになることができる。Prefix は、最も奥の<WITH><PREFIX> ...</PREFIX></WITH> の組み合わせの前につけること(ここで"最も奥"は、タグの中には他の<WITH><PREFIX> が無いことを意味する)。そのため、上記の例は以下の方法でもっとコンパクトに書き換えることができる。

<WITH><PREFIX name="User.">
  <REF name="Shipping.Postal.City" value="Boston"/>
  <REF name="Home.Telecom.Phone.IntCode" value="1"/>
  <WITH><PREFIX name="Business.Postal.">
    <REF name="Street" value="12 Main St."/>
    <REF name="City" value="Cambridge"/>
    ... (the other values of User.Business.Postal.) ...
  </PREFIX></WITH>
  ... (the other values of User.Business.) ...
</PREFIX></WITH>

注意:1つのタグ(<PREFIX>だけ)の代わりに2つのタグ(<WITH><PREFIX>)を使う理由は、技術的に RDFエンコードを用いているからである。
[36]
datablock
=
*datareference |
( *datareference 
  "<WITH><PREFIX" " name=" quoted-string [" dataschema=" quoted-string] 
  [" optional=" quoted-string] [" value=" quoted-string] 
  [" type=" quoted-string] [" typeschema=" quoted-string] 
  [" template=" yesno] [" category=" quoted-string] 
  [" short=" quoted-string] [" long=" quoted-string]
  ">" 
  datablock
  "</PREFIX></WITH>"
  datablock )

4.3.3 The category attribute

Category は、データエレメントの属性であり、ユーザとユーザエージェントにデータの意図した使い方のヒントを与える。Categoryは、P3P ユーザエージェントの実施や使用を簡単にするために必要である。これにより、ユーザがデータの交換においてより一般的なプリファレンスやルールを表現することができる。Categoryは、新しいエレメントを定義したり、データを作るために参照したりする時にしばしば含まれる。

Categoryの中のデータエレメントのメンバーシップは、一般的にばらばら(disjoint)である。ほとんどのデータエレメントは、1つのcategoryに属さなければならないが、必要であればそれらは複数のcategoryに属する場合もある。さらに、データセットは、エレメントが属する全てのcategoryに属する。基本データエレメントは全てP3P仕様書のデフォルトcategoryに割り当てられている。サービスが新しいデータエレメントをproposeする時そのプロポーザルは、デフォルトcategoryかエレメント用の categoryを含んでいなければならないが、ユーザやユーザエージェントは、category割り当てに対する最終的な制御権を持っている。
[37]
categories
=
`"` *(data-category ",") data-category `"`
[38]
data-category
=
"0" | ; Physical Contact Information
"1" | ; Online Contact Information
"2" | ; Unique Identifiers
"3" | ; Financial Account Identifiers
"4" | ; Computer Information
"5" | ; Navigation and Click-stream Data
"6" | ; Transaction Data
"7" | ; Preference Data
"8" | ; Demographic and SocioEconomic Data
"9"   ; Content

categoryに関する詳しい説明は、P3P Harmonized Vocabulary Specificationを参照のこと。

4.3.4 Client side writes: the action 属性

サービスはユーザレポジトリに情報を書き込むように命令する能力を持っている。P3Pエージェントが以下のリクエストをプロポーザルの一部として受け取った場合を考えてみてもらいたい。

<STATEMENT action="r" purp="2" id="0"/>
    <REF name="ID.PUID"/>
    <REF name="User.Name.First"/>
</STATEMENT>
<STATEMENT action="rw" purp="2" id="0">
    <REF name="FineShoes.shoesize"
     dataschema="http://www.FineShoes.com/Schema1.0" />
</STATEMENT>

ユーザは、このプロポーザルに同意するかどうか聞かれたら、指示するかも知れない。 そして、User.PersonName.Firstを自動的に埋め込んだ(ユーザがそれを前に入力したと仮定して)インタフェースのフォーム とFineShoes.shoesize用の空のフィールドが表示される。ユーザは、この情報を入力し、TXDを送信する。

The user sends:

<TXD r="200" agreeID="94df1293a3e519bb">
<REF name="User.Name.First" value="Josephine"/>
<REF name="ID.PUID" value="1234567"/>
<REF name="FineShoes.Shoesize"  dataschema="http://www.FineShoes.com/Schema1.0" value="7"/>
</TXD>

属性"rw"がデータエレメントに適用される場合や新しい値がユーザから提供される場合は必ずユーザエージェントはデータレポジトリへの書き込みをやってみなければならない。もし、これに失敗したらエージェントは、適切なレスポンスコードを戻さなければならない。この自動書き込みによってサービスがユーザエージェントに情報を戻す手間が省ける。しかし、サービスは、いつでも(TXD)を送るかも知れない。例えば、ーザが靴サイズ7という情報を提供しても、サービスは、ヨーロッパサイズに変換し、その値を代わりに書き込む。

4.3.5 Unambiguous(明らかな) Optional Elements and Purposes

P3Pに期待される特徴というのは、サービスが任意にエレメントに対し、行動(read & waite)を要求することができるということと、間接的にオプション的なクオリファイヤ(purposes, recipients, identifiable usage)をエレメントに適用することである。

エレメントに対する任意のaction(read or read & write) というのは記述しやすい。オプション的な要素は、<REF>タグのoptional属性によって表される。読み取りや書き込みのためにオプション的に要求されるが、クライアントは受け入れられないこれらのエレメントは、単に作用しない。データは戻されたり書き込まれたりしない。

オプションのクオリファイヤを表示するのは問題がある。 エレメントが処理を終了するのに必要とされるがオプションでダイレクトマーケティングのために要求される場合は、エレメントを単に返却することはユーザが何に同意したかのあいまいな表現になる。従って、あいまいさを避けるために以下のことが必要になる。

例えば、あるサービスが取引を成立させるためにお届け先情報を必要とし、またオプション的にこのデータの全てをマーケティング目的に使いたい場合、以下の2つのプロポーザルを送る必要がある。

<?xml:namespace ns="http://www.w3.org/TR/1998/WD-P3P10-syntax-19980702/proposal.dtd" prefix="P3P"?>
<?xml:namespace ns="http://www.w3.org/TR/WD-rdf-syntax#" prefix="RDF"?>
<PROP agreeID="1e3a5d71297d104f>"

 realm="http://www.CoolCatalog.com/catalogue/">
  <USES>
   <STATEMENT purp="2" id="1"
    consq="We can ship your order to your door step">
      <REF name="User.ShipTo."/>
   </STATEMENT> </USES>
 <DISCLOSURE text="http://www.CoolCatalog.com/PrivacyPractice.html"
 access="3" other="0,1"/>
</PROP>
<PROP agreeID="2e3a5d71297d104f"
 realm="http://www.CoolCatalog.com/catalogue/"
optional="1">
; note optional is in header.
  <USES>
   <STATEMENT purp="4" id="1"
    consq="We will send you our world-renown catalogue!">
      <REF name="User.ShipTo."/>
   </STATEMENT> </USES>
 <DISCLOSURE text="http://www.CoolCatalog.com/PrivacyPractice.html"
 access="3" other="0,1"/>
</PROP>

1つの複雑なプライバシーポリシーを表示するのに複数のプロポーザルを使用する場合は、以下のルールに従う必要がある。

  1. 1つのプロポーザルにオプション的なエレメントだけがある場合、全体のプロポーザルのオプション フラグは1に設定されていること。
  2. 1つのサイトが一人のユーザに複数のプロポーザルを送る時、ユーザが同意したいなら、ユーザは、1 つないし複数のオプションでないプロポーザル用の、または0ないし複数のオプションプロポーザル 用の同意IDを返さなければならない。もし、ユーザが1つのオプションプロポーザルだけに同意する ならば、サイトはそのレルムへのアクセスを拒否しても良い。

我々の例では、ユーザが取引の完成のお届け先情報を使用するプロポーザルだけに同意する場合、その同意IDに基づいた情報を返す。

<TXD r="200" agreeID="1e3a5d71297d104f" />
<WITH><PREFIX name="User.ShipTo.">
      <REF name="Postal.Name" value="Josephine Hound"/>
      ...
      <REF name="Telecom.Phone.Number" value="2532442"/>
</PREFIX></WITH>

この解決策が、複数のプロポーザルとデータ転送において、冗長な情報の 転送を引き起こす可能性があることに注意。しかしこれは、彼らが同意した 曖昧なプロポーザルの一部を送り返すことよりも望ましい

4.4 Creating New Data Sets

4.4.1 Data Definition

プロポーザル の中で、新しいデータエレメントとデータセットを作成することができる。これは、未知のデータエレメント またはデータセットの参照がそのプロポーザルの中で 生じた時に起こる。そのような場合、ユーザーが同意すれば、新しいデータエレメントはユーザのレポジトリの中で作成される。新しいデータエレメントを作成するためには、エージェントは以下のことが必要になる:名前、付属するデータスキーマ,カテゴリ、データタイプ(タイプが定義されたデータスキーマ)、ショートディスプレイネーム(表示用の短縮名)。

また、サービスは特別なスキーマ定義の形でデータエレメントを詳細に説明する。この情報は、以下の2通りの方法で提供される。

  1. category, type, typeschema, short(次のサブセクションを参照)などの属性を使って、<REF>  タグ内で内部表示。
  2. dataschema属性から提供されたデータスキーマの定義内で外部表示。

情報が内部表示で元のサーバURIがデータスキーマURIと一致しない場合、メインデータスキーマ内の情報は、情報の一貫性を証明するためにチェックされなければならない。もしくは、メインデータスキーマ内の情報は、一貫性を証明するためにチェックされても良い。一致しない場合、530理由コード (Invalid Format)は返却されなければならない。ユーザーが必要な情報を再構築することができない理由が他にある場合、433理由コード (Data Unavailable)が返されなければならない。

4.4.2 Data Schema Format

新しいデータスキーマの書式は、特別なフォーム記述である。

<?xml:namespace ns="http://www.w3.org/TR/1998/WD-P3P10-syntax-19980702/proposal.dtd" prefix="P3P"?>
<?xml:namespace ns="http://www.w3.org/TR/WD-rdf-syntax#" prefix="RDF"?>
<PROP><USES><STATEMENT>
  ....
</STATEMENT></USES></PROP>

データブロックは、<data>タグの中に入っており、データエレメントの参照を含んでいる。参照は、 <REF>タグとその属性を使用して作ることができる。

<PREFIX>タグは、データ転送のように共通のprefixと多くの<REF>属性を連携させることによって スキーマ定義を短くするために使うことができる。

各データ転送のために、long以外の情報は全て必要である。属性の1つが欠けていた場合、空の文字列と共に存在すると考えられる。typeschemaの場合は、空の文字列は特別な意味を持ち、typeschemadataschema属性の値と同じになる。

例えば、HyperSpeedという会社が以下のデータスキーマを構築したがっていると考えてみて欲しい。

car.model
car.color
car.built.year
car.built.where. (of basic type Postal.)
car.price
bike.model
bike.color
bike.built.year
bike.built.where. (of basic type Postal.)
bike.price

それから、この会社は、以下のコードをhttp://www.HyperSpeed.com./models-schemaに置くことができる。

<?xml:namespace ns="http://www.w3.org/TR/1998/WD-P3P10-syntax-19980702/proposal.dtd" prefix="P3P"?>
<?xml:namespace ns="http://www.w3.org/TR/WD-rdf-syntax#" prefix="RDF"?>
<PROP><USES><STATEMENT>
<WITH><PREFIX name="car." short="Car" category="7" size="63">
 <REF name="model" type="Text" short="Model"/>
 <REF name="color" type="Text" short="Color"/>
 <WITH><PREFIX name="built." short="Construction data">
  <REF name="year" type="Number" short="Year"/>
  <REF name="where." type="Postal."/>
 </PREFIX></WITH>
</PREFIX></WITH>
<REF name="bike." type="car." typeschema="http://www.HyperSpeed.com/models-schema" short="Bike "/>
</USES></STATEMENT></PROP>

データセットが作成されるたびにそれは上記のcar.の場合のように暗黙にtypeとして使用されることができる。しかし、いくつかの状況において、elementをユーザのレポジトリに作成せずにtypeを定義したい場合もある。このような時は、<REF>の中にtemplate属性を使うこと。値をyes, つまりtemplate="1"(defaultは"0"で意味は"no")に設定することは、対応するデータエレメントがtype定義の一部であることを意味し、実際に関連した値を持つデータエレメントを表現しているわけではない。例えば、HyperSpeedは汎用のGenericModel.タイプを定義したがっていて、それをcar.bike.で例示したがっている。これは、以下のスキーマで表現することができる。

<?xml:namespace ns="http://www.w3.org/TR/1998/WD-P3P10-syntax-19980702/proposal.dtd" prefix="P3P"?>
<?xml:namespace ns="http://www.w3.org/TR/WD-rdf-syntax#" prefix="RDF"?>
<PROP><USES><STATEMENT>
<WITH><PREFIX name="GenericModel." template="1" category="7" size="63">
 <REF name="model" type="Text" short="model"/>
 <REF name="color" type="Text" short="color"/>
 <WITH><PREFIX name="built." short="Construction data">
  <REF name="year" type="Number" short="Year"/>
  <REF name="where." type="Postal."/>
 </PREFIX></WITH>
</PREFIX></WITH>
<REF name="car." type="GenericModel." typeschema="http://www.HyperSpeed.com/models-schema" short="Car"/>
<REF name="bike." type="GenericModel." typeschema="http://www.HyperSpeed.com/models-schema" short="Bike"/>
</USES></STATEMENT></PROP>

5. Base Data Set and Data Types

5.1 Required (Base) Data Elements and Sets

以下は、基本データセットとエレメントである。これらのデータセットとエレメントは、サービスや ユーザエージェントにる変更や削除ができない。しかし、ユーザは任意の値を提供することができる。例えば、ユーザエージェントは値を返さなかったり、ユーザによって異なる値を返したりする。将来、他のデータセットやエレメントに対する要求が増すであろうと予想する。 明らかに適用できるものは、カタログ、支払い、agent/system attribute schemaである。(システム 構成要素の幅広い組み合わせが、http://www.w3.org/TR/NOTE-agent-attributesに基づいて、white paper draftで適用されている。)

以下の各表は、データセット、データセット内のエレメント、エレメントに関連するカテゴリ、データセットやエレメントのタイプ、ユーザに見せる表示名を示している。1つのエレメントに1つ以上のカテゴリが関連付けられることもある。しかし、基本エレメントには、可能な限り1つ以上のカテゴリが関連付けられないように基本カテゴリを設計している。データスキーマを設計する場合は同様に設計することを推奨する。

 

ID.データセットは、1つのサービスでユーザを一意的に識別するために使われるエレメントを含む。
ID. Category Type Short display name
PUID Unique Identifiers Number Pairwise or Site ID
TUID Unique Identifiers Number Temporary or Session ID

TUIDは、与えられたセッションの状態を保存するために使われる。PUIDは、複数のセッションにわたる状態を保存するために使われる。TUIDやPUIDは、ユーザ自信が自分を識別したり、複数のサイトで1つの一意的な識別子を共有するよう要求することを意味するものではない。どちらかというと、次のような意味でIDは一意であると言える。例えば、ある2つのユーザを管理するユーザエージェントがサイト<Cool.Com>との間でIDを生成した場合、それぞれのIDはサイトの中で一意となる。

 

User.データセットは、個人に関する一般的な情報を含む。
User. Category Type Short display name
Name. Physical Contact Information, Demographic and SocioEconomic Data PersonName. User's Name
Bdate. Demographic and  SocioEconomic Data  Date. User's Birth Date
Cert Unique Identifiers Text User's Identity Certificate
Gender  Demographic and SocioEconomic Data Gender User's Gender
Employer Demographic and SocioEconomic Data Text Name of User's Employer
Department Demographic and SocioEconomic Data Text Department or division of organization where user is employed
JobTitle Demographic and SocioEconomic Data Text User's Job Title
Home. Physical Contact Information,
Online Contact Information, Demographic and  SocioEconomic Data
Info. User's Home Contact Information
Business. Physical Contact Information,
Online Contact Information, Demographic and  SocioEconomic Data 
Info. User's Business Contact Information
BillTo. Physical Contact Information,
Online Contact Information, Demographic and  SocioEconomic Data
Info. User's Billing Address
ShipTo. Physical Contact Information,
Online Contact Information, Demographic and  SocioEconomic Data
Info. User's Shipping Address

注意しなければならないのは、User.データセットは、それ自身がデータセットであるエレメントを含むということ。User.データセットに含まれるデータセットに関しては、「5.2 Data Types」で定義されている。データセットに含まれる各エレメントの表示名は、データセットとエレメントの表示名をコンマ','で区切って連結することで定義される。例えば、User.Home.Postal.PostCodeの表示名は、"User's Home Contact Information, Postal Address Information, Postal Code"となる。ユーザエージェントによっては、上記のように連結された表示名でなく、各エレメント用の表示名を生成するかも知れない。

5.2 Data Types

Date.タイプは、日付を表す構造体。
Date. Category Type Short display name
Year Demographic and SocioEconomic Data Number Year
Month Demographic and SocioEconomic Data Number Month
Day Demographic and SocioEconomic Data Number Day
Hour Demographic and SocioEconomic Data Number Hour
Minute Demographic and SocioEconomic Data Number Minute
Second Demographic and SocioEconomic Data Number Second
FractionSecond Demographic and SocioEconomic Data Number Fraction of Second
TimeZone Demographic and SocioEconomic Data Text Time Zone

 

PersonName.タイプは、個人の名前に関する情報を表す構造体。
PersonName. Category Type Short display name
Prefix Demographic and SocioEconomic Data Text Name Prefix
First Physical Contact Information Text  First Name
Last Physical Contact Information Text  Last Name
Middle Physical Contact Information Text  Middle Name
Suffix Demographic and SocioEconomic Data Text Name Suffix
Nickname Demographic and SocioEconomic Data Text Nickname

 

PhoneNum.は電話番号を表す構造体。
PhoneNum. Category Type Short display name
IntCode Physical Contact Information Number International Phone Code
LocCode Physical Contact Information Number  Local Phone Area Code
Number Physical Contact Information Number  Phone Number
Ext Physical Contact Information Number Phone Extension
Comment Physical Contact Information Text  Phone Optional Comments

 

Info.タイプは、構造化され、他のタイプに再度向けられるものである。たとえ要求の中で省略した表記を使うことを望んでいても、データ要求が必要のない情報を集める必要がないよう実行される。 
Info. Category Type Short display name
Postal. Physical Contact Information, Demographic and SocioEconomic Data Postal. Postal Address Information
Telecom. Physical Contact Information Telecom. Telecommunications Information
Online. Online Contact Information Online. Online Address Information

 
Postal.タイプは、住所を表す構造体。
Postal. Category Type Short display name
Name. Physical Contact Information, Demographic and SocioEconomic Data PersonName. Name
Street Physical Contact Information Text Street Address
City Physical Contact Information Text City
StateProv Physical Contact Information Text State or Province
PostalCode Demographic and SocioEconomic Data Text Postal Code
CountryCode Demographic and SocioEconomic Data Country Country
Country Demographic and SocioEconomic Data Text Country String

 

Telecom.タイプは、個人の連絡先を表す構造体。
Telecom. Category Type Short display name
Phone Physical Contact Information  PhoneNum. Phone Number
Fax Physical Contact Information  PhoneNum. Fax Number
Mobile Physical Contact Information  PhoneNum. Mobile Phone Number
Pager Physical Contact Information  PhoneNum. Pager Number

 

Online.タイプは、個人のオンラインアドレス情報を表す構造体。 
Online. Category Type Short display name
Email Online Contact Information Text Email Address
URI Online Contact Information URI Home Page Address

 
この仕様書では、[XML1.0][HTTP1.1][XML-Data]をもとにした、以下の基本データエレメントで 示されるデータタイプを使用している。
Primitive DataType Definition
Text [UTF-8]
Gender Text of character "M" or "F".
Boolean Text of character "0" or "1".
Binary Base64 per RFC-1531. [[MIME]]
Number Text of characters composed with the digits "0", "1", "2", "3", "4", "5", "6", "7", "8", "9".
UUID [UUID]
Country [ISO3166]
URI [URI

 

5.3 Abstract Elements

例えば、P3P仕様で収集されないHTTPデータ収集活動を参照したい場合など、関連したデータの値を 持たないデータエレメントが必要になる場合がある。このような特別なエレメントはabstractと呼ばれる。abstractエレメントが他のエレメントと同じstatementに記述されている場合、以前データabstractな方法で収集されたことを意味し、おそらく、サービスがその情報をユーザの個人情報テーブル内の特殊なエレメントに対して読み書きを行う。abstractエレメントは、名前の最後に"_"が付いている。
  Category Type Short display name
ClickStream.Client_ Navigation and Click-stream Data, * Boolean Click-stream collected on the server
ClickStream.Server_
Navigation and Click-stream Data, *
Boolean Click-stream collected on the client
StoreNegotiation_ Transaction Data Boolean Server stores the negotiation history
Form.Data_ * Boolean Data entered through forms
Form.SearchText_ Transaction Data Boolean Search terms

上記abstractエレメントは、サービスがP3Pデータ転送要求以外の方法によるデータ収集を宣言することを可能とする。

abstractエレメントは、度々、ナビゲーションやWeb相互作用に潜在している。abstractエレメントは、abstractな方法で収集された情報のタイプを表すためにカテゴリとして使われるだろう。"Form.Data_"は、HTML形式やJava(スクリプト)インターフェースのような、サービスで制御される情報収集方法を含む。"Form.SearchText_"は、検索のサイトや索引のサイトで使われる形式で、特殊なタイプである。従って、検索エンジンページ上の唯一の形式フィールドが検索フィールドであるならば、データエレメントを開示することだけが必要である。


6. Appendices(付録)

6.1 Appendix 1: References (Normative:規範)

[DSIG]
Y. Chu, P. DesAutels, B. LaMacchia, P. Lipp. "DSig 1.0 Signature Labels Specification: Using PICS 1.1 Labels for Making Signed Assertions," World Wide Web Consortium. 03-April-1998. (Recommendation)
[HARMV]
J. Reagle. "P3P Harmonized Vocabulary Specification,"  World Wide Web Consortium. 30-March-1998. (Working Draft)
[HTTP1.0]
T. Berners-Lee, R. Fielding, H. Frystyk Nielsen, "RFC 1945 -- Hypertext Transfer Protocol -- HTTP/1.0," W3C/MIT, UC Irvine, W3C/MIT, May 1996.
[HTTP1.1]
R. Fielding, J. Gettys, J.C. Mogul, H. Frystyk, T. Berners-Lee, "RFC 2068 -- Hypertext Transfer Protocol -- HTTP/1.1," UC Irvine, Digital Equipment Corporation, MIT.
[ISO3166]
"ISO3166: Codes for The Representation of Names of Countries." International Organization for Standardization, December, 1993.
[MANDA]
H. Frystyk Nielsen, P. Leach, S. Lawrence. "Mandatory Extensions in HTTP." January 1998. (draft-frystyk-http-mandatory).
[MD5]
R. Rivest. "RFC 1321 -- The MD5 Message-Digest Algorithm," MIT. April 1992.
[MIME]
N. Freed, N. Borenstein. "MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies." November 1996.
[nameS]
T. Bray, D. Hollander, A. Layman. "Namespaces in XML." World Wide Web Consortium. 18-May-1998. (Working Draft)
[RDF]
O. Lassila, R. Swick. "Resource Description Framework (RDF) Model and Syntax Specification,"  World Wide Web Consortium. 16-February-1998. (Working Draft)
[SSL]
A. Freier, P. Karlton,  P. Kocher. "SSL 3.0 Specification." (http://home.netscape.com/eng/ssl3/index.html)
[STATE]
Network Working Group, D. Kristol, Bell Laboratories, Lucent Technologies; Category: Standards Track  HTTP State Management Mechanism. (ftp://ftp.isi.edu/in-notes/rfc2109.txt)
[URI]
T. Berners-Lee, R. Fielding, and L. Masinter. "Uniform Resource Identifiers (URI): Generic Syntax and Semantics." 1997. (Work in progress; see updates to RFC1738.)
[UTF-8]
F. Yergeau. "RFC 2279 -- UTF-8, a transformation format of ISO 10646." January 1998.
[UUID]
The Open Group. "Universal Unique Identifier. Appendix CAE Specification C706." DCE 1.1: Remote Procedure Call. 1997.
[VCARD]
"vCard - The Electronic Business Card Version 2.1." Internet Mail Consortium, September 18, 1996.
[XML]
T. Bray, J. Paoli, C. M. Sperberg-McQueen. "Extensible Markup Language (XML) 1.0 Specification," World Wide Web Consortium. 10-February-1998. (Recommendation)
[XML-Data]
A. Layman et al. "XML-Data"World Wide Web Consortium. 05-January-1998. (Note)

 

Appendix 2: Fingerprints and Canonicalization (Normative:規範)

P3Pはプロポーザルやデータセットを確認する手段としてフィンガープリント(Message Digest,Hash)を用いる。これらのフィンガープリントはハッシュ関数を一連のデータに適用することで得られるある一定サイズの値を与える。フィンガープリントは容易に計算できるが、元の情報にほんの少しだけ修正を加えても、フィンガープリントは異なった値になる。従って、フィンガープリントはしばしば情報の完全性を保証する手段として用いられる。我々はP3Pのフィンガープリント用にMD5ダイジェストアルゴリズムを用いる。これはP3P通信の中で暗号化され交換される128ビットの値を与えるものである。エージェントとサービスの双方は、与えられたプロポーザルの参照と処理の完全性を保証するために(フィンガープリントに対するプロポーザルの正当性を確認しながら)これらのフィンガープリントを用いることができる。

フィンガープリントを生み出すプロセスは相当シンプルなものである。フィンガープリントが同一であるためには、送信者と受信者によってフィンガープリント化されるデータが同一でなければならない。我々の目的は、仲介者のあらゆる改ざん努力を無駄にさせるため、データが標準形式(正規化)にフィンガープリント化されるよう推し進めることである。そうなれば我々はフィンガープリントを生成するために、正規化されたバージョンのプロポーザルを使うことになる。同じプロポーザルが与えられれば、サービスとエージェントの双方は同じフィンガープリント値に到達できなければならない。

プロポーザルの正規化ルール:

一例として、次のXMLを検討してもらいたい。
<rdf:rdf><PROP agreeID="94df1293a3e519bb" 
 realm="http://www.CoolCatalog.com/catalogue/" entity="CoolCatalog" 
 assurance="http://www.TrustUs.org">
  <USES>
  <STATEMENT consq="A site with clothes you'd appreciate."
   purp="2,3" recpnt="0" id="0">
    <WITH><PREFIX name="User.">
      <REF name="Name.First"/>
      <REF name="Bdate.YEAR" optional="1"/>
      <REF name="Gender"/>
    </PREFIX></WITH>
  </STATEMENT>
  </USES>
  <USES>
  <STATEMENT action="rw" purp="0" recpnt="0" id="1">
    <REF name="User.shipping."/>
  </STATEMENT>
  </USES>
  <DISCLOSURE discURI="http://www.CoolCatalog.com/PrivacyPractice.html" 
   access="3" other="0,1"/>
</PROP></rdf:rdf>

正規化の後、次のようになる。
<PROP agreeID="94df1293a3e519bb" realm="http://www.CoolCatalog.com/catalogue/" entity="CoolCatalog" assurance="http://www.TrustUs.org">
<USES>
<STATEMENT consq="A site with clothes you'd appreciate." purp="2,3" recpnt="0" id="0">
<WITH>
<PREFIX name="user.">
<REF name="name.first"/>
<REF name="bdate.year" optional="1"/>
<REF name="gender"/>
</PREFIX>
</WITH>
</STATEMENT>
</USES>
<USES>
<STATEMENT action="rw" purp="0" recpnt="0" id="1">
<REF name="user.shipping."/>
</STATEMENT>
</USES>
<DISCLOSURE discuri="http://www.CoolCatalog.com/PrivacyPractice.html" access="3" other="0,1"/>
</PROP>

MD5フィンガープリントの生成

いったんプロポーザルが正規化されると、P3Pフィンガープリントを生成するためにMD5アルゴリズムが使われる。このセクションではMD5の概略の提供と、いかにしてMD5ダイジェストが暗号化されるかの説明を行う。

MD5 概略

MD5ハッシュアルゴリズムは以下で定義されている。

The MD5 Message Digest Algorithm, R.L. Rivest, RFC 1321, April 1992

MD5(Message Digest 5)は、暗号化メッセージ要約アルゴリズムである。

MD5はRon Rivestにより設計された。彼は1991年のRSAの"R"でもある。MD5はRFC1321に記述されている。CのソースコードがRFCに含まれている。MD5は基本的には"安全ベルト"付きのMD4であり、MD4よりわずかに速度が遅いがセキュリティ度は高い。アルゴリズムは4つの異なるラウンドから成り、それらはMD4のものとはわずかに異なる設計になっている。メッセージ要約サイズは同じ。Den BoerとBosselaers(B.den BoerとA.BosselaersのMD5圧縮機能の不一致。Advances in Cryptology-Eurocrypt'93の293〜304ページ、Springer-Verlag、1994に書かれている。)はMD5の偽の不一致を見つけた(RSA FAQ Question 98を参照)が、他には暗号解読結果について何も知られていない。

MD5アルゴリズムは、入力として任意の長さのメッセージを受け取り、出力として128ビットの"フィンガープリント"または入力の"メッセージ要約"を生成する。同じメッセージ要約を持つ2つのメッセージを作ることや、前もって指定されたメッセージ要約を持つメッセージを作ることは、コンピュータでできないものと思われる。MD5アルゴリズムはデジタル署名アプリケーションを意図している。そこでは大きなファイルは、RSAやPGPのような公開鍵暗合方式の下で個人(秘密)鍵によって暗号化される前に、あるセキュアな方法で圧縮されなければならない。

MD5のさらに詳しい情報は、以下を参照のこと。

P3P暗号化

MD5要約で計算すると、4つの32ビット値が生じる。すべての値は、2の補数表現を含むバイト列を標準的なBase64の表現で暗号化される。このバイト列の最初のバイトはhigh-orderバイトである。最小限の数のバイトが値を表現するために使われているため、使われないバイトが含まれていてはいけない。

以下のBNFはどのようにしてMD5要約がP3P用に暗号化されるかを示している。

resource-hash     = '"base64-string encoding of 128 bit MD5 message
                      digest of the information resource."'
base64-string     = as defined in RFC-1521, section 5.2.

Appendix 3: XML DTDs (Non-normative)

DTDのHypertextバージョンが以下にある。注意:URIのパスは指定URIを実際には指しておらず、HTMLバージョンを指している。しかし以下に指定されたURI中のパスはこの仕様書の例の中で使われているものである。

http://www.w3.org/TR/1998/WD-P3P10-syntax-19980702/proposal.dtd
http://www.w3.org/TR/1998/WD-P3P10-syntax-19980702/practices.dtd
http://www.w3.org/TR/1998/WD-P3P10-syntax-19980702/categories.dtd

Appendix 4: Line-flow Scenario (Non-normative)

このシナリオは、シナリオ1,5および3に基づいており交渉を含んでいる。

ユーザはブラウザでCoolCatalogのホームページに行く。彼女は以前に一度もそこに行ったことがない。彼女は、自分のブラウザがP3Pを理解することを伝えることにより、要求の一部としてP3Pプロポーザルを要求する。

GET / HTTP/1.1
Accept: */*
User-Agent: BugblatterBeast/3.02 (RT-11; English)
Host: www.CoolCatalog.com
OPT: "http://www.w3.org/TR/1998/WD-P3P10-syntax-19980702/proposal.dtd"; ns-42

CoolCatalogはプロポーザルを送信する。それはプライバシープラクティス、情報開示、それらが当てはまるデータエレメントを含んでいる。この例では、サービスは将来自動的にReturnIDの一部としてPUIDが与えられることを要求し、ユーザレポジトリからユーザの性別を要求する。

HTTP/1.1 409 Agreement required
Server: Marvin/2.0.1
OPT: "http://www.w3.org/TR/1998/WD-P3P10-syntax-19980702/proposal.dtd"; ns-1944
1944-P3P1.0: <?xml:namespace ns="http://www.w3.org/TR/1998/WD-P3P10-syntax-19980702/proposal.dtd" prefix="P3P"?>
<?xml:namespace ns="http://www.w3.org/TR/WD-rdf-syntax#" prefix="RDF"?>
<PROP realm="http://www.CoolCatalog.com/" entity="CoolCatalog" 
 assurance="http://www.TrustUS.org" />
  <USES>
  <STATEMENT purp="2" id="0" recpnt="0" consq="a personalized site!"/> 
    <REF name="Web.PUID"/>
    <REF name="User.Gender"/>
  </STATEMENT>
  </USES>
  <DISCLOSURE text="http://www.CoolCatalog.com/PrivacyPractice.html" 
   access="3" other="0,1"/>
</PROP>
</P3P>
Content-Type: text/html
Content-Length: 110

<html><body>
<h1>HTTP/1.1 409 Agreement Required</h1>
<p>We need an agreement before we can continue.</p>
</body></html>

[注意:プロポーザルは読みやすいように複数の行にまたがって分割されている。ネットワーク上で、一対のCRLFが</PROP>だけの後ろに追加される。以下の例でも同様。]

ユーザはこのプロポーザルを拒否する。上記のプロポーザルの同意ID(hash)が "e3a5d71297d104f1"だと仮定する。ユーザの次のHTTP要求は次のようになるだろう。

GET / HTTP/1.1
Accept: */*
User-Agent: BugblatterBeast/3.02 (RT-11; English)
Host: www.CoolCatalog.com
OPT: "http://www.w3.org/TR/1998/WD-P3P10-syntax-19980702/proposal.dtd "; ns-1776
1776-P3P: <SRY r="432" agreeID="e3a5d71297d104f1" />

サイトは新たなプロポーザルを提供し、今度は自動的なReturnIDを要求し、ユーザレポジトリからファーストネーム(名前)およびオプションで年齢を、共にサイトをカスタマイズする目的で要求する。

HTTP/1.1 409 Agreement required
Server: Marvin/2.0.1
OPT: "http://www.w3.org/TR/1998/WD-P3P10-syntax-19980702/proposal.dtd"; ns-1492
1492-P3P1.0: <?xml:namespace ns="http://www.w3.org/TR/1998/WD-P3P10-syntax-19980702/proposal.dtd" prefix="P3P"?>
<?xml:namespace ns="http://www.w3.org/TR/WD-rdf-syntax#" prefix="RDF"?>
<PROP realm="http://www.CoolCatalog.com/" entity="CoolCatalog" 
 assurance="http://www.TrustUs.org"/>
  <USES>
  <STATEMENT purp="2" id="0" consq="a personalized site!">
    <WITH><PREFIX name="User.">
      <REF name="Name.First"/>
      <REF name="Bdate.Year" optional="1"/>
    </PREFIX></WITH>
    <REF name="Web.PUID"/>
  </STATEMENT>
  </USES>
  <DISCLOSURE text="http://www.CoolCatalog.com/PrivacyPractice.html" 
  access="3" other="0,1"/>
</PROP>
</P3P>
Content-Type: text/html
Content-Length: 110

<html><body>
<h1>HTTP/1.1 409 Agreement Required</h1>
<p>We need an agreement before we can continue.</p>
</body></html>

ユーザは自動的なReturnIDとカスタマイズだけのためにファーストネームを用意することに同意する。上記のプロポーザルの同意IDが"94df1293a3e519bb"だと仮定する。

GET / HTTP/1.1
Accept: */*
User-Agent: BugblatterBeast/3.02 (RT-11; English)
Host: www.CoolCatalog.com
OPT: "http://www.w3.org/TR/1998/WD-P3P10-syntax-19980702/proposal.dtd"; ns-1861
1861-P3P1.0: <TXD r="200" agreeID="94df1293a3e519bb" >
 <REF purp="2" name="User.Name.First" value="Josephine"/>
 <REF purp="2" name="User.PUID" value="1234567"/>
</TXD>

この時点で、サービスはCoolCatalogのホームページを返す。

HTTP/1.1 200 OK 
Server: Marvin/2.0.1
OPT: "http://www.w3.org/TR/1998/WD-P3P10-syntax-19980702/proposal.dtd"; ns-1950
1950-P3P: <OK DH="s24fd20kuqexg5xk" />
Content-Type: text/html
Content-Length: xxx
[content of the CoolCatalog homepage]

ユーザは1日後サイトに戻り、自動的にReturnIDを送る。

GET / HTTP/1.1
Accept: */*
User-Agent: BugblatterBeast/3.02 (RT-11; English)
Host: www.CoolCatalog.com
OPT: "http://www.w3.org/TR/1998/WD-P3P10-syntax-19980702/proposal.dtd "; ns-2001
2001-P3P: <TXD agreeID="94df1293a3e519bb" >
 <REF name="User.PUID" value="1234567"/>
</TXD>

しかし、サーバは再びユーザのファーストネームを必要とし、以前の同意の下でそれを要求する。

HTTP/1.1 409 Agreement required
Server: Marvin/2.0.1
OPT: "http://www.w3.org/TR/1998/WD-P3P10-syntax-19980702/proposal.dtd"; ns-2010
2010-P3P: <PROP agreeID="94df1293a3e519bb"/>
</PROP>
</P3P>
Content-Type: text/html
Content-Length: 70

<html><body>
<h1>HTTP/1.1 400 Agreement Required</h1>
</body></html>

ユーザは自分のファーストネームとPUIDを返す。

GET / HTTP/1.1
Accept: */*
User-Agent: BugblatterBeast/3.02 (RT-11; English)
Host: www.CoolCatalog.com
OPT: "http://www.w3.org/TR/1998/WD-P3P10-syntax-19980702/proposal.dtd"; ns-1968
1968-P3P1.0: <TXD agreeID="94df1293a3e519bb" >
 <REF name="User.Name.First" value="Josephine"/>
 <REF name="User.PUID" value="1234567"/>
</TXD>

サービスはその後、以前のようにホームページで応答する。

HTTP/1.1 200 OK 
Server: Marvin/2.0.1
OPT: "http://www.w3.org/TR/1998/WD-P3P10-syntax-19980702/proposal.dtd"; ns-1950
1950-P3P1.0: <OK DH="s24fd20kuqexg5xk" />
Content-Type: text/html
Content-Length: xxx
[content of the CoolCatalog homepage]

Appendix 5: ABNF Notation (Non-normative)

P3Pの正式な文法は、http://info.internet.isi.edu/in-notes/rfc/files/rfc2234.txtで定義されたABNFを若干修正したものを使いながらこの仕様書の中に示されている。以下は、ABNFの簡単な表現である。

name = (element) 
nameが規則の名前であれば、elementは1つまたはそれ以上の規則名もしくは端末を指し、 以下のオペランドで結び付けられている。規則名は大文字/小文字を区別しない。 
(element1 element2)
複数のエレメントはカッコでくくられており、1つのエレメントとして扱われる。内容は厳密 に指示される。
<a>*<b>element
少なくともa、多くともbだけエレメントが発生する。
(1*4elementは1〜4つのエレメントの意味する。)
<a>element
正確にaのエレメントが発生する。
(4elementは正確に4つのエレメントを意味する。)
<a>*element
a以上のエレメント。
(4*elementは4つ以上のエレメントを意味する。)
*<b>element
0からbのエレメント。
(*5elementは0〜5つのエレメントを意味する。)
*element
0以上のエレメント。
(*elementは0〜無限のエレメントを意味する。)
[element]
オプション的なエレメント。*1(element)と同等。
([element]は0または1個のエレメントを意味する。)
"string" or 'string'
引用符内の文字列と一致

その他の表記として、

; または /* ... */
コメント。

Appendix 6: Working Group Contributors (Non-normative)

Lorrie Cranor AT&T
Philip DesAutels Matchlogic
Melissa Dunn Microsoft
Daniel Jaye (Editor) Engage Technologies
Kevin Jones Intermind
Steve Lucas (Chair) Matchlogic
Massimo Marchiori (Editor)  W3C
Maclen Marvit Narrowline
Max Metral Firefly Network Inc.
Paul Perry Firefly Network Inc
Martin Presler-Marshall IBM
Joseph Reagle (Project Manager) W3C
Drummond Reed Intermind

この作業は他のドキュメントに基づいた。特に、

同様に、