このドキュメントは The Platform for Privacy Preferences 1.0 (P3P1.0) Specification W3C Candidate Recommendation 15 December 2000 http://www.w3.org/TR/2000/CR-P3P-20001215 の和訳です。 この文書には和訳上の誤りがありえます。 内容の保証はいたしかねますので、必ずW3C Webサイトの正式版文書を参照して下さい。 また、著作権等については本文書に含まれる記述に加え、こちらも必ず参照してください。 |
Copyright(C) 2000 W3C® (MIT, INRIA, Keio), All Rights Reserved. W3C 免責, 登録商標, 文書の使用、そして ソフトウエアライセンス に関する規則が適用される。
本仕様書は、「プライバシー情報取り扱いに対する個人の選好を支持する技術基盤(Platform for Privacy Preferences、P3P)」 の仕様書である。 標準書作成手順に従い、本文書は、相互互換性のあるP3Pアプリケーションのインプリメントに必要な総ての仕様を規定している。
この節では、文書の発行時における当該文書の位置付けについて記述する。 しかし、この記述内容は、他の文書で置き換えられる可能性がある。 本文書シリーズの最新の位置付けは、W3Cが決めている。
本書はPlatform for Privacy Preferences 1.0 (P3P1.0) Specificationのプラットフォーム2000年12月15日の勧告である。これはP3P仕様書のワーキンググループ(メンバーのみ)がこの仕様書を固定させることを考慮し、この期間に実装とこの仕様書に関してのコメントを促している。勧告レビュー期間は以下の部分がアーカイブされると終了する。実装者の入力は2001年3月15日中までは可能である。
アーカイブされる部分は:
さらに、勧告レビュー期間にワーキンググループは:
また、ワーキンググループは実装者に[APPEL] 言語を使用してユーザプリファレンスを インポートできる実装と、プロキシとモバイル機器での実装ができるかを調査することを促進する。
www-p3p-public-comments@w3.org (一般にアーカイブしている) へレビューコメントをお送り下さい。
この仕様書は実装が非常に難しく、実行しがたいので、ワーキンググループはドキュメントをワーキングドラフト状態に戻し、変更を行う。 そうでない場合、ワーキンググループはW3Cディレクターにこのドキュメントを提案した勧告へ進捗するように要求することを期待する。
便宜上、2000年10月18日の分からの変更についての要約の変更ログはこの文書の終わりに述べている。
現行のパブリックW3Cワーキングドラフトはhttp://www.w3.org/TRで見ることができる。
必須機能の要約:
ユーザエージェントは以下のことが可能でなければならない:
LINK
タグにポリシー参照ファイルがあるかどうかを確認する。(HTMLファイルを取り出すポリシー参照ファイルのみに必要)
推奨される機能の要約:
ユーザエージェントは以下のことが可能であるべきである:
Platform for Privacy Preferences Project (略称P3P)は、Webサイトが標準形式でそのサイトのプライバシープラクティスを表現することを可能にし、その標準形式データをユーザエージェントが自動的に取りこんだり、簡単に処理したりすることを可能にする。P3Pユーザエージェントはサイトのプライバシープラクティスを利用者に(マシンが読むことができる形式、及び人間が読むことのできる(ヒューマンリーダブルの)形式で)通知することができ、プライバシープラクティスが適切ならば、自動意思決定を行うことも可能である。P3Pユーザエージェントのこの自動意思決定機能を用いれば、利用者は、アクセスするサイトの総てのプライバシーポリシーを逐一読む必要が無くなる。
P3Pは、利用者が、個人情報を受け渡す前にサイトのプライバシーポリシーを知ることを可能にするメカニズムを提供するが、そのサイトがそのポリシーに従った行動をすることを保証するメカニズムを提供するものではないことに注意されたい。本仕様書の内容を実装した幾つかのプロダクトは、そのような保証の支援メカニズムを有するかもしれないが、それは、個々の実装上の都合によるものであり、本仕様の範囲外である。しかしながら、P3Pは、プライバシーに関する法律や自主規制プログラムを補完するものであり、それらを強化するメカニズムを提供することができる。更に付け加えるならば、P3Pは、データ転送のメカニズムを提供するものではなく、また、データの保管を安全に行うためのメカニズムを提供するものでもない。P3Pは、データ転送を可能にするツールの中に組み込まれ、それらのツールは、適切な機密保護機構を有しているべきである。
P3P1.0仕様書は、P3Pプライバシーポリシー(P3Pポリシー)のための構文とセマンティクスとを定義しており、そして、Webリソースにポリシーを付加するためのメカニズムを定義している。P3Pポリシーは、プライバシーに関する処理を如何に行うかを表現する為に用いられるP3Pボキャブラリを使って組み立てられるステートメントから構成されている。P3Pポリシーは、P3P基本データスキーマの要素を使用する。P3P基本データスキーマとは、データ要素の一つの標準集合のことをいい、総てのP3Pユーザエージェントは、これを処理できなければならない。P3P仕様書は、新たなデータ要素やデータ集合を定義可能とするメカニズムを規定しており、また,P3Pボキャブラリを増やすことを可能とする簡単なメカニズムも規定している。
P3Pバージョン1.0は、Webサイトがデータ収集を如何に行うかをWeb利用者に通知することを目的に設計されたプロトコルである。P3Pバージョン1.0は、Webサイトがデータ収集と収集したデータの処理とをどの様に行うかをマシンが読むことができるXML形式のP3Pポリシーにコード化する方式を提供する。P3P仕様書は、次の定義を行っている:
P3P1.0の最終目的は、次の二つである。最初の一つは、Webサイトがデータ収集を如何に行うかを標準化され、マシンが読むことができ、かつ、簡単な方法で、提示することを可能とすることである。二つ目は、Web利用者がアクセスするWebサイトが、どんなデータを収集し、どの様にデータが使われるかWeb利用者が知ることができ、どのデータやどんな利用をWeb利用者が"オプトイン"または"オプトアウト"することが可能か知ることができるようにすることである。
P3Pを理解する為、P3Pを利用する一つの事例を考えてみよう。花子さんは、CatalogExample社(そのURLがhttp://www.catalog.example.com/)と呼ばれるあるサイトを見ようと思ったと仮定し、そのCatalogExample社は総てのページにP3Pポリシーを附加しているものと仮定する、更に、花子さんは、P3P対応のブラウザを利用しているものとする。
花子さんが、ブラウザ上でCatalogExample社のURLを指定したとすると、CatalogExample社からホームページ情報を返すとき、花子さんのWebブラウザは自動的にそのページに対応したP3Pポリシーを持ってくる。そのポリシーには、当該ページでは標準のHTTPアクセスログに含まれるデータのみを収集すると記述しているものとする。花子さんのブラウザは、そのポリシーを予め花子さんがブラウザに与えておいたプリファレンスと照合し、そのポリシーが受け入れ可能か、又は、花子さんに通知すべきかチェックする。そのポリシーが受け入れ可能だったと仮定すると、この場合、ホームページは、如何なるポップアップメッセージも表示されること無しに表示される。多分、ウィンドウの片隅に小さなアイコンが表示され、サイトからプライバシーポリシーが提示され、そのポリシーは、彼女のプリファレンスに合致していることを示すであろう。
次に、花子さんが、当該サイトのオンラインカタログのリンクを選択したとすると、当該サイトのカタログ部分で少し複雑なソフトウェアが実行されるようになっていて、このソフトウェアがショツピングカート機能を実現する為に、クッキーを用いていたとすると、当該Webサイトのこの部分は、より多くの情報を収集するので、Webサーバは、花子さんのブラウザに新しいP3Pポリシーを送信する。この場合においても、当該ポリシーが花子さんのプリファレンスに合致したと仮定すると、何のポップアップメッセージが表示されることなく、花子さんは、操作を継続でき、何かを購入したりして、最後にチェックアウトページに進むことができる。
CatalogExample社のチェックアウトページは、何らかの追加情報を必要とする。例えば、花子さんの名前、住所、クレジットカード番号及び電話番号等である。この場合、当該Webサイトは、どんなデータをここで収集し、ここで収集した彼女のデータは、彼女の注文を処理する為にのみ使用すること等を記述した新しいP3Pポリシーを送信する。
花子さんのブラウザは、このP3Pポリシーを調べ、例えば、花子さんが、ブラウザにもしも、電話番号の要求があったならば、警告を通知するよう設定しているならば、ポップアップメッセージで、電話番号が要求されていることを通知し、かつ、P3Pステートメントの内容についても説明する。そこで、花子さんは、要求されたものが受け入れ可能か否か判断することができ、もし、受け入れ可能であるならば、彼女は、注文操作を継続することができ、受け入れることができないならば、トランザクションをキャンセルすることができる。
上記の場合と異なり、花子さんが、ブラウザに「サイトが電話番号を要求し、そして、その情報を第三者に渡し、そして/または、現在の注文処理以外に用いるならば、警告する」ように設定しているならば、花子さんは、如何なるポップアップメッセージが表示されることなく、注文操作を完了することができる。
(注)本シナリオは、あくまでも仮想のインプリメンテーションであり、ユーザインターフェースは、上記以外のものも可能である。
P3Pポリシーは、ポリシーの中にプライバシー情報を如何に処理するか表記している組織を識別するためP3PボキャブラリのXMLエンコーディングを用い、収集されるデータ型とデータ要素を列挙し、そして、どの様にデータが使われるか説明する。更に、ポリシーは、データの受領者を明確にし、係争解決のための情報のような情報開示にまつわる諸々のものを作成可能にし、当該サイトの人間が読むことのできるプライバシーポリシーの存在場所(URL)の通知を行う。P3Pポリシーは、関係する総てのデータ要素とそれをどう使うかカバーしなければならない。(しかし、法の執行の際に必要とされる情報に関する法律的問題はこの仕様書では関知しない。:例えば、公権力によって要求された場合、第三者に提供しないはずのデータがポリシーの規定に反して、他の組織に提供されることがあるかもしれない。)P3Pの記述は、ポジティブな記述であるべきである。すなわち、あるサイトが何々をしないと記述するよりは、何々を行うと記述することが望ましい。P3Pボキャブラリは、ある特殊な法律や行動規範に準拠するためのインディケータというより、サイトがプライバシー情報を如何に取り扱うかを記述することを目的に設計されている。しかしながら、幾つかのユーザエージェントは、サイトのプライバシー情報の取り扱い方が法律や行動規範に合っているか否かテストするために、開発されるかもしれない。
P3Pポリシーは、サイトがプライバシー情報を如何に取り扱うかを表現する。しかし、電気通信プロバイダやISP、プロキシ業者、その他の中間業者が、サイトと利用者との間のプライバシーデータ交換に関与するが、それらの中間業者が何を行っているかについて、サイトのポリシーは関与しない。
P3P1.0ユーザエージェントは、Webブラウザか、ブラウザプラグインか、プロキシサーバに組み込まれることができる。また、それらはJavaアプレットもしくは、JavaScriptで実装され、電子財布や自動フォーム入力やその他の利用者データ管理機能の中に組み込まれるかもしれない。P3Pユーザエージェントは、周知の存在場所にあるP3Pへの参照とHTTP応答の中にあるP3Pヘッダ及びHTMLコンテンツの中に埋め込まれているP3P link
タグを捜す。これらの参照は、関係するP3Pポリシーの存在場所を示している。ユーザエージェントは、示された存在場所からポリシーを取り込み、それを解析し、シンボルを表示したり、音を鳴らしたり、サイトのP3Pプライバシープラクティスを示すプロンプトメッセージを生成したりする。更に、ユーザエージェントはP3Pポリシーを利用者が設定したプライバシープリファレンスの集合と比較し、適切な処理を行うことが可能である。P3Pは、電子財布や自動フォーム入力のようなデータ転送メカニズムにおけるある種の"ゲートキーパー"の機能を行うこともできる。あるP3Pユーザエージェントは、P3Pポリシーを検索したり、利用者のプリファレンスと比較したり、次の二つの条件を満たしたときデータを送出するメカニズムの何れか中に統合されるかもしれない。a)ポリシーが、利用者のプリファレンスと一致している。そして、b)要求されたデータ転送が、ポリシーと一致している。もしも、これらの条件の何れかに合致していないならば、利用者に、不一致の通知と、データを送出するか否か選択する機会が与えられるべきである。
Webサイトは、利用者に文章で開示しているプライバシーポリシーをP3P構文に翻訳し、ポリシーへ適用しているサイトの一部を示すポリシー参照と一緒に、その結果のファイルを公開することにより、P3P1.0を実装することができる。自動化ツールにより、この翻訳を行うサイトの運営者を支援することが可能である。P3P1.0はソフトを特に追加したりアップグレードすることなく、現在のHTTP/1.1準拠のWebサーバにおいて構築できる。サーバは周知の存在場所からポリシー参照ファイル を構築でき、あるいはlink
タグを使ったHTMLコンテンツでP3Pポリシー参照ファイルを参照するかもしれない。または、サイトのP3Pポリシー参照ファイルの存在場所を示すHTTPレスポンスへP3P拡張ヘッダを挿入するような互換性のあるサーバを構築できるであろう。
Webサイトは、サイト全体に一つのP3Pポリシーを付与することもできるし、そのサイトの異なる部分に異なるポリシーを指定するといったこともできる。ある一つのP3Pポリシーは、そのサイトへの訪問者とHTTPでやりとりする際に生成されたり、交換されたりするすべてのデータをカバーするものでなければならない。更にいうと、幾つかのサイトは、データがどの様に収集されたかにかかわらず、総てのデータをカバーするP3Pポリシーを作ることを望むかもしれない。
P3Pの早期の実装と最初の普及を容易にするために、前回のP3P1.0使用書から重要な章を削除した。 当該グループは、P3P1.0が普及した時点で、 P3Pの次期仕様書にこれらの機能を組み込むことがある。このような仕様書には、実装経験や普及時の経験を反映させるとともに、P3P1.0から落とされた、次の4つの重要な機能を盛り込む予定である。
W3Cの正式仕様書作成手順に従い、本仕様書は、相互互換性のあるP3Pアプリケーションの作成に必要とされる総ての仕様を包含している。
本仕様書で用いられている[ABNF]記述は、RFC2234に従ったものであり、その概略を付録 7に示す。しかし、その構文は、XML構文で示される単なる一つの文法であることに注意されたい。そうであるけれども、XMLで表現できる構文の意味するところの総てを理解することができるであろう。例えば、空白規則、引用符(')や二重引用符(")を用いた引用、エスケープ文字、コメント、各部分での記述方法などである。XMLが要素属性の順番付けには柔軟性を与えているが、要素の順番つけには柔軟性を与えていないということに注意されたい。XML要素は文書タイプの定義(DTD)に示されている順番になっていなければならない。
以下の節では幾つものXML要素が紹介されている。各エレメントは有効な属性のリストに従って、かぎかっこ("<element>
")の中に示されている。
リストされている属性は必須であると決められていない限り、すべて選択が自由である。多くのXML要素がオプション要素を
取り入れられるように、独立した最初と終わりのタグを持つBNF内に示されていることに注意されたい。XML規則に従って、エレメントがまったく含まれない場合は、セルフクロージング(自動的に終了する)エレメントが代わりに使用されることがある。
本仕様書は、必要性の程度を表す為、RFC2119 [KEY]に定義されている次の用語を用いる。次の重要な用語が、相互互換性を実現する為に、本文書全体を通して用いられている。
user.home.postal
"といった、データ要素の一般的なグループのことである。
このP3P 1.0は、幾つかの基本データ集合を定めている。
P3Pポリシーを設置することは、P3Pプロトコル工程における初期段階のステップである。 サービスは、どのP3Pポリシーが特定のどのURI、またはURIの集合に適用するかを述べる為にポリシー参照を使用する。 ユーザエージェントは、ページに適用されたプライバシーポリシーを発見する為にポリシー参照を使用する。 従って、ユーザエージェントは、利用者のためにポリシーを処理することができる。
ポリシー参照は、パフォーマンスの最適化として使われる。 プライバシーポリシーを参照しているURIは、通常100バイト未満であるが、P3Pポリシーは通常、数キロバイトのデータである。 帯域幅の節約に加えて、ポリシー参照は、コンピュータの演算処理の必要性を軽減する:ポリシーは、URIとユニークに関連付けられることができる。 従って、ユーザエージェントは、ポリシーが適用されている文書毎にポリシーを処理する必要はなく、一度ポリシーを解析し、処理すればよい。 さらに、中央集権化された場所に、関連のあるポリシーに関する情報を置くことによって、Webサイトの管理が簡素化される。
ポリシー参照ファイルはURLスペースのある領域とP3Pポリシーの対応づけのために使用される。 また、ポリシー参照ファイルは以下のどれか、もしくはすべてのステートメントを作成するために使用される。
これらのステートメントのすべてはポリシー参照ファイルの主要部分に作成されている。 一番最後のステートメントは、また、HTTP期間終了ヘッダを使って、ポリシー参照ファイル上に作成することができる。 その例と説明は2.3節を参照されたい。
この節では、ポリシー参照ファイルの設置場所を示す為に使用されるメカニズムを説明する。 サポートされているメカニズム用に構文の詳細も示す。
ポリシー参照ファイルの存在場所は三つのメカニズムの内、一つを使って示す事ができる。
ポリシー参照ファイルは周知の場所にあるか、
HTML LINK
タグまたは、HTTPヘッダを通してポリシー参照ファイルを示している。
ポリシー参照ファイルはその文書に適用しているP3Pポリシーを指定する。または、そのP3Pポリシーは同様に別のURIに適用する可能性もある。
このポリシー参照ファイルは一つのWeb文書、Webサイトの一部またはWebサイト全体の為のポリシーを指定することのできるXMLファイルである。
([XML]を参照のこと) ポリシー参照ファイルは一つ以上のP3Pポリシーを参照することがある。
従って、たとえ異なるP3Pポリシーがサイトの異なる部分に適用されているとしても、一つのポリシー参照ファイルで全部のサイトをカバーすることができる。
ユーザエージェントがHTTPを使用してHTMLコンテンツの取得をサポートする場合、ユーザエージェントは上記の三つのメカニズムすべてを互換的に処理しなければならないことに注意すること。どのメカニズムも他の二つをオーバーライドしない。一義性の要求事項も参照すること。
ポリシーはHTTPの実体レベルで適用されることに注意されたい。URIを取り出すことによって取得された実体には、実体に対応づけられているP3Pポリシーがある。 ユーザの相対的見地からの"ページ"は複数のHTTPの実体で構成されていることがある。各実体には、関連した独自のP3Pポリシーがあるかもしれない。 しかし、実質的な注釈として、一つのページ上の異なる実体に、多くの異なるP3Pポリシーを置くことは、そのページをレンダリングし、 ユーザに適切なポリシーがユーザエージェントに対して困難である事をしらせることがある。 また、サービスは一つのポリシー参照ファイルが、与えられた"ページ"をカバーできるようにポリシー参照ファイルを作成しようとするべきである。 そうすれば、ユーザのブラウジングが早くなるのである。
実体に適用されたポリシーを処理するユーザエージェントのために、実体用のポリシー参照ファイルを発見し、 そのポリシー参照ファイルを取り出し、ポリシー参照ファイルを解析し、 必要なP3Pポリシーを取得し、P3Pポリシーまたはポリシーを解析しなければならない。
この文書はHTTP以外の方法で取り出された文書にP3Pポリシーがどのように関連しているかについては述べてはいない。 しかし、他のプロトコルで取り出された文書と対応づけられているP3Pポリシーのメカニズムの今後の開発は除外していない。 さらに、HTTPを使用して取り出した文書と対応づけられているP3Pポリシーの追加的な方法は今後開発されるかもしれない。
P3Pを使っているWebサイトはポリシー参照ファイルを"周知の"存在場所に置くべきである。
このために、ポリシー参照ファイルはそのサイトの/w3c
ディレクトリにp3p.xml
という名前で置かれるだろう。
従って、ユーザエージェントはリソース/w3c/p3p.xml
に対しGET
要求を使って
ポリシー参照ファイルを要求することができる。
サイトがこのメカニズムを使う必要がないことに注意。 しかし、このメカニズムを使って、サイトは他のリソースがそのサイトからリクエストされる前に、 P3Pがユーザエージェントにアクセス可能になることを保証できる。 このことによって、ユーザエージェントがセーフゾーンプラクティスを使ってサイトにアクセスする 必要性が低減する。さらに、もしサイトがこのメカニズムを使用する場合、 周知の存在場所に位置しているポリシー参照ファイルが全部のサイトをカバーする必要はない。 例えば、内容のすべてがひとつの組織の管理下にあるわけではないサイトは、 このメカニズムを使用しないかもしれない。あるいはそのサイトで限られた部分のみをカバーするポリシー参照ファイルを置くかもしれない。
ポリシー参照ファイルのために周知の存在場所を使うことは、 ポリシー参照ファイルを指定するような他のメカニズムの使用を妨げるものではない。 サイトの一部においては、一義性条件が満たされる範囲において、 ポリシー参照ファイルを指定する他のメカニズムを使うかもしれない。
例えば、MallExample社のWebサイトショッピングモールを考えると、そのWebサイト(mall.example.com
)において、
そのモールで商品あるいはサービスを提供している会社は/companies/company-name
のパスで表せるような、
そのサイト特定のサブツリーを得るだろう。そのMallExample社は/companies
サブツリーを除いた全てをカバーするような
ポリシー参照ファイルを、周知の存在場所に置くことを決めるかもしれない。
その場合、ShoeStoreExamples社は、/companies/shoestoreexample
といったコンテンツを持つが、
その会社は、mall.example.com
サイトの一部をカバーするポリシー参照ファイルの存在場所を示す
その他のメカニズムを使うこともできる。
ポリシー参照ファイルのために周知の存在場所を使うことが特に有効であると予想される1つのケースとしては、
一つのサイトが複数のホスト上に分割したコンテンツを持っているようなケースである。
例えば、静的なHTMLコンテンツよりもWebベースのアプリケーションすべての異なる論理ホストを使用するサイトの例を考えてみる。
ポリシー参照ファイルの存在場所を指定することを許す他のメカニズムは、アクセスされたホスト上において
ポリシー参照ファイルの存在場所を持ってくるアクションURIが必要である。
しかしながら、周知の存在場所を示すメカニズムは、そのような必要がない。
www.example.com
に位置するHTMLフォームの例を考えてみる。
フォーム上のアクションURIがサーバcgi.example.com
を指していたとする。
そのフォームをカバーするポリシー参照ファイルは、フォームを処理するためのアクションURIに関するどんな
ステートメントも作成することができない。
しかしながら、サイト管理者はアクションURIをカバーするポリシー参照ファイルを
http://cgi.example.com/w3c/p3p.xml
で公開することにより、
フォームのコンテンツを送信する前に、ユーザエージェントはアクションURIに適用されている
P3Pポリシーを容易に発見できる。
HTTPで取り出したあらゆる文書は新しいレスポンスヘッダ、P3P
ヘッダ
([P3P-HEADER])を使用して、ポリシー参照ファイルを示してもよい。
もしサイトがP3Pヘッダを使用している場合、HEAD
やOPTIONS
の要求を含む
すべての適切な要求方法のために、レスポンスヘッダにP3Pヘッダを組み込むべきである。
P3Pヘッダは一つ以上のコンマで区切られた命令を提供する。以下がその構文である。
[1] | p3p-header |
= |
`P3P: ` p3p-header-field *(`,` p3p-header-field) |
[2] | p3p-header-field |
= |
policy-ref-field | compact-policy-field | extension-field |
[3] | policy-ref-field |
= |
`policyref="` URI `"` |
[4] | extension-field |
= |
token [`=` (token | quoted-string) ] |
ここで、URI はRFC 2396[URI]によって定義され、
token とquoted-string は[HTTP1.1]によって定義されている。 |
その他のHTTPヘッダに従うために、いかなる場合でもこのヘッダのP3P
部分を書き込まれることがある。
このpolicyref
の命令はポリシー参照ファイルを指定するURIをもたらす。
そして、このポリシー参照ファイルは他のファイルと同じようにこのファイルを示している文書をカバーしている
P3Pポリシーを表している。
policyref
に与えられているURIを取り出す事が300クラスHTTPリターンコード(リダイレクション)でもよいことに注意されたい。
ユーザエージェントはこれらが普通のHTTPセマンティクスと同様にリダイレクトすると解釈しなければならない。
もちろん、リダイレクトの使用によって、ユーザエジェントがポリシーを発見し、
解釈するために必要な時間が増えるという事にサービスは注意するべきである。
P3Pポリシーを識別し、参照する以外の目的のためにpolicyref
URIを使用してはならない。
"簡潔なポリシー"を指定する為にcompact-policy-field
が使用される。この件に関しては4章に述べている。
(extension-field
sにおいて)認識されていない命令を発見したユーザエージェントは、
その認識されていない命令を無視しなければならない。
そうすることによって、今後のP3Pの普及を簡単にすることができる。
1. ClientがGET
リクエストをおこなう。
GET /index.html HTTP/1.1 Host: catalog.example.com Accept: */* Accept-Language: de, en User-Agent: WonderBrowser/5.2 (RT-11)
2. サーバはコンテンツとポリシーのページを示すP3P
ヘッダを返信する。
HTTP/1.1 200 OK P3P: policyref="http://catalog.example.com/P3P/PolicyReferences.xml" Content-Type: text/html Content-Length: 7413 Server: CC-Galaxy/1.3.18
link
タグ
サーバは、適切なP3Pポリシー参照ファイルの存在場所を示したlink
タグが埋め込まれたHTMLコンテンツを提供してもよい。
このP3Pの使用方法は、サーバの動作を変更する必要はない。
link
タグは、P3P
ヘッダを使用して表現される情報を記号化する。linkタグは以下の形式をとる:
[5] | p3p-link-tag |
= |
`<link rel="P3Pv1" href="` URI `">` |
ここで、URI はRFC 2396 [URI]に従って定義されている。 |
例を使ってlink
タグを説明するために、HTTPヘッダを使用して例2.1に示されているポリシー参照を考える。
その例は以下のHTMLの一部分を有するリンクタグを使用して、同様に表現できる。
<link rel="P3Pv1" href="http://catalog.example.com/P3P/PolicyReferences.xml">
最後に、p3p-link-tag
はHTML文書に埋め込まれているので、その文字エンコーディングはHTML文書の文字エンコーディングと同じになる。
P3Pポリシーとポリシー参照文書(下の2.3章と3章)とを対照すると、p3p-link-tagは[UTF-8]を使ってエンコードする必要はない。
この節ではポリシー参照ファイルの詳細を説明する。
Webサイトが以下のステートメントを作成したいというケースを考えた場合:
/P3P/Policy1.xml
を、/catalog
、/cgi-bin
、/servlet
サブディレクトリを除くサイト全体に適用する。 /P3P/Policy2.xml
を、/catalog
ディレクトリ(サブディレクトリも含む)内の全ての文書に適用する。
/P3P/Policy3.xml
を、/servlet/unknown
ディレクトリを除く、/cgi-bin
と/servlet
ディレクトリ(サブディレクトリも含む)内の全ての文書に適用する。
/servlet/unknown
ディレクトリに、どのP3Pポリシーが適用されるかのステートメントはない。
上記のステートメントは以下のXMLによって表記される:
<META xmlns="http://www.w3.org/2000/12/P3Pv1"> <POLICY-REFERENCES> <EXPIRY max-age="172800"/> <POLICY-REF about="/P3P/Policy1.xml"> <INCLUDE>/*</INCLUDE> <EXCLUDE>/catalog/*</EXCLUDE> <EXCLUDE>/cgi-bin/*</EXCLUDE> <EXCLUDE>/servlet/*</EXCLUDE> </POLICY-REF> <POLICY-REF about="/P3P/Policy2.xml"> <INCLUDE>/catalog/*</INCLUDE> </POLICY-REF> <POLICY-REF about="/P3P/Policy3.xml"> <INCLUDE>/cgi-bin/*</INCLUDE> <INCLUDE>/servlet/*</INCLUDE> <EXCLUDE>/servlet/unknown</EXCLUDE> </POLICY-REF> </POLICY-REFERENCES> </META>
この例に文書の中に適切な有効期限がある。その有効期限もHTTPヘッダを通して表す事ができる:
Cache-Control:max-age=172800
ヘッダを返す事ができる、または、
Date
ヘッダから2日間後を示したExpires
ヘッダを生成できる。
この節では、P3Pポリシー参照ファイルの構文とセマンティクスを定義する。 全てのポリシーは、[UTF-8]を使用してコード化されなければならない。 P3Pサーバは、この構文を使用してポリシー参照をコード化しなければならない。 P3Pユーザエージェントは、この構文を解析できなければならない。
ポリシー参照ファイルの構文に関しての重要なポイントは、ここで定義されている構文は、拡張機能を持たないという事である。 P3Pポリシーの構文は強力な拡張機能(extension mechanism)を持っているが、ポリシー参照ファイルは、この機能をサポートしていない。
ポリシー参照ファイルは複数のPOLICY-REF
要素を含んでいるかもしれない。
ポリシー参照ファイルが二つ以上の要素を持っている場合、ユーザエージェントはファイルに書かれている順番で
その要素を処理しなければならない。
ユーザエージェントがどのポリシーを与えられたURIに適用するかを決めようとする時は、
そのURIに適用するポリシー参照ファイルにある最初のPOLICY-REF
要素を使用しなければならない。
ポリシー参照ファイルは与えられたURIにどのポリシーを適用するかを示す。 ポリシー参照ファイルはURIスペースの領域についてのステートメントを作成する為の単純なワイルドカード文字を サポートしている。 文字アスタリスク("*")は0文字以上の文字列を表すために使用されている。 他の文字(正規表現にあるような)はサポートしていない。 アスタリスクはまた、URI([[URI]])においても適切に使用されている文字なので、 ポリシー参照ファイルの"拡張URI"のエンコード時には、いくつかの特別な規則を守らなければならない:
ワイルドカード文字はINCLUDE
および EXCLUDE
要素、
EMBEDDED-INCLUDE
および EMBEDDED-EXCLUDE
要素、
COOKIE-INCLUDE
および COOKIE-EXCLUDE
要素で使用されるかもしれない。
META
および POLICY-REFERENCES
要素
META
要素は、完全なポリシー参照ファイルを含む。
ポリシー参照ファイル内には、必ず一つのPOLICY-REFERENCES
要素がなければならない。
任意に一つのPOLICIES
要素はあとに続くことができる。
また、P3P1.0ユーザエージェントはその他のXMLマークアップを無視しなければならないが、
その他のXMLマークアップはPOLICY-REFERENCES
(もしあれば、POLICIES
)に従ってもよい。
<POLICY-REFERENCES
>
POLICY-REF
(ポリシー参照)を含んでいるかもしれない。
また一つのEXPIRY
要素(その有効期限を示している)とインラインポリシーも含んでいるかもしれない。
[6] | prf |
= |
`<META xmlns="http://www.w3.org/2000/12/P3Pv1">` policyrefs [policies] PCDATA "</META>" |
[7] | policyrefs |
= |
"<POLICY-REFERENCES>" [expiry] *policyref "</POLICY-REFERENCES>" |
ここで、PCDATA は[XML]で定義されている。 |
EXPIRY
要素
サーバがユーザエージェントに参照ファイルのクレームがどのくらいの期間有効であるかを知らせる事が望ましい。 クライアントがポリシー参照ファイルのコンテンツをキャッシュ可能にすることによって、 Webページに関連したプライバシーポリシーを処理する時間を短縮する。 また、これによってネットワークのロードも縮小できる。 さらに、URIに有効なポリシー参照のないクライアントは要求に対して、"セーフゾーン" プラクティスを使う必要がある。 有効であるポリシー参照ファイルをクライアントが持ってる場合、処理方法に関し、情報に基づく決定をしやすくなる。
ポリシー参照ファイルの有効期限はユーザエージェントに参照ファイルのクレームがどのくらいの期間有効であるかを知らせる。 たとえば、ポリシー参照ファイルに3日間の有効期限がある場合、ユーザエージェントは3日間ファイルをリロードする必要がなく、 参照ファイルからの参照は3日間有効であると仮定することができる。 一つのポリシー参照ファイルで参照されるすべてのポリシーは同じ有効期限をもつであろう。 P3Pポリシーのために異なる有効期限を指定するための唯一の方法は、個々のポリシー毎に異なるポリシー参照ファイルを使用することである。
ポリシーとポリシー参照ファイルの有効期限を決定する場合、サイトは二つの事柄を考慮する有効期限を選ぶ必要がある。 その一つはユーザエージェントがキャッシングから十分な利益をうけることができるくらいの長さが有効期限として必要であること。 もう一つは、有効期限の終了を非常に長く待たずに、サイトがポリシーを変更できるということである。 上記二つを満たすのに妥当な有効期限は1〜7日の間であると思われる。 ポリシーを更新する際、サイトはポリシー改版要求事項を記憶する必要がある。
ポリシー参照ファイルの有効期限が終了したら、ユーザエージェントはポリシー参照ファイルを再び有効にするまで、 もしくは、ポリシー参照ファイルの新しいコピーを取り出すまでは、ポリシー参照ファイルの情報を使用してはならない。
2.3節で述べたように、ポリシー参照ファイルの有効期限を設定するのに二つのメカニズムがある。
二つの異なるメカニズムはサイトにポリシー参照ファイルを作成するのに更なる柔軟性をもたらすために提供される。
ポリシー参照ファイルにはファイルに有効期限をもたらすEXPIRY
要素を含んでもよい。
ポリシー参照ファイルにEXPIRY
要素がなければファイルに関連しているHTTPキャッシュ管理ヘッダはポリシー参照ファイルの有効期限を与える。
ユーザエージェントが有効期限の切れていないポリシー参照ファイルまたはポリシーファイルを再び取り出す必要はないが、 "セーフゾーン" プラクティスを使用する必要性を避ける為に、ポリシー参照ファイルの有効期限が 切れる前にファイルを更新してもよい。
EXPIRY
要素
ポリシー参照ファイル(またはポリシーが)がいつまで有効かという事を示すためにEXPIRY
要素はポリシー参照ファイルおよび/またはP3Pポリシーで使用できる。
有効期限の有効期は絶対的有効期限または相対的有効期限として与えられる。
絶対的有効期限は、GMTによって与えられる期間であり、ポリシー参照ファイル(またはポリシーが)が有効であるまでの期間である。
相対的有効期限はポリシー参照ファイル(またはポリシーが)が有効であるための時間(秒)を与える。
この相対的有効期限はサーバから送られたレスポンスの時間に相当する。
(Date
:レスポンスのヘッダで述べたように)
[8] | expiry |
= |
"<EXPIRY" (absdate|reldate) "/>" |
[9] | absdate |
= |
`date="` HTTP-date `"` |
[10] | reldate |
= |
`max-age="` delta-seconds `"` |
ここで, HTTP-dateは[HTTP1.1]の3.3.1節 で定義されており、delta-seconds は[HTTP1.1]の3.3.2節で定義されている。 |
ポリシー参照ファイルがEXPIRY
要素を含んでいない場合、
ポリシー参照ファイルで提供されているHTTPヘッダはその有効期限を決定する。
しかしながら、ユーザエージェントはポリシー参照ファイルの有効期限を算出するために
最近修正されたものをベースとした自己発見機能の有効期限を使用してはならない。
ポリシー参照ファイルの有効期限を決定するためにHTTPヘッダを使用する場合、
ユーザエージェントは、Expires
, Cache-Control
,または使用可能であれば、
ファイルと共に提供されるPragma
ヘッダをベースとして、
ポリシー参照ファイルの有効期限を算出しなくてはならない。
こういったヘッダのセマンティクスは[HTTP]によって定義されている。
これらのヘッダが利用できない場合、有効期限はサーバが文書を送信した時点から24時間にセットされなければならない。
サーバはポリシー参照ファイルの有効期限を明白にする為に、上記のEXPIRY
要素またはHTTPヘッダの一つを使用するべきである。
ネットワーク上のキャッシュ存在の可能性と、HTTPでの有効期限の自己発見機能は、有効期限の考慮をかなり複雑なものとする。
キャッシュの有効期限がサーバによって明白に定義されていないポリシー参照ファイルの場合を考えた場合
(例:レスポンス内に上記のいかなるヘッダも含まれていない)、
ネットワークキャッシュは、間違いなく更新日を基にポリシー参照ファイルのキャッシュ有効期限を算出するであろう;
結果としてのキャッシュの有効期限は、24時間より非常に長くなるであろう。
キャッシュがHTTP/1.0を実装し、ユーザエージェントがこのポリシー参照ファイルを取得した場合、
ユーザエージェントはどのくらいの期間この参照ファイルがキャッシュされていたかを知る方法はない。
従って、ユーザエージェントは、参照ファイルの有効期限が既に切れているかどうか、又はいつ有効期限が切れるかを知ることは不可能である。
HTTPプロトコルは、HTTP/ 1.1に準拠したキャッシュがキャッシュから要求を満たす時に、Age
ヘッダを送信しなければならないと述べているので、HTTP/ 1.1 cacheでは、ややこの状況を改善している。
しかしこれだけでは十分ではない;キャッシュは、ここで定義されている24時間の有効期限を越えたファイルを
返信することができるので、結果として意味のないポリシー参照ファイルとなる。
この問題を回避する為、ユーザエージェントは、ポリシー参照ファイルを取得する時に、最新のファイルをロードすることを保証しなければならない。
従って、ユーザエージェントは、ポリシー参照ファイルを取得する時に、Pragma: no-cache
又はCache-Control:no-cache
要求ヘッダのどちらかを含まなければならない。
HTTP/ 1.0 chacheとの互換性の為、Pragma: no-cache要求ヘッダの方が推奨される。
クライアントが、HTTP要求に影響を及ぼす遅延を正確に予測することは不可能であることに注意すること。 従って、要求をカバーするポリシー参照ファイルの有効期限がすぐに切れる場合、クライアントは利用者に注意を促し、 (又は)要求の遂行を続ける前にポリシー参照ファイルを再検証することを望んでもよい。
特別に定義されたセマンティクスが以下のようなの状態の時にある。
EXPIRY
要素があり、前記の2.3.2.3.3で述べたHTTPヘッダの内のひとつで提供されている場合、
EXPIRY
ヘッダはポリシー参照ファイルの有効期限を決定することを優先する。
Expires:
の日付をこれがカバーする。HTTPヘッダもEXPIRY
要素の有効期限の属性と同様である。
EXPIRY
要素がある場合、ポリシー参照ファイルの有効期限を決めるのには、最初にある日付を優先する。
POLICY-REF
要素
ポリシー参照ファイルは、個々の情報を指定することによって、複数のP3Pポリシーを参照するだろう。
POLICY-REF
要素は単一のP3Pポリシー属性を記述する。POLICY-REF
要素内の要素は、ポリシーの存在場所を提供し、個々のポリシーがカバーするURI空間の領域を指定する。
POLICY-REF
about
(必須の属性)
#policy-name
によって与えられ、
policy-name
は、このポリシー参照ファイルのポリシーの
name
属性で値を与えられたものである。
[11] | policy-ref |
= |
`<POLICY-REF about="` URI `">` *include *exclude *cookie-include *cookie-exclude *embedded-include *embedded-exclude *method-element `</POLICY-REF>` |
ここで、URI はRFC 2396 [URI]に従って定義されている。 |
INCLUDE
要素およびEXCLUDE
要素
個々のINCLUDE
要素又はEXCLUDE
要素は、単一のローカルURIまたはローカルURIの集合を指定する。
ワイルドカード文字(*)がURIパターンで使用されれば、ローカルURIの集合が指定される。
このような要素は、含まれているPOLICY-REF
要素によって示されるポリシーによってカバーされるWebサイトの一部を特定する為に使用される。
INCLUDE
要素(任意でEXCLUDE
)がPOLICY-REF
要素内に存在する場合、POLICY-REF
要素のabout
属性において指定されているポリシーは、要求したホストにおいて、INCLUDE
によって指定されているlocal-URIに一致する全てのURIに適用される事を意味し、EXCLUDE
要素によって指定されたURIは含まない。
METHOD
要素(2.3.2.8節)が一つ以上のポリシー参照を含むことを規定する。
それはつまり、記述されなかった全てのメソッドが、必然的にこのP3Pポリシーによってカバーされないことを意味する。
この場合、これは与えられたURI-refixのためのポリシー参照だけとなり、ユーザエージェントは、
メソッドがポリシー参照ファイルで記述されなかった全てにポリシーが実施されないとみなさなければならない。
INCLUDE
要素なしにEXCLUDE
要素を供給することは合法的ではあるが、無意味である。
その場合、ユーザエージェントはEXCLUDE
要素を無視しなくてはならない。
ポリシー参照ファイルは、参照ファイルと同様のホスト上のURIのみをカバーすることができる。
従って INCLUDE
要素とEXCLUDE
要素は、ローカルURIのプレフィックスを指定しなければならない;
それらの要素は、他のホスト上にあるURIを参照してはならない。
この要求事項は、P3Pポリシーファイル(POLICY-REF
要素におけるabout
属性)の存在場所には適用されない。
INCLUDE
要素とEXCLUDE
要素で指定されたURIの集合は、そのURI の内のひとつを要求するときにおこるだろうクッキーを含まないことに注意されたい。
クッキーとポリシーを対応づけるためには、COOKIE-INCLUDE
と COOKIE-EXCLUDE
要素が必要である。
[12] | include |
= |
"<INCLUDE>" relativeURI "</INCLUDE>" |
[13] | exclude |
= |
"<EXCLUDE>" relativeURI "</EXCLUDE>" |
ここで、相対URI はsection 2.3.2.1.2節で定義されているように、'* ' 文字がワイルドカードとして取り扱われている事と共にRFC 2396 [URI]に従って定義されている。 |
EMBEDDED-INCLUDE
と EMBEDDED-EXCLUDE
要素
HTMLページは、時に、イメージ、音、レイヤあるいはフレームのような、
ページに直接埋め込まれた他のリソースへのリンクを含んでいる。
従って、そのようなページを表現するために、ユーザエージェントは、
現在使われているページにおけるポリシーによってカバーされるか、
しないかといった追加のリクエストを行う必要がある。
埋め込まれたコンテンツは第三のサーバによって提供されなければならないので、
(また、INCLUDE
とEXCLUDE
はローカルURIプレフィックスのみを指定しなければならない)、
付加的な要素はそのコンテンツと対応付けられなければならない。
各EMBEDDED-INCLUDE
またはEMBEDDED-EXCLUDE
要素は第三の絶対URI([URI]を参照のこと)を指定する。
これらのプレフィックスはポリシー参照ファイルが存在するWebサイト上の文書にコンテンツが埋め込まれている時に
about
属性によって指定されているポリシーがカバーしている第三のサーバを設定する為に使用される。
(これはINCLUDE
およびEXCLUDE
と同様である)しかしながら、絶対URIが"埋め込み"と考えられる時期の範囲を制限するために、
HTTP Referer
ヘッダを利用する:
EMBEDDED-INCLUDE
(と任意にEMBEDDED-EXCLUDE
)要素がPOLICY-REF
要素にある場合、 埋め込まれているポリシー参照ファイルがカバーしているリソースからのURIを含むReferer
ヘッダを使用して正常にURIが要求されれば、POLICY-REF
要素のabout
属性に設定されているこのポリシーはEMBEDDED-INCLUDE
要素で合わせられているURIすべてに適用し、EMBEDDED-EXCLUDE
によっては合わせられていないというを意味する。
この事はこのポリシーが埋め込まれるかリンクしているオブジェクトに適用されることを意味するが、オブジェクトは埋め込まれていない。
プロキシの実装はReferer
オブジェクトを適用しているポリシーを持つユーザエージェントによって作成された Referer
ヘッダを調査し、埋め込まれたコンテンツポリシーが有効であるかを決める。
P3PユーザエージェントはWebサイトへReferer
ヘッダを送るのに必要ではない。
事実、これはユーザのプリファレンスとセーフゾーンの問題であり、
ユーザエージェントはEMBEDDED-INCLUDE
ポリシーが適用するかどうかを決める為に Referer
を使用したあと、そのReferer
を放棄することがある。
ユーザエージェントは、ユーザエージェントが取得するかもしれない第三のコンテンツを適用するポリシーを決める為に、
ポリシー参照ファイルのEMBEDDED-INCLUDE
要素とEMBEDDED-EXCLUDE
要素を解釈しなければならない。
例2.5は /P3P/Policy1.xml
がサブツリー/docs/
とファイル/other/index.html
の文書すべてに適用しているという事を示している。
加えて、このポリシーはadserver.example.com
ドメインのホストの/ads/
ディレクトリ(/network/
サブディレクトリは含まない)から要求された埋め込み文書に適用している。
Example 2.5:
<META xmlns="http://www.w3.org/2000/12/P3Pv1"> <POLICY-REFERENCES> <POLICY-REF about="/P3P/Policy1.xml"> <INCLUDE>/docs/*</INCLUDE> <INCLUDE>/other/index.html</INCLUDE> <EMBEDDED-INCLUDE>http://*.adserver.example.com/ads/*</EMBEDDED-INCLUDE> <EMBEDDED-EXCLUDE>http://*.adserver.example.com/ads/network/*</EMBEDDED-EXCLUDE> </POLICY-REF> </POLICY-REFERENCES> </META>
EMBEDDED-INCLUDE
およびEMBEDDED-EXCLUDE
要素の構文は:
[16] | embedded-include |
= |
"<EMBEDDED-INCLUDE>" absoluteURI "</EMBEDDED-INCLUDE>" |
[17] | embedded-exclude |
= |
"<EMBEDDED-EXCLUDE>" absoluteURI "</EMBEDDED-EXCLUDE>" |
ここで、相対URI はsection 2.3.2.1.2節で定義されているように、'* ' 文字がワイルドカードとして取り扱われている事と共にRFC 2396 [URI]に従って定義されている。 |
サイトは埋め込みコンテンツのいくつかまたは、すべてのポリシーを指定しないように選択するかもしれないことに注意されたい。 そのような場合、P3Pユーザエージェントはその埋め込みコンテンツをホストしているサイトから直接P3Pポリシーの取得を試みるべきである。
また、INCLUDE
とEXCLUDE
の場合のように、EMBEDDED-INCLUDE
とEMBEDDED-EXCLUDE
で指定されたURIの集合にはURIの一つの要求時におこるであろうクッキーがないことに注意。
クッキーとポリシーを対応付けるにはCOOKIE-INCLUDE
およびCOOKIE-EXCLUDE
要素が必要である。
COOKIE-INCLUDE
と COOKIE-EXCLUDE
要素
COOKIE-INCLUDE
およびCOOKIE-EXCLUDE
要素はポリシーとクッキーを関連づけるために使用される。
クッキーポリシーはそのクッキーに格納されるかまたはクッキーを通じてリンクされているあらゆるデータ(P3Pの範囲内で)をカバーしなければならない。
また、クッキーに格納されるか、または、クッキーを通じてリンクされているかまたは、
クッキーが可能にしているデータに関連するすべての目的を参照しなければならない。
また、クッキーに格納されているかまたはそれを通じてリンクされているデータ/目的はクッキーポリシーに入れられなければならない。
さらに、そのリンクされたデータがHTTPによって収集された場合、
GET
/POST
、どのリクエストをもカバーしているポリシーはそのデータ収集をカバーしなければならない。
例えば、CatalogExampleが顧客に名前と取り引き、出荷情報をフォームに書くよう要求をすれば、
そのフォームの提出をカバーするP3PポリシーはCatalogExampleがこのデータの収集を公開し、
どのように使用されたかを明らかにする。
CatalogExampleが顧客を認識し、その顧客のウェブサイトでの行動を監視できるようにクッキーを設定すれば、
このクッキーに対する独立したのポリシーを持つことになるだろう。
しかしながら、このクッキ-がユーザの名前と取り引き、出荷情報にリンクされていれば、
--恐らくCatalogExampleは顧客の住んでいる場所を元にして顧客カタログページを作成できる--そのデータもクッキーポリシーで公開されなければならない。
この仕様書の目的として、ステート管理メカニズムはSET-COOKIE
またはSET-COOKIE2
ヘッダを使用し、
クッキーネーム空間はName、Domain、およびPath属性([COOKIES] と [STATE]で述べている)の値として定義されている。
各COOKIE-INCLUDE
およびCOOKIE-EXCLUDE
要素は、
空白文字で分割している三つのトークンで構成されているクッキーネーム空間を指定する。
これら三つのトークンは、ポリシー参照ファイルが存在するウェブサイトのドキュメントから
クッキーが設定される時にabout
属性によって指定されているポリシーがカバーしている
クッキーネーム空間を表して、クッキーのNAME、Domain、Pathコンポーネントを照合するために使用される。
COOKIE-INCLUDE
(および任意でCOOKIE-EXCLUDE
)要素はPOLICY-REF
要素に存在している時、
POLICY-REF
要素のabout
属性に指定されているポリシーがCOOKIE-INCLUDE
に合わせ、
COOKIE-EXCLUDE
に合わせられていないクッキーネーム空間をもつクッキーすべてに適用する。
クッキーがそのサイトに存在しているか、または、そのサイトに埋め込まれている要素から
クッキーが設定されている場合以外(2.3.2.6節に述べている様に)は、
サイトはクッキー用のポリシーを宣言できない。
ユーザエージェントはクッキーを適用しているポリシーを決めるためにポリシー参照ファイルにある
COOKIE-INCLUDE
およびCOOKIE-EXCLUDE
要素をそれに応じて解釈しなければならない。
COOKIE-INCLUDE
およびCOOKIE-EXCLUDE
要素はポリシーとポリシー参照ファイルの
クッキーを対応づけるための唯一のメカニズムであることに注意されたい。(4章を参照のこと)
ポリシーの有効期限が終了するまで、クッキーを適用しているポリシーは有効である。 クッキーと対応しているポリシーの期限が終了していたり、ユーザエージェントのプリファレンスが変更されていれば、 ユーザエージェントはクッキーを送信する前にクッキーポリシーを再度評価するべきである。
例2.3では/P3P/Policy1.xml
がクッキーすべてに適用していることを示している。
例2.3:
<META xmlns="http://www.w3.org/2000/12/P3Pv1"> <POLICY-REFERENCES> <POLICY-REF about="/P3P/Policy1.xml"> <COOKIE-INCLUDE>* * *</COOKIE-INCLUDE> </POLICY-REF> </POLICY-REFERENCES> </META>
例2.4ではネーム値"obnoxious-cookie"、ドメイン値".example.com"、パス値"/"を持つクッキーを除いて、
/P3P/Policy1.xml
がクッキーすべてに適用していることと、/P3P/Policy2.xml
が
クッキー名"obnoxious-cookie"、ドメイン値".example.com"、パス値"/"を持つクッキーすべてを適用していること.を示している。
例 2.4:
<META xmlns="http://www.w3.org/2000/12/P3Pv1"> <POLICY-REFERENCES> <POLICY-REF about="/P3P/Policy1.xml"> <COOKIE-INCLUDE>* * *</COOKIE-INCLUDE> <COOKIE-EXCLUDE>obnoxious-cookie .example.com /</COOKIE-EXCLUDE> </POLICY-REF> <POLICY-REF about="/P3P/Policy2.xml"> <COOKIE-INCLUDE>obnoxious-cookie .example.com /<COOKIE-INCLUDE> </POLICY-REF> </POLICY-REFERENCES> </META>
[14] | cookie-include |
= |
"<COOKIE-INCLUDE>" token ; matches the cookie's NAME " " token ; matches the cookie's Domain " " token ; matches the cookie's Path "</COOKIE-INCLUDE>" |
[15] | cookie-exclude |
= |
"<COOKIE-EXCLUDE>" token ; matches the cookie's NAME " " token ; matches the cookie's Domain " " token ; matches the cookie's Path "</COOKIE-EXCLUDE>" |
ここでは、2.3.2.1.2節で定義されているように、
token の'* ' 文字がワイルドカードとして取り扱われている付加で
token 、NAME 、Domain とPath はRFC 2965 [STATE]に従って定義されている。 |
[STATE]と同じ様に、はっきりと定義されたDomain
値がピリオド(".")で始まっていなければ、
ユーザエージェントはピリオドを付けなければならないことに注意。
また、すべてのPath
は"/" シンボルで始まることにも注意されたい。
METHOD
要素
デフォルトでは、ポリシー参照は、リソースにアクセスする為に使用される
メソッドに関係なく指定されたURIに適用される。
しかしウェブサイトは、リソースに適用されるメソッドに応じて、
異なるP3Pポリシーを定義したいかもしれない。
例えばサイトは、利用者がGET
メソッドを行っている時よりは、
PUT
やDELETE
メソッドを行っている時に、
より多くの利用者情報を収集したいと望むかもしれない。
ポリシー参照ファイル内のMETHOD
要素は、含まれているポリシー参照が、
参照されるリソースにアクセスする為に、指定されたメソッドが使用された時のみ有効である事を示す為に使用される。
METHOD
要素は、複数の適用できるメソッドを示す為に繰り返されるであろう。
METHOD
要素がPOLICY-REF
要素内にない場合、POLICY-REF
要素は、
リソースにアクセスするメソッドに関係なく、示されたリソースをカバーする。
従って、/P3P/Policy1.xml
が、GET
とHEAD
メソッドの時に/docs/
サブディレクトリ内の全ての文書に適用し、
一方で、/P3P/Policy2.xml
は、PUT
とDELETE
メソッドの時に適用される事を示す場合、
以下のポリシー参照ファイルを記述することができる:
例 2.6:
<META xmlns="http://www.w3.org/2000/12/P3Pv1"> <POLICY-REFERENCES> <POLICY-REF about="/P3P/Policy1.xml"> <INCLUDE>/docs/*</INCLUDE> <METHOD>GET</METHOD> <METHOD>HEAD</METHOD> </POLICY-REF> <POLICY-REF about="/P3P/Policy2.xml"> <INCLUDE>/docs/*</INCLUDE> <METHOD>PUT</METHOD> <METHOD>DELETE</METHOD> </POLICY-REF> </POLICY-REFERENCES> </META>
HTTPにおいて、GET
とHEAD
リクエスト要求は同じふるまいをすることに注意。
つまり、メソッド毎に異なったP3Pポリシーを指定することは不適当である。
METHOD
要素の構文は:
[18] | method-element |
= |
`<METHOD>` Method `</METHOD>` |
ここで、Method は [HTTP1.1]の5.1.1節に定義されている |
ポリシー参照ファイルは与えられたURIに適用するポリシーを指定する。 これは、示されているポリシーはその与えられたURIに対するポリシー参照ファイルの リストにある方法のいずれかを行うことの影響をすべて述べているということを意味している。
URIをカバーするP3Pポリシーの表していることを述べている一般的な規則がある。
参照されたポリシーは、ユーザのクライアントソフトウェアがそのURIを要求した結果
として行うと考えられている行動をカバーしなければならない。
明らかに、このポリシーはURIへの要求処理の結果としてサイトが行ったデータ収集すべて
について述べなければならない。
従って、与えられたURIがGET
要求の言葉のためにカバーされれば、
ポリシー参照ファイルが与えたポリシーはURIが取り出された時にサイトが行った
データ収集についてすべて述べなければならない。
同様に、URIがPOST
要求のためにカバーされれば、
フォームやURIへの他のコンテンツをポストする結果として
起こるデータ収集はこのポリシーで述べなければならない。
"クライアントソフトウェアが行うと考えられている行動"という概念には、 クライアント側のクッキーやレスポンスによって呼び出されるステート管理メカニズムの設定が含まれている。 URIが要求された時、実行可能なコードが返されれば、URIをカバーしているP3Pポリシーはコード実行時に 起こるある行動をカバーしなければならない。 そのカバーされた行動はユーザがはっきりと呼び出さずにできた行動のことである。 明確なユーザの行動がデータ収集を引き起こせば、その行動のためにURIをカバーしている P3Pポリシーはデータ収集を公開するだろう。
明確な例:
フォームは、CGIスクリプトへのリンクや、その他のサーバ側アプリケーションへのURIなど、特別な考察に値する。 時にこれらのアクションURIはフォーム自身よりも異なるポリシーによってカバーされることがある。
もし、ユーザエージェントが、そのページから参照されるポリシー参照ファイルで定義された
action URIに相当するプレフィックスを見つけられないならば、それは有効なポリシーが全くないとするべきである。
このような事情から、ユーザエージェントは、アクションURIをカバーするポリシー参照ファイルを見つける試みのための
アクションURIにあるホスト上の周知の存在場所をチェックするべきである。
もし、アクションURIをカバーするP3Pポリシーを提供するものでなければ、ユーザエージェントはHEAD
リクエストを、
その結果としてポリシーを見つけるための何らかのデータ送信の前のアクションURIとして実行してもよい。
サーバ側では、アプリケーションがHEAD
のようなリクエストに適切に答え、
該当するポリシー参照のリンクヘッダを返すよう、明確にするべきである。
このようにアプリケーションの下にあるケースの場合、HEAD
リクエストがわからず、
問題となっているアクションURIを示す仮宣言されたポリシーが全くないことになり、
ユーザエージェントは有効なポリシーが全くないとしなければならず、
そしてユーザにこれについて確認し、ユーザのプリファレンスに従って通信手段を取るようにするべきである。
サービスが、POSTやGETなど、サポートされるメソッドのサブセットをカバーすることだけを行う
サーバ側のアプリケーションのためのポリシーを宣言するための
<METHOD>
要素を利用することを望むかもしれないことに注意。
このような事情において、問題となっているアプリケーションが
ポリシー参照ファイルで与えられた方法をサポートするだけであることは適切である
(すなわち、HEAD
リクエストはサポートされる必要はない)。
もし、フォームのmethod属性で指定された関連するメソッドがそのページの
ポリシー参照ファイルで適切に仮宣言されたならば、関連するメソッド
が
フォームのそのページのポリシー参照ファイルで適切に仮宣言されたならば、
ユーザエージェントはアクションURIへのHEAD
リクエストを問題点として試みるべきでない。
ある場合には、異なったデータがフォームの中で選択されたものに応じて同じアクションURIで集められる。
例えば、探索サービスが(名前あるいは電子メールなどで)人と(独断的な)イメージにおいて検索を試みようとするかもしれない。
フォームでラジオボタンを使うとき、ひとつのサーバ側のアプリケーションはひとつに決められ、
そして同じアクションURIは両方のケースを処理して、そして探索に必要な必要情報を集める。
もしサービスがサーバ側のアプリケーションのデータ収集の処理を仮宣言することを望むなら、
それは一つのポリシーファイルのデータ収集すべてを(アクションURIにあわせている<INCLUDE>
宣言を使用して)
宣言するかもしれない。
この場合、ユーザエージェントはデータ要素すべてが、あらゆる状況で収集されることを仮定しなければならない。
このソリューションは一つのポリシーでは便利さを提供する。
しかし、ただリストされたデータ要素の一部だけが一度に集められるという事実に適切に反映しないかもれない。
サービスがアクションURIへの単純なヘッド要求(すなわち、選択されたラジオボタンの値が特に存在しないという理由なしに)
はすべてのケースをカバーするようなポリシーを返すであろうことを明確にすべきである。
フォームがGETメソッドの使用を通して処理されれば、
アクションURIはユーザが選択したフォーム要素の選択に反映することに注意。
同じアクションを処理するURIの異なる使用に対して異なるポリシーを指定するために、
ポリシー参照ファイルで許可されたワイルドカード構文を使用する事が可能である場合がある。
それゆえ、ユーザエージェントはポリシー参照ファイルでINCLUDE
とEXCLUDE
を比較する時に
URIの質問列部分を含まなければならない。
ポリシー参照の第一の規則は、一義性である。ウェブサイト上の各リソースに対し、 ある時点で有効なプライバシーポリシーはたかだか一つでなければならない。 このようにサイトにある有効期限が終了していないポリシー参照ファイル二つは、 同じリソースに対して2つ以上の異なるポリシーURIを宣言してはならない。
周知の場所にあるポリシー参照ファイルが与えられたURIの有効期限が終了していないポリシーを宣言すれば、
HTTPヘッダまたはHTML link
タグを通して引用された相反するポリシー参照ファイルに関わりなく、このポリシーは適用をおこなう。
同一のポリシーの多言語版(翻訳版)は、そのポリシーが特定の言語によってエンコーディングされていることを正確に示すために、
HTTPの"Content-Language
"ヘッダを用いることによって、サーバによって提供することができる。
このことは、「組織(entity)」や「結果(consequence)」のような人間が読むことのできる箇所を様々な言語で表現することができるので有用である。
データスキーマの多言語版を提供するために、同じメカニズムも使用することができる。
同一URI上で多言語で提供されている複数のポリシーを区別するためにContent-Language
が使用される場合は、
常にそれらのポリシーは各言語を通して同一の意味を持たなければならない。2つのポリシー(または2つのデータスキーマ)が同じであるためには
Accept-Language
メカニズムの利用を通して、P3Pを実装する人は、もしポリシーあるいはデータスキーマの新しい言語バージョンが加えられたなら、
同じAccept-Language
リクエストヘッダを送信しても、ユーザエージェントはポリシーまたはポリシー参照ファイルの異なった言語バージョンを見る事になるかもしれないことに注意しなければならない。
P3Pを利用可能な全てのユーザエージェントとサービスは、 P3Pプライバシーポリシーを取得する行為の一部として行われる全ての通信は、 そこにおいては最小限のデータ収集のみ行い、 収集したデータを個人特定不可能な方法でのみ使用することを意味する 特別な"セーフゾーン"の一部であることを保証するべきである。 特に、ポリシー参照ファイルのための周知の存在場所のりクエストは これらの"セーフゾーン"によってカバーされるべきである。
このセーフゾーンをサポートするために、P3Pユーザエージェントはサイトのポリシーが取得されるまで、
サイトのポリシーを発見する目的に不必要なデータの送信を控えるべきである。
従ってユーザエージェントはP3Pポリシーを要求する間、HTTPのReferer
ヘッダを送信したり、
クッキーを受信したりするべきではない。
ユーザエージェントはまた、P3Pポリシーが要求されている時、
ユーザエージェント情報や前回のセッションで受け入れられているクッキーの送信を控えたがるかもしれない。
ユーザエージェントを実装する人は、P3Pポリシーをリクエストするとき、Accept-Language
HTTPヘッダを使うことで、
プライバシ交換があることを知っている必要がある。
正しいAccept-Language
ヘッダを送ることは、利用者が好む自然言語でP3Pポリシーを取得することを許すだろう(もし、利用可能ならば)。
しかし、それはとあるユーザの識別についての情報を見せることになる。
ユーザエージェントは、Accept-Languageヘッダを送るべきか利用者が決めるように聞くことを望むかもしれない。
サーバはポリシーまたはポリシー参照ファイルを提供するために、HTTP Referer
ヘッダや、クッキー、ユーザエージェント情報、
要求に対する応答に不必要なその他の情報の受領を要求するべきではない。
加えてサーバは、ポリシーやポリシー参照ファイルを提供している間や、
HEAD
要求に応答している間に収集した全ての情報を、個人を認識可能な用途で使用するべきではない。
サーバは、P3P
ポリシーが要求された時に、応答ヘッダ内にP3P
ヘッダを含んで応答してもよい。
しかし、P3P
ヘッダは無視されなければならない事に注意することが重要で、
上記で説明された"セーフゾーン"の要求事項が代わりに用いられる。
この様な場合にP3P
ヘッダを返すことは、管理者がサーバ上にある全ての文書に対して
一つのP3Pポリシーを簡単に適用させることができ、
かつP3Pヘッダなしにポリシーを要求することが
サイトの管理者の負担を増加させるかもしれない事情に鑑みて許可されることである。
セーフゾーン要求は、サイトが個人を特定可能な情報を保持することができないといっている訳ではなく、 ポリシーを提供している間に収集した情報を、個人を特定可能な用途に使用するべきでない事のみをいっている。 サービスへのアタックに関するトラックダウン拒否は、個人を特定可能な情報を使用する為の合法的な理由となり、 この勧告を無視できる事になる。
サーバはユーザエージェントがP3Pポリシーを探すのに最大の助力をするべきである。
特に、サーバはできる限りP3Pポリシーを周知の場所に置くべきである。
P3P
HTTPヘッダが代わりに使用される時は特にサーバ以下をするべきである:
HEAD
要求のサポート
GET
要求によって取得できる全ての文書のためにHEAD
要求をサポートするべきである。
なお、技術的に実行可能な場合は、サーバは通常、 他のHTTPメソッド(POST
など)によってアクセス可能である文書のために、
HEAD
要求に対しての有効な応答を提供しなければならない。
P3PポリシーとP3Pポリシーへの参照内に、いかなる機密情報をも含むべきではない。 この事は、P3Pプライバシーポリシーが関連付けられた文書の要求事項の枠を超えて、 P3Pプライバシーポリシーへの参照を送信する事に関するセキュリティーの追加要求事項が無いことを意味する。 従って、通常HTML文書が暗号化なしのセッシションを通して提供されている場合、 P3Pプロトコルは、文書に含まれているP3Pプライバシーポリシーを参照する時に、 暗号化されたセッションを通して文書が提供されることを要求しないし、推奨もしない。
ウェブサイトがP3Pポリシーを変更すると、変更前のポリシーは変更が実行された時に、収集されたデータを適用することに注意。 変更が行われたら、その日付に従って、過去のP3Pポリシーとポリシー参照ファイルを記録し続け、 それらのポリシーを適切に適用することはサイトの責任である。
もし、サイトが新しいP3Pポリシーを以前に収集されたデータに適用したいと思えば、 サイトはユーザが法律と一致する新しいポリシーや工業ガイドライン、 またはサイトが作成したその他のプライバシーに関する同意書を受け入れる様に、 適切な注意や機会を提供しなければならない。
P3Pを普及するサイトへの補助として、これらのサイトでP3Pの使用されている方法の記述に従って、いくつかのシナリオの例を紹介する。
シナリオ 1: ウェブサイトbasic.example.comはさまざまなイメージを使用し、それらすべてをホストする。また、basic.example.comにはいくつかのフォームがあり、そのフォームはすべてサイトに直接提示される。このサイトはすべてのサイトに対する一つのP3Pポリシーを宣言する事ができる。(または、異なるプライベートポリシーがサイトの異なる部分へ適用すれば、複数のP3Pポリシーを宣言することができる。)ディレクトリにあるイメージとフォームアクションURIのすべてがサイトのP3Pポリシーでカバーされている限り、ユーザエージェントは自動的にそのイメージとフォームがそのサイトのポリシーにカバーされていると認識するだろう。
シナリオ 2: ウェブサイトbusy.example.comはサーバ上のロードを減少させるためにイメージをホストするcdn.example.comというコンテンツ配布ネットワークを使用している。従って、このサイトのイメージすべてにはcdn.example.comでURIがある。この状況でCDNはBusyへのエージェントとして動作し、ログデータ以外は収集しない。このログデータはBusyが契約しているサービス提供をサポートするウェブサイトおよびシステムアドミニストレータのためにしか使用されない。BusyのプライバシーポリシーはCDNがホストするイメージに適用するので Busyは、そのP3Pポリシーがcdn.example.com によって提供される埋め込みコンテンツに適用していると述べるためにポリシー参照ファイルのEMBEDDED-INCLUDE
要素を使用することがある。また、cdn.example.comには、任意に、busy.example.comのプライバシーポリシーがこれらのイメージに適用していると宣言するポリシー参照ファイルがある。
シナリオ 3: また、busy.example.com はサイトに目立つ広告を提供するためclickads.example.comという広告会社と契約をしている。この契約によって、各ユーザが3回を超える広告を見る事ができないようにする為にClickadsはクッキーを設定することができる。Clickadsはユーザが何回その広告を見たかという統計を収集し、商品が広告されている会社にその統計を報告する。しかし、この報告は各個人について明らかにしているものではない。シナリオ2のケースの様に、BusyのプライバシーポリシーはClickadsがホストしている広告に適用しているので、 BusyはP3Pポリシーがclickads.example.comから提供されている埋め込みコンテンツへ適用していることを述べるために、ポリシー参照ファイルのEMBEDDED-INCLUDE
要素を使用する。clickads.example.comには任意に、busy.example.comがこれらの広告を適用していることを宣言しているポリシー参照ファイルがある。商品宣伝広告されている会社が受け取るデータが総合されているので、その会社は、Busyのプライバシーポリシーに述べられる必要はない。
シナリオ 4: ユーザのためのチャットルームをホストする為にウェブサイトbusy.example.comはfunchat.example.comと契約する。ユーザがチャットルームへ参加すると、実際にはBusyサイトからは離れていく。しかしながら、このチャットルームにはBusyのロゴがあり、Busyのプライバシーポリシーでカバーされている。この場合、Funchatは、シナリオ3と違って、Busyのエージェントとして動作しているが、このコンテンツはBusyサイトには埋め込まれていない。この時、BusyがFunchatをそのポリシー参照ファイルに組み込むことはない。しかしながら、BusyはFunchatにBusyのP3Pポリシーを示しているサイトにポリシー参照ファイルを置くよう指示すべきである。
シナリオ 5: ウェブサイトbigsearch.example.comにはユーザが検索問い合わせに入力し、他のサイトのサーチエンジンを選んで作動させることができるフォームがある。ユーザが"submit"ボタンをクリックすれば、検索問い合わせは実際にそのサーチエンジンに直接提示される。アクションURIはbigsearch .example.com上にはないが、ユーザが選択したサーチエンジン上にはある。フォームアクションは埋め込みコンテンツではないので、Bigsearchはこれらのサーチエンジンのプライバシーポリシーを宣言することはできない。だから、ユーザが"submit"ボタンをクリックすると、ユーザエージェントは適切なサーチエンジンへ作動し、データが通知される前にプライバシーポリシーをチェックする。この検索選択メカニズムを操作させるために、BigsearchはサイトにアクションURIを持つフォームを有することがある。そして、適切なサーチエンジンにリダイレクトする。この場合、ユーザエージェントはリダイレクトレスポンスを受け取ることに関するサーチエンジンプライバシーポリシーをチェックすべきである。
シナリオ 6: ウェブサイトbigsearch.example.comにはユーザが検索問い合わせに入力し、同時に10の異なるサーチエンジンを作動させることができるフォームがある。Bigsearchはその問い合わせを提示し、各サーチエンジンからその結果を受け取り、複写を削除し、その結果をユーザに提示する。この場合、ユーザは自分のBigsearchのみと対話する。したがって、P3Pに関わっているのは、Bigsearch ウェブサイトをカバーしているものだけである。しかしながら、Bigsearchはこれらのサーチエンジンと契約し、そのサーチエンジンがBigsearchへのエージェントとして動作している場合以外は、ユーザの検索問い合わせを第三者と共有していることを開示しなくてはならない。
シナリオ 7: ウェブサイトbigsearch.example.comにはAdnetworkという会社が提供した目立つ広告がある。Adnetworkはさまざまに異なるウェブサイトのユーザに関するプロファイルを展開するためにクッキーを使用する。そのため、Adnetworkはユーザの興味により適した広告を提供する事ができる。ユーザがアクセスしたサイトについてのデータはBigsearch ウェブサイトに広告を提供する目的以外に使用されているので、Adnetworkはこのコンテキストのエージェントと考えることはできない。どのコンテンツを適用しているかを示すために、Adnetworkは自身のP3Pポリシーを作成し、自身のポリシー参照ファイルを使用する。さらに、BigsearchはAdnetworkP3Pポリシーがその広告を適用していることを示すために、ポリシー参照ファイルのEMBEDDED-INCLUDE要素を任意に使用することがある。もし、AdnetworkがどのP3Pポリシーをその広告に適用しているかを述べ、ポリシー参照ファイルに変更があればBigsearchに知らせることに合意したなら、BigsearchはEMBEDDED-INCLUDE
要素だけを任意に使用すべきである。
シナリオ 8: ウェブサイトbusy.example.comはウェブサイトにクッキーを使用している。クッキーポリシーを公開し、これらのクッキーをカバーするために通例のP3Pポリシーからクッキーポリシーを独立させている。また、クッキーに対して適切なポリシーを宣言するためにポリシー参照ファイルにCOOKIE-INCLUDE
要素を使用している。性能最適化として、ウェブサイトbusy.example.comはクッキーが設定されると必ず簡潔なポリシーを含むP3Pヘッダを送信して、簡潔なポリシーを有効にしている。
シナリオ 9: ウェブサイトconfig.example.comは各ユーザのコンピュータとインターネット構成をもとにあらゆるウェブコンテンツを最適化するサービスを提供している。ユーザはそのConfigウェブサイトにアクセスし、コンピュータやモニター、インターネット接続に関する質問に答える。Configはその回答を暗号化し、クッキーに格納する。その後、ユーザがBusy-Configと契約しているウェブサイト-を訪れている時、ブラウザが最適化できるコンテンツ(あるイメージやオーディオファイルなど)を要求する時は必ずBusyはユーザをConfiguにリダイレクトする。そしてそのConfigはユーザのクッキーを読み取り、適切なコンテンツに配信する。この場合、Configは収集され、クッキーに格納されたデータの種類とデータの使用される方法を宣言べきである。また、そのクッキーのポリシーを宣言するポリシー参照ファイルでCOOKIE-INCLUDE
を使用すべきである。Configはシナリオ2のCDNの行動と同じように動作している時、配信された実際のイメージやオーディオファイルのBusyのP3Pポリシーを参照する。Busyは恐らくConfig配信コンテンツのポリシーを参照するためにポリシー参照ファイルのEMBEDDED-INCLUDE
要素を使用する。
P3PポリシーはXMLでエンコードされる。それはRDFデータモデル[RDF]を使うことを意味する。しかし、RDFでの表現については、この仕様書には含まれていない(そういった表現は、適切なポリシー参照ファイルのRDFエンコーディングと共にP3PをProposed Recommendationとして出す前に、W3Cノートとして利用可能なようにする計画である)。
3.1節では、自然言語で書かれたポリシーとそれに対応するP3Pポリシーの実例を挙げる。P3Pポリシーの中には、ポリシー全体に適用される全般的な主張と、参照データにおいて言及された特定のデータ型の取扱いのみに適用される特定の主張(これをステートメントと呼ぶ)とがある。3.2節では、POLICY
要素とポリシーレベルの主張について説明する。3.3節ではステートメントと参照データについて説明する。
以下の文章は自然言語で書かれたプライバシーポリシーの2つの例である。後節で、このポリシーをP3Pポリシーにコード化する。どちらのポリシーもひとつの会社、CatalogExample社の例であり、彼らのサイトを閲覧している人むけのポリシーと、実際に商品を購入している人むけのポリシーといった異なったポリシーを持っている。例3.1はP3P要素と属性名を使用して自然言語を正式な記述で提供している。
CatalogExample
社4000 Lincoln Ave.
Birmingham, MI 48009 USA
email: catalog@example.com
Telephone 248-EXAMPLE (248-392-6753)
データの保管:
隔週ごとに集める閲覧情報の整理をします。
例3.1をP3P要素と属性名を使った正式な記述は以下のとおりである。 [容易な参照のために仕様書の章をカッコでくくっている]:
CatalogExample
社4000 Lincoln Ave.
Birmingham, MI 48009 USA
email: catalog@example.com
Telephone +1 248-EXAMPLE (+1 248-392-6753)
あなたが商品購入を選んだ場合、以下のようなもっと多くの情報を要求します。:
同じく、このページによって、CatalogExample社からかあるいは私達と相当のプライバシーの習慣に遵守するような慎重に選んだマーケティングパートナーからの電 子メール、電話あるいは書面のサービスを受け取るか否かについて、あなたは選択をすることができます。もし これらの懇願を受け入れたいなら、適切なボックスにチェッ クしてください。またあなたはプリファレンス(嗜好)を変えることによって、この参加をいつでもやめることができます。
個人情報の変更と更新
http://catalog.example.com/preferences.htmlに示すCatalogExample社のプリファレンス(嗜好)セクションに行くことにより、そのすべての個人情報を変更することがで きます。あなたは、住所、電話番号、電子メールアドレス、パスワードをあなたのプライバシー設定に合うように変更することができます。
クッキー
CatalogExample社はあなたが過去にCatalogExample社の顧客だったか否かをみるためだけにクッキーを使います。もし顧客ならば、過去の購入や習慣に基づき、サービスをカ スタマイズします。私達はクッキーの中の個人データを当社で保存することはありません。また、他の企業・団体や関係会社に、情報を提供したり販売したりすることはあり ません。
データの保管
私達の顧客である間、あなたとあなたの購入に関する情報を保持します。もし、あなたが一年間私達へ注文をなさらなければ、あなたの情報を私達のデータベースから抹消し ます。
以下の2つの例にあげた[XML]文書は上記の自然言語ポリシーをXMLで表現したものである。ポリシーは、XML.によって正確に表現されたステートメントのことである。ポリシーの構文については、後節でより詳細に説明する。
例3.1のXMLエンコード方法:
<POLICY xmlns="http://www.w3.org/2000/12/P3Pv1" discuri="http://www.catalog.example.com/PrivacyPracticeBrowsing.html"> <ENTITY> <DATA-GROUP> <DATA ref="#business.name">CatalogExample</DATA> <DATA ref="#business.contact-info.postal.street">4000 Lincoln Ave.</DATA> <DATA ref="#business.contact-info.postal.city">Birmingham</DATA> <DATA ref="#business.contact-info.postal.stateprov">MI</DATA> <DATA ref="#business.contact-info.postal.postalcode">48009</DATA> <DATA ref="#business.contact-info.postal.country">USA</DATA> <DATA ref="#business.contact-info.online.email">catalog@example.com</DATA> <DATA ref="#business.contact-info.telecom.telephone.intcode">1</DATA> <DATA ref="#business.contact-info.telecom.telephone.loccode">248</DATA> <DATA ref="#business.contact-info.telecom.telephone.number">3926753</DATA> </DATA-GROUP> </ENTITY> <ACCESS><nonident/></ACCESS> <DISPUTES-GROUP> <DISPUTES resolution-type="independent" service="http://www.PrivacySeal.example.org" short-description="PrivacySeal.example.org"> <IMG src="http://www.PrivacySeal.example.org/Logo.gif" alt="PrivacySeal's logo"/> <REMEDIES><correct/></REMEDIES> </DISPUTES> </DISPUTES-GROUP> <STATEMENT> <PURPOSE><admin/><develop/></PURPOSE> <RECIPIENT><ours/></RECIPIENT> <RETENTION><stated-purpose/></RETENTION> <!-- サイトの人間が読むことのできるプライバイシーはデータが二週間後とにパージされること、あるいはこの情報へのリンクを提供することを述べなければならない --> <DATA-GROUP> <DATA ref="#dynamic.clickstream"/> <DATA ref="#dynamic.http"/> </DATA-GROUP> </STATEMENT> </POLICY>
例3.2のXMLエンコード方法:
<POLICY xmlns="http://www.w3.org/2000/12/P3Pv1" discuri="http://www.catalog.example.com/Privacy/PrivacyPracticeShopping.html" opturi="http://catalog.example.com/preferences.html"> <ENTITY> <DATA-GROUP> <DATA ref="#business.name">CatalogExample</DATA> <DATA ref="#business.contact-info.postal.street">4000 Lincoln Ave.</DATA> <DATA ref="#business.contact-info.postal.city">Birmingham</DATA> <DATA ref="#business.contact-info.postal.stateprov">MI</DATA> <DATA ref="#business.contact-info.postal.postalcode">48009</DATA> <DATA ref="#business.contact-info.postal.country">USA</DATA> <DATA ref="#business.contact-info.online.email">catalog@example.com</DATA> <DATA ref="#business.contact-info.telecom.telephone.intcode">1</DATA> <DATA ref="#business.contact-info.telecom.telephone.loccode">248</DATA> <DATA ref="#business.contact-info.telecom.telephone.number">3926753</DATA> </DATA-GROUP> </ENTITY> <ACCESS><contact-and-other/></ACCESS> <DISPUTES-GROUP> <DISPUTES resolution-type="independent" service="http://www.PrivacySeal.example.org" short-description="PrivacySeal.example.org"> <IMG src="http://www.PrivacySeal.example.org/Logo.gif" alt="PrivacySeal's logo"/> <REMEDIES><correct/></REMEDIES> </DISPUTES> </DISPUTES-GROUP> <STATEMENT> <CONSEQUENCE> 貴方のリクエストに答え、ウェブサイトを保護し、向上するために情報をいくつか記録します </CONSEQUENCE> <PURPOSE><admin/><develop/></PURPOSE> <RECIPIENT><ours/></RECIPIENT> <RETENTION><stated-purpose/></RETENTION> <DATA-GROUP> <DATA ref="#dynamic.clickstream.server"/> <DATA ref="#dynamic.http.useragent"/> </DATA-GROUP> </STATEMENT> <STATEMENT> <CONSEQUENCE> お買い上げ頂くと私共はこの情報を使用します。 </CONSEQUENCE> <PURPOSE><current/></PURPOSE> <RECIPIENT><ours/></RECIPIENT> <RETENTION><stated-purpose/></RETENTION> <DATA-GROUP> <DATA ref="#user.name"/> <DATA ref="#user.home-info.postal"/> <DATA ref="#user.home-info.telecom.telephone"/> <DATA ref="#user.business-info.postal"/> <DATA ref="#user.business-info.telecom.telephone"/> <DATA ref="#user.home-info.online.email"/> <DATA ref="#dynamic.miscdata"> <CATEGORIES><purchase/></CATEGORIES> </DATA> </DATA-GROUP> </STATEMENT> <STATEMENT> <CONSEQUENCE> ご依頼により、貴方が興味をお持ちになると思われるマーケティングを慎重に選びお送りします。 </CONSEQUENCE> <PURPOSE> <contact required="opt-in"/> <customization required="opt-in"/> <tailoring required="opt-in"/> </PURPOSE> <RECIPIENT required="opt-in"><ours/><same/></RECIPIENT> <RETENTION><stated-purpose/></RETENTION> <DATA-GROUP> <DATA ref="#user.name" optional="yes"/> <DATA ref="#user.home-info.postal" optional="yes"/> <DATA ref="#user.home-info.telecom.telephone" optional="yes"/> <DATA ref="#user.business-info.postal" optional="yes"/> <DATA ref="#user.business-info.telecom.telephone" optional="yes"/> <DATA ref="#user.home-info.online.email" optional="yes"/> </DATA-GROUP> </STATEMENT> <STATEMENT> <CONSEQUENCE> 御自身の情報にアクセスできるようパスワードを設定できます。 </CONSEQUENCE> <PURPOSE><customization required="opt-in"/></PURPOSE> <RECIPIENT><ours/></RECIPIENT> <RETENTION><stated-purpose/></RETENTION> <DATA-GROUP> <DATA ref="#dynamic.miscdata"> <CATEGORIES><uniqueid/></CATEGORIES> </DATA> </DATA-GROUP> </STATEMENT> <STATEMENT> <CONSEQUENCE> ご依頼により、サイトを作成し、貴方の趣味にあわせた製品に焦点をあてます。 </CONSEQUENCE> <PURPOSE> <customization required="opt-in"/> <tailoring required="opt-in"/> </PURPOSE> <RECIPIENT><ours/></RECIPIENT> <RETENTION><stated-purpose/></RETENTION> <DATA-GROUP> <DATA ref="#user.bdate.ymd.year" optional="yes"/> <DATA ref="#user.gender" optional="yes"/> </DATA-GROUP> </STATEMENT> <STATEMENT> <CONSEQUENCE> 貴方の過去の訪問を元にサイトを作成します。 </CONSEQUENCE> <PURPOSE><tailoring/><develop/></PURPOSE> <RECIPIENT><ours/></RECIPIENT> <RETENTION><stated-purpose/></RETENTION> <DATA-GROUP> <DATA ref="#dynamic.cookies"> <CATEGORIES><state/></CATEGORIES> </DATA> <DATA ref="#dynamic.miscdata"> <CATEGORIES><preference/></CATEGORIES> </DATA> </DATA-GROUP> </STATEMENT> </POLICY>
本節では、P3Pポリシーの構文とセマンティクスを定義する。全てのポリシーは[UTF-8]を用いて表現しなければならない。 P3Pサーバはこのエンコーディング(表現)を用いて自らのポリシーを表現しなければならない。 P3Pユーザエージェントはこの構文を解析できなければならない。
ポリシーは一つのファイルに(POLICY
要素を使って)独立して置く事ができるし、
POLICIES
要素を使って一緒に集めることもできる。
POLICIES
要素
POLICIES
要素は一つのファイルに複数のP3Pポリシーを集めるのに使用される。
POLICIES
要素はネットワークの行き来とキャッシングを向上させ、性能の最適化として提供される。
ポリシーの多くは一つの要求で集める事ができる。すなわち、POLICIES
要素は周知の場所、META
要素の中、に置く事ができる。
この場合、ユーザエージェントはポリシー参照ファイルとポリシーの両方を持っている一つのファイルを取り出すことだけが必要である。
POLICIES
要素にあるポリシーは、ファイル内に唯一のname
属性を持たなければならない。
この事によって、(POLICY-REF
要素の)ポリシー参照はそのポリシーにリンクすることができる。
例 3.3:
http://www.example.com/Shop/policies.xml
にあるファイルは以下のコンテンツを持つ事ができた。:
<POLICIES xmlns="http://www.w3.org/2000/12/P3Pv1"> <POLICY discuri="http://www.example.com/disc1" name="policy1"> .... </POLICY> <POLICY discuri="http://www.example.com/disc2" name="policy2"> .... </POLICY> <POLICY discuri="http://www.example.com/disc3" name="policy3"> .... </POLICY> </POLICIES>
http://www.example.com/Shop/CDs/*.xml のファイルはhttp://www.example.com/w3c/p3p.xmlにある
以下のポリシー参照ファイルを使用して2番目のポリシー("policy2
") を関連することができる。:
<META xmlns="http://www.w3.org/2000/12/P3Pv1"> <POLICY-REFERENCES> <POLICY-REF about="/Shop/policies#policy2"> <INCLUDE>/Shops/CDs/*</INCLUDE> </POLICY-REF> </POLICY-REFERENCES> </META>
[19] | policies |
= |
`<POLICIES xmlns="http://www.w3.org/2000/12/P3Pv1">` *policy "</POLICIES>" |
POLICY
要素
POLICY
要素(ポリシー要素)には、完全なP3Pポリシーが含まれる。
各P3Pポリシーには、一つのPOLICY
要素が正しく含まれなければならない。
POLICY要素には、そのポリシーに含まれるプライバシープラクティスの代表者となる
法人組織を特定するようなENTITY
属性が含まれなければならない。
さらに、POLICY要素にはACCESS
要素(情報公開要素)が含まれなければならない。
また、オプショナルなものとして、STATEMENT
要素(ステートメント要素)DISPUTES-GROUP
要素(係争解決グループ要素)、
EXPIRY
要素(ポリシーの有効期限を示している)、P3Pデータスキーマ、そして一つ以上のextension(拡張)が含まれてもよい。
<POLICY>
discuri
(必須の属性)
opturi
opt-in
または opt-out
に設定されている必要な属性と一緒に purpose
を含むポリシーに必須である。
name
POLICIES
要素にあれば、この属性は必須である。
[20] | policy |
= |
`<POLICY xmlns="http://www.w3.org/2000/12/P3Pv1" discuri=` quoted-URI [` opturi=` quoted-URI] [` name=` quotedstring] `>` *extension [test] [expiry] [dataschema] entity access [disputes-group] *statement-block *extension `</POLICY>` |
[21] | quoted-URI |
= |
`"` URI `"` |
ここではURIはRFC 2396 [URI]によって定義される。 |
TEST
要素
TEST要素はテストを目的として使用される:ポリシーにTEST
が存在するということはそのポリシーが単なる例であるという事を意味するのでそれは無視しなければならないし、有効なP3Pポリシーと考えてはいけない。
[22] | test |
= |
"<TEST/>" |
ENTITY
要素
ENTITY
要素は、プライバシープラクティス表記を行っている合法組織に関する正確な説明を提供する。
<ENTITY>
ENTITY要素は、ビジネスデータ集合の(全て又は一部の)フィールドを参照しているDATA 要素から成る合法組織の説明を含んでいる。: 利用者が、ある組織のプライバシーポリシーについて連絡を取る際に使うであろう住所、電話番号、電子メールアドレスおよびその他の情報などの問い合わせ情報は、実在する名称でなければならない。また、ある法律や規則の指導では、郵便番号やその他の特有の情報を問い合わせ情報に含める必要があることに注意すること。
[21] | entity |
= |
"<ENTITY>" *extension entitydescription *extension "</ENTITY>" |
[22] | entitydescription |
= |
"<DATA-GROUP>" `<DATA ref="#business.name"/>` PCDATA "</DATA>" *(`<DATA ref="#business.` string `"/>` PCDATA "</DATA>") "</DATA-GROUP>" |
ここで文字列は、ビジネスデータ集合によって許される数字の間、連続する文字(" や & で回避された)で定義される。PCDATA は[XML]で定義されている。 |
ACCESS
要素
ACCESS
要素は、情報の様々な種類にアクセスする機能をサイトが提供するかどうかを示す。
<ACCESS>
<all/>
以外)、
全てのデータへのアクセスが可能であることは意味せず、アクセスが可能なデータがあること、
また、どのようなデータにアクセスできるのか利用者はサービス提供者にさらに確認するべきであることを意味している。
サービス提供者は、discuriで示されたWeb以外の手段で収集された情報にアクセスする許可を与えてもよい。 しかし、P3Pステートメントが扱う範囲はHTTPまたは他のWeb転送プロトコルを通して収集されるデータに限られる。 また、アクセスがWeb経由で提供される場合は、セキュリティの問題は本文書の範囲外ではあるが、 そのようなアクセスのために強固な認証とセキュリティメカニズムを使用することを推奨する。
ACCESS
要素は、以下の要素の中から一つ構成されなければならない。:
<nonident/>
<all/>
<contact-and-other/>
<ident-contact/>
<other-ident/>
<none/>
[23] | access |
= |
"<ACCESS>" access_disclosure *extension "</ACCESS>" |
[24] | access_disclosure |
= |
"<nonident/>" | ; 個人特定可能なデータは使われていない "<ident-contact/>" | ; 個人特定可能なコンタクト情報 "<other-ident/>" | ; その他の個人特定可能な情報 "<contact-and-other/>" | ; 個人特定可能、およびその他のコンタクト情報 "<all/>" | ; 個人特定可能な全ての情報 "<none/>" ; なし |
DISPUTES
要素
ポリシーは、一つ以上の DISPUTES
要素(係争解決要素)から成る、DISPUTES-GROUP
要素(係争解決グループ要素)を含むべきである。
DISPUTES
要素は、サービスのプライバシープラクティスに関して係争が生じた際に行われる係争解決手続きを記述している。
どのDISPUTES
要素も、LONG-DESCRIPTION
要素とIMG
要素、REMEDIES
要素をオプションとして含んでもよい。
複数の係争解決の手段を持つサービスプロバイダは、それぞれに分けたDISPUTES
要素を使うべきである。
もし複数使うならば、異なる係争手段は係争解決手段も分かれており、それぞれのDISPUTES
要素はそれぞれのLONG-DESCRIPTION
やIMG
タグ、REMEDIES
要素が必要になると思われる。
<DISPUTES>
resolution-type
) (必須の属性)
[service]
[independent]
[court]
[law]
サービス(service)
(必須の属性)
verification
)
short-description
)
DISPUTES
要素には、人間が読むことができるLONG-DESCRIPTION
要素を含むことができる。
それは適切な法的フォーラムや、適切な法律、または、第三者的組織の名前、あるいは、
サービスURIに示されていない場合は、カスタマーサービスのコンタクト情報を含むべきである。
(LONG-DESCRIPTION
)>
<IMG>
src
(必須の属性)
width
)
height
)
alt
) (必須の属性)
[25] | disputes-group |
= |
"<DISPUTES-GROUP>" 1*dispute *extension "</DISPUTES-GROUP>" |
[26] | dispute |
= |
"<DISPUTES" " resolution-type=" '"'("service"|"independent"|"court"|"law")'"' " service=" quoted-URI [" verification=" quotedstring] [" short-description=" quotedstring] ">" *extension [longdescription] [image] [remedies] *extension "</DISPUTES>" |
[27] | longdescription |
= |
<LONG-DESCRIPTION> PCDATA </LONG-DESCRIPTION> |
[28] | image |
= |
"<IMG src=" quoted-URI [" width=" `"` number `"`] [" height=" `"` number `"`] " alt=" quotedstring "/>" |
[29] | quotedstring |
= |
`"` string `"` |
ここで文字列は連続する文字(" や & で回避された)で定義される。PCDATA は[XML]で定義されている。 |
サービスは複数の保証サービスを持つことができ、それらはDISPUTES-GROUP
要素に含まれる複数のDISPUTES
要素の記載を通して特定できることに注意すること。
ある組織のプライバシープラクティスが自組織内で保証されたものも含み、第三者機関によて監査されたり、
または法的な監督機関の管轄下にあったりすることを説明することによって、このDISPUTES-GROUP要素のフィールドが様々な方法で使用されることを期待する。
REMEDIES
要素
個々のDISPUTES
要素は、ポリシーに関する違反があった場合に、可能である賠償方法を指定しているREMEDIES
要素を含むべきである。
<REMEDIES>
REMEDIES
要素は、以下の1つ以上含まなければならない。:
<correct/>
<money/>
<law/>
[30] | remedies |
= |
"<REMEDIES>" 1*remedy *extension "</REMEDIES>" |
[31] | remedy |
= |
"<correct/>" | "<money/>" | "<law/>" |
ステートメントは、特定のデータの型に適用されるデータプラクティスを説明する。
STATEMENT
要素
STATEMENT
要素(ステートメント要素)は、PURPOSE
要素(目的要素)、RECIPIENT
要素(受領者要素)、RETENTION
(保有要素)、
DATA-GROUP
要素(データグループ要素)、オプショナルなものとしてCONSEQUENCE
要素(結果要素)と一つ以上の拡張を束ねたものである。
DATA-GROUP
要素で参照された全てのデータは、ステートメントに含まれたその他の要素から成る情報公開に従って取り扱われる。
このように、サイトは同じ方法で取り扱われる要素をグループ化し、各グループに対してステートメントを作成することができる。
サイトが収集するデータの種類に合わせて個々の目的とその他の情報を公開したい場合は、
各データ要素に合わせて別々のステートメントを作成することによって、そのような公開を行うことができる。
<STATEMENT>
[32] | statement-block |
= |
"<STATEMENT>" *extension [consequence] [non-identifiable] purpose recipient retention 1*data-group *extension "</STATEMENT>" |
プラクティスの宣言を簡潔化するために、サービス提供者はデータ要素に関するステートメント内で情報公開(目的、受領者、保存)を集合化することができる。 サービス提供者は、このような集合化は付加的な作業として行わなければならない。 例えば、利用者の年齢は「当組織および当組織の業務委託先」に提供するが、利用者の郵便番号は「当組織と無関係な第三者」に提供するようなサイトは、 利用者の名前と郵便番号を「当組織および当組織の業務委託先」および「当組織と無関係な第三者」に提供すると表明してもよい。 そのようなステートメントでは、実際に行っている以上に多くのデータを第三者に提供しているように見える。 自サイトの情報公開を詳細なものとするか簡潔なものとするかどうかを決定するのは、サービス提供者次第である。
また、サービス提供者は常に、適用される全てのオプションを公開しなければならない。 例えば、「サービスまたは製品のマーケティングのためにサイト訪問者と連絡をとる」という目的のみで情報を収集するサイトを考えてみる。 サイトがこの「サービスまたは製品のマーケティングのためにサイト訪問者と連絡をとる」ことを「現在の活動の遂行とサポート」の目的によるものだとみなしている場合でも、サイトは両方の目的を表明しなければならない。情報を「サービスまたは製品のマーケティングのためにサイト訪問者と連絡をとる」目的で「当サイトおよび当サイトの業務委託先」に提供し、「現在の活動の遂行とサポート」の目的で「公のフォーラム」に提供するサイトは、「当サイトおよび当サイトの業務委託先」と「公のフォーラム」の両方の受領者を表明しなければならない。
サービス提供者は時に、自分たちが収集したデータを集合化する。 この集合データは元のデータとは違う目的で使用され、元のデータより広く共有され、または元のデータより長く保持されることがある。 例えば多くのサイトは広告者に対して、Webへアクセスした人の数や、さまざまな人工統計学的なグループに適合するアクセス者のパーセンテージなどてら発表したり、公開したりする。 こういった統計の数字を元にした個人や世帯のデータを取り出すことができないように、集合化した数字が使用されたり、共有されたりすると、P3Pポリシーで上記のような数値が非公開となることが必要である。 しかしながら、サービスは元のデータが収集された事実を非公開にしなければならないし、データが集合化される前にそのデータから作成される使用のすべてを宣言しなければならない。
CONSEQUENCE
要素
STATEMENT
要素(ステートメント要素)には、利用者に対し、サイトのプラクティスに関して追加的な説明を与えることができる
CONSEQUENCE
要素(結果要素)を任意に含むことができる。
<CONSEQUENCE>
[33] | consequence |
= |
"<CONSEQUENCE>" PCDATA "</CONSEQUENCE>" |
NON-IDENTIFIABLE
要素
STATEMENT
要素(ステートメント要素)には以下に指定する要求項目が履行された時のみ、任意にNON-IDENTIFIABLE
要素が含まれる事がある。
<NON-IDENTIFIABLE/>
<NON-IDENTIFIABLE/>
要素が現れれば、この要素が実現される方法についての人が読むことのできる説明はdiscuriに含まれなければならない。
[34] | non-identifiable |
= |
"<NON-IDENTIFIABLE/>" |
PURPOSE
要素
各STATEMENT
要素(ステートメント要素)には、一つ以上のデータ収集目的またはデータ利用目的を含むPURPOSE
要素(目的要素)が含まれなければならない。
サイトは自らのデータプラクティスを、6つの特定化された目的のうちの一つ以上の目的に分類しなければならない。
<PURPOSE>
PURPOSE
要素には、以下の目的の中から一つ以上が含まれなければならない:
<current/>
<admin/>
<develop/>
<customization/>
<tailoring/>
<pseudo-analysis/>
<pseudo-decision/>
<individual-analysis/>
<individual-decision/>
<contact/>
<current/>
が使用される。
さらに、カスタマイズされたウェブコンテンツまたは、ユーザが訪れているサイトに埋め込まれた目立つ広告を通じてのマーケティングも含まれない。
-- こういう場合は <tailoring/>
, <pseudo-analysis/>
と <pseudo-decision/>
, または <individual-analysis/>
と <individual-decision/>
purposes でカバーされるだろう。
<historical/>
<DISPUTES>
要素において参照されなければならないし、この情報(どこにこの情報が格納されるか、と特にどのようにしてこの情報収集が過去のでき事の保存を向上させるのか)にアクセスできる資格のあるリサーチャーの特別な定義を含まなければならない。
<telemarketing/>
<current/>
が使用される。
<other-purpose>
string
</other-purpose>
各々の目的には、以下のオプショナルな属性を付加することができる:
required
always
: 目的がいつも必要である。; ユーザはデータの使用に opt-in または opt-outをすることができない。これは、必要な属性が無い場合のデフォルトである。
opt-in
: データはこの使用を積極的に要求する場合にのみ、この目的を使用することがある。
-- 例えば、ユーザがメーリングリストに追加してほしいと要求した場合。積極的な要求にはユーザが特別な処置をしなければならない。
例えば、ユーザが調査に記入する場合、メーリングリストに追加するために追加のボックスにチェックを入れることは積極的な要求だとみなされる。
しかしながら、事前にチェック付けているメ―リングリストが調査フォームに含まれていると積極的な要求とはみなされない。
さらに、ユーザが積極的に要求する目的にたいして、ユーザが心変わりをしたり、その要求を拒否したりするにちがいない。--
そういうことはopturi
に定義されなければならない。
opt-out
: ユーザがこの方法で使用してほしくないと要求する時以外にデータはこの目的のために使用される。
この値が選択されれば、このサービスはopturi
でユーザがこの目的をopt-out する方法に関して分かり易い指示を提供しなければならない。
また、サービスはデータ収集の点において、以上の指示または、その指示のポイントを提供するべきである。
[35] | purpose |
= |
"<PURPOSE>" 1*purposevalue *extension "</PURPOSE>" |
[36] | purposevalue |
= |
"<current" [required] "/>" | ; 現在の活動の遂行とサポート "<admin" [required] "/>" | ; ウェブサイトとシステムの管理 "<develop" [required] "/>" | ; 調査と開発 "<customization" [required] "/>" | ; 肯定的なカスタマイズ "<tailoring" [required] "/>" | ; その場限りの調整 "<pseudo-analysis" [required] "/>" | ; ペンネーム分析 "<pseudo-decision" [required] "/>" | ; ペンネーム決定 "<individual-analysis" [required] "/>" | ; 個人分析 "<individual-decision" [required] "/>" | ; 個人決定 "<contact" [required] "/>" | ; サービスまたは商品のマーケティングのためにサイト訪問者と連絡をとる "<historical" [required] "/>" | ; 過去のでき事の保存 "<telemarketing" [required] "/>" | ; 電話でのマーケティング "<other-purpose" [required] ">" PCDATA "</other-purpose>"; その他の利用 |
[37] | required |
= |
" required=" `"` ("always"|"opt-in"|"opt-out") `"` |
サービス提供者は上記の要素をデータ収集の目的を説明するために用いなければならない。サービス提供者は適用される全ての目的を公開しなければならない。 サービス提供者があるデータ要素をある目的で利用することを公開しなかった場合、そのことはデータをその目的では利用しないということを意味している。 「その他の利用」の目的でデータを利用すると公開したサービス提供者は、その目的に関して人間が読むことのできる説明を与えなければならない。
サービス提供者はすべての受領者に適用を非公開にしなければならない。P3Pはどのようにしてそのデータが受領者にリリースされるのかについて区別はしていない。 データがリリースされた時にただ単にデータが必要なだけである。そして、そのデータの共有はP3Pポリシーで公開しなければならない。 P3Pステートメントでカバーされなければならないデータ公開の例には以下がある。
ある場合には、上記の受領者はデータにすべての受領者を示しているわけではない。例えば、出荷や支払いをする人などといった処理進行者の問題。 こういった人はその行動を完了し、サポートする必要があるが、問題のある異なる業務にしたがうことがある。 現在、配達サービスは一つのポリシーで明らかに表す事ができる。オリジナルのサービス提供者に関しての業務に最も反映している部門ではどれでも、 上記のような処理進行者を表すべきである。 配達サービスの特別な要素は含まれているが、以下の理由から支払いに関する特別な要素は(銀行やクレジットカード会社など)含まれてはいない。 配達サービスの受領者は普通、配達サービスのプライバシーポリシーを見直す機会がないが、金融機関は、金融データに関して顧客とは別個の同意書を持つだろう。
RECIPIENT
要素
各STATEMENT
要素(ステートメント要素)には、収集データの一つ以上の受領者を含むRECIPIENT
要素(受領者要素)が含まれなければならない。
サイトはデータの受領者を、6つの特定化された受領者のうちの一つ以上の受領者に分類しなければならない。
<RECIPIENT>
RECIPIENT
要素には、以下の受領者の中から一つ以上が含まれなければならない。:
<ours>
<delivery>
<same>
<other-recipient>
<unrelated>
<public>
上記の各タグは任意に以下を含むことができる:
recipient-description
タグ;
<ours>
を例外として、required
属性:この属性は共有のopt-in/opt-outが可能であるかどうかを示して、PURPOSE
タグに類似の属性として定義されている。(そしてそのデフォルト値はalways
である。)
[38] | recipient |
= |
"<RECIPIENT>" 1*recipientvalue *extension "</RECIPIENT>" |
[39] | recipientvalue |
= |
"<ours>" *recdescr "</ours> | ; 当組織および/または当組織の業務委託先 "<same" [required] ">" *recdescr "</same>" | ; 当組織のプラクティスに従う法人組織 "<other-recipient" [required] ">" *recdescr "</other-recipient>" | ; 当組織とは異なるプラクティスに従う法人組織 "<delivery" [required] ">" *recdescr "</delivery>" | ; 当組織とは異なるプラクティスに従う可能性のある配送サービス "<public" [required] ">" *recdescr "</public>" | ; 公のフォーラム "<unrelated" [required] ">" *recdescr "</unrelated>" ; 当組織と無関係な第三者 |
[40] | recdescr |
= |
"<recipient-description>" PCDATA ; 受領者の記述 "</recipient-description>" |
サービス提供者は適合する全ての受領者を公開しなければならない。 P3Pはそのデータが受領者にどのようにリリースされるのかについての区別はしない。 ただ、データがリリースされれば、そのデータが必要であり、P3Pポリシーでそのデータ共有を明らかに示さなければならないだけである。 P3Pポリシーでカバーされなければならないデータの公表例には以下がある。
上記の受領者がデータすべてを記述してはいない場合があることに注意。 たとえば、出荷や支払いをする人などのような取り引き業務をおこなう人(この行動の完了とサポートに必要であるが、他の業務にしたがうことに問題がある)の場合。 現在、配達サービスのみポリシーで明らかに表している。 他の取り引き業務については、オリジナルのサービスプロバイダに関して一番正確に表しているカテゴリで示している。
配達サービスの特別な要素は含まれているが、(銀行やクレジットカードなどの)支払い処理についての要素は、以下の理由のため含まれていない。 配達の受領者は普通、配達サービスのプライバシーポリシーを見直す機会がないが、金融機関は一般的に顧客の金融データの使用に関して顧客との間に独立の同意書を持つだろう。
<delivery/>
要素は、配送を遂行するためにサービス提供者の代行としてのみデータを使用することに同意している配送サービスに対して使われるべきではないことに注意すること。
RETENTION
要素
各STATEMENT
要素(ステートメント要素)には、そのステートメントで参照されたデータに当てはまる保有ポリシーを示すRETENTION
要素(保有要素)が含まれなければならない。
<RETENTION>
RETENTION
要素には、以下のうちの1つが含まれなければならない:
<no-retention/>
<stated-purpose/>
<legal-requirement/>
<business-practices/>
<indefinitely/>
[41] | retention |
= |
"<RETENTION>" retentionvalue *extension "</RETENTION>" |
[42] | retentionvalue |
= |
"<no-retention/>" | ; 保有しない "<stated-purpose/>" | ; 言明された目的 "<legal-requirement/>" | ; 法律に基づいて言明された目的 "<indefinitely/>" | ; 情報は無期限に保有 "<business-practices/>" ; 業務プラクティスによる |
DATA集合
とDATA
要素
各STATEMENT
要素(ステートメント要素)には、1つ以上のDATA
要素を含むDATA集合
要素が含まれなければならない。DATA
要素は、サイトが収集するデータの型を説明するために使われる。
<DATA集合>
base
ref
属性で示されたURI参照であるbase URI ([URI])。 この属性が省略されたときのデフォルト値はP3P基本データスキーマ(http://www.w3.org/TR/P3P/base)のURI([URI])である。属性が空文字列("")だった場合、ベースはローカルの文書である。
<DATA>
ref
(必須の属性)
DATA
要素がDATA-GROUP
要素の中に含まれるなら、
デフォルトのベースURIはbase
属性のURIであると考えられる。 他の例では同じように、デフォルトベースURIは同じ文書を参照する([URI])と同じ。user.home
は USER.HOME
あるいは User.Home
とは異なる)。
optional
optional
属性は、ポリシーにおいてのみ使用される(データスキーマの定義においては使用されない)。
ユーザエージェントは自動化した意思決定でoptional
属性を使用することついて注意すべきである。
もし、optional
属性がユーザエージェント(HTTP Referer
ヘッダやクッキーのような)が直接管理するデータ要素に関係があれば、
ユーザエージェントは、データ要素が必要な場合にサイトのポリシーがユーザのプリファレンスと合わないと、
データ要素が任意であるウェブサイトにこのデータが転送されないことを確認すべきである。
また、ユーザが一般的に入力するフォームのデータに関して、任意のデータについてのサイトの業務がユーザのプリファレンスに合わなくなったら、
ユーザエージェントはユーザに警告すべきである。
DATA
要素は、現実のデータを含むことができる(ENTITY
要素のケースでみたように)。そして、カテゴリ情報関連も含むことができる。
[43] | data-group |
= |
"<DATA-GROUP" [" base=" quoted-URI] ">" 1*dataref *extension "</DATA-GROUP>" |
[44] | dataref |
= |
`<DATA" ref="` URI-reference `"` [" optional=" `"` ("yes"|"no") `"`] ">" [categories] ; データ要素のカテゴリ [PCDATA] ; データ要素の結果となる値 "</DATA>" |
ここで、 URI-reference は[URI]で定義される。 |
例えば、利用者の住所、データ集合user.business-info
の全ての要素、さらに(オプショナルなものとして)データ集合user.home-info.telecom
の全ての要素を参照するために、サービスはP3Pポリシー内に以下の参照データを記載するだろう。:
<DATA-GROUP> <DATA ref="#user.home-info.city"/> <DATA ref="#user.home-info.telecom" optional="yes"/> <DATA ref="#user.business-info"/> </DATA-GROUP>
データの実際の値が分かっている場合、結果として生じた拡張の様に、値をDATA
要素内で表現することができる。
例えば、example policiesを例に挙げると:
<ENTITY> <DATA-GROUP> <DATA ref="#business.name">CatalogExample</DATA> <DATA ref="#business.contact-info.postal.street">4000 Lincoln Ave.</DATA> ...
カテゴリとは、利用者とユーザエージェントに、意図されたデータ利用に関してヒントを提供するデータ要素の属性である。 カテゴリは、P3Pユーザエージェントの実装と使用をより容易にするために不可欠である。 カテゴリはデータ要素ではないことに注意:カテゴリによって、利用者はさらに一般化されたプリファレンスやデータ交換規則を表明することができる。
データカテゴリを示すために使われている記号は以下の通りである:
[45] | categories |
= |
"<CATEGORIES>" 1*category "</CATEGORIES>" |
[46] | category |
= |
"<physical/>" | ; 実社会における連絡先情報 "<online/>" | ; オンライン連絡先情報 "<uniqueid/>" | ; ユニークな識別子 "<purchase/>" | ; 購入情報 "<financial/>" | ; 金融情報 "<computer/>" | ; コンピュータ情報 "<navigation/>" | ; ナビゲーションとクリックストリームのデータ "<interactive/>" | ; インタラクティブデータ "<demographic/>" | ; 人口統計学的・社会経済学的データ "<content/>" | ; 文章の内容 "<state/>" | ; 状態管理メカニズム "<political/>" | ; 市民情報 "<health/>" | ; 健康情報 "<preference/>" | ; プリファレンス(嗜好)データ "<government/> | ; 政府発行の識別子 "<other-category>" PCDATA "</other-category>" ; その他 |
<physical/>
<online/>
<uniqueid/>
<purchase/>
<financial/>
<computer/>
<navigation/>
<interactive/>
<demographic/>
<content/>
<state/>
<political/>
<health/>
<preference/>
<location/>
<government/>
<other-category>
string
</other-category>
<other-category>
と </other-category>
タグに挟んで)が提示されなければならない。
コンピュータ情報、ナビゲーションとクリックストリームのデータ、 インタラクティブデータ、文章の内容のカテゴリは、以下のように区別することができる。 コンピューター情報には、IPアドレスやソフトウェア構成を含む利用者のコンピューターに関する情報が含まれる。 ナビゲーションとクリックストリームのデータには、閲覧に関係した利用者の実際の行動が記述されている。 閲覧行動に関係した情報を含んだログファイルの中にIPアドレスが記録されている場合には、 コンピュータカテゴリとナビゲーションカテゴリの両者が使用されていることになる。 インタラクティブデータは、閲覧にとどまらず、サイト上で何らかの有用なサービスを提供するために積極的にサイトが求めるデータである。 文章の内容は、通信目的のためにサイト上で交換される情報のことである。
Otherカテゴリは、いずれのカテゴリにも当てはまらないデータが要求される場合にのみ使われるべきである。
P3Pは、利用者とユーザエージェントに、サービスから要求される情報型に関して付加的なヒントを提供するためにカテゴリを使用する。 基本データスキーマ中の大部分のデータはいずれか1つのカテゴリ(またはいくつかのカテゴリの組み合わせ)に入るが、 状況次第で異なる複数のカテゴリに入る可能性のあるデータ要素もある。 前者は、固定カテゴリデータ要素(あるいは、短く「固定データ要素」)と呼ばれ、 後者は可変カテゴリデータ要素(「可変データ要素」)と呼ばれている。 以下の2つの節で、両型の要素を簡単に説明する。
P3Pは、EXTENSION
という要素を使用して、構文とセマンティクスを拡張するための柔軟かつ強力なメカニズムを提供する。
この要素は拡張に属すポリシーの部分を示す為に使用される。EXTENSION
要素内のデータの意味は、拡張そのものによって定義される。
<EXTENSION>
optional
yes
を指定することによって示され、この拡張を理解できないアプリケーションは安全にEXTENSION
要素の内容を無視することができ、
通常どおりにポリシー(データスキーマ)全体を処理することができることを意味する。optional
属性は要求事項ではなく、既定値はyes
:
[47] | extension |
= |
"<EXTENSION" [" optional=" `"` ("yes"|"no") `"`] ">" PCDATA "</EXTENSION>" |
例として、もし"www.catalog.example.com"が特定のデータ集合要素を、 アメリカ、カナダ、メキシコに住んでいる利用者からのみ収集する事を示す機能をP3Pに追加したい場合、 以下のような必須拡張を追加することができる:
<DATA-GROUP> ... <EXTENSION> <COLLECTION-GEOGRAPHY type="include" xmlns="http://www.catalog.example.com/P3P/region"> <USA/><Canada/><Mexico/> </COLLECTION-GEOGRAPHY> </EXTENSION> </DATA-GROUP>
一方で、もし"www.catalog.example.com"が、サーバが置かれている国を示す拡張を追加したい場合、以下の様に任意拡張の方が適している:
<POLICY> <EXTENSION optional="yes"> <ORIGIN xmlns="http://www.catalog.example.com/P3P/origin" country="USA"/> </EXTENSION> ... </POLICY>
xmlns
属性は重要な属性である。
というのは、これは、拡張に使用される要素と属性の名称を解釈するためのネーム空間を規定するからである。
[XML-Name]に具体的に示されるように、
ネーム空間URIが単に拡張に対する唯一の識別子であることが意図されているにすぎないことに注意すること。
しかしながら、サービス提供者は対応するURI上で、拡張の説明を載せたページを提供してもよい。
ユーザエージェントはプリファレンスのインポートと処理が可能な方法を文書化しなければならない。 また、プリファレンスがエクスポートできる方法を文書化するべきである。
簡潔なポリシーは、ポリシーの適用についてユーザエージェントが迅速で同時の決定をできるための ヒントを提供するP3Pポリシーを要約したものである。簡潔なポリシーはユーザエージェントやサーバの 任意である性能の最適化である。簡潔なポリシーから十分な情報を得る事のできない ユーザエージェントは、ユーザのプリファレンスに従って決定をする完全なポリシーを取り出すべきである。
P3Pv1において、簡潔なポリシーはクッキーのみのポリシー情報を含んでいる。 ウェブサーバは完全なポリシーで参照されたクッキーを表すP3Pの簡潔なポリシーをビルドする責任がある。 P3Pの簡潔なポリシーで指定されたポリシーはクッキーに格納されているデータおよびウェブサイトのクッキーが 参照しているデータに適用する。
HTTPによって転送された文書は、P3P:ヘッダを通じてP3Pの簡潔なポリシーを含んでもよい。
サイトがP3Pヘッダを使用していれば、HEAD
とOPTION
要求を含む
適切なリクエスト方式のレスポンスでP3Pの簡潔なポリシーを含んでもよい。
P3Pヘッダ内に簡潔なポリシーを指定するには、サイトがP3Pヘッダに (2.2.2章を参照)その簡潔なポリシーを指定する。 P3Pの簡潔なポリシーヘッダには一つ以上の範囲を決められたトークン("簡潔なポリシー")を 含む引用された文字列がある。スペースは有効なデリミッタだけである。このヘッダの構文は以下である:
[48] | compact-policy-field |
= |
`CP="` compact-policy `"` |
[49] | compact-policy |
= |
compact-access [" " compact-disputes] [*(" " compact-remedies)] [" " compact-non-identifiable] [1*(" " compact-purpose)] [1*(" "compact-recipient)] 1*(" " compact-retention) [*(" " compact-category)] |
HTTPヘッダの規則を維持するにあたって、このヘッダのP3Pの部分はいずれにしても記述される。
ユーザエージェントはP3Pの簡潔なポリシーフィールドを処理してもよい。
P3Pの簡潔なポリシーはP3Pのボキャブラリから以下の要素をサポートする:
ACCESS
, CATEGORIES
, DISPUTES
,
NON-INDENTIFIABLE
, PURPOSE
, RECIPIENT
,
REMEDIES
, RETENTION
, TEST
P3Pの簡潔ポリシーのボキャブラリはHTTPレスポンスヘッダ内でネットワーク上のバイト数を 減らすため開発者が読む事のできる言語を使用して表現される。そのトークンの構文は以下である:
PURPOSE
目的(purpose)は三文字コードと一つの任意の文字属性を使用してP3Pの簡潔なポリシーに表現される。
このような任意の属性は、完全なP3Pポリシー内の"required
"属性の値を記号化する:
その値は"a
", "i
" と "o
"であり、
対応するP3Pポリシー内の"required
"属性が、各々"always
",
"opt-in
" そして "opt-out
"に設定されなければならないことを意味する。
P3Pの簡潔なポリシーにおいて、完全なP3Pポリシー内にある一つ以上のother-purposesを
設定しなければならない場合、単一のOTP
フラグが完全なP3Pポリシー内に
other-purposesが存在するということをユーザエージェントに知らせるために使用される。
P3Pの目的と簡潔なポリシーコードの対応する関連性は以下である:
[50] | compact-purpose |
= |
"CUR" [creq] | ; for <current/> "ADM" [creq] | ; for <admin/> "DEV" [creq] | ; for <develop/> "CUS" [creq] | ; for <customization/> "TAI" [creq] | ; for <tailoring/> "PSA" [creq] | ; for <presudo-analysis/> "PSD" [creq] | ; for <preudo-decision/> "IVA" [creq] | ; for <individual-analysis/> "IVD" [creq] | ; for <indovidual-decision/> "CON" [creq] | ; for <contact/> "HIS" [creq] | ; for <historical/> "TEL" [creq] | ; for <telemarketing/> "OPT" [creq] ; for <other-purpose/> |
[51] | creq |
= |
"a"| ;"always" "i"| ;"opt-in" "o" ;"opt-out" |
RECIPIENT
受領者(recipient)は三文字コードと一つの任意の文字属性を使用して
P3Pの簡潔なポリシーに表現される。このような任意の属性は完全なP3Pポリシー内の
"required
"属性の値を記号化する:その値は"a
", "i
"
そして "o
"であり、対応するP3Pポリシーの"required
"属性が
各々"always
", "opt-in
" そして"opt-out
"に
設定されなければならないことを意味する。
P3P受領者と簡潔なポリシーコードの対応する関連性は以下である:
[52] | compact-recipient |
= |
"OUR" | ; for <ours/> "DEL" [creq] | ; for <delivery/> "SAM" [creq] | ; for <same/> "UNR" [creq] | ; for <unrelated/> "PUB" [creq] | ; for <public/> "OTR" [creq] ; for <other-recipient/> |
RETENTION
RETENTION
要素の情報は簡潔なポリシーに以下のように表される:
[53] | compact-retention |
= |
"NOR" | ; for <no-retention/> "STP" | ; for <stated-purpose/> "LEG" | ; for <legal-requirement/> "BUS" | ; for <business-practices/> "IND" ; for <indefinitely/> |
CATEGORIES
カテゴリ(Categories)は簡潔なポリシーに以下のように表される:
[54] | compact-category |
= |
"PHY" | ; for <physical/> "ONL" | ; for <online/> "UNI" | ; for <uniqueID/> "PUR" | ; for <purchase/> "FIN" | ; for <financial/> "COM" | ; for <computer/> "NAV" | ; for <navigation/> "INT" | ; for <interactive/> "DEM" | ; for <demographic/> "CNT" | ; for <content/> "STA" | ; for <state/> "POL" | ; for <political/> "HEA" | ; for <health/> "PRE" | ; for <preference/> "GOV" | ; for <government/> "OTC" ; for <other-category/> |
完全なP3Pポリシー内において、一つ以上のother-category
が指定されている場合、
単一のOTC
トークンは、ユーザエージェントにother-category
'sが
完全なP3Pポリシー内に存在することを知らせるために使用される。
NON-IDENTIFIABLE
NON-IDENTIFIABLE
要素の存在はNID
トークンによって知らされる:
[55] | compact-non-identifiable |
= |
"NID" ; for <NON-IDENTIFIABLE/> |
DISPUTES
完全なP3Pポリシーに一つ以上のDISPUTES
要素を含むDISPUTES-GROUP
要素がある場合、
サーバはP3Pの簡潔なポリシーフィールドに単一の"DSP
"トークンを提供して
ユーザエージェントに知らせるべきである:
[56] | compact-disputes |
= |
"DSP" ; there is some DISPUTES |
ACCESS
ACCESS
要素の情報は簡潔なポリシーに以下のように表される:
[57] | compact-access |
= |
"NOI" | ; for <nonident/> "ALL" | ; for <all/> "CAO" | ; for <contact-and-other/> "IDC" | ; for <ident-contact/> "OTI" | ; for <other-ident/> "NON" ; for <none/> |
REMEDIES
REMEDIES
要素の情報は簡潔なポリシーに以下のように表される:
[58] | compact-remedies |
= |
"COR" | ; for <correct/> "MON" | ; for <money/> "LAW" ; for <law/> |
TEST
TEST
要素の存在はTST
トークンによって知らされる:
[59] | compact-test |
= |
"TST" ; for <TEST/> |
P3Pの簡潔なポリシーがHTTPレスポンスヘッダにある場合、現在のレスポンスで設定されたクッキーに適用する。
これにはHTTP SET-COOKIE
ヘッダを使用して設定されたクッキーまたは、スクリプトで設定されたクッキーがある。
簡潔なポリシーがポリシーを現在のレスポンスで設定されたクッキーに適用するだけなので、
簡潔なポリシーは異なるネーム空間からクッキーを適用することはできない。
COOKIE-INCLUDE
要素はこの機能を持っている。
簡潔なポリシーを使用するには、完全なP3Pポリシーの効力がクッキーの有効期限に 及ばなければならない。 ポリシーがクッキーの有効期限を超えて有効であることを示す方法はない。 なぜなら、サイトは簡潔なポリシーを送信しない限り、ユーザエージェントがいつ キャッシュを最適化(キャッシングの値が限界にきている)するかを知る方法がないからである。 サーバが簡潔なポリシーを送信すると、適応するクッキーの期限が有効な間は、 その簡潔なポリシーと対応する完全なP3Pポリシーも有効であるという事を示している。
P3Pの簡潔なポリシーを使用している時に、ウェブサイトはP3Pポリシーの
COOKIE-INCLUDE
要素が参照したポリシーを要約することによって、
簡潔なポリシーを構築する責任がある。
P3PポリシーをP3Pの簡潔なポリシーへ変換することは記述的な
プライバシー情報のロスを引き起こす
−簡潔なポリシーは完全なP3Pポリシーで指定されたポリシーの情報すべてを含むわけではない。
必須の拡張子を含む完全なポリシーは簡潔なポリシーとして表されてはならない。
サイトのポリシーがCOOKIE-EXCLUDE
要素を使用している場合、
サイトは正しいP3Pの簡潔なポリシーをユーザエージェントへ送ることを管理する必要がある。
そのユーザエージェントは特定のレスポンスで設定したクッキーを与えられている。
COOKIE-EXCLUDE
要素に加え、完全なP3Pポリシーからの他の情報は
簡潔なポリシーの作成時に破棄される。
これには有効期限、データ集合/データスキーマ要素、法人(ENTITY)要素、
そしてconsequences要素があり、disputes要素は削減される。
3.3.1章で述べたように、完全なポリシーの複数のステートメントに現れる目的(purposes)、受領者(recipients) そしてカテゴリ(categories)はすべて簡潔なポリシーに収集されなければならない。 その収集を行う時、ウェブサイトは関連するトークンをすべて公開しなければならない。 (例えば、複数の保有(Retention)ポリシーが設定されている以下の例を見ると)
例 4.1:
以下のP3Pポリシーを考えてみると:
<POLICY xmlns="http://www.w3.org/2000/12/P3Pv1" discuri="http://www.example.com/cookiepolicy.html" opturi="http://www.example.com/opt.html"> <ENTITY> <DATA-GROUP> <DATA ref="#business.name">Example, Corp.</DATA> <DATA ref="#business.contact-info.online.email">privacy@example.com</DATA> </DATA-GROUP> </ENTITY> <ACCESS><none/></ACCESS> <DISPUTES-GROUP> <DISPUTES resolution-type="service" service="http://www.example.com/privacy.html" short-description="Please contact our customer service desk with privacy concerns by emailing privacy@example.com"/> </DISPUTES-GROUP> <STATEMENT> <PURPOSE><admin/><develop/><pseudo-decision/></PURPOSE> <RECIPIENT><ours/></RECIPIENT> <RETENTION><indefinitely/></RETENTION> <DATA-GROUP> <DATA ref="#dynamic.cookies"> <CATEGORIES><preference/><navigation/></CATEGORIES> </DATA> </DATA-GROUP> </STATEMENT> <STATEMENT> <PURPOSE><customization required="opt_out"/></PURPOSE> <RECIPIENT><ours/></RECIPIENT> <RETENTION><stated-purpose/></RETENTION> <DATA-GROUP> <DATA ref="#dynamic.cookies"> <CATEGORIES><preference/><uniqueid/></CATEGORIES> </DATA> </DATA-GROUP> </STATEMENT> </POLICY>
対応する簡潔なポリシーは:
"NON DSP ADM DEV PSD CUSo OUR IND STP PRE NAV UNI"
ユーザエージェントの中にはユーザプリファレンスを評価するのに簡潔なポリシーから
完全なP3Pポリシーを作成しようとするものがある。
ユーザエージェントは幾つかの属性と同様にENTITY
および
DISPUTES
要素を提供することができない。しかし:
ACCESS
要素そして:適切なCATEGORIES
を持つ
dynamic.miscdata
要素と同様に、適切なRECIPIENT
,
RETENTION
, そしてPURPOSE
要素を含む単一のSTATEMENT
要素を
使用してポリシーを作成できなければならない。
ACCESS
要素そして:適切なCATEGORIES
を持つ
dynamic.miscdata
要素と同様に、異なった対応する
RETENTION
要素の値と適切な RECIPIENT
とPURPOSE
要素を含む
複数のSTATEMENT
要素(簡潔な保有(retention)の異なる値と同じ数の)を使用して
ポリシーを作成できなければならない。
P3Pでは、サービスやユーザエージェントがデータ要素を参照するための共通の方法を提供するために、 データスキーマを定義することができる。データスキーマは、階層的に分類されたデータ集合内にグループ化された 特定のデータ要素の一群を表する。
データスキーマファイルのために多言語サポートを提供する目的で、サーバはAccept-Language
ヘッダを
基本とした正しい選択を供給すことができる。
サービスは、データスキーマを作成し、データ要素属性を参照したポリシーにおいてデータスキーマを参照することによって、
データ
要素を宣言し使用することができる。
P3Pは、P3P基本データスキーマと呼ばれる
標準のデータスキーマからなっており、このP3P基本データスキーマは一般的に使用される多種多様なデータ要素を定義している。
データ要素は時に、ある共通の要素を持つグループに現れる:従って、P3Pは構造を定義できる。 構造 は明確に記されたデータ要素の集合である。新しい構造を定義することができ、 またP3Pは組み込まれた基本データ構造 を提供する。この基本データ構造は他の新しいスキーマによって都合よく拒否することができる。
<DATASCHEMA>
要素は新しいデータ要素の参照からなる
[60] | dataschema |
= |
"<DATASCHEMA" [` xmlns="http://www.w3.org/2000/12/P3Pv1"`] ">" *(datadef|datastruct|extension) "</DATASCHEMA>" |
データスキーマはポリシーの中に埋め込むことができ、
独立したXMLファイルとしても表現することができる。
この2番目のケースでは、P3Pデータスキーマファイルを示すために
適切なXMLネーム空間属性xmlns
が使われていなければならない:
<DATASCHEMA xmlns="http://www.w3.org/2000/12/P3Pv1"> <DATA-STRUCT ... /> ... <DATA-DEF ... /> </DATASCHEMA>
DATA-DEF
とDATA-STRUCT
要素
<DATA-DEF>
と
<DATA-STRUCT>
以下の属性はこれら2つの要素で共通である:
name
(必須の属性)
user.home
は USER.HOME
あるいは User.Home
とは異なる。
なお、データ要素と構造の名前は、番号文字がドットの直後に現われることができない。
structref
構造
属性のない(または関連した構造のない)
データ要素またはデータ構造は"構造化されていない"という。
short-description
DATA-DEF
とDATA-STRUCT
要素は
LONG-DESCRIPTION
要素を使って、
データ要素/集合または型の長い表記からなることができる。
[61] | datadef |
= |
"<DATA-DEF name=" quotedstring [` structref="` URI-reference `"`] [" short-description=" quotedstring] ">" [categories] ; データ要素のカテゴリ [longdescription] ; データ要素の長い表記 "</DATA-DEF>" |
[62] | datastruct |
= |
"<DATA-STRUCT name=" quotedstring [` structref="` URI-reference `"`] [" short-description=" quotedstring] ">" [categories] ; データ構造のカテゴリ [longdescription] ; データ構造の長い表記 "</DATA-STRUCT>" |
ここで、URI-reference は[URI]で定義される。 |
データ要素は共通のプログラム言語で構造化できる:
構造はデータ要素の階層的な(ツリーのような)記述である:
この階層的な記述はピリオド(".
")文字を分離記号として使用し
name
属性でなされる。
例えば、HyperSpeedExample社が車両の特徴を車両(vehicle
)のモデル
(vehicle.model
)、色(vehicle.color
)、
製造年(vehicle.built.year
)、価格(vehicle.price
)
などの特徴を含むvehicleという構造を使って記述したい場合。
また、HyperSpeedExample社が車両の定義に製造場所を加えたい場合、
国やストリート名、郵便番号などの関連したデータを使用してその構造に
他のフィールドを加える事ができた。しかし、構造の各部分は、同様に他の構造を使用する事ができる:
構造は作成することができるのである。この場合、P3P基本データスキーマ
(広い意味で使用されている構造とデータ要素の対応した定義を提供する)はすでに、
場所の郵便情報を記述して、構造postal
を提供している。したがって、車両の最終構造は以下となる。
vehicle.model
(構造化されていない)
vehicle.color
(構造化されていない)
vehicle.built.year
(構造化されていない)
vehicle.price
(構造化されていない)
vehicle.built.where
(基本構造postal
を持つ)
基本構造postalにはpostal.street
, postal.city
などといったフォームの記述がある。
私達は基本構造postalをvehicle.built.where
に適用しているので、
各vehicle.built.where.street
およびvehicle.built.where.city
の記述を使って
車両製造の番地や都市にアクセスすることができることを意味する。
従って、構造を適用する事(この場合postal
)は一つのモジュラー方法に非常に複雑な記述を
作成することができることを意味する。
先に述べたように、構造はデータ要素を含まない。単なる抽象的な記述である。:
私達は構造を使用して、すばやくデータ要素の構造化した収集を作成することができる。
車とバイクのデータを交換したいので、例の様に、HyperSpeedExampleには車両の特徴に関する抽象的な記述が必要である。
従って、上記の構造vehicle
を使って、car
とmotorcycle
という二つのデータ要素を定義することができた。
このデータ要素の記述は(実際のデータ要素プラス時にはデータ要素の記述必要がある構造)データスキーマを使って、 XMLにエンコードされる。HyperSpeedExampleの場合、記述は以下の様になる。
<DATASCHEMA xmlns="http://www.w3.org/2000/12/P3Pv1"> <DATA-STRUCT name="vehicle.model" short-description="Model"> <CATEGORIES><preference/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="vehicle.color" short-description="Color"> <CATEGORIES><preference/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="vehicle.built.year" short-description="Construction Year"> <CATEGORIES><preference/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="vehicle.built.where" structref="http://www.w3.org/TR/P3P/base#postal" short-description="Construction Place"> <CATEGORIES><preference/></CATEGORIES> </DATA-STRUCT> <DATA-DEF name="car" structref="#vehicle"/> <DATA-DEF name="motorcycle" structref="#vehicle"/> </DATASCHEMA>
例を続けて、車のモデルと製造年を参照するために、Hyperspeedや 他のどんなサービスもP3Pプライバシーポリシーの内部に 以下のような参照場所を含めて送ることができるだろう:
<DATA-GROUP> <!-- First, the "car.model" data element, whose definition is in the data schema at http://www.HyperSpeed.example.com/models-schema --> <DATA ref="http://www.HyperSpeed.example.com/models-schema#car.model"/> <!-- And second, the "car.built.year" data element, whose definition is the data schema at http://www.HyperSpeed.example.com/models-schema --> <DATA ref="http://www.HyperSpeed.example.com/models-schema#car.built.year"/> </DATA-GROUP>
これは属性model
とvehicle
のvehicle
構造に指定されているカテゴリでなので、
構造はカテゴリ情報を含むことができるように、上記の参照では両方のデータ要素は<preference/>
のものである。
base
属性を使うことにより、上記の参照はもっと短縮することができる:
<DATA-GROUP base="http://www.HyperSpeed.example.com/models-schema"> <DATA ref="#car.model"/> <DATA ref="#car.built.year"/> </DATA-GROUP>
あるいはデータスキーマはポリシーファイルに直接埋め込む事ができる。 この場合、ポリシーファイルは以下のようになる:
<POLICY xmlns="http://www.w3.org/2000/12/P3Pv1" ... >
<!-- Here the embedded data schema begins -->
<DATASCHEMA>
<DATA-STRUCT name="vehicle.model"
short-description="Model">
<CATEGORIES><preference/></CATEGORIES>
</DATA-STRUCT>
<DATA-STRUCT name="vehicle.color"
short-description="Color">
<CATEGORIES><preference/></CATEGORIES>
</DATA-STRUCT>
<DATA-STRUCT name="vehicle.built.year"
short-description="Construction Year"">
<CATEGORIES><preference/></CATEGORIES>
</DATA-STRUCT>
<DATA-STRUCT name="vehicle.built.where"
structref="http://www.w3.org/TR/P3P/base#postal"
short-description="Construction Place">
<CATEGORIES><preference/></CATEGORIES>
</DATA-STRUCT>
<DATA-DEF name="car" structref="#vehicle"/>
<DATA-DEF name="motorcycle" structref="#vehicle"/>
</DATASCHEMA>
<!-- Now the policy begins -->
...
<DATA-GROUP base="">
<DATA ref="#car.model"/>
<DATA ref="#car.built.year"/>
</DATA-GROUP>
...
</POLICY>
どんな場合も、一つのファイルに二つ以上のデータスキーマがあってはならないことに注意。
(従って、POLICIES
要素に含まれているポリシー
にデータスキーマを埋め込む時には注意が必要)
データ要素と構造は、いずれかの固定されているカテゴリであるか否かにかかわらず
分類することができる(category
要素を使うことで)。スキーマ設計者がそれぞれの要素のために
ほとんど不変のカテゴリを定義するためにスキーマ定義の中でこの属性を使うことができる。
一度定義されると、ユーザの嗜好(プリファレンス)とP3Pポリシーでその要素を参照する時は、
その値は変更できない。しかしながら、他のスキーマ定義では変更することができる。
(上記の車輌の例で、基本データスキーマで定義されているpostal
構造には
physical
とdemographic
カテゴリがあるが、
vehicle.built.where
構造のカテゴリをpreference
と再定義した。)
もし、CATEGORIES
要素がなければ、(カテゴリを定義しないままにしておく)
その要素を参照している各P3Pポリシーに明確にCATEGORIES要素をリストに入れなければならない。
ユーザは同じ要素の異なるカテゴリ値に合わせた異なるプリファレンスを持つ事ができる。
そして、データ構造で定義されないカテゴリの場合、他のスキーマ定義は、
派生した要素にカテゴリを明白に設定することができる。
(あるいは派生させたスキーマのどんな値に対するオリジナルの定義の上書き)
の中のカテゴリとして、他のスキーマ定義により明白に設定することができる。
基本データスキーマや拡張データスキーマ内で指定されているデータ要素名は、 P3Pポリシーの目的以外に使用されるかもしれないことに注意されたい。 例えば、ウェブサイトがHTMLのフォームフィールドをラベル付けするために それらの名前を使用するかもしれない。P3Pポリシーとフォームでのデータ参照方式を 同じ方式で行うためには、フォームへの自動入力ツールは、 P3Pユーザエージェントと統合された方が好ましいだろう。
データスキーマにおける必須の要求条件は、データスキーマの持続有効性である。 特定のURIから取得されるデータスキーマを拡張することによって、データスキーマを 後方互換性で変更することができる。(つまり、データスキーマを変更すると、 そのスキーマを使用しているあらゆるポリシーの意味を変えることはできない。という事を意味している。) このようにして、ポリシーのURIはここに含まれているデータ要素と構造において唯一の拡張子の様に振る舞う。 従って、後方互換性でないデータスキーマはすべて、新しくそして異なるURIを使用しなければならない。
データスキーマの持続有効性のあるアプリケーションは
多言語サイトの例を示す為に提供されたことに注意:
データスキーマ用に特定の言語が使用される事を適切に述べるために、
HTTP"Content-Language
"を使用して、同じデータスキーマの多言語サイト(翻訳)版を
サーバが提供することができる。
基本データ構造はP3P基本データスキーマ(この基本の性質のため、 基本データ構造は再利用されるべきであり、また同様に他の異なるデータスキーマによって再使用すべきである。) によって使用される構造である。P3Pに準拠した全てのユーザエージェントの実装は、 基本データ構造を認識できなければならない。以下の個々のテーブルでは、 基本データ構造の要素、属するカテゴリ、構造、利用者に示す簡易表記名を指定している。 二つ以上のカテゴリが一つの固定データ要素に関連づけされるかもしれない。 しかしながら、どの基本データ要素も可能な限り、たった一つのカテゴリに割り当てられる。 データスキーマの設計者にも同じ事を行う事を推奨する。
date構造は、日付を特定する。日付に関する情報は、周囲の状況によって使われ方が異なるので、 全てのdate情報は、"可変"カテゴリとして分類される。 スキーマ定義は、このデータ構造を参照する要素内の対応するカテゴリを明白に設定しなければならない。 例えば、利用者の誕生日を要求する場合は、"人口統計学的・社会経済学的データ"になるが、 クレジットカードの有効期限は、"購入情報"カテゴリとなる。
date |
カテゴリ | 構造 | 簡易表記名 |
ymd.year | (可変カテゴリ) | 構造化されていない | 年 |
ymd.month | (可変カテゴリ) | 構造化されていない | 月 |
ymd.day | (可変カテゴリ) | 構造化されていない | 日 |
hms.hour | (可変カテゴリ) | 構造化されていない | 時 |
hms.minute | (可変カテゴリ) | 構造化されていない | 分 |
hms.second | (可変カテゴリ) | 構造化されていない | 秒 |
fractionsecond | (可変カテゴリ) | 構造化されていない | 秒(小数点以下) |
timezone | (カテゴリ) | 構造化されていない | タイムゾーン |
"タイムゾーン"情報は、[ISO8601]の時間標準に定義されている例のためのものである。 "date.ymd"と"date.hms"は、年/月/日と時/分/秒、それぞれの組の参照時間を短縮するために使用されることに注意されたい。
personname構造は、個人の名前に関する情報を指定する。
personname |
カテゴリ | 構造 | 簡易表記名 |
prefix | 人口統計学的・社会経済学的データ | 構造化されていない | 敬称 |
given | 実社会における連絡先情報 | 構造化されていない | 名(Given Name) |
family | 実社会における連絡先情報 | 構造化されていない | 姓 |
middle | 実社会における連絡先情報 | 構造化されていない | ミドルネーム |
suffix | 人口統計学的・社会経済学的データ | 構造化されていない | Name Suffix |
nickname | 人口統計学的・社会経済学的データ | 構造化されていない | 愛称 |
certificate構造は、本人であることの証明(例:X.509)を指定する。
certificate |
カテゴリ | 構造 | 簡易表記名 |
key | ユニークな識別子 | 構造化されていない | 認証鍵 |
format | ユニークな識別子 | 構造化されていない | 認証フォーマット |
"format"フィールドは、IANAに登録されている公開鍵、 もしくは認証書のフォーマットの情報を表すために使用される。 "key"フィールドは、対応する認証鍵を表すために使用される。
telephonenum構造は、電話番号に関する特徴を指定する。
telephonenum |
カテゴリ | 構造 | 簡易表記名 |
intcode | 実社会における連絡先情報 | 構造化されていない | 国番号 |
loccode | 実社会における連絡先情報 | 構造化されていない | 局番 |
number | 実社会における連絡先情報 | 構造化されていない | 電話番号 |
ext | 実社会における連絡先情報 | 構造化されていない | 内線 |
comment | 実社会における連絡先情報 | 構造化されていない | 注釈 |
contact構造は、連絡先情報を指定するために使用される。 サービスは、郵便、テレコミュニケーション、またはオンラインアドレス情報の どのデータの集合が必要であるか正確に指定することができる。
contact |
カテゴリ | 構造 | 簡易表記名 |
postal | 実社会における連絡先情報, 人口統計学的・社会経済学的データ | postal | 郵便情報 |
telecom | 実社会における連絡先情報 | telecom | テレコミュニケーション情報 |
online | オンライン連絡先情報 | online | オンラインアドレス情報 |
postal構造は、郵便あて先を指定する。
postal |
カテゴリ | 構造 | 簡易表記名 |
name | 実社会における連絡先情報, 人口統計学的・社会経済学的データ | personname | 氏名 |
street | 実社会における連絡先情報 | 構造化されていない | 町・番地 |
city | 実社会における連絡先情報 | 構造化されていない | 市・区 |
stateprov | 実社会における連絡先情報 | 構造化されていない | 都道府県 |
postalcode | 人口統計学的・社会経済学的データ | 構造化されていない | 郵便番号 |
country | 人口統計学的・社会経済学的データ | 構造化されていない | 国 |
organization | 実社会における連絡先情報, 人口統計学的・社会経済学的データ | 構造化されていない | 団体・組織名 |
"国"フィールドはその国名の情報を表す(例えば、 [ISO3166]のリストに挙げられている国の中の一つなど。)
telecom構造は、個人に関するテレコミュニケーション情報を指定する。
telecom |
カテゴリ | 構造 | 簡易表記名 |
telephone | 実社会における連絡先情報 | telephonenum | 電話番号 |
fax | 実社会における連絡先情報 | telephonenum | ファックス番号 |
mobile | 実社会における連絡先情報 | telephonenum | 携帯電話番号 |
pager | 実社会における連絡先情報 | telephonenum | ポケットベル番号 |
online構造は、個人に関するオンライン情報を指定する。
online |
カテゴリ | 構造 | 簡易表記名 |
Online Contact Information | 構造化されていない | 電子メールアドレス | |
uri | Online Contact Information | 構造化されていない | ホームページアドレス |
インターネットアドレスを表すために使用される構造二つがある。
uri
構造は汎用リソース識別子(URI)をカバーする。
これは[URI]に詳しく定義されている。
ipaddr
構造はIPアドレスとドメイン名システム(DNS)ホスト名を表している。
uri |
カテゴリ | 構造 | 簡易表記名 |
authority | (可変カテゴリ) | 構造化されていない | URI権限 |
stem | (可変カテゴリ) | 構造化されていない | URIステム |
querystring | (可変カテゴリ) | 構造化されていない | URIの照会列部分 |
URIの権限は[URI] にauthority
コンポーネントとして定義されている。
URIのステムはURIの最初の'?'文字までの部分に含まれている情報として定義されている。
そして、照会列は最初の'?'文字の後のURI部分に含まれている情報である。
'?'を含んでいないURIに関しては、そのステムが全URIであり、その照会列は空である。
URI情報を異なる方法で使用する事ができるので、このコンテキストにそって、
uri
構造のすべてのフィールドは"可変"カテゴリであると分類けされる。
スキーマの定義はこのデータ構造を参照している要素の対応するカテゴリに明白に設定しなければならない。
ipaddr
構造はシステムのホスト名とIPアドレスを表す。
ipaddr |
カテゴリ | 構造 | 簡易表記名 |
hostname | Unique Identifiers | 構造化されていない | 完全なホストとドメイン名 |
partialhostname | Demographic | 構造化されていない | ホスト名の一部 |
fullip | Unique Identifiers | 構造化されていない | 全IPアドレス |
partialip | Demographic | 構造化されていない | IPアドレスの一部 |
hostname
要素は単なるホスト名の集合または、ドメイン名を含んだ全ホスト名を表す為に使用される。
partialhostname
要素はホスト名から少なくともホスト部分をはずした
完全に分類されたホスト名情報を表す。いい換えれば、完全に分類されたホスト名の最初の'.'にまで及んでいるすべては、
アドレス認識のために"ホスト名の一部"として分類されなければならない。
fullip
要素は全IP4版または6版のアドレスを表す。partialip
要素は少なくとも
最後の7bitの情報を削除したIP4版(IP4版のみ、6版は表さない)を表す。
すべてのサイト訪問者用に合わせたパターンとbitを入れ替えてこの情報を削除しなければならない。
(例えばすべての0または1)
あるWebサイトはサイト訪問者の全IPアドレスまたはホスト名を使用するために認識されているわけではないが、 その情報を縮小したフォームを利用する為に認識されている。アドレス情報の一部分のみを集めて、 サイト訪問者は匿名に対する確認を行われる。この"取り除かれた"IPアドレスやホスト名は 個人ユーザと連携する事はできないがそれ以上に連携が困難であると主張することはこの仕様書の意図することではない。 このデータを縮小するサイトはプラクティスをより正確に反映するためにこのプラクティスを宣言したいと 考えているかもしれない。
loginfo
構造はWebサーバアクセスログに格納されている情報を表すために使用される。
loginfo |
カテゴリ | 構造 | 簡易表記名 |
uri | ナビゲーションとクリックストリームデータ | uri | 要求されたリソースのURI |
timestamp | ナビゲーションとクリックストリームデータ | date | 要求とタイムスタンプ |
clientip | コンピュータ情報 | ipaddr | クライアントのIP アドレスまたはホスト名 |
other.httpmethod | ナビゲーションとクリックストリームデータ | 構造化されていない | HTTP要求方式 |
other.bytes | ナビゲーションとクリックストリームデータ | 構造化されていない | レスポンスのデータバイト |
other.statuscode | ナビゲーションとクリックストリームデータ | 構造化されていない | レスポンスステータスコード |
HTTP要求のリソースはuri
フィールドで記録される。サーバがその要求を処理する時間は
timestamp
で表示する。このフィールドを要求が受け取られた時、または、サーバがレスポンスを送り始めた時、
または、レスポンス送信が完了した時、要求が処理された時間をサーバ実装は自由に表示すると定義できる。
この要求を作成しているクライアントシステムのIPアドレスはclientip
が与える。
other
データフィールドはWebサーバアクセスログに共通して格納されている他の情報を表示する。
other.httpmethod
はクライアントの要求の中にあるHTTP方法(GET
, POST
など)である。
other.bytes
はサーバが送ったレスポンス本体のバイト数を示している。
other.statuscode
は200、302または404といった要求のHTTPステータスコードである。
(詳細は[HTTP1.1]の6.1.1節を参照のこと)
httpinfo
構造はloginfo
構造がカバーしていないHTTPプロトコルが送る情報を表示する。
httpinfo |
カテゴリ | 構造 | 簡易表記名 |
referer | ナビゲーションとクリックストリームデータ | uri | ユーザが要求した最後のURI |
useragent | コンピュータ情報 | 構造化されていない | ユーザエージェント情報 |
useragent
フィールドはユーザのWebブラウザの型やバージョンについての情報を提供する
HTTP User-Agent
ヘッダ、と(または)HTTP accept
*ヘッダに表示される。
referer
フィールドはユーザが以前訪問したページについての情報を提供する
HTTP Referer
ヘッダにその情報を表示する。このフィールドは対応するHTTPヘッダと
全く同じようにスペルミスされていることに注意されたい。
P3Pに準拠して実装された全てのユーザエージェントは、P3P基本データスキーマのデータ要素を認識できなければならない。
P3P基本データスキーマは、基本データ構造の定義と
user
、
thirdparty
、
business
と
dynamic
の4つの要素集合を含む。
user
、 thirdparty
と business
集合は、
利用者と(または)ビジネスが値を提供するであろう要素を含み、
dynamic
集合は、利用者のブラウザによる閲覧を通して動的に生成される要素を含む。
ユーザエージェントは、複数の人物をサポートする機能を含み、利用者がuser
集合の要素に値を提供し、
データレポジトリにそれらを保存することを可能にする様々な機能をサポートするかもしれない。
また利用者はそれらのデータ要素に値を提供しない選択を行う事もできるだろう。
P3P基本データスキーマの正式なXML定義は、付録3で提供されている。 以下のセクションでは、基本データ要素と集合を一つずつ説明していく。 これから、 他のデータセットや要素の作成要求が出てくる可能性がある。 カタログ、支払い、そしてエージェント/システム属性スキーマを 含むアプリケーションに関してはすでに明白である。 (拡張的なシステム要素の集合例はhttp://www.w3.org/TR/NOTE-agent-attributesで提供してある)
以下のテーブルでは集合、集合内の要素、要素に関連するカテゴリ、構造、簡易表記名が指定してある。 二つ以上のカテゴリが一つの固定データ要素に関連づけされるかもしれない。 しかしながら、どの基本データ要素も可能な限り、たった一つのカテゴリに割り当てられる。 データスキーマの設計者にも同じ事を行う事を推奨する。
user
データ集合は、個人に関する一般的な情報を含む。
user |
カテゴリ | 構造 | 簡易表記名 |
name | 実社会における連絡先情報、人口統計学的・社会経済学的データ | personname | 利用者名 |
bdate | 人口統計学的・社会経済学的データ | date | 利用者の誕生日 |
cert | ユニークな識別子 | certificate | 利用者の身元証明 |
gender | 人口統計学的・社会経済学的データ | 構造化されていない | 利用者の性別(男性または女性) |
employer | 人口統計学的・社会経済学的データ | 構造化されていない | 利用者の雇主 |
department | 人口統計学的・社会経済学的データ | 構造化されていない | 利用者が勤務している組織の部門または課 |
jobtitle | 人口統計学的・社会経済学的データ | 構造化されていない | 利用者の勤務先での肩書き |
home-info | 実社会における連絡先情報、オンライン連絡先情報、人口統計学的・社会経済学的データ | contact | 利用者の自宅へのコンタクト情報 |
business-info | 実社会における連絡先情報、オンライン連絡先情報、人口統計学的・社会経済学的データ | contact | 利用者の勤務先へのコンタクト情報 |
このデータ集合は、それ自体がデータの集合である要素を含んでいる事に注意されたい。
これらの集合は、データ構造の節で定義してある。
データ集合内部にある個々の要素のための簡易表記名は、
例えばカンマなど、言語/スクリプトにおける区切り文字を用いて、
集合と要素のために定義されている簡易表記名の連結として定義されている。
例えば、user.home.postal.postalcode
の簡易表記名は、
"利用者の自宅へのコンタクト情報, 郵便情報, 郵便番号"となる。
ユーザエージェントの実装において、開発者は利用者に情報を提示する場合、
連結された表記名を使用せずに、独自の簡易表記名を使用してもよいだろう。
thirdparty
データ集合は、
利用者とビジネスが関連する第三機関にデータを提供することを許可する。
これは、第三機関とデータのやり取りを行う必要がある時に便利である。
例えば、ある人に送られるプレゼントをオンラインで注文する時や、配偶者や共同経営者の情報を提供する時。
そのような情報は、利用者のレポジトリにuser
データ集合として保存されるだろう。
ユーザエージェントは、複数のそのようなthirdparty
データ集合を保存する機能を提供し、
必要な時にリストから適切な物を利用者が選択できることを許可するだろう。
thirdparty
データ集合は、user
データ集合と同等である。
詳細は5.4.1 個人データを参照すること。
business
データ集合は、団体・組織に関するuser
データの部分集合の機能を有する。
P3P 1.0において、このデータ集合は、business-to-businessの相互作用にもまた適用可能であるけれども、
主にプライバシーポリシーの団体・組織を宣言するために使用される。
business |
カテゴリ | 構造 | 簡易表記名 |
name | 人口統計学的・社会経済学的データ | 構造化されていない | 団体・組織名 |
department | 人口統計学的・社会経済学的データ | 構造化されていない | 団体・組織における部門または課 |
cert | ユニークな識別子 | certificate | 団体・組織である証明 |
contact-info | 実社会における問い合せ窓口、オンライン問い合せ情報、人口統計学的・社会経済学的データ | contact | 団体・組織への問い合わせ情報 |
利用者が入力したり、またはレポジトリに保存したりするような固定値を持たない
データ要素を指定する必要が出てくる場合がある。
P3P基本データスキーマにおいてそれらの全ての要素はdynamic
データ集合下にグループ化される。
サイトは、特定の全てのデータ要素を列挙せずに、動的データ集合のみを利用して、
収集するデータの型を参照してもよいだろう。
dynamic |
カテゴリ | 構造 | 簡易表記名 |
clickstream | ナビゲーションとクリックストリームのデータ, コンピュータ情報 | loginfo | クリックストリーム情報 |
http | ナビゲーションとクリックストリームのデータ, コンピュータ情報 | httpinfo | HTTPプロトコル情報 |
clientevents | ナビゲーションとクリックストリームのデータ | 構造化されていない | ユーザのリソースとの対話 |
cookies | (可変カテゴリ) | 構造化されていない | HTTPクッキーの使用 |
miscdata | (可変カテゴリ) | 構造化されていない | 雑多な非基本データスキーマ情報 |
searchtext | インタラクティブデータ | 構造化されていない | 検索文字列 |
interactionrecord | インタラクティブデータ | 構造化されていない | サーバの処理履歴の保存 |
これらの要素は、しばしばナビゲーションやWebでのやり取りに事実上含まれている。 また、それらの方法を通して収集される情報の型を表現するために、 それらの要素はカテゴリと共に使用されるべきである。以下は、各々の要素についての簡単な説明である。
clickstream
clickstream
要素は、実質的にすべてのWebサイト適用する。
また、Webサーバアクセスログに一般的にある情報の組み合わせを表示する:
ユーザのコンピュータのIPアドレスまたはホスト名、要求されたリソースのURI、
要求がなされた時間、要求の中で使用されたHTTP方式、レスポンスのサイズ、
レスポンスのHTTPステータスコード。 標準のサーバアクセスログを集めるWebサイトはこのデータ要素を使用して、
URIパス分析を行うこの要素サイトと同様に、どのようにしてこのデータが使用されるのかを述べることができる。
clickstream
要素用にリスト化されたデータ要素のいくつかしか収集しないWebサイトは、
dynamic.clickstream
要素全体よりもこれら特定の要素をリストすることを選んでもよい。
このことによって、より制約されたデータ収集プラクティスをもつサイトが正確にサイト訪問者に
そのプラクティスを表すことができる。
http
http
要素にはHTTPプロトコルに含まれている追加情報がある。
特定の要素の定義に関してはhttpinfo
構造の定義を参照のこと。
httpinfo構造にある特定の要素を参照したい場合、または参照してもよい場合、
サイトはhttpinfo
構造のすべての要素をカバーする為に
dynamic.http
を簡略伝達として使用してもよい。
clientevents
clientevents
要素は、リソースとの対話中にユーザがどのようにしてWebブラウザーと
対話するかについてのデータを表す。例えば、ユーザがページのある画像の上でマウスを動かしたかどうか
という事や、ユーザがJavaアプレットのヘルプウインドウを出したかどうかについての情報を
アプリケーションが収集する場合。この種の情報は動的.clientevents要素で表示される。
この対話記録の多くは、ドキュメントオブジェクトモデル(DOM)レベル2イベント[DOM2-Events]で定義された
イベントとデータで表示される。また、clientevents
データ要素は、
ブラウザがリソースを表示している間にユーザとブラウザ間の対話に関するデータ以外をカバーする。
例外として、基本データスキーマの他の要素がカバーしている要素がある。
例えば、ページを見ている時にリンクをクリックしてページを要求する事はユーザとブラウザの対話であるが、
単にユーザがクリックしたURLを収集することはこのデータ要素を宣言する必要がない;
clickstream
がそのイベントをカバーしている。
しかしながら、DOMイベントDOMFocusIn
(ページのオブジェクトの上をユーザがマウスを動かしているのを表している)は
既存の他の要素ではカバーされていないので、もし、サイトがこのイベントの発生を収集していれば、
動的.clientevents要素を収集していると述べなければならない。
このデータ要素でカバーしている項目は、普通、JavaScriptなどのクライアント側のスクりプティング言語、
またはActiveX またはJava アプレトなどのクライアント側のアプレットで収集される。
以前述べたのはユーザが見ているリソースに関してものだったが、
このデータ要素もリソースを視覚的に表示しないWebアプリケーションに適用していることに注意。
例えば、オーディオベースのWebブラウザなど。
cookies
cookies
要素はHTTPクッキーがサイトによって設定されているか、
または取り出されている場合には必ず使用されるべきである。
cookies
は可変データ要素であり、
ポリシーでカテゴリの使用を明らかに宣言する必要があることに注意されたい。
miscdata
miscdata
要素は特定のデータ要素を使用して参照しないサービスで収集される情報を参照する。
カテゴリはこれらのデータをよりよく表示するために使用される:
サイトは収集した雑多なデータの各カテゴリのポリシーにある独立のmiscdata
要素を参照しなければならない。
searchtext
searchtext
要素はサイトの検索と索引のために使用される特別な誘導の型を参照する。
例えば、検索エンジンの唯一のフィールドが検索フィールドであれば、
サイトはデータ要素を公開することだけを必要とする。
interactionrecord
interactionrecord
要素が使用されるべきである。
(すなわち、クリックストリームデータ以外の情報。例えば、口座取り引きなど。)
基本データスキーマにある要素はほとんど"固定した"データ要素という: その要素は一つまたは多くても二つのカテゴリクラスに属している。 カテゴリを基本データスキーマの要素または構造に割り当てることによって、 サービスとユーザは簡単に、対応するカテゴリを参照して要素のグループ全部を参照することができる。 例えば、プライバシープリファレンス交換言語である[APPEL]を使用する場合、 ユーザはあるカテゴリのあらゆるデータを集めたサイトに訪問した際に警告を発する規則を書くことができる。
固定したデータ要素のデータスキーマの作成時に、 スキーマ作成者はそのデータ要素が属しているカテゴリを明白に列挙しなければならない。 例えば:
<DATA-STRUCT name="postal.street" structref="#text"
short-description="Street Address">
<CATEGORIES><physical/></CATEGORIES>
</DATA-STRUCT>
要素または構造が複数のカテゴリに属する場合、 適切なカテゴリを参照する複数の要素を使用できる。 例えば、user.nameのデータに"物理的"と"人口統計学的"の両方があるということを宣言するために、 以下のXMLの部分を使用することができる:
<DATA-STRUCT name="user.name" structref="#personname"
short-description="User's Name">
<CATEGORIES><physical/><demographic/></CATEGORIES>
</DATA-STRUCT>
例えば、周知の基本データ要素へ異なるカテゴリを割り当てる規則やポリシーを作成して、 固定したデータ要素/構造のカテゴリクラスを上書きできないことに注意。 ユーザエージェントはその様なカテゴリを無視しなければならない。 そしてその代わりに、スキーマ定義のリストにあるオリジナルのカテゴリ(またはカテゴリの集合)を 使用しなければならない。むしろ、ユーザエージェントはユーザに、 固定したデータ要素は非標準カテゴリクラスと一緒に使用されることを知らせてもよい。
基本データスキーマのデータ要素/構造が、すべてあらかじめ決められているカテゴリクラスに属するわけではない。 中には状況に合わせて、カテゴリの範囲からの情報を含んでいることもある。 そういった要素/構造は可変カテゴリデータ要素/構造という。 (または短縮して"可変データ要素/構造")P3P基本データスキーマの可変データ要素ほとんどは dynamic要素集合に組み込まれているが、固定したカテゴリデータ要素と混じっていたとしても、 データの集合の中に表示することができる。
そういった要素および/または構造のスキーマ定義を作成する時、 スキーマ作成者は明白なカテゴリ属性をリストしてはならない。 そうしなければ、その要素/構造は固定されてしまう。 例えば、"年"データ構造を指定する時{これは状況によって様々なカテゴリ、 (例えば生年月日を参照するためにクレジットカードの期限を使用する時など。) を取るのだが、}以下のスキーマ定義を使用することができる:
<DATA-STRUCT name="date.ymd.year"
short-description="Year"/> <!-- Variable Data Structure-->
この事によって、こういった可変カテゴリデータ構造を参照する新しいスキーマ拡張子は、 その使用にあわせて、取り出した要素に特定のカテゴリを割り当てることができる。 従って、例えば、電子商取引のスキーマ拡張子は以下の様にクレジットカードの期限を定義できる:
<DATA-STRUCT name="Card.ExpDate" structref="#date.ymd"
short-description="Card Expiration Date">
<CATEGORIES><purchase/></CATEGORIES>
</DATA-STRUCT>
このような状況で、クレジットカードの期限終了日を指定するために使用する場合、 可変カテゴリデータ構造日付は固定したカテゴリ"購入情報"に割り当てられる。
ユーザのプリファレンスはカテゴリ情報(この要素のあらゆる使用に関するプリファレンスを効果的に表している)
を追加することなしに、そういった可変データをリストすることはできるが、
サービスはいつも特別なポリシーの可変データ要素の使用に適用するカテゴリを明白に指定しなくてはならない。
この情報はポリシーのリストの対応したDATA
要素のカテゴリ要素として表示されなければならない。
以下はその例である:
<POLICY ... >
...
<DATA ref="#dynamic.cookies"><CATEGORIES><uniqueid/></CATEGORIES></DATA>
...
</POLICY>
サービスがこのサイトでユーザを識別するために使用されることを宣言する場合 (すなわちカテゴリユニークな識別子など)
サービスが複数のカテゴリにあるデータ要素を宣言したいと思う場合、 対応するカテゴリを宣言するだけでよい。 (上記の節に述べているように):
<POLICY ... >
...
<DATA ref="#dynamic.cookies"><CATEGORIES><uniqueid/><preference/></CATEGORIES></DATA>
...
</POLICY>
上記の宣言を使用して、サービスはこのサイトでユーザを識別し、 そしてユーザのプリファレンスデータを格納するためにクッキーを使用することを知らせる。 P3Pの目的に関して、この情報が二つの別個のクッキーに格納されているのか 一つのクッキーに格納されているのかの区別はないことに注意。
最後に、カテゴリは受け継ぐ事ができることに注意: フィールドが構築されれば、カテゴリは旧版を受け継ぐことができるが、 あらかじめ定義されたカテゴリを有するフィールドでのみそれが可能。 従って、スキーマ作成者が作成した新しい要素に適切なカテゴリがすべて適用していることを保証する為に、 スキーマ作成者に最大の努力して頂くことを提案する。
P3Pでは、Webサイトが収集するデータ型の表現方法に関して、様々な形に対応できるようにしている。
これらの三つの方法を、一つのポリシー内部で組み合わせることができる。
dynamic.miscdata
要素を使用することによって、サイトは各々のデータ要素を列挙することなしに、
収集するデータを指定することができる。このことは、多くのデータを収集するサイトや、
組織・団体の全体を一つのP3Pポリシーでカバーしたい巨大な組織・団体のサイトにとって非常に便利である。
しかし、このアプローチによる不利な点は、ユーザエージェントは、
サイトが参照するカテゴリに属すすべてのデータ要素を収集するかもしれないと
仮定しなければならないということである。従って、例えば、
あるサイトのプライバシーポリシーに"実社会における連絡先情報"カテゴリの
dynamic.miscdata
を収集すると掲げてあり、実際に収集される情報は、
勤務先の住所のみだとする、それでもやはりユーザエージェントは、
サイトは電話番号も収集するかもしれないと仮定するだろう。
もし、サイトが電話番号や勤務先の住所以外の"実社会における連絡先情報"情報を収集しないことを明白にしたい場合、
サイトは、user.business-info.contact.postal
要素を収集することを明らかにするべきである。
なお、ユーザエージェントは、自動フォーム入力機能を伴って開発されているので、
収集するデータを列挙するサイトは、自動フォーム入力機能をよりよく統合することができると思われる。
新規スキーマを定義することによって、サイトは、基本データ集合の枠を超えて、 収集するデータを正確に指定することができる。 しかし、ユーザエージェントが新規スキーマ内に定義されている要素に精通していない場合、 ユーザエージェントは、新規の要素に関しての最小限の情報だけを利用者に提供することができるだろう。 ユーザエージェントが提供する情報は個々の要素のために指定されたカテゴリと表記名に基づくだろう。
サイトが一般的なデータ開示、または特定のデータ開示のどちらかを望んでいるかにかかわらず、
dynamic
データ集合に含まれる特定の要素を開示することには利点がある。
例えば、dynamic.cookies
を開示することによって、サイトはクッキーの使用を示し、
その使用目的を説明することができる。この情報に基づいて、
利用者にクッキー制御のインターフェイスを提供するユーザエージェントの実装を奨励する。
また、デフォルトではHTTP_REFERERヘッダを送信しないユーザエージェントは、
P3Pプライバシーポリシー内でdynamic.http.referer
要素を検索し、
ヘッダが利用者の許容可能な目的で使用される場合には、ヘッダを送信するかもしれない。
簡単な参照に関しては、P3P基本データスキーマに相当するデータスキーマは以下のものである。 また、スキーマは次のURIにある。http://www.w3.org/TR/P3P/base
<DATASCHEMA xmlns="http://www.w3.org/2000/12/P3Pv1"> <!-- ********** Base Data Structures ********** --> <!-- "date" Data Structure --> <DATA-STRUCT name="date.ymd.year" short-description="Year"/> <DATA-STRUCT name="date.ymd.month" short-description="Month"/> <DATA-STRUCT name="date.ymd.day" short-description="Day"/> <DATA-STRUCT name="date.hms.hour" short-description="Hour"/> <DATA-STRUCT name="date.hms.minute" short-description="Minutes"/> <DATA-STRUCT name="date.hms.second" short-description="Second"/> <DATA-STRUCT name="date.fractionsecond" short-description="Fraction of Second"/> <DATA-STRUCT name="date.timezone" short-description="Time Zone"/> <!-- "personname" Data Structure --> <DATA-STRUCT name="personname.prefix" short-description="Name Prefix"> <CATEGORIES><demographic/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="personname.given" short-description="Given Name (First Name)"> <CATEGORIES><physical/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="personname.middle" short-description="Middle Name"> <CATEGORIES><physical/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="personname.family" short-description="Family Name (Last Name)"> <CATEGORIES><physical/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="personname.suffix" short-description="Name Suffix"> <CATEGORIES><demographic/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="personname.nickname" short-description="Nickname"> <CATEGORIES><demographic/></CATEGORIES> </DATA-STRUCT> <!-- "certificate" Data Structure --> <DATA-STRUCT name="certificate.key" short-description="Certificate key"> <CATEGORIES><uniqueid/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="certificate.format" short-description="Certificate format"> <CATEGORIES><uniqueid/></CATEGORIES> </DATA-STRUCT> <!-- "telephonenum" Data Structure --> <DATA-STRUCT name="telephonenum.intcode" short-description="International Telephone Code"> <CATEGORIES><physical/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="telephonenum.loccode" short-description="Local Telephone Area Code"> <CATEGORIES><physical/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="telephonenum.number" short-description="Telephone Number"> <CATEGORIES><physical/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="telephonenum.ext" short-description="Telephone Extension"> <CATEGORIES><physical/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="telephonenum.comment" short-description="Telephone Optional Comments"> <CATEGORIES><physical/></CATEGORIES> </DATA-STRUCT> <!-- "postal" Data Structure --> <DATA-STRUCT name="postal.name" struct-ref="#personname"> <CATEGORIES><physical/><demographic/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="postal.street" short-description="Street Address"> <CATEGORIES><physical/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="postal.city" short-description="City"> <CATEGORIES><physical/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="postal.stateprov" short-description="State or Province"> <CATEGORIES><physical/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="postal.postalcode" short-description="Postal Code"> <CATEGORIES><demographic/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="postal.organization" short-description="Organization Name"> <CATEGORIES><physical/><demographic/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="postal.country" short-description="Country Name"> <CATEGORIES><demographic/></CATEGORIES> </DATA-STRUCT> <!-- "telecom" Data Structure --> <DATA-STRUCT name="telecom.telephone" short-description="Telephone Number" structref="#telephonenum"> <CATEGORIES><physical/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="telecom.fax" short-description="Fax Number" structref="#telephonenum"> <CATEGORIES><physical/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="telecom.mobile" short-description="Mobile Telephone Number" structref="#telephonenum"> <CATEGORIES><physical/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="telecom.pager" short-description="Pager Number" structref="#telephonenum"> <CATEGORIES><physical/></CATEGORIES> </DATA-STRUCT> <!-- "online" Data Structure --> <DATA-STRUCT name="online.email" short-description="Email Address"> <CATEGORIES><online/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="online.uri" short-description="Home Page Address"> <CATEGORIES><online/></CATEGORIES> </DATA-STRUCT> <!-- "contact" Data Structure --> <DATA-STRUCT name="contact.postal" short-description="Postal Address Information" structref="#postal"> <CATEGORIES><physical/><demographic/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="contact.telecom" short-description="Telecommunications Information" structref="#telecom"> <CATEGORIES><physical/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="contact.online" short-description="Online Address Information" structref="#online"> <CATEGORIES><online/></CATEGORIES> </DATA-STRUCT> <!-- "uri" Data Structure --> <DATA-STRUCT name="uri.authority" short-description="URI authority"/> <DATA-STRUCT name="uri.stem" short-description="URI stem"/> <DATA-STRUCT name="uri.querystring" short-description="Query-string portion of URI"/> <!-- "ipaddr" Data Structure --> <DATA-STRUCT name="ipaddr.hostname" short-description="Complete host and domain name"> <CATEGORIES><uniqueid/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="ipaddr.partialhostname" short-description="Partial hostname"> <CATEGORIES><demographic/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="ipaddr.fullip" short-description="Full IP address"> <CATEGORIES><uniqueid/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="ipaddr.partialip" short-description="Partial IP address"> <CATEGORIES><demographic/></CATEGORIES> </DATA-STRUCT> <!-- "loginfo" Data Structure --> <DATA-STRUCT name="loginfo.uri" short-description="URI of requested resource" structref="#uri"> <CATEGORIES><navigation/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="loginfo.timestamp" short-description="Request timestamp" structref="#date"> <CATEGORIES><navigation/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="loginfo.clientip" short-description="Client's IP address or hostname" structref="#ipaddr"> <CATEGORIES><computer/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="loginfo.other.httpmethod" short-description="HTTP request method"> <CATEGORIES><navigation/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="loginfo.other.bytes" short-description="Data bytes in response"> <CATEGORIES><navigation/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="loginfo.other.statuscode" short-description="Response status code"> <CATEGORIES><navigation/></CATEGORIES> </DATA-STRUCT> <!-- "httpinfo" Data Structure --> <DATA-STRUCT name="httpinfo.referer" short-description="Last URI requested by the user" structref="#uri"> <CATEGORIES><navigation/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="httpinfo.useragent" short-description="User agent information"> <CATEGORIES><computer/></CATEGORIES> </DATA-STRUCT> <!-- ********** Base Data Schemas ********** --> <!-- "dynamic" Data Schema --> <DATA-DEF name="dynamic.clickstream" short-description="Click-stream information" structref="#loginfo"> <CATEGORIES><navigation/><computer/></CATEGORIES> </DATA-DEF> <DATA-DEF name="dynamic.http" short-description="HTTP protocol information" structref="#httpinfo"> <CATEGORIES><navigation/><computer/></CATEGORIES> </DATA-DEF> <DATA-DEF name="dynamic.clientevents" short-description="User's interaction with a resource"> <CATEGORIES><navigation/></CATEGORIES> </DATA-DEF> <DATA-DEF name="dynamic.cookies" short-description="Use of HTTP cookies"/> <DATA-DEF name="dynamic.miscdata" short-description="Miscellaneous non-base data schema information"/> <DATA-DEF name="dynamic.searchtext" short-description="Search terms"> <CATEGORIES><interactive/></CATEGORIES> </DATA-DEF> <DATA-DEF name="dynamic.interactionrecord" short-description="Server stores the transaction history"> <CATEGORIES><interactive/></CATEGORIES> </DATA-DEF> <!-- "user" Data Schema --> <DATA-DEF name="user.name" short-description="User's Name" structref="#personname"> <CATEGORIES><physical/><demographic/></CATEGORIES> </DATA-DEF> <DATA-DEF name="user.bdate" short-description="User's Birth Date" structref="#date"> <CATEGORIES><demographic/></CATEGORIES> </DATA-DEF> <DATA-DEF name="user.cert" short-description="User's Identity certificate" structref="#certificate"> <CATEGORIES><uniqueid/></CATEGORIES> </DATA-DEF> <DATA-DEF name="user.gender" short-description="User's Gender"> <CATEGORIES><demographic/></CATEGORIES> </DATA-DEF> <DATA-DEF name="user.jobtitle" short-description="User's Job Title"> <CATEGORIES><demographic/></CATEGORIES> </DATA-DEF> <DATA-DEF name="user.home-info" short-description="User's Home Contact Information" structref="#contact"> <CATEGORIES><physical/><online/><demographic/></CATEGORIES> </DATA-DEF> <DATA-DEF name="user.business-info" short-description="User's Business Contact Information" structref="#contact"> <CATEGORIES><physical/><online/><demographic/></CATEGORIES> </DATA-DEF> <DATA-DEF name="user.employer" short-description="Name of User's Employer"> <CATEGORIES><demographic/></CATEGORIES> </DATA-DEF> <DATA-DEF name="user.department" short-description="Department or division of organization where user is employed"> <CATEGORIES><demographic/></CATEGORIES> </DATA-DEF> <!-- "thirdparty" Data Schema --> <DATA-DEF name="thirdparty.name" short-description="Third Party's Name" structref="#personname"> <CATEGORIES><physical/><demographic/></CATEGORIES> </DATA-DEF> <DATA-DEF name="thirdparty.bdate" short-description="Third Party's Birth Date" structref="#date"> <CATEGORIES><demographic/></CATEGORIES> </DATA-DEF> <DATA-DEF name="thirdparty.cert" short-description="Third Party's Identity certificate" structref="#certificate"> <CATEGORIES><uniqueid/></CATEGORIES> </DATA-DEF> <DATA-DEF name="thirdparty.gender" short-description="Third Party's Gender"> <CATEGORIES><demographic/></CATEGORIES> </DATA-DEF> <DATA-DEF name="thirdparty.jobtitle" short-description="Third Party's Job Title"> <CATEGORIES><demographic/></CATEGORIES> </DATA-DEF> <DATA-DEF name="thirdparty.home-info" short-description="Third Party's Home Contact Information" structref="#contact"> <CATEGORIES><physical/><online/><demographic/></CATEGORIES> </DATA-DEF> <DATA-DEF name="thirdparty.business-info" short-description="Third Party's Business Contact Information" structref="#contact"> <CATEGORIES><physical/><online/><demographic/></CATEGORIES> </DATA-DEF> <DATA-DEF name="thirdparty.employer" short-description="Name of Third Party's Employer"> <CATEGORIES><demographic/></CATEGORIES> </DATA-DEF> <DATA-DEF name="thirdparty.department" short-description="Department or division of organization where third party is employed"> <CATEGORIES><demographic/></CATEGORIES> </DATA-DEF> <!-- "business" Data Schema --> <DATA-DEF name="business.name" short-description="Organization Name"> <CATEGORIES><demographic/></CATEGORIES> </DATA-DEF> <DATA-DEF name="business.department" short-description="Department or division of organization"> <CATEGORIES><demographic/></CATEGORIES> </DATA-DEF> <DATA-DEF name="business.cert" short-description="Organization Identity certificate" structref="#certificate"> <CATEGORIES><uniqueid/></CATEGORIES> </DATA-DEF> <DATA-DEF name="business.contact-info" short-description="Contact Information for the Organization" structref="#contact"> <CATEGORIES><physical/></CATEGORIES> </DATA-DEF> </DATASCHEMA>
付録4には、P3Pポリシー参照ファイルとP3Pポリシー文書とP3Pデータスキーマの文書のためのXMLスキーマが含まれている。 XMLスキーマは、XML文書としてスキーマが作成された場合に使用される構造とデータ構造の値を有効にするために使用されるだろう。 P3Pポリシーとデータスキーマの文書はXML文書であるため、XMLスキーマと一致しなければならない。 このXMLスキーマはXMLスキーマワーキングドラフト[XML-Schema1] [XML-Schema2]に基づいているが、 このワーキングドラフトは予告なしに変更される可能性があることに注意されたい。 このスキーマはURIhttp://www.w3.org/2000/12/P3Pv1.xsdの 独立したファイルに表示されている。
<!DOCTYPE schema PUBLIC '-//W3C//DTD XMLSCHEMA 200010//EN' 'http://www.w3.org/2000/10/XMLSchema.dtd' [ <!ATTLIST schema xmlns:p3p CDATA #FIXED 'http://www.w3.org/2000/12/P3Pv1'> ]> <schema xmlns='http://www.w3.org/2000/10/XMLSchema' xmlns:p3p='http://www.w3.org/2000/12/P3Pv1' targetNamespace='http://www.w3.org/2000/12/P3Pv1' elementFormDefault='qualified'> <!-- Basic P3P Data Type --> <simpleType name='yes_no'> <restriction base='string'> <enumeration value='yes'/> <enumeration value='no'/> </restriction> </simpleType> <!-- *********** Policy Reference *********** --> <!-- ************** META ************** --> <element name='META'> <complexType mixed='true'> <sequence minOccurs='0' maxOccurs='unbounded'> <element ref='p3p:POLICY-REFERENCES'/> <element ref='p3p:POLICIES' minOccurs='0'/> </sequence> </complexType> </element> <!-- ******* POLICY-REFERENCES ******** --> <element name='POLICY-REFERENCES'> <complexType> <sequence> <element ref='p3p:EXPIRY' minOccurs='0'/> <element ref='p3p:POLICY-REF' minOccurs='0' maxOccurs='unbounded'/> </sequence> </complexType> </element> <element name='POLICY-REF'> <complexType> <sequence> <element name='INCLUDE' minOccurs='0' maxOccurs='unbounded' type='uriReference'/> <element name='EXCLUDE' minOccurs='0' maxOccurs='unbounded' type='uriReference'/> <element name='COOKIE-INCLUDE' minOccurs='0' maxOccurs='unbounded' type='string'/> <element name='COOKIE-EXCLUDE' minOccurs='0' maxOccurs='unbounded' type='string'/> <element name='EMBEDDED-INCLUDE' minOccurs='0' maxOccurs='unbounded' type='uriReference'/> <element name='EMBEDDED-EXCLUDE' minOccurs='0' maxOccurs='unbounded' type='uriReference'/> <element name='METHOD' minOccurs='0' maxOccurs='unbounded' type='uriReference'/> </sequence> <attribute name='about' type='uriReference' use='required'/> </complexType> </element> <!-- ************* EXPIRY ************* --> <element name='EXPIRY'> <complexType> <attribute name='max-age' type='nonNegativeInteger' use='optional'/> <attribute name='date' type='string' use='optional'/> </complexType> </element> <!-- ************ POLICIES ************ --> <element name='POLICIES'> <complexType> <sequence> <element ref='p3p:POLICY' minOccurs='0' maxOccurs='unbounded'/> </sequence> </complexType> </element> <!-- **************** Policy **************** --> <!-- ************* POLICY ************* --> <element name='POLICY'> <complexType> <sequence> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> <element ref='p3p:TEST'/> <element ref='p3p:EXPIRY' minOccurs='0'/> <element ref='p3p:DATASCHEMA' minOccurs='0'/> <element ref='p3p:ENTITY'/> <element ref='p3p:ACCESS'/> <element ref='p3p:DISPUTES-GROUP' minOccurs='0'/> <element ref='p3p:STATEMENT' minOccurs='0' maxOccurs='unbounded'/> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> </sequence> <attribute name='discuri' type='uriReference' use='required'/> <attribute name='opturi' type='uriReference' use='optional'/> <attribute name='name' type='ID' use='optional'/> </complexType> </element> <!-- ************* TEST ************* --> <element name='TEST' minOccurs='0'> <!-- ************* ENTITY ************* --> <element name='ENTITY'> <complexType> <sequence> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> <element ref='p3p:DATA-GROUP'/> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> </sequence> </complexType> </element> <!-- ************* ACCESS ************* --> <element name='ACCESS'> <complexType> <sequence> <choice> <element name='nonident' type='p3p:access-value'/> <element name='ident-contact' type='p3p:access-value'/> <element name='other-ident' type='p3p:access-value'/> <element name='contact-and-other' type='p3p:access-value'/> <element name='all' type='p3p:access-value'/> <element name='none' type='p3p:access-value'/> </choice> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> </sequence> </complexType> </element> <complexType name='access-value'/> <!-- ************ DISPUTES ************ --> <element name='DISPUTES-GROUP'> <complexType> <sequence> <element ref='p3p:DISPUTES' maxOccurs='unbounded'/> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> </sequence> </complexType> </element> <element name='DISPUTES'> <complexType> <sequence> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> <choice minOccurs='0'> <sequence> <element ref='p3p:LONG-DESCRIPTION'/> <element ref='p3p:IMG' minOccurs='0'/> <element ref='p3p:REMEDIES' minOccurs='0'/> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> </sequence> <sequence> <element ref='p3p:IMG'/> <element ref='p3p:REMEDIES' minOccurs='0'/> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> </sequence> <sequence> <element ref='p3p:REMEDIES'/> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> </sequence> </choice> </sequence> <attribute name='resolution-type' use='required'> <simpleType> <restriction base='string'> <enumeration value='service'/> <enumeration value='independent'/> <enumeration value='court'/> <enumeration value='law'/> </restriction> </simpleType> </attribute> <attribute name='service' type='uriReference' use='required'/> <attribute name='verification' type='string' use='optional'/> <attribute name='short-description' type='string' use='optional'/> </complexType> </element> <!-- ******** LONG-DESCRIPTION ******** --> <element name='LONG-DESCRIPTION'> <simpleType> <restriction base='string'/> </simpleType> </element> <!-- ************** IMG *************** --> <element name='IMG'> <complexType> <attribute name='src' type='uriReference' use='required'/> <attribute name='width' type='nonNegativeInteger' use='optional'/> <attribute name='height' type='nonNegativeInteger' use='optional'/> <attribute name='alt' type='string' use='required'/> </complexType> </element> <!-- ************ REMEDIES ************ --> <element name='REMEDIES'> <complexType> <sequence> <choice maxOccurs='unbounded'> <element name='correct' type='p3p:remedies-value'/> <element name='money' type='p3p:remedies-value'/> <element name='law' type='p3p:remedies-value'/> </choice> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> </sequence> </complexType> </element> <complexType name='remedies-value'/> <!-- *********** STATEMENT ************ --> <element name='STATEMENT'> <complexType> <sequence> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> <element name='CONSEQUENCE' minOccurs='0' type='string'/> <element name='NON-IDENTIFIABLE' minOccurs='0'> <complexType/> </element> <element ref='p3p:PURPOSE'/> <element ref='p3p:RECIPIENT'/> <element ref='p3p:RETENTION'/> <element ref='p3p:DATA-GROUP' maxOccurs='unbounded'/> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> </sequence> </complexType> </element> <complexType name='non-identifiable'/> <!-- ************ PURPOSE ************* --> <element name='PURPOSE'> <complexType> <sequence> <choice maxOccurs='unbounded'> <element name='current' type='p3p:purpose-value'/> <element name='admin' type='p3p:purpose-value'/> <element name='develop' type='p3p:purpose-value'/> <element name='customization' type='p3p:purpose-value'/> <element name='tailoring' type='p3p:purpose-value'/> <element name='pseudo-analysis' type='p3p:purpose-value'/> <element name='pseudo-decision' type='p3p:purpose-value'/> <element name='individual-analysis' type='p3p:purpose-value'/> <element name='individual-decision' type='p3p:purpose-value'/> <element name='contact' type='p3p:purpose-value'/> <element name='historical' type='p3p:purpose-value'/> <element name='telemarketing' type='p3p:purpose-value'/> <element name='other-purpose'> <complexType mixed='true'> <attribute name='required' use='optional' type='p3p:required-value'/> </complexType> </element> </choice> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> </sequence> </complexType> </element> <simpleType name='required-value'> <restriction base='string'> <enumeration value='always'/> <enumeration value='opt-in'/> <enumeration value='opt-out'/> </restriction> </simpleType> <complexType name='purpose-value'> <attribute name='required' use='optional' type='p3p:required-value'/> </complexType> <!-- *********** RECIPIENT ************ --> <element name='RECIPIENT'> <complexType> <sequence> <choice maxOccurs='unbounded'> <element name='ours'> <complexType> <sequence> <element ref='p3p:recipient-description' minOccurs='0' maxOccurs='unbounded'/> </sequence> </complexType> </element> <element name='same' type='p3p:recipient-value'/> <element name='other-recipient' type='p3p:recipient-value'/> <element name='delivery' type='p3p:recipient-value'/> <element name='public' type='p3p:recipient-value'/> <element name='unrelated' type='p3p:recipient-value'/> </choice> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> </sequence> </complexType> </element> <complexType name='recipient-value'> <sequence> <element ref='p3p:recipient-description' minOccurs='0' maxOccurs='unbounded'/> </sequence> <attribute name='required' use='optional' type='p3p:required-value'/> </complexType> <element name='recipient-description'> <complexType mixed='true'/> </element> <!-- *********** RETENTION ************ --> <element name='RETENTION'> <complexType> <sequence> <choice> <element name='no-retention' type='p3p:retention-value'/> <element name='stated-purpose' type='p3p:retention-value'/> <element name='legal-requirement' type='p3p:retention-value'/> <element name='indefinitely' type='p3p:retention-value'/> <element name='business-practices' type='p3p:retention-value'/> </choice> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> </sequence> </complexType> </element> <complexType name='retention-value'/> <!-- ************** DATA ************** --> <element name='DATA-GROUP'> <complexType> <sequence> <element ref='p3p:DATA' maxOccurs='unbounded'/> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> </sequence> <attribute name='base' type='uriReference' use='default' value='http://www.w3.org/TR/P3P/base'/> </complexType> </element> <element name='DATA'> <complexType mixed='true'> <sequence minOccurs='0' maxOccurs='unbounded'> <element ref='p3p:CATEGORIES'/> </sequence> <attribute name='ref' type='uriReference' use='required'/> <attribute name='optional' use='default' value='no' type='p3p:yes_no'/> </complexType> </element> <!-- ************** Data Schema ************* --> <!-- *********** DATASCHEMA *********** --> <element name='DATASCHEMA'> <complexType> <choice minOccurs='0' maxOccurs='unbounded'> <element ref='p3p:DATA-DEF'/> <element ref='p3p:DATA-STRUCT'/> <element ref='p3p:EXTENSION'/> </choice> </complexType> </element> <element name='DATA-DEF' type='p3p:data-def'/> <element name='DATA-STRUCT' type='p3p:data-def'/> <complexType name='data-def'> <sequence> <element ref='p3p:CATEGORIES' minOccurs='0'/> <element ref='p3p:LONG-DESCRIPTION' minOccurs='0'/> </sequence> <attribute name='name' type='ID' use='required'/> <attribute name='structref' type='uriReference' use='optional'/> <attribute name='short-description' type='string' use='optional'/> </complexType> <!-- *********** CATEGORIES *********** --> <element name='CATEGORIES'> <complexType> <choice maxOccurs='unbounded'> <element name='physical' type='p3p:categories-value'/> <element name='online' type='p3p:categories-value'/> <element name='uniqueid' type='p3p:categories-value'/> <element name='purchase' type='p3p:categories-value'/> <element name='financial' type='p3p:categories-value'/> <element name='computer' type='p3p:categories-value'/> <element name='navigation' type='p3p:categories-value'/> <element name='interactive' type='p3p:categories-value'/> <element name='demographic' type='p3p:categories-value'/> <element name='content' type='p3p:categories-value'/> <element name='state' type='p3p:categories-value'/> <element name='political' type='p3p:categories-value'/> <element name='health' type='p3p:categories-value'/> <element name='preference' type='p3p:categories-value'/> <element name='government' type='p3p:categories-value'/> <element name='other-category' type='string'/> </choice> </complexType> </element> <complexType name='categories-value'/> <!-- *********** EXTENSION ************ --> <element name='EXTENSION'> <complexType mixed='true'> <choice minOccurs='0' maxOccurs='unbounded'> <any minOccurs='0' maxOccurs='unbounded' processContents='skip'/> </choice> <attribute name='optional' use='default' value='yes' type='p3p:yes_no'/> </complexType> </element> </schema>
この付録では、ポリシー文書とデータスキーマのためのDTDを含む。 DTDはURIhttp://www.w3.org/2000/12/P3Pv1.dtd の 独立したファイルに表示されている。
<!-- *************** Entities *************** --> <!ENTITY % URI "CDATA"> <!ENTITY % NUMBER "CDATA"> <!-- *********** Policy Refernece *********** --> <!-- ************** META ************** --> <!ELEMENT META (#PCDATA | POLICY-REFERENCES | POLICIES)*> <!-- ******* POLICY-REFERENCES ******** --> <!ELEMENT POLICY-REFERENCES (EXPIRY?, POLICY-REF*)> <!ELEMENT POLICY-REF (INCLUDE*, EXCLUDE*, EMBEDDED-INCLUDE*, EMBEDDED-EXCLUDE*, METHOD*)> <!ATTLIST POLICY-REF about %URI; #REQUIRED > <!-- ************* EXPIRY ************* --> <!ELEMENT EXPIRY EMPTY> <!ATTLIST EXPIRY max-age %NUMBER; #IMPLIED date CDATA #IMPLIED > <!-- ************ POLICIES ************ --> <!ELEMENT POLICIES (POLICY*)> <!-- ***** INCLUDE/EXCLUDE/METHOD ***** --> <!ELEMENT INCLUDE (#PCDATA)> <!ELEMENT EXCLUDE (#PCDATA)> <!ELEMENT COOKIE-INCLUDE (#PCDATA)> <!ELEMENT COOKIE-EXCLUDE (#PCDATA)> <!ELEMENT EMBEDDED-INCLUDE (#PCDATA)> <!ELEMENT EMBEDDED-EXCLUDE (#PCDATA)> <!ELEMENT METHOD (#PCDATA)> <!-- **************** Policy **************** --> <!-- ************* POLICY ************* --> <!ELEMENT POLICY (EXTENSION*, TEST, EXPIRY?, DATASCHEMA?, ENTITY, ACCESS, DISPUTES-GROUP?, STATEMENT*, EXTENSION*)> <!ATTLIST POLICY discuri %URI; #REQUIRED opturi %URI; #IMPLIED name ID #IMPLIED > <!-- ******** TEST ******** --> <!ELEMENT TEST (EMPTY)> <!-- ************* ENTITY ************* --> <!ELEMENT ENTITY (EXTENSION*, DATA-GROUP, EXTENSION*)> <!-- ************* ACCESS ************* --> <!ELEMENT ACCESS ((nonident | all | contact-and-other | ident-contact | other-ident | none), EXTENSION*)> <!ELEMENT nonident EMPTY> <!ELEMENT all EMPTY> <!ELEMENT contact-and-other EMPTY> <!ELEMENT ident-contact EMPTY> <!ELEMENT other-ident EMPTY> <!ELEMENT none EMPTY> <!-- ************ DISPUTES ************ --> <!ELEMENT DISPUTES-GROUP (DISPUTES+, EXTENSION*)> <!ELEMENT DISPUTES (EXTENSION*, ( (LONG-DESCRIPTION, IMG?, REMEDIES?, EXTENSION*) | (IMG, REMEDIES?, EXTENSION*) | (REMEDIES, EXTENSION*) )?)> <!ATTLIST DISPUTES resolution-type (service | independent | court | law) #REQUIRED service %URI; #REQUIRED verification CDATA #IMPLIED short-description CDATA #IMPLIED > <!-- ******** LONG-DESCRIPTION ******** --> <!ELEMENT LONG-DESCRIPTION (#PCDATA)> <!-- ************** IMG *************** --> <!ELEMENT IMG EMPTY> <!ATTLIST IMG src %URI; #REQUIRED width %NUMBER; #IMPLIED height %NUMBER; #IMPLIED alt CDATA #REQUIRED > <!-- ************ REMEDIES ************ --> <!ELEMENT REMEDIES ((correct | money | law)+, EXTENSION*)> <!ELEMENT correct EMPTY> <!ELEMENT money EMPTY> <!ELEMENT law EMPTY> <!-- *********** STATEMENT ************ --> <!ELEMENT STATEMENT (EXTENSION*, NON-IDENTIFIABLE?, CONSEQUENCE?, PURPOSE, RECIPIENT, RETENTION, DATA-GROUP+, EXTENSION*)> <!-- ********** CONSEQUENCE *********** --> <!ELEMENT CONSEQUENCE (#PCDATA)> <!-- ******** NON-IDENTIFIABLE ******** --> <!ELEMENT NON-IDENTIFIABLE (EMPTY)> <!-- ************ PURPOSE ************* --> <!ELEMENT PURPOSE ((current | admin | develop | customization | tailoring | pseudo-analysis | pseudo-decision | individual-analysis | individual-decision | contact | historical | telemarketing | other-purpose)+, EXTENSION*)> <!ENTITY % pur_att "required (always | opt-in | opt-out) #IMPLIED"> <!ELEMENT current EMPTY> <!ATTLIST current %pur_att;> <!ELEMENT admin EMPTY> <!ATTLIST admin %pur_att;> <!ELEMENT develop EMPTY> <!ATTLIST develop %pur_att;> <!ELEMENT customization EMPTY> <!ATTLIST customization %pur_att;> <!ELEMENT tailoring EMPTY> <!ATTLIST tailoring %pur_att;> <!ELEMENT pseudo-analysis EMPTY> <!ATTLIST pseudo-analysis %pur_att;> <!ELEMENT pseudo-decision EMPTY> <!ATTLIST pseudo-decition %pur_att;> <!ELEMENT individual-analysis EMPTY> <!ATTLIST individual-analysis %pur_att;> <!ELEMENT individual-decision EMPTY> <!ATTLIST individual-decision %pur_att;> <!ELEMENT contact EMPTY> <!ATTLIST contact %pur_att;> <!ELEMENT profiling EMPTY> <!ATTLIST profiling %pur_att;> <!ELEMENT historical EMPTY> <!ATTLIST historical %pur_att;> <!ELEMENT telemarketing EMPTY> <!ATTLIST telemarketing %pur_att;> <!ELEMENT other-purpose (#PCDATA)> <!ATTLIST other-purpose %pur_att;> <!-- *********** RECIPIENT ************ --> <!ELEMENT RECIPIENT ((ours | same | other-recipient | delivery | public | unrelated)+, EXTENSION*)> <!ELEMENT ours (recipient-description*)> <!ELEMENT same (recipient-description*)> <!ATTLIST same %pur_att;> <!ELEMENT other-recipient (recipient-description*)> <!ATTLIST other-recipient %pur_att;> <!ELEMENT delivery (recipient-description*)> <!ATTLIST delivery %pur_att;> <!ELEMENT public (recipient-description*)> <!ATTLIST public %pur_att;> <!ELEMENT unrelated (recipient-description*)> <!ATTLIST unrelated %pur_att;> <!ELEMENT recipient-description (#PCDATA)> <!-- *********** RETENTION ************ --> <!ELEMENT RETENTION ((no-retention | stated-purpose | legal-requirement | indefinitely | business-practices), EXTENSION*)> <!ELEMENT no-retention EMPTY> <!ELEMENT stated-purpose EMPTY> <!ELEMENT legal-requirement EMPTY> <!ELEMENT indefinitely EMPTY> <!ELEMENT business-practices EMPTY> <!-- ************** DATA ************** --> <!ELEMENT DATA-GROUP (DATA+, EXTENSION*)> <!ATTLIST DATA-GROUP base %URI; "http://www.w3.org/TR/P3P/base" > <!ELEMENT DATA (#PCDATA | CATEGORIES)*> <!ATTLIST DATA ref %URI; #REQUIRED optional (yes | no) "no" > <!-- *********** DATA SCHEMA *********** --> <!ELEMENT DATASCHEMA (DATA-DEF | DATA-STRUCT | EXTENSION)*> <!ELEMENT DATA-DEF (CATEGORIES?, LONG-DESCRIPTION?)> <!ATTLIST DATA-DEF name ID #REQUIRED structref %URI; #IMPLIED short-description CDATA #IMPLIED > <!ELEMENT DATA-STRUCT (CATEGORIES?, LONG-DESCRIPTION?)> <!ATTLIST DATA-STRUCT name ID #REQUIRED structref %URI; #IMPLIED short-description CDATA #IMPLIED > <!-- *********** CATEGORIES *********** --> <!ELEMENT CATEGORIES (physical | online | uniqueid | purchase | financial | computer | navigation | interactive | demographic | content | state | political | health | preference | government | other-category)+> <!ELEMENT physical EMPTY> <!ELEMENT online EMPTY> <!ELEMENT uniqueid EMPTY> <!ELEMENT purchase EMPTY> <!ELEMENT financial EMPTY> <!ELEMENT computer EMPTY> <!ELEMENT navigation EMPTY> <!ELEMENT interactive EMPTY> <!ELEMENT demographic EMPTY> <!ELEMENT content EMPTY> <!ELEMENT state EMPTY> <!ELEMENT political EMPTY> <!ELEMENT health EMPTY> <!ELEMENT preference EMPTY> <!ELEMENT government EMPTY> <!ELEMENT other EMPTY> <!-- *********** EXTENSION ************ --> <!ELEMENT EXTENSION (#PCDATA)> <!ATTLIST EXTENSION optional (yes | no) "yes" >
この仕様書での正式なP3P文法は、[ABNF]をわずかに修正したものを使用して作成されている。 以下はABNFの簡単な説明である。
name = (elements)
(
element1 element2)
<a>*<b>element
<a>element
<a>*element
*<b>element
*element
[element]
"string"
or
'string'
使用されているその他の表記法は:
/* ... */
本付録はP3Pの開発の意図を説明し、P3P技術の責任ある使用に関する ガイドラインを推奨するものである。前バージョンはW3Cノートの中で "P3P Guiding Principles(P3Pガイドライン)"として公表されている。
「Platform for Privacy Preferences Project(プライバシー情報の取り扱いに対する個人のプリファレンス(選好)を 支持する技術基盤(P3P))」は柔軟性をもち、多様な利用者のプリファレンス、政策、サービス提供者のポリシー、 およびアプリケーションを支援するものとして設計された。 P3Pのこの柔軟性は、設計者たちが想い描かなかったような様々な革新的方法においてP3Pを使用する機会を提供するものである。 P3Pガイドラインは、巻末に記載したP3Pワーキンググループのメンバーの意図を表明する目的で、 また、Web上での利用者のプライバシーと信用・信頼を最大化するためにP3Pを最も効率的に用いる方法を提案する目的で作成された。 我々の柔軟性の目標に適うように、本文書はいかなる組織に対しても要求を課すことはない。 むしろ、本文書は1)P3P設計者の意図と整合性を保つために何をなすべきであるか、 および2)P3P実装とWebサービスにおける利用者の信用を最大化するにはどうしたらよいかについての推奨を行う。 P3PはWeb上のプライバシーを守ることの手助けをする目的があった。 我々は、この目的を達成するためにこの指針を採用する組織や個人、政策決定者、企業を奨励する。
P3Pは、サービス提供者が自らの情報プラクティスを公開することと、 個人が自分の個人情報の収集と使用に関して情報提供を受けた上での決定を行うことを可能にすることによって、 Web上でのプライバシーと信用を向上させるために設計された。 P3Pユーザエージェントは、個人情報の収集と使用に関してサービス提供者と合意に達するために、 個人に代わって処理を行う。すべての組織がこのような合意を尊重するという相互理解の上に信用は得られる。
サービス提供者は、関連する法律やデータ保護・プライバシー原則を自らの情報プラクティスに適用することによって 信用を維持し、プライバシーを保護するべきである。 以下に、P3Pの開発にあたって参考にした、またP3Pを使用する組織にとって有用であろう プライバシー原則とガイドラインのリストを挙げる:
さらに、サービス提供者とP3P実装者は、子供のプライバシーをめぐる特別な懸念について理解し、 それに対処するべきである。
サービス提供者は自らの情報プラクティスについて、 適切なタイミングで実効のある通知を提供しなければならない。 また、ユーザエージェントは利用者がそれらの通知にアクセスし、 それらに基づいて意思決定を行うための効果的なツールを提供すべきである。
サービス提供者は以下をすべきである:
ユーザエージェントは以下をすべきである:
利用者は個人情報の収集、使用および開示に関して意味ある選択を行う能力を与えられるべきである。 利用者は自らの個人情報に対するコントロール権を保持し、個人情報を提供する際の条件について決定すべきである。
サービス提供者は以下をすべきである:
ユーザエージェントは以下をすべきである:
サービス提供者は利用者と利用者の個人情報を公正さと完全性をもって取り扱うべきである。 これは、プライバシーを保護し、信頼を増すためには不可欠なことである。
サービス提供者は以下をすべきである:
ユーザエージェントは以下をすべきである:
P3P自体はセキュリティメカニズムを含んでいないが、 セキュリティツールと連携して使用されるように意図されている。 利用者の個人情報は常に、その情報のセンシビティに合わせて適切なセキュリティ安全装置をもって保護されるべきである。
サービス提供者は以下をすべきである:
ユーザエージェントは以下をすべきである:
本仕様書はP3P仕様書ワーキンググループによって作成された。 P3P仕様書ワーキンググループの参加メンバーは以下の通りである: Lorrie Cranor (AT&T, 議長), Mark Ackerman (University of California, Irvine), Margareta Björksten (Nokia), Eric Brunner (Engage), Joe Coco (Microsoft), Rajeev Dujari (Microsoft), Matthias Enzmann (GMD), Patrick Feng (RPI), Dan Jaye (Engage), Marit Koehntopp (Privacy Commission of Land Schleswig-Holstein, Germany), Yuichi Koike (NEC/W3C), Yusuke Koizumi (ENC), Daniel LaLiberte (Crystaliz), Marc Langheinrich (NEC/ETH Zurich), Daniel Lim (PrivacyBank), Ran Lotenberg (IDcide), Massimo Marchiori (W3C/MIT/UNIVE), Christine McKenna (Phone.com, Inc.), Mark Nottingham (Akamai), Paul Perry (Microsoft), Jules Polonetsky (Doubleclick), Martin Presler-Marshall (IBM), Joel Reidenberg (Fordham Law School), Dave Remy (Geotrust), Ari Schwartz (CDT), Noboru Shimizu (ENC), Rob Smibert (Jotter Technologies Inc.), Mark Uhrmacher (Doubleclick), Danny Weitzner (W3C), Michael Wallent (Microsoft), Rigo Wenning (W3C), Betty Whitaker (NCR), Kevin Yen (Netscape), Sam Yen (Citigroup), Alan Zausner (American Express).
P3P仕様書ワーキンググループは、本仕様書の多くの部分を以前のP3Pワーキンググループから受け継いでいる。 P3P仕様書ワーキンググループはこれらのグループのメンバーの貢献に対し謝意を表したい (付記した所属団体は、メンバーがワーキンググループに参加していた当時の所属団体である)。
P3Pインプリメンテーション・ディプロイメントワーキンググループの参加メンバーは以下の通りである: Rolf Nelson (W3C, 議長), Marc Langheinrich (NEC/ETH Zurich, 議長), Mark Ackerman (University of California, Irvine), Rob Barrett (IBM), Joe Coco (Microsoft), Lorrie Cranor (AT&T), Massimo Marchiori (W3C/MIT), Gabe Montero (IBM), Stephen Morse (Netscape), Paul Perry (Microsoft), Ari Schwartz (CDT), Gabriel Speyer (Citibank), Betty Whitaker (NCR).
P3P構文ワーキンググループの参加メンバーは以下の通りである:Steve Lucas (Matchlogic, 議長), Lorrie Cranor (AT&T), Melissa Dunn (Microsoft), Daniel Jaye (Engage Technologies), Massimo Marchiori (W3C/MIT), Maclen Marvit (Narrowline), Max Metral (Firefly), Paul Perry (Firefly), Martin Presler-Marshall (IBM), Drummond Reed (Intermind), Joseph Reagle (W3C).
P3Pボキャブラリハーモナイゼーションワーキンググループの参加メンバーは以下の通りである: Joseph Reagle (W3C, 議長), Liz Blumenfeld (America Online), Ann Cavoukian (Information and Privacy Commission/Ontario), Scott Chalfant (Matchlogic), Lorrie Cranor (AT&T), Jim Crowe (Direct Marketing Association), Josef Dietl (W3C), David Duncan (Information and Privacy Commission/Ontario), Melissa Dunn (Microsoft), Patricica Faley (Direct Marketing Association), Marit Köhntopp (Privacy Commissioner of Schleswig-Holstein, Germany), Tony Lam (Hong Kong Privacy Commissioner's Office), Tara Lemmey (Narrowline), Jill Lesser (America Online), Steve Lucas (Matchlogic), Deirdre Mulligan (Center for Democracy and Technology), Nick Platten (Data Protection Consultant, formerly of DG XV, European Commission), Ari Schwartz (Center for Democracy and Technology), Jonathan Stark (TRUSTe).
P3Pプロトコル・データ送信ワーキンググループの参加メンバーは以下の通りである:Yves Leroux (Digital, 議長), Lorrie Cranor (AT&T), Philip DesAutels (Matchlogic), Melissa Dunn (Microsoft), Peter Heymann (Intermind), Tatsuo Itabashi (Sony), Dan Jaye (Engage), Steve Lucas (Matchlogic), Jim Miller (W3C), Michael Myers (VeriSign), Paul Perry (FireFly), Martin Presler-Marshall (IBM), Joseph Reagle (W3C), Drummond Reed (Intermind), Craig Vodnik (Pencom Web Worlds).
P3Pボキャブラリワーキンググループの参加メンバーは以下の通りである:Lorrie Cranor (AT&T, 議長), Mark Ackerman (W3C), Philip DesAutels (W3C), Melissa Dunn (Microsoft), Joseph Reagle (W3C), Upendra Shardanand (Firefly).
P3Pアーキテクチャワーキンググループの参加メンバーは以下の通りである:Martin Presler-Marshall (IBM, 議長), Mark Ackerman (W3C), Lorrie Cranor (AT&T), Philip DesAutels (W3C), Melissa Dunn (Microsoft), Joseph Reagle (W3C).
最後に、付録7はW3Cノートの中の "P3P Guiding Principles" を元に作成したものである。その署名者は以下の通りである: Azer Bestavros (Bowne Internet Solutions), Ann Cavoukian (Information and Privacy Commission Ontario Canada), Lorrie Faith Cranor (AT&T Labs-Research), Josef Dietl (W3C), Daniel Jaye (Engage Technologies), Marit Köhntopp (Land Schleswig-Holstein), Tara Lemmey (Narrowline; TrustE), Steven Lucas (MatchLogic), Massimo Marchiori (W3C/MIT), Dave Marvit (Fujitsu Labs), Maclen Marvit (Narrowline Inc.), Yossi Matias (Tel Aviv University), James S. Miller (MIT), Deirdre Mulligan (Center for Democracy and Technology), Joseph Reagle (W3C), Drummond Reed (Intermind), Lawrence C. Stewart (Open Market, Inc.).
18 October Last Call Specificationからの改訂履歴
other
カテゴリはother-category
とした。
EMBEDDED-INCLUDE
、EMBEDDED-EXCLUDE
、COOKIE-INCLUDE
、そしてCOOKIE-EXCLUDE
のサポートは推奨の意味の(すべきである)から必須を意味する(しなければならない)に変更した。
contact_and_other
、ident_contact
、
other_ident
、opt_in
、opt_out
を
contact-and-other
、ident-contact
、
other-ident
、opt-in
、opt-out
とした。
TEST
要素を追加した。