Platform for Privacy Preferences (P3P1.0) Syntax Specification
W3C Working Draft 9-November-1998
http://www.w3.org/TR/1998/WD-P3P-19981109/syntax
の和訳です。赤色文字の部分は、1998-7-2版からの変更点です。
このドキュメントには和訳上の誤りがありえます。
内容の保証はいたしかねますので、必ずW3C Webサイトの正式版ドキュメントを参照して下さい。
また、著作権については本ドキュメントに含まれる記述に加え、こちらも必ず参照してください。
Copyright (C) 1998 W3C (MIT, INRIA, Keio), All Rights Reserved. W3C 責任、登録商標、, 文書の使用、 そして ソフトウエアライセンスに関する規則が適用される。
このドキュメントはW3Cメンバと関連者向けのP3P1.0 specificationの補足仕様書である。 このドキュメントはP3P活動の一環で作られ、将来的にはW3C勧告となりうるものである。 この文書は、P3P活動の一部として作成 されて来たものであり、最終的にはW3C勧告案に昇格する。W3Cのワーキングドラフトを参考資料として使ったり、"進行中の作業"としてではない引用を行うことは好ましくない。このドラフトの基本コンセプトは かなりしっかりとしており、我々は仕様へのフィードバックのために実験的な実装やプロトタイプの開発を行うことを奨励する。しかしこのワーキンググループでは、今後のバージョンの文書を変更する可能性の ある早期の実装は認めないであろう。
このドラフトはW3C processに従い、W3Cとそのメンバーにより考えられている。この文書はP3Pの実装、承認、採用に影響を与えそうな問題に関して、W3Cの会員およびスタッフに送られるコメントを受け取る目的で公開されている。
コメントがある方は以下にお願いしたい。
www-p3p-public-comments@w3.org
(アーカイブは以下
http://lists.w3.org/Archives/Public/www-p3p-public-comments/).
P3Pは、ユーザがWeb上で十分に説明された決定を行う能力と、彼らの情報の使用を制御する能力を与える。 サイトはP3Pを、サービス品質の向上・コンテンツのカスタマイズ・サイトアクセスの簡略化だけでなく、 サービス内での信頼ユーザの場所のレベルを上げるために使うことができる。
P3Pは、構造化データの交換と宣言のために [XML](とりわけ[RDF])を使う。 P3Pは将来のデジタル認証とデジタル署名の能力もサポートする予定。 P3Pはブラウザ、プラグイン、サーバ、もしくはクライアントとサーバ間のプロキシサーバに組み込むことができる。
基本データセットの文法とデータタイプの詳細は以下の章で見る事が出来ます。
http://www.w3.org/TR/1998/WD-P3P-19981109/basedata
注意: この用語の使用がP3P1.0の応諾を必要としている間、XMLの容易さ(namespaces
[XML-name] )は追加 または補足的な用語を簡単に紹介できることを許可する。
文章のステータスを表現するために以下の規約を用いる。
ABNF表記法の中のスキーマ定義 |
この広域なそれらの必要事項は不規則なものではあるが、P3Pがプロトコル以上の物であり、HTTPやXMLのような既存の標準アプリケーションであるので必要である。さらに、この文書では、まだ実装されていないまたは、仕様書の一部として作る必要のない機能、しかしP3Pユーザの経験の一部として重要と思われる機能についても予想して書かれている。
このため、conformance(準拠)は以下の3つのレベルに分けられ、各レベルは前のレベルに含まれる。
セクション | 機能/動作 | 説明 |
2.0 Agreement scenarios | propID | propIDは、どのようなプライバシープロポーザルも認識する。 |
3.1 Data transport | the HTML LINK tag | Agent及びサービスはこの場所に プロポーザルを設置する事ができる必要がある。 |
the HTTP 拡張機能 | Agent及びサービスはこの場所に プロポーザルを設置する事ができる必要がある。 | |
propURI | プロポーザルは、ある外部URIに位設置する事ができる必要がある。 | |
4.1.2 XML/RDF encoding | XML 解析 | プロポーザル とデータシンタックスは、速やかに処理されるか、ユーザに提出される。RDFデータモデルは、必要なgrammar/シンタックスを構成するために使用されるが、アプリケーションは、その必要を感じない場合は必ずしもRDFをサポートする必要はない。 |
4.4 Data References | data reference syntax | Agentは、送信を請求されている情報のシンタックスを理解できなければならない。 |
Base 3.0 Abstract Elements | abstract elements | P3P以外の方法で交換されたreferences dataの方法 |
Harmonized Vocab | harmonized vocabulary | 必要条件については、harmonized vocabularyを参照。この必要条件を満たさなければならない。満たさない場合、インプリメンテーションがprivacy公開を適切なレベルでできなくなってしまう。 |
2.0 Agreement scenarios | propID repository | 完全なプロポーザルをコンパクトに表現する事ができ、すでに同意ができている場合は、新規の交渉や同意を必要としない。 |
データリポジトリ | 頻繁に要求されるユーザプロフィールはユーザがセーブ、管理する事ができる。 | |
3.3 Negotiation primitives | protocol primitives (OK,SRY, PROP, TXD) | 交渉、複数プロポーザル、counter プロポーザルが受けられる。 |
3.4 理由コード | S-?, R-?, E-? | 同意に達する必要がある。もし理由コードが提供されない場合は、暗示のセマンティクスがある。結果として、このセマンティクスは必要となり、codeの存在は、任意となる。 |
postCGI | CGIメソッド(P3P, HTML agent)が情報を返却する。 |
2 Agreement Scenarios | PUID/TUID | P3Pの管理下の効果的なanonymous clickstream tracking |
3.1 データ転送 | HTTP、postURIによる XML 暗号化データ | データは、ヘッダーや特定のURIにXMLデータとして返却される |
4.4.1 データ定義 | 新規スキーマ・インスタンス生成 | Base set以外のスキーマはagent によりインスタンス生成又はサポートされる。 |
4.2.4 source attribute | source attribute | Agentは複数の拡張可能な機能をサポートし、それにより情報は送信を請求される。 |
client access DOM | ? |
注:以下のキーワードは文書全体を通じて使用され、レベル1のinteroperability 要求事項として読まれなければならない。このキーワードはRFC2119 [KEY] で定義される。以下にそのキーワードを示す。
P3P Specの中心コンセプトは、P3P同意のそれである。P3P同意はサービスとユーザエージェントの双方に同意されたプロポーザルである。 ユーザエージェントはプロポーザルで規定されたプライバシープラクティスとユーザのプリファレンスを比較して、合意に入るかどうかを決定する。 1つの同意は特定のレルム内でユーザエージェントとサービス間で交換される全データに当てはまる。 レルムは1つのURIで参照されるWeb資源かもしくは複数のURIで参照されるWeb資源である。
いったん同意に達すると、同意したプロポーザルに含まれるデータエレメント群はサービスからのデータ要求ユーザエージェントに 解釈されるべきである。データエレメントを参照しない同意も可能である。そのような同意は"情報は集めない"と述べる。
プライバシープラクティスがユーザのプリファレンスと一致しない場合には、両サイドは代わりのプロポーザルを交換することで 同意に到達することができる。あらゆるプロポーザルはユーザが見ることができる一連の"結果"を持つことができる。 それは提案されたプラクティスが、たとえユーザが通常は同意しなくてもある特定の場合に大切であるかも知れないという理由を 説明するものである。我々はユーザエージェントが、合意に達した同意を同意IDという同意のフィンガープリントで表示された形で 記録することを期待する。
サイトは、接触のたびに新しいプロポーザルをユーザエージェントに送るのではなく、既存の同意IDを送っても良い。これは、 1)サービスとユーザエージェントが既に合意に達していることを示す、 2)どのプロポーザルとプライバシープラクティスがの下で動いているかを合図する、 3)同意で参照されているデータエレメントを要求する、という意味がある。 ユーザエージェントは断っても良いし、要求されたデータで応じても良いし、あるいは該当同意の記録がないか新しく欲しければ、 完全なプロポーザルを要求しても良い。
サイトはまた、プロポーザルの一部として、テンポラリIDあるいはペアワイズID(TUID/PUID)をユーザエージェントが戻った時に 自動的にサイトに送るよう要求する能力がある。PUIDはクッキーに似ているがP3P制御下にあり、数値に限られている。
我々の設計ではアプリケーションは、複数のやり取り、プロポーザルの保存能力、ユーザエージェントやサーバ側のデータレポジトリの使い方、 同意レポジトリのサイズに関する我々の仮定や期待とは独立したインプリメントが十分に可能である。
propURI:プロポーザルを発行するURI。
postURI:情報をどこに送るかを示すURI。
discURI:プロポーザルのプライバシーステートメントを自然言語で記述したURI。
これらのシナリオは交渉が発生しない場合の相互作用を図解している。 しかしどのシナリオもサイトが初めから複数のプロポーザルを行うシナリオに拡張されたり、 サイトとユーザ間で一連のプロポーザルやカウンタープロポーザルが交わされるシナリオに拡張される可能性がある。 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 |
プロトコルシナリオ:クライアントはOPTヘッダー([MANDA])参照)をサーバに送る。 サーバがP3Pをサポートしていない場合は、内容のみを送り返す。 (この内容とは、従来のCGIメソッドを使って情報をサーバに送るHTMLフォームになるだろう。) サーバがP3Pをサポートしていてかつ関連のプロポーザルを持っている場合は、 サーバは409コードとP3Pクライアントに対するプロポーザルをHTMLヘッダーもしくはURI参照の形で返す。
プロトコルシナリオ:クライアントはサーバにOPTヘッダとすべての関連したReturnIDを送る。 サーバは関連した内容を返し、それに続くP3Pデータ要求(同意ID付きTXD)を送ることができる。
プロトコルシナリオ:シナリオ5はシナリオ4の延長であり、 シナリオ4でユーザエージェントがサーバにOKと任意にTXD を送って終了したものと仮定している。今、サーバは自らのTXDと共に適切なデータエレメントをクライアントに送る。 もし成功すれば、ユーザエージェントはOK/S-0理由コードで応答する。失敗した場合にはクライアントはSRY/E-0理由コードで応答する。
Scenario | Proposal-URI | Post-URI | Proposal Embedded in Content |
6 | Yes | - | No |
7 | No | - | Yes |
8 | - | Yes | - |
<LINK rel="p3p-prop" href="URI" ?agreeID=""?>ここで、URIはP3Pプロポーザルをさしており、P3P-propはこの特別なP3Pリンクを見分けるために使用される関連名である。
注)どのようなレルムに対してもただ1つのプロポーザルしか作成されない。重複したプロポーザルは認められない。
従って、
[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
|
[2] |
p3p-opt-header |
= |
p3p-extension ";" "ns-" p3p-header-prefix |
[3] |
p3p-extension |
= |
`"` "http://www.w3.org/TR/1998/WD-P3P-19981109/" `"` |
[4] |
p3p-header-prefix |
= |
1*digit |
[5] | digit | = | "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9" |
[6] | number | = | 1*digit |
[7] | yesno | = | `"` ("0"|"1") `"` ; 0 = No, 1 = Yes |
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つのオプションがある。 ユーザエージェントはどの返答が適切かどうかを決定するために、ユーザにガイダンスを指示することを含みながら何らかの方法で プログラムされていなければならない。
最後に、SRYメッセージは、データ送信が失敗した時にデータ送信(TXD)メッセージに対して使うことができる。 送信者は、TXDメッセージを再試行すべきではない。
注意:P3P1.0は、プロポーザルが拒否された場合プロポーザルのどの部分が拒否されたのかをはっきりと指摘することはできない。 そのような機能はP3Pプロトコルの将来版に追加される予定である。P3P1.0では、詳細な交渉を要求するサービスやユーザエージェントのための可能な 予備システムは、カウンタープロポーザルを送り、受け入れられない元々のプロポーザルの部分を修正、除去することである。 インプリメントする人は、ユーザのプライバシープリファレンスを公開することに配慮が必要である。
プロポーザルが任意のエレメントを要求した場合、TXDは要求されたデータエレメントの全てを含まないかもしれない。これらのうちいくつを転送するかを決定するのはユーザエージェントによる。同意は、ユーザにオプション項目を送った結果(おそらく報酬)を知らせてもよい。
[8] |
p3p-content |
= |
OK-msg | PROP-msg | SRY-msg | TXD-msg |
[9] |
OK-msg |
= |
"<OK" message-attribute "/>" |
[10] |
SRY-msg |
= |
"<SRY" [" final=" yesno] ; default is 0 (No) message-attribute "/>" |
[11] |
TXD-msg |
= |
"<TXD" message-attribute ">" data-xfer "</TXD>" |
[12] |
message-attribute |
= |
agreementid-attribute | reason-attribute | data-hash-attribute |
[13] |
agreementid-attribute |
= |
" agreeID=" `"` agreement-id `"` |
[14] |
reason-attribute |
= |
" r=" `"` reason-code `"` |
[15] |
data-xfer |
= |
<XML formatted data element name-value pairs> |
[16] |
agreement-id |
= |
<base64 of 128 bit MD5 digest of proposal as per RFC 1864> |
[17] |
data-hash-attribute |
= |
" dh=" `"` <base64 of MD5 digest of data-xfer> `"` ; used to acknowledge the receipt of data |
[18] |
reason-code |
= |
S-0 | R-0 | R-1 | R-2 | R-3 | R-4 | R-5 | E-0 | E-1 | E-2 |
PrivacyAssuredのメンバーであるCoolCatalogは、Webページhttp://www.CoolCatalog.com/catalogue/に 以下のstatementを載せている。以下は良い形式的な記述である。コメントがセミコロンの後ろにある:私たちは、あなたの名前、年齢、性別を集める。それは、あなたが興味を持ちそうな衣服のタイプを見つけたり、または当方のリサーチ、 商品開発の目的でエントリーカタログページをカスタマイズするためである。この情報を身元が確認できるような方法では使用しない。また、 注文品を届けるためにあなたのお届け先情報を収集する。これは、当然であるが身元が判明する。この情報は社外に再び出ることはない。 あなたからの情報にアクセスできる可能性は提供しない。しかし、保持および脱退方針をもっている。詳しくは、 当方のプライバシーページhttp://www.CoolCatalog.com/PrivacyPractice.htmlを参照のこと。
in proposal schema
www.CoolCatalog.com makes ; entity
this statement for http://www.CoolCatalog.com/catalogue/ ; realm
with assurance from PrivacyAssured
we read ; read is defaultaccess disclosure (3) ; no access to identifiable data
(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
other disclosures (0,1) ; we make disclosures
regarding changing agreement and retention
at http://www.CoolCatalog.com/PrivacyPractice.html
<RDF:RDF xmlns:RDF="http://www.w3.org/TR/WD-rdf-syntax"> <PROP xmlns="http://www.w3.org/TR/1998/WD-P3P-19981109/" xmlns:VOC="http://www.w3.org/TR/1998/WD-P3P-19981109/vocab" xmlns:DATA="http://www.w3.org/TR/1998/WD-P3P-19981109/basedata" realm="http://www.CoolCatalog.com/catalogue/" entity="http://www.CoolCatalog.com" agreeID="94df1293a3e5"> <USES> <STATEMENT VOC:purp="2,3" VOC:recpnt="0" VOC:id="0" consq="a site with clothes you'd appreciate."> <WITH><DATA:PREFIX name="User."> <DATA:REF name="Name.First"/> <DATA:REF name="Bdate.Year" optional="1"/> <DATA:REF name="Gender"/> </DATA:PREFIX></WITH> </STATEMENT> </USES> <USES> <STATEMENT action="read&write" VOC:purp="0" VOC:recpnt="0" VOC:id="1"> <DATA:REF name="User.Shipping."/> </STATEMENT> </USES> <VOC:DISCLOSURE discURI="http://www.CoolCatalog.com/PrivacyPractice.html" access="3" other="0,1"/> <ASSURANCE org="http://www.TrustUs.org" text="third party" image="http://www.TrustUs.org/Logo.gif"/> </PROP>/STATES> </RDF:RDF>
[19] |
PROP-msg |
= |
`<P3P xmlns="http://www.w3.org/TR/1998/WD-P3P-19981109/" xmlns:VOC="http://www.w3.org/TR/1998/WD-P3P-19981109/vocab" xmlns:DATA="http://www.w3.org/TR/1998/WD-P3P-19981109/basedata">` 1*(short-proposal | long-proposal) `</P3P>`| (`<RDF:RDF xmlns:RDF="http://www.w3.org/TR/WD-rdf-syntax/">` `<P3P xmlns="http://www.w3.org/TR/1998/WD-P3P-19981109/" xmlns:VOC="http://www.w3.org/TR/1998/WD-P3P-19981109/vocab" xmlns:DATA="http://www.w3.org/TR/1998/WD-P3P-19981109/basedata">` 1*(short-proposal | long proposal ) `</P3P>` `</RDF:RDF>`)) |
ショートプロポーザルは、サイトがエージェントが同意を知っていると仮定したいとき、 あるいはエージェントにpropURIで示される完全なプロポーザルを参照させたいときに送られる。
[20] |
short-proposal |
= |
`<STATES><PROP ` (("agreeID=" `"` quoted-string `"` ">") | ("propURI=" quoted-URI ">")) "</PROP></STATES>" |
ロングプロポーザルは必要な属性のすべてを含んでいる。
[21] |
long-proposal |
= |
`<STATES><PROP` [" final=" yesno] ; default is 0 (No) [agreementid-attribute] [" agrexp=" `"` datetime `"`] ;default is six months " realm=" `"` URI *(" " URI) `"` " entity=" quoted-URI [" postURI=" quoted-URI] [" optional=" yesno] ;default is 0 (No) ">" 1*statement-block disclosure 1*assurance "</PROP></STATES>" |
[22] |
schemaURI |
= |
`"` "http://www.w3.org/TR/1998/WD-P3P-19981109/" `"` |
[23] |
quoted-string |
= |
`"` string `"` |
[24] |
string |
= |
<[UTF-8] string (with " and & escaped)> |
[25] |
quoted-URI |
= |
`"` URI `"';` |
[26] |
URI |
= |
<URI as per RFC 2068 [URI]> |
[27] |
datetime |
= |
<date/time as per section 3.3 of RFC 2068> |
注意点として、ユーザエージェントは現在の要求URIが既存の同意に影響されるのかどうかを決定するためにレルムを使う。 ユーザエージェントは、もし有効な同意がReturnIDを要求した場合、その要求とともに自動的にReturnIDを転送する。このことは、 サービスが状態を保持したり、客レベルの統計を保存したりする機能を与えている。
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であるか、あるいはURIのrealmのセットを表すデジタル認証を示す URI。以下のシナリオを考えてみてもらいたい。
以下の場合にP3Pエレメントが要求される。
agent.. デフォルト値。P3Pエージェントは、ユーザを要求しなければならない。例えば、サービスは自分の具象的な制御の下で要求を持ちたがる。また、サービスはデータをシナリオ8に書かれているpostメカニズムを通して受けたがっていると仮定する。
form.. 要求は、連携したHTML内容の暗黙のフォームを通して起こる。
URI.. 与えられた情報は、与えられたURIのresourceによって要求される。
<RDF:RDF xmlns:RDF="http://www.w3.org/TR/WD-rdf-syntax/"> <P3P xmlns="http://www.w3.org/TR/1998/WD-P3P-19981109/" xmlns:VOC="http://www.w3.org/TR/1998/WD-P3P-19981109/vocab" xmlns:DATA="http://www.w3.org/TR/1998/WD-P3P-19981109/basedata"> <STATES> <PROP realm="http://www.CoolCatalog.com/catalogue/" entity="http://www.CoolCatalog.com" agreeID="94df1293a3e5"postURI="http://www.CoolCatalog.com/cgi-bin"/>
<USES> <STATEMENTaction="rw"
VOC:purp="2,3" VOC:recpnt="0" VOC:id="0" source="form" consq="a catalogue of shoes that fit you."> <WITH><DATA:PREFIX name="Cool." xmlns:DATA="http://www.CoolCatalog.com/productschema.html"> <DATA:REF name="ShoeSize"/> </DATA:PREFIX></WITH> <DATA:REF name="Form.Data_"/> </STATEMENT> </USES> <ASSURANCE org="http://www.TrustUs.org" text="third party" image="http://www.TrustUs.org/Logo.gif"/></PROP>
</STATES>
</P3P>
</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>
注意:これは、プロポーザルの中でinformation beyond that which is enumerated と表現されていたアブストラクトエレメントForm.Data…とは異なる。(例:HTMLやJava式で)Source 属性はプロポーザルに列挙された情報はどのように送信請求されるかを指定する。情報は、そのsource方式に関連した方法を元に返却される。例えば、If source="form"の場合、情報はHTML/HTTP postによって返却される。Ifsource="agent"情報は、P3P-HTTP-extensionか 指定すれば postURIで返却される。Java appletでの情報送信請求が通常の方法になってきた場合、自らの方式で情報を返す可能性がある。
- <ASSURANCE>
- entityがそのプロポーザルを守る事を証明するサービスで、データの処理においてガイドラインに従うか、あるいはその他の関係ある主張に従う。
- service
- Assurance serviceのURI
- text
- Assurance serviceのタイプの短い原文通りの説明 (e.g., third party, legal, etc.)
- image
- Assurance serviceのimage logoのURI
- width
- Image logoのピクセル幅
- height
- Image logo のピクセル高さ
- alt
- Image logoの短い原文通りの説明
[36] |
assurance |
= |
"<ASSURANCE" " service=" quoted-URI [" text=" quoted-string] [" image=" quoted-URI [" width=" `"` number `"`] [" height=" `"` number `"`] [" alt=" quoted-string] ] "/>" |
注意:ASSURANCEの複数の発生により指定される複数のassurance serviceが存在する。
http://www.w3.org/TR/1998/WD-P3P-19981109/vocab
xmlns="http://www.w3.org/TR/1998/WD-P3P-19981109/syntax" xmlns:VOC="http://www.w3.org/TR/1998/WD-P3P-19981109/vocab"
- VOC:purp
- Webに適切なデータプロセッシングの目的
- VOC:recpnt
- データが配布されるかもしれないサービスプロバイダーやエージェントを越えたorganizational areaとドメイン。
- VOC:id
- 個人的な身元確認可能な方法で使用されるデータ。他のソースからのあなたに関する身元確認可能な情報とのリンクを含む。
- action
- データ読み込み又は読み込みと書き込み
- source
- native P3Pエージェント インターフェース以外の方法を通して情報の送信を請求する。
[28] |
statement-block |
= |
"<USES>" "<STATEMENT" [" action=" `"` action `"`] " VOC:purp=" `"` purpose *("," purpose) `"` " VOC:recpnt=" `"` recipients *("," recipients) `"` " VOC:id=" yesno [" consq=" quoted-string] [" source=" `"` ("agent"|"form"|URI) `"`] ; default is agent ">" *(datablock) "</STATEMENT>" "</USES>" |
[29] |
action |
= |
("r" | "rw") ; r=read, rw=read&write, デフォルトはread |
[30-32]の値は参照目的で記載する。仕様については、harmonized vocabulary文書を参照のこと。 | |||
[30] |
purpose |
= |
"0" | ; 現在のactivityの完成およびサポート "1" | ; ウェブサイトとシステムアドミニストレーション "2" | ; 個人に対するサイトのカスタマイズ "3" | ; 研究開発 "4" | ; サービスや製品のマーケティングの為の訪問者との接触 "5" [" (" string ")"] ; その他の使用法 |
[31] |
recipient |
= |
"0" | ; 社内事項とエージェント "1" | ; 他社のプラクティスに従う組織 "2" | ; 無関係の第三者およびパブリックフォーラム "3" ; 無関係の第三者およびパブリックフォーラム |
[32] |
id |
= |
yesno |
注意:これらのエレメントや属性の多くはvocabulary namespaceに関連している。もともとかなり保守的なデフォルト値が選ばれ("0")、サービスにこれらのデフォルトに対抗して、これらのプラクティスに正直であるように強制していた。しかし、これにより意味相互運用性(semantic interoperability)に結びつく可能性がある。サービスはある属性が任意であると思い、ユーザがそれらに(?)暗黙の/デフォルトの意味に基づいた情報をあたえる。もっと良いアプローチは、デフォルト値をかなり高く設定することである。 (すなわち、recipient属性が含まれていない場合は、データが公共に分配されていることを意味する。)しかし、我々は、optional属性とdefault semanticを持つ必要な属性との混同を避けるためにデフォルト値を提供しないことに徹底しすぎている。
xmlns:VOC="http://www.w3.org/TR/1998/WD-P3P-19981109/vocab"
- <VOC:DISCLOSURE>
- サービスのアクセス能力に関する簡単な情報開示能力で、entityがすでに集められたデータの同意の変更やデータの保持方法についての情報開示を行うかどうかに関するバイナリ値。
- discURI
- プロポーザルのわかりやすいURI。これは、質問などでサービスにコンタクトする時の方法についても含んでいる。
- access
- 個人情報、住所に関する質問、サービスプロバイダーへの憂慮事項等を個人が参照できること。
- other
- サイトはそのdiscURIで知られる同意の変更や保持に関してそのポリシーを作るのか?
[33-35]の値は参照目的で記載している。仕様についてはharmonized vocabulary文書を参照。 | |||
[33] |
disclosure |
= |
"<VOC:DISCLOSURE" " discURI=" quoted-URI " access=" `"` access-disclosure `"` [" other=" `"` other-disclosure *("," other-disclosure) `"`] "/>" |
[34] |
access-disclosure |
= |
"0" | ; Identifiable Data is Not Used "1" | ; Identifiable Contact Information "2" | ; Other Identifiable Information "3" | ; None |
[35] |
other-disclosure |
= |
"0" | ; change agreement "1" ; retention |
xmlns:VOC="http://www.w3.org/TR/1998/WD-P3P-19981109/basedata"
[37] |
data-reference |
= |
"<DATA:REF" " name=" quoted-string [" xmlns:DATA=" quoted-URI] [" optional=" yesno] [" value=" quoted-string] [" type="quoted-string] [" typeschema=" quoted-URI] [" template=" yesno] [" VOC:category=" categories] [" short=" quoted-string] [" long=" quoted-string] [" size=" `"` number `"`] ; default is 0 (unlimited size) [" ext=" quoted-URI] "/>" |
例として、ユーザのお届け先情報の都市名、User.Business.の全エレメント、そして(オプションとして)User.Home.Info.Phone. の全エレメントを要求するために、サービスはP3Pプロポーザルの中で以下のようなreferenceを送る。
<DATA:REF name="User.Shipping.Postal.City"/>
<DATA:REF name="User.Home.Telecom.Phone."
optional="1"/>
<DATA:REF name="User.Business."/>
ユーザがcity, business情報,自宅の電話番号の国際コードとローカルエリアコードのみを返すことに同意する場合、txdタグの中で以下のreferenceを送る。
<DATA:REF name="User.Shipping.Postal.City"
value="Cambridge"/>
<DATA:REF name="User.Home.Telecom.Phone.IntCode"
value="1"/>
<DATA:REF name="User.Home.Telecom.Phone.LocCode"
value="617"/>
<DATA:REF name="User.Business.Postal.Street"
value="254 Windsor St."/>
<DATA:REF name="User.Business.Postal.City"
value="Cambridge"/>
... (the other values of User.Business.) ...
<WITH><DATA:PREFIX name="User.">
<DATA:REF name="Shipping.Postal.City" value="Boston"/>
<DATA:REF name="Home.Telecom.Phone.IntCode" value="1"/>
<DATA:REF name="Home.Telecom.Phone.LocCode" value="617"/>
<DATA:REF name="Business.Postal.Street" value="12 Main
St."/>
<DATA:REF name="Business.Postal.City" value="Cambridge"/>
... (the other values of User.Business.) ...
</DATA:PREFIX></WITH>
<WITH><DATA:PREFIX> は、一揃いになることができる。Prefix は、最も奥の<WITH><DATA:PREFIX> ...</DATA:PREFIX></WITH> の組み合わせの前につけること(ここで"最も奥"は、タグの中には他の<WITH><DATA:PREFIX> が無いことを意味する)。そのため、上記の例は以下の方法でもっとコンパクトに書き換えることができる。
<WITH><DATA:PREFIX name="User.">
<DATA:REF name="Shipping.Postal.City"
value="Boston"/>
<WITH><DATA:PREFIX name="Home.Telecom.Phone.">
<DATA:REF name="IntCode" value="1"/>
<DATA:REF name="LocCode" value="617"/>
</DATA:PREFIX></WITH>
<WITH><DATA:PREFIX name="Business.Postal.">
<DATA:REF name="Street"
value="12 Main St."/>
<DATA:REF name="City"
value="Cambridge"/>
...
(the other values of User.Business.Postal.) ...
</DATA:PREFIX></WITH>
...
(the other values ofUser.Business.) ...
</DATA:PREFIX></WITH>
注意:1つのタグ(<DATA:PREFIX>だけ)の代わりに2つのタグ(<WITH><DATA:PREFIX>)を使う理由は、技術的にRDFデータモデルを用いているからである。
[38] |
datablock |
= |
*datareference | ( *datareference "<WITH><DATA:PREFIX" " name=" quoted-string [" xmlns:DATA=" quoted-string] [" optional=" quoted-string] [" value=" quoted-string] [" type=" quoted-string] [" typeschema=" quoted-string] [" template=" yesno] [" VOC:category=" quoted-string] [" short=" quoted-string] [" long=" quoted-string] ">" datablock "</DATA:PREFIX></WITH>" datablock ) |
http://www.w3.org/TR/1998/WD-P3P-19981109/vocab/#CategoriesCategory は、データエレメントの属性であり、ユーザとユーザエージェントにデータの意図した使い方のヒントを与える。Categoryは、P3P ユーザエージェントの実施や使用を簡単にするために必要である。これにより、ユーザがデータの交換においてより一般的なプリファレンスやルールを表現することができる。Categoryは、新しいエレメントを定義したり、データを作るために参照したりする時にしばしば含まれる。
Categoryの中のデータエレメントのメンバーシップは、一般的にばらばら(disjoint)である。ほとんどのデータエレメントは、1つのcategoryに属さなければならないが、必要であればそれらは複数のcategoryに属する場合もある。さらに、データセットは、エレメントが属する全てのcategoryに属する。基本データエレメントは全てP3P仕様書のデフォルトcategoryに割り当てられている。サービスが新しいデータエレメントをproposeする時、そのプロポーザルは、デフォルトcategoryかエレメント用の categoryを含んでいなければならないが、ユーザやユーザエージェントは、category割り当てに対する最終的な制御権を持っている。
[39] |
categories |
= |
`"` *(number ",") number `"` |
P3Pの現在のバージョンでは以下の数字がデータカテゴリを示すために使うことができる。
"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" ; Contentcategoryに関する詳しい説明は、P3P Harmonized Vocabulary Specificationを参照のこと。
<STATEMENT action="r" VOC:purp="2" VOC:recpnt="0"
VOC:id="0"/>
<DATA:REF name="ID.PUID"/>
<DATA:REF name="User.Name.First"/>
</STATEMENT>
<STATEMENT ="rw" VOC:purp="2" VOC:recpnt="0"
VOC:id="0">
<DATA:REF name="FineShoes.shoesize"
xmlns:DATA="http://www.FineShoes.com/Schema1.0"
/>
</STATEMENT>
ユーザは、このプロポーザルに同意するかどうか聞かれたら、指示するかも知れない。そして、User.PersonName.First auto-filled(ユーザがそれを前に入力したと仮定して)とのインタフェースのフォームとFineShoes.shoesize用の空のフィールドが表示される。ユーザは、この情報を入力し、TXDを送信する。
The user sends:
<TXD r="S-0" agreeID="94df1293a3e5">
<DATA:REF name="User.Name.First" value="Josephine"/>
<DATA:REF name="ID.PUID" value="1234567"/>
<DATA:REF name="FineShoes.Shoesize"
xmlns:DATA="http://www.FineShoes.com/Schema1.0"
value="7"/>
</TXD>
属性"rw"がデータエレメントに適用される場合や新しい値がユーザから提供される場合は必ずユーザエージェントはデータレポジトリへの書き込みをやってみなければならない。もし、これに失敗したらエージェントは、適切なレスポンスコードを戻さなければならない。この自動書き込みによってサービスがユーザエージェントに情報を戻す手間が省ける。しかし、サービスは、いつでも(TXD)を送るかも知れない。例えば、ユーザが靴サイズ7という情報を提供しても、サービスは、ヨーロッパサイズに変換し、その値を代わりに書き込む。
エレメントに対する任意のaction(read or read & write) というのは記述しやすい。オプション的な要素は、<DATA:REF>タグのoptional属性によって表される。読み取りや書き込みのためにオプション的に要求されるが、クライアントは受け入れられないこれらのエレメントは、単に作用しない。データは戻されたり書き込まれたりしない。
オプションのクオリファイヤを表示するのは問題がある。 エレメントが処理を終了するのに必要とされるがオプションでダイレクトマーケティングのために要求される場合は、エレメントを単に返却することはユーザが何に同意したかのあいまいな表現になる。従って、あいまいさを避けるために以下のことが必要になる。
<P3P xmlns="http://www.w3.org/TR/1998/WD-P3P-19981109/"
xmlns:VOC="http://www.w3.org/TR/1998/WD-P3P-19981109/vocab"
xmlns:DATA="http://www.w3.org/TR/1998/WD-P3P-19981109/basedata">
<STATES>
<PROP xmlns="http://www.w3.org/TR/1998/WD-P3P-19981109/"
xmlns:VOC="http://www.w3.org/TR/1998/WD-P3P-19981109/vocab"
xmlns:DATA="http://www.w3.org/TR/1998/WD-P3P-19981109/basedata"
agreeID="1e3a5d71297d>"
realm="http://www.CoolCatalog.com/catalogue/">
<USES>
<STATEMENT VOC:purp="2" VOC:recpnt="0" VOC:id="1"
consq="We can ship your order to your door
step">
<DATA:REF
name="User.ShipTo."/>
</STATEMENT> </USES>
<VOC:DISCLOSURE
text="http://www.CoolCatalog.com/PrivacyPractice.html"
access="3" other="0,1"/>
</PROP></STATES>
<STATES>
<PROP agreeID="2e3a5d71297d"
realm="http://www.CoolCatalog.com/catalogue/"
optional="1"> ; note optional is in
header.
<USES>
<STATEMENT VOC:purp="4" VOC:recpnt="0" VOC:id="1"
consq="We will send you our world-renown
catalogue!">
<DATA:REF
name="User.ShipTo."/>
</STATEMENT> </USES>
<VOC:DISCLOSURE
text="http://www.CoolCatalog.com/PrivacyPractice.html"
access="3" other="0,1"/>
</PROP></STATES>
</P3P>
1つの複雑なプライバシーポリシーを表示するのに複数のプロポーザルを使用する場合は、以下のルールに従う必要がある。
<TXD r="S-0" agreeID="1e3a5d71297d" />
<WITH><DATA:PREFIX name="User.ShipTo.">
<DATA:REF
name="Postal.Name" value="Josephine Hound"/>
...
<DATA:REF
name="Telecom.Phone.Number" value="2532442"/>
</DATA:PREFIX></WITH>
この解決策が、複数のプロポーザルとデータ転送において、冗長な情報の 転送を引き起こす可能性があることに注意。しかしこれは、彼らが同意した 曖昧なプロポーザルの一部を送り返すことよりも望ましい
また、サービスは特別なスキーマ定義の形でデータエレメントを詳細に説明する。この情報は、以下の2通りの方法で提供される。
<P3P xmlns="http://www.w3.org/TR/1998/WD-P3P-19981109/" xmlns:VOC="http://www.w3.org/TR/1998/WD-P3P-19981109/vocab" xmlns:DATA="http://www.w3.org/TR/1998/WD-P3P-19981109/basedata"> <STATES> <PROP> <USES><STATEMENT> .... </STATEMENT></USES></PROP></STATES></P3P>データブロックは、<data>タグの中に入っており、データエレメントの参照を含んでいる。参照は、 <DATA:REF>タグとその属性を使用して作ることができる。
各データ転送のために、long以外の情報は全て必要である。属性の1つが欠けていた場合、空の文字列と共に存在すると考えられる。typeschemaの場合は、空の文字列は特別な意味を持ち、typeschemaはxmlns:DATA属性の値と同じになる。
例えば、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に置くことができる。
<P3P xmlns="http://www.w3.org/TR/1998/WD-P3P-19981109/" xmlns:VOC="http://www.w3.org/TR/1998/WD-P3P-19981109/vocab" xmlns:DATA="http://www.w3.org/TR/1998/WD-P3P-19981109/basedata"> <STATES> <PROP> <USES><STATEMENT VOC:purp="4" VOC:recpnt="0" VOC:id="0"> <WITH><DATA:PREFIX name="car." short="Car" VOC:category="7" size="63"> <DATA:REF name="model" type="Text" short="Model"/> <DATA:REF name="color" type="Text" short="Color"/> <WITH><DATA:PREFIX name="built." short="Construction data"> <DATA:REF name="year" type="Number" short="Year"/> <DATA:REF name="where." type="Postal."/> </DATA:PREFIX></WITH> </DATA:PREFIX></WITH> <DATA:REF name="bike." type="car." typeschema="http://www.HyperSpeed.com/models-schema" short="Bike "/> </USES></STATEMENT></PROP></STATES></P3P>
データセットが作成されるたびにそれは上記のcar.の場合のように暗黙にtypeとして使用されることができる。しかし、いくつかの状況において、elementをユーザのレポジトリに作成せずにtypeを定義したい場合もある。このような時は、<DATA:REF>の中にtemplate属性を使うこと。値をyes, つまりtemplate="1"(defaultは"0"で意味は"no")に設定することは、対応するデータエレメントがtype定義の一部であることを意味し、実際に関連した値を持つデータエレメントを表現しているわけではない。例えば、HyperSpeedは汎用のGenericModel.タイプを定義したがっていて、それをcar.とbike.で例示したがっている。これは、以下のスキーマで表現することができる。
<P3P xmlns="http://www.w3.org/TR/1998/WD-P3P-19981109/" xmlns:VOC="http://www.w3.org/TR/1998/WD-P3P-19981109/vocab" xmlns:DATA="http://www.w3.org/TR/1998/WD-P3P-19981109/basedata"> <STATES> <PROP> <USES><STATEMENT VOC:purp="4" VOC:recpnt="0" VOC:id="0"> <WITH><DATA:PREFIX name="GenericModel." template="1" VOC:category="7" size="63"> <DATA:REF name="model" type="Text" short="model"/> <DATA:REF name="color" type="Text" short="color"/> <WITH><DATA:PREFIX name="built." short="Construction data"> <DATA:REF name="year" type="Number" short="Year"/> <DATA:REF name="where." type="Postal."/> </DATA:PREFIX></WITH> </DATA:PREFIX></WITH> <DATA:REF name="car." type="GenericModel." typeschema="http://www.HyperSpeed.com/models-schema" short="Car"/> <DATA:REF name="bike." type="GenericModel." typeschema="http://www.HyperSpeed.com/models-schema" short="Bike"/> </USES></STATEMENT></PROP></STATES></P3P>注意:新しいデータセットに大事なデータを確実に保存させるコマンドはない。これは重要データは暗号化したり、reference URIを使用して安全に保存することができるからである。
フィンガープリントを生み出すプロセスは相当シンプルなものである。フィンガープリントが同一であるためには、送信者と受信者によってフィンガープリント化されるデータが同一でなければならない。我々の目的は、仲介者のあらゆる改ざん努力を無駄にさせるため、データが標準形式(正規化)にフィンガープリント化されるよう推し進めることである。そうなれば我々はフィンガープリントを生成するために、正規化されたバージョンのプロポーザルを使うことになる。同じプロポーザルが与えられれば、サービスとエージェントの双方は同じフィンガープリント値に到達できなければならない。
<rdf:rdf> |
正規化の後、次のようになる。
<PROP realm="http://www.CoolCatalog.com/catalogue/" entity="http://www.CoolCatalog.com" >
<USES>
<STATEMENT consq="A site with clothes you'd appreciate." VOC:purp="2,3" VOC:recpnt="0" VOC:id="0">
<WITH>
<DATA:PREFIX name="user.">
<DATA:REF name="name.first"/>
<DATA:REF name="bdate.year" optional="1"/>
<DATA:REF name="gender"/>
</DATA:PREFIX>
</WITH>
</STATEMENT>
</USES>
<USES>
<STATEMENT ="rw" VOC:purp="0" VOC:recpnt="0" VOC:id="1">
<DATA:REF name="user.shipping."/>
</STATEMENT>
</USES>
<VOC:DISCLOSURE discuri="http://www.CoolCatalog.com/PrivacyPractice.html" access="3" other="0,1"/>
<ASSURANCE org="http://www.TrustUs.org"
text="third party" image="http://www.TrustUs.org/Logo.gif"/>
</PROP>
MD5ハッシュアルゴリズムは以下で定義されている。
The MD5 Message Digest Algorithm, R.L. Rivest, RFC 1321, April 1992MD5(Message Digest 5)は、暗号化メッセージ要約アルゴリズムである。
MD5はRon Rivestにより設計された。彼は1991年のRSAの"R"でもある。MD5はRFC1321に記述されている。CのソースコードがRFCに含まれている。MD5は基本的には"安全ベルト"付きのMD4であり、MD4よりわずかに速度が遅いがセキュリティ度は高い。アルゴリズムは4つの異なるラウンドから成り、それらはMD4のものとはわずかに異なる設計になっている。メッセージ要約サイズは同じ。
MD5アルゴリズムは、入力として任意の長さのメッセージを受け取り、出力として128ビットの"フィンガープリント"または入力の"メッセージ要約"を生成する。同じメッセージ要約を持つ2つのメッセージを作ることや、前もって指定されたメッセージ要約を持つメッセージを作ることは、コンピュータでできないものと思われる。MD5アルゴリズムはデジタル署名アプリケーションを意図している。そこでは大きなファイルは、RSAやPGPのような公開鍵暗合方式の下で個人(秘密)鍵によって暗号化される前に、あるセキュアな方法で圧縮されなければならない。
MD5のさらに詳しい情報は、以下を参照のこと。
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.
ユーザはブラウザで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-P3P-19981109/"; ns-42CoolCatalogはプロポーザルを送信する。それはプライバシープラクティス、情報開示、それらが当てはまるデータエレメントを含んでいる。この例では、サービスは将来自動的にReturnIDの一部としてPUIDが与えられることを要求し、ユーザレポジトリからユーザの性別を要求する。
HTTP/1.1 409 Agreement required Server: Marvin/2.0.1 OPT: "http://www.w3.org/TR/1998/WD-P3P-19981109/"; ns-1944 1944-P3P1.0: <P3P xmlns="http://www.w3.org/TR/1998/WD-P3P-19981109/" xmlns:VOC="http://www.w3.org/TR/1998/WD-P3P-19981109/vocab" xmlns:DATA="http://www.w3.org/TR/1998/WD-P3P-19981109/basedata">
<STATES> <PROP realm="http://www.CoolCatalog.com/" entity="http://www.CoolCatalog.com" > <USES> <STATEMENT VOC:purp="2" VOC:id="0" VOC:recpnt="0" consq="a personalized site!"/> <DATA:REF name="Web.PUID"/> <DATA:REF name="User.Gender"/> </STATEMENT> </USES> <VOC:DISCLOSURE text="http://www.CoolCatalog.com/PrivacyPractice.html" access="3" other="0,1"/> <ASSURANCE org="http://www.TrustUs.org" text="third party" image="http://www.TrustUs.org/Logo.gif"/> </PROP>
</STATES> </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-P3P-19981109/ "; ns-1776
1776-P3P: <SRY r="R-3" agreeID="e3a5d71297d1" />
サイトは新たなプロポーザルを提供し、今度は自動的なReturnIDを要求し、ユーザレポジトリからファーストネーム(名前)およびオプションで年齢を、共にサイトをカスタマイズする目的で要求する。
HTTP/1.1 409 Agreement required
Server: Marvin/2.0.1
OPT: "http://www.w3.org/TR/1998/WD-P3P-19981109/"; ns-1492
1492-P3P1.0:
<P3P xmlns="http://www.w3.org/TR/1998/WD-P3P-19981109/"
xmlns:VOC="http://www.w3.org/TR/1998/WD-P3P-19981109/vocab"
xmlns:DATA="http://www.w3.org/TR/1998/WD-P3P-19981109/basedata">
<STATES>
<PROP realm="http://www.CoolCatalog.com/" entity="http://www.CoolCatalog.com" >
<USES>
<STATEMENT VOC:purp="2" VOC:id="0" consq="a personalized site!">
<WITH><DATA:PREFIX name="User.">
<DATA:REF name="Name.First"/>
<DATA:REF name="Bdate.Year" optional="1"/>
</DATA:PREFIX></WITH>
<DATA:REF name="Web.PUID"/>
</STATEMENT>
</USES>
<VOC:DISCLOSURE text="http://www.CoolCatalog.com/PrivacyPractice.html"
access="3" other="0,1"/>
<ASSURANCE org="http://www.TrustUs.org"
text="third party" image="http://www.TrustUs.org/Logo.gif"/>
</PROP>
</STATES>
</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-P3P-19981109/"; ns-1861
1861-P3P1.0: <TXD r="S-0" agreeID="94df1293a3e5" >
<DATA:REF VOC:purp="2" name="User.Name.First" value="Josephine"/>
<DATA:REF VOC: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-P3P-19981109/"; 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-P3P-19981109/ "; ns-2001
2001-P3P: <TXD agreeID="94df1293a3e5" >
<DATA: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-P3P-19981109/"; ns-2010
2010-P3P: <PROP agreeID="94df1293a3e5"/>
</PROP>
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-P3P-19981109/"; ns-1968
1968-P3P1.0: <TXD agreeID="94df1293a3e5" >
<DATA:REF name="User.Name.First" value="Josephine"/>
<DATA: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-P3P-19981109/"; ns-1950
1950-P3P1.0: <OK DH="s24fd20kuqexg5xk" />
Content-Type: text/html
Content-Length: xxx
[content of the CoolCatalog homepage]
Lorrie Cranor | AT&T |
Philip DesAutels | Matchlogic |
Melissa Dunn | Microsoft |
Daniel Jaye (Editor) | Engage Technologies |
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 |
この作業は他のドキュメントに基づいた。特に、
同様に、