このドキュメントは The Platform for Privacy Preferences 1.0 (P3P1.0) Specification W3C Proposed Recommendation 28 January 2002 http://www.w3.org/TR/2002/PR-P3P-20020128/ の和訳です。 この文書には和訳上の誤りがありえます。 内容の保証はいたしかねますので、必ず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) 仕様書の2002年1月28日勧告案 である。本勧告のレビュー期間は2002年2月25日に終了する。本文書はP3P仕様ワーキンググループ (メンバーのみ)がP3Pの活動の一環として作成したものである。
W3C諮問委員会の代表者は本仕様書をレビューし、そのコメントをp3p-review@w3.orgへ返信することを推奨する。これはW3Cのチームのみが見ることができる。
レビュー後、W3Cのディレクターが文書の最終的な処理を告知する。つまり、その文書が(恐らく細かい部分を修正した)W3Cの勧告になり、ワーキングドラフトの位置付けに戻るか、W3Cの作業項目として落とされるか、ということである。この告知はレビュー終了後、14日より早く行われることはない。
参考のため、本文書の末尾に9月28日ラストコールワーキングドラフトから修正された部分の概略を記した変更ログを掲載している。
コメントはwww-p3p-public-comments@w3.org へ送られたし。 (公的なコメントの保管先)
勧告案として発行しても、W3Cの全会員によって承認されたわけではない。つまり、本文書は他の文書によりいつでも改版、置換、 または陳腐化する可能性があるということである。現在公開のW3Cワーキングドラフトのリストはhttp://www.w3.org/TRに掲載している。
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ポリシーは、ポリシーの中にプライバシー情報を如何に処理するか表記している合法組織のために連絡情報を提供するためにネーム空間(cf.[XML]および[XML-Name])を持つP3PボキャブラリのXMLを用い、収集されるデータ型とデータ要素を列挙し、そして、どの様にデータが使われるか説明する。更に、ポリシーは、データの受領者を明確にし、係争解決のための情報のような情報開示にまつわる諸々のものを作成可能にし、当該サイトの人間が読むことのできるプライバシーポリシーの存在場所(URL)の通知を行う。P3Pポリシーは、関係する総てのデータ要素とそれをどう使うかカバーしなければならない。(しかし、法の執行の際に必要とされる情報に関する法律的問題はこの仕様書では関知しない。:例えば、公権力によって要求された場合、第三者に提供しないはずのデータがポリシーの規定に反して、他の組織に提供されることがあるかもしれない。)P3Pの記述は、肯定的な記述であるべきである。すなわち、あるサイトが何々をしないと記述するよりは、何々を行うと記述することが望ましい。P3Pボキャブラリは、ある特殊な法律や行動規範に準拠するためのインディケータというより、サイトがプライバシー情報を如何に取り扱うかを記述することを目的に設計されている。しかしながら、幾つかのユーザエージェントは、サイトのプライバシー情報の取り扱い方が法律や行動規範に合っているか否かテストするために、開発されるかもしれない。
P3Pポリシーは、サイトがプライバシー情報を如何に取り扱うかを表現する。しかし、電気通信プロバイダやインターネットサービスのプロバイダやプロキシ、その他の中間業者が、サイトと利用者との間のプライバシーデータ交換に関与するが、それらの中間業者が何を行っているかについて、サイトのポリシーは関与しない。また、各P3Pポリシーはポリシー参照ファイルにリストされている特定のWebリソース(Webページや画像、クッキーなど)に適用されることに注意。複数のP3PポリシーをWebサイトに配置するため、会社や組織は、彼らのポリシー参照ファイルに記述されていないその他のWebリソースやP3PポリシーがカバーしいるWebサイトに収集されたデータを含まないその他のオンライン作業、または、オフライン作業に関係しているプライバシーに関する処理については述べない。
P3P1.0ユーザエージェントは、Webブラウザか、ブラウザプラグインか、プロキシサーバに組み込まれることができる。また、それらはJavaアプレットもしくは、JavaScriptで実装され、電子財布や自動フォーム入力やその他の利用者データ管理機能の中に組み込むことができる。P3Pユーザエージェントは、周知の存在場所にあるP3Pへの参照とHTTP応答の中にあるP3Pヘッダ及びHTMLコンテンツの中に埋め込まれているP3P
link
タグを捜す。これらの参照は、関係するP3Pポリシーの存在場所を示している。ユーザエージェントは、示された存在場所からポリシーを取り込み、それを解析し、シンボルを表示したり、音を鳴らしたり、サイトのP3Pプライバシーに関する処理を示すプロンプトメッセージを生成したりする。更に、ユーザエージェントはP3Pポリシーを利用者が設定したプライバシープリファレンスの集合と比較し、適切な処理を行うことが可能である。P3Pは、電子財布や自動フォーム入力のようなデータ転送メカニズムにおけるある種の"ゲートキーパー"の機能を行うこともできる。これらのメカニズムに組み込まれたP3Pユーザエージェントは、P3Pポリシーを検索したり、利用者のプリファレンスと比較したり、次の二つの条件を満たしたときのみ、データのリリースを認める。a)ポリシーが、利用者のプリファレンスと一致している。そして、b)要求されたデータ転送が、ポリシーと一致している。もしも、これらの条件の何れかに合致していないならば、利用者に、不一致の通知と、データを送出するか否か選択する機会が与えられるべきである。
P3P1.0仕様はP3Pユーザエージェントのユーザインターフェースに関する要件をほとんど提起しない。そのため、ユーザエージェント実装者はWebサイトのプライバシーポリシーについての情報をユーザに提供するために表す言葉やシンボルを独自に選択できる。実装者はユーザインターフェースで本仕様の言葉通りに定義を使用する必要はない。しかし、ユーザに提供する情報を付録 7:”P3Pガイドライン(標準非準拠)”に従ってすべて正確に表現することを確実に行うべきである。
Webサイトは、利用者に文章で開示しているプライバシーポリシーをP3P構文に翻訳し、ポリシーへ適用しているサイトの一部を示すポリシー参照と一緒に、その結果のファイルを公開することにより、P3P1.0を実装することができる。自動化ツールにより、この翻訳を行うサイトの運営者を支援することが可能である。P3P1.0はソフトを特に追加したりアップグレードすることなく、現在のHTTP/1.1準拠のWebサーバにおいて構築できる。サーバは周知の存在場所からポリシー参照ファイル を構築でき、あるいはlink
タグを使ったHTML/XHTMLコンテンツでP3Pポリシー参照ファイルを参照するかもしれない。または、サイトのP3Pポリシー参照ファイルの存在場所を示すHTTPレスポンスへP3P拡張ヘッダを挿入するために互換性のあるサーバを構築できるであろう。
Webサイトは、サイト全体に一つのP3Pポリシーを付与することもできるし、そのサイトの異なる部分に異なるポリシーを指定するといったこともできる。ある一つのP3Pポリシーは、そのサイトへの訪問者とHTTPでやりとりする際に生成されたり、交換されたりするすべてのデータをカバーするものでなければならない。更にいうと、幾つかのサイトは、データがどの様に収集されたかにかかわらず、総てのデータをカバーするP3Pポリシーを作ることを望むかもしれない。
P3Pの早期の実装と最初の導入を容易にするために、前回のP3P1.0使用書の部分から大幅に章を削除した。当該グループは、P3P1.0が導入された時点で、 P3Pの仕様書の将来のバージョンはこれらの機能を組み込むことがある。このような仕様書には、実装経験や導入時の経験を反映させるとともに、P3P1.0から落とされた、次の4つの重要な機能を盛り込む予定である。
W3Cの正式仕様書作成手順に従い、本仕様書は、相互互換性のあるP3Pアプリケーションの作成に必要とされる総ての仕様を包含している。
本仕様書は、必要性の程度を表す為、RFC2119[KEY]に定義されている次の用語を用いる。次の重要な用語が、相互互換性を実現する為に、本文書全体を通して用いられている。
2.2.2章, 2.2.3章および 4章を除いて、P3P仕様は ネーム空間構文(cf. [XML] および [XML-Name])でXMLを定義する。コンパクトにするため、以下では、"ネーム空間を使用してのXML"という意味で"XML"ということにする。
BFNのような記述も本仕様の中で使用されている。本仕様書で用いられている[ABNF]記述は、RFC2234 に従ったものであり、その概略を付録 6に示す。しかし、XML構文の場合、そういったABNF構文は可読性(例えば、空白規則や引用符(’)や(”)などを使用して引用したり、文字拡張や、コメント、大文字小文字の区別、属性の順序、ネーム空間の処理など、XMLに絶対的に含まれている構文的な融通性がない)を向上させるために使用される文法表現であるため、標準準拠の値がない。本仕様書で定義されているXML構文はすべて、自然言語を使用して本仕様で表現しているその他の制約と一緒に、標準準拠の定義を構成するP3PのXMLスキーマに従わなければならない(付録4)を参照)。
P3Pファイルが有効であることを確認するために、付録 5の(標準非準拠)のDTDを使用してもよいが、ネーム空間の使用が原因で、DTDに照合すると、有効なファイルが拒否される場合がある。
本仕様で定義している非XML構文に関する限り、(P3PのHTTPヘッダを定義している2.2.2章、HTMLでのP3Pの使用について定義している2.2.3章、そして、コンパクトポリシーを定義している4章)代わりに、(自然言語を使用して本仕様で表現しているその他の制約と一緒に)ABNF記述が標準準拠の定義を構成する。
user.home.postal
"といった、データ要素の一般的なグループのことである。
このP3P 1.0は、幾つかの基本データ集合を定めている。 DATASCHEMA
要素を使用して定義した要素と集合の集まり。
P3P1.0はP3P基本データスキーマという標準のデータスキーマを定義する。 P3Pポリシーを設置することは、P3Pプロトコル工程における初期段階のステップである。サービスは、どのP3Pポリシーが特定のどのURI、またはURIの集合に適用するかを述べる為にポリシー参照を使用する。ユーザエージェントは、Webリソースに適用されたプライバシーポリシーを発見する為にポリシー参照を使用する。従って、ユーザエージェントは、利用者のためにポリシーを処理することができる。
ポリシー参照は、パフォーマンスの最適化として使われる。プライバシーポリシーを参照しているURIは、通常100バイト未満であるが、P3Pポリシーは通常、数キロバイトのデータである。帯域幅の節約に加えて、ポリシー参照は、コンピュータの演算処理の必要性を軽減する:ポリシーは、URIと一意に関連付けられることができる。従って、ユーザエージェントは、ポリシーが適用されている文書毎にポリシーを処理する必要はなく、一度ポリシーを解析し、処理すればよい。さらに、中央集権化された場所に、関連のあるポリシーに関する情報を置くことによって、Webサイトの管理が簡素化される。
ポリシー参照ファイルはURLスペースのある領域とP3Pポリシーの対応づけのために使用される。また、ポリシー参照ファイルは一つのWeb文書や、サイトの一部または全サイトのためにポリシーを指定することができるネーム空間を持つXMLファイル([XML]と[XML-Name]を参照のこと)である。ポリシー参照ファイルは複数のP3Pポリシーを参照することがある。そして、たとえ異なるP3Pポリシーがサイトの異なる部分を適用するとしてもポリシー参照ファイルが複数のP3Pポリシーを参照することによって一つの参照ファイルが全サイトをカバーできる。 ポリシー参照ファイルは以下のどれか、もしくはすべてのステートメントを作成するために使用される。
これらのステートメントのすべてはポリシー参照ファイルの主要部分に作成されている。
この章では、ポリシー参照ファイルの設置場所を示す為に使用されるメカニズムを説明する。サポートされているメカニズム用に構文の詳細も示す。
ポリシー参照ファイルの存在場所は4つのメカニズムの内の一つを使って示す事ができる。ポリシー参照ファイルは
LINK
タグでポリシー参照ファイルを示しているか、LINK
タグでポリシー参照ファイルを示しているか、ユーザエージェントがHTTPを使用してHTML(XHTML)コンテンツの検索をサポートする場合、ユーザエージェントは上記、1、2、3(それぞれ、4つ)のメカニズムすべてを互換的に処理しなければならないことに注意すること。一義性の要求事項も参照すること。
ポリシーはHTTPのリソールのレベルで適用される。ユーザの相対的見地からの"ページ"は複数のHTTPの実体で構成されていることがある。各実体には、関連した独自のP3Pポリシーがあるかもしれない。しかし、実質的な注釈として、一つのページ上の異なる実体に、多くの異なるP3Pポリシーを置くことは、そのページをレンダリングし、ユーザに適切なポリシーがユーザエージェントに対して困難である事をしらせることがある。また、サービスは一つのポリシー参照ファイルが、与えられた"ページ"をカバーできるようにポリシー参照ファイルを作成しようとすることを推奨される。そうすれば、ユーザのブラウジングが早くなるのである。
与えられたリソースに適用されたポリシーを処理するユーザエージェントのために、そのリソースのためののポリシー参照ファイルを発見し、そのポリシー参照ファイルを取り出し、ポリシー参照ファイルを解析し、必要なP3Pポリシーを取得し、P3Pポリシーまたはポリシーを解析しなければならない。
本文書はHTTP以外の方法で取り出された文書にP3Pポリシーがどのように関連しているかについては述べてはいない。しかし、他のプロトコルを使用して取り出されたリソースと対応づけられているP3Pポリシーのメカニズムの今後の開発は除外していない。さらに、HTTPリソースと関連づけられているP3Pポリシーの追加的な方法は今後開発されるかもしれない。
P3Pを使っているWebサイトはポリシー参照ファイルを"周知の"存在場所に置いてもよい(これを強く推奨する)。このために、ポリシー参照ファイルは、パス/w3c/p3p.xml
のサイト上で利用可能になる。
サイトがこのメカニズムを使う必要がないことに注意。しかし、このメカニズムを使って、サイトは他のリソースがそのサイトからリクエストされる前に、 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-reference `"` |
[4] | extension-field |
= |
token [`=` (token | quoted-string) ] |
ここで、URI-reference はRFC 2396[URI]によって定義され、
token とquoted-string は[HTTP1.1]によって定義されている。 |
その他のHTTPヘッダに従うために、いかなるケーシングでもこのヘッダのP3P
部分を書き込まれることがある。コンテンツはケーシングを正確に使用して指定されるべきである。
このpolicyref
の命令はポリシー参照ファイルを指定するURIをもたらす。そして、このポリシー参照ファイルは他のファイルと同じようにこのファイルを示している文書をカバーしているP3Pポリシーを参照するかもしれない。policyref
属性が相対URIである場合、そのURIは要求URIと関連していると解釈される。
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
タグ(cf.[HTML])が埋め込まれたHTMLコンテンツを提供してもよい。このP3Pの使用方法は、サーバの動作を変更する必要はない。
link
タグは、P3P
ヘッダを使用して表現されるポリシー参照情報を符号化する。linkタグは以下の形式をとる(ここで、linkタグのためにありうる一つのABNF形式を作成し、そういったタグがHTMLファイルに使用される際に[HTML] 構文規則が使用できると仮定する。)
[5] | p3p-link-tag |
= |
`<link rel="P3Pv1" href="` URI `">` |
ここで、URI はRFC 2396 [URI]に従って定義されている。 |
href属性は相対URIであり、その相対URIは要求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]を使って符号化する必要はない。また、link
タグは大文字小文字を区別しないことに注意。
link
タグHTMLリンクタグがどのように見られるかということに応じて、P3PはXHTML((cf. [XHTML-MOD])もサポートする。サーバはXHTML リンクモジュール(cf. [XHTML-MOD]の5.19章 )を使用して、埋め込まれたXHTML link
で関連するP3Pポリシー参照ファイルの場所を示すXHTMLコンテンツを取り扱ってもよい。HTMLの場合と同じ様に、以下を設定することによって、XHTMLlink
は、P3P
ヘッダを使用してポリシー参照ファイルを符号化するために使用することができる。
rel
属性を"P3Pv1
"に設定する。href
属性を関連するP3Pポリシー参照ファイルのURI に設定する。ここで記述するメカニズムを根本的なプロトコルでのHTTPトランザクション用に使用してもよい。これにはSSL接続での暗号化されたHTTP、ネットワーク設計者が実装したいと考えているその他の通信プロトコルでのHTTPと同様にTCP/IPでのテキストHTTPも含まれている。
RFC 2396 [URI]で述べているように、URLにはネットワークポート番号を含んでもよい。P3Pの目的に対して単一のホストの異なるポートは別々の”サイト”と考えなければならない。そのため、例えば、SSLでアクセスすると、(SSL通信はデフォルト443という異なるポート上で行われるので)ポート80(http://www.example.com/w3c/p3p.xml) 上のwww.example.comの周知の存在場所にあるポリシー参照ファイルはwww.example.comに適用するポリシーについての情報を全く提供しない。
本文書はHTTP以外の方法を使用して検索された文書にP3Pポリシーがどのように関連付けられるのかを述べてはいないが、その他のプロトコルで取り出された文書とP3Pポリシーを関連付けるメカニズムの将来の開発をはばむものではない。さらに、HTTPを使用して検索された文書とP3Pポリシーを関連付ける方法が将来開発されるかもしれない。
この章ではポリシー参照ファイルの詳細を説明する。
Webサイトが以下のステートメントを作成したいというケースを考えた場合:
/P3P/Policies.xml#first
を、/catalog
、/cgi-bin
、または、/servlet
で始まるパスを持つリソースを除くサイト全体に適用する。
/P3P/Policies.xml#second
を、/catalog
で始まるパスを持つリソースすべてに適用する。
/P3P/Policies.xml#third
を、/servlet/unknown
を除く、/cgi-bin
と/servlet
で始まるパスを持つリソースすべてに適用する。
/servlet/unknown
に適用されるかのステートメントはない。
上記のステートメントは以下のXMLによって表記される:
<META xmlns="http://www.w3.org/2002/01/P3Pv1"> <POLICY-REFERENCES> <EXPIRY max-age="172800"/> <POLICY-REF about="/P3P/Policies.xml#first"> <INCLUDE>/*</INCLUDE> <EXCLUDE>/catalog/*</EXCLUDE> <EXCLUDE>/cgi-bin/*</EXCLUDE> <EXCLUDE>/servlet/*</EXCLUDE> </POLICY-REF> <POLICY-REF about="/P3P/Policies.xml#second"> <INCLUDE>/catalog/*</INCLUDE> </POLICY-REF> <POLICY-REF about="/P3P/Policies.xml#third"> <INCLUDE>/cgi-bin/*</INCLUDE> <INCLUDE>/servlet/*</INCLUDE> <EXCLUDE>/servlet/unknown</EXCLUDE> </POLICY-REF> </POLICY-REFERENCES> </META>
また、この例に文書の中にEXPIRY
相対有効期限がある。(cf.
2.3.2.3.2章)
この章では、P3Pポリシー参照ファイルの構文とセマンティクスを定義する。全てのポリシー参照ファイルは、[UTF-8]を使用して符号化されなければならない。 P3Pサーバは、この構文を使用してポリシー参照を符号化しなければならない。
ポリシー参照ファイルは複数のPOLICY-REF
要素を含んでいるかもしれない。ポリシー参照ファイルが二つ以上の要素を持っている場合、ユーザエージェントはファイルに書かれている順番でその要素を処理しなければならない。ユーザエージェントがどのポリシーを与えられたURIに適用するかを決めようとする時は、そのURIに適用するポリシー参照ファイルにある最初のPOLICY-REF
要素を使用しなければならない。
各POLICY-REF
にはINCLUDE
要素やEXCLUDE
要素、METHOD
要素、COOKIE-INCLUDE
要素、そしてCOOKIE-EXCLUDE
要素など複数の要素が含まれていることがあり、与えられたURIへPOLICY-REF
が適用するかどうかを決めるために、与えられたPOLICY-REF
内にあるこれらの要素はすべてまとめて考えなければならない。そのため、EXCLUDE
要素やMETHOD
要素はPOLICY-REF
が一致しなかった変更子としての働きをすることがあるので、与えられたURIと一致するINCLUDE
要素を検索するだけでは充分ではない。
ポリシー参照ファイルは与えられたURIにどのポリシーを適用するかを示す。ポリシー参照ファイルはURIスペースの領域についてのステートメントを作成する為の単純なワイルドカード文字をサポートしている。文字アスタリスク('*')は0文字以上の文字列を表すために使用されている。他の文字(正規表現にあるような)はサポートしていない。アスタリスクはまた、URI([[URI]])においても適切に使用されている文字なので、ポリシー参照ファイルの"拡張URI"を符号化する際は、いくつかの特別な規則を守らなければならない:
*
' はポリシー参照ファイル内でエスケープしなければならない。(つまり、それは"%2A
"として表示されなければならない) ポリシー参照ファイル内のURIに存在する'*
'はアスタリスクワイルドカードの表示として利用される。*
'を認識するしたすぐ後に、[URI]に従って、ポリシー参照ファイルの与えられたURIを適切にアンエスケープしなければならない。URIのエスケープとアンエスケープは使用されている実際のスキームに非常に依存し、単一のスキーム内の個々のコンポーネントによっても違ってくる。そのため、エスケープする必要のある文字のための規則は易しいものではない。エスケープ処理の詳細については直接[URI] を参照下さい。P3Pユーザエージェントは[URI]と一致しないURIパターンはいづれも無視してよい。
ワイルドカード文字をINCLUDE
および EXCLUDE
要素、
COOKIE-INCLUDE
および COOKIE-EXCLUDE
要素、HINT
要素で使用してもよい。
META
および
POLICY-REFERENCES
要素
<META
>
META
要素は、完全なポリシー参照ファイルを含む。任意に一つのPOLICIES
要素はあとに続くことができる。また、META
はコンテンツが表現される言語を述べるために、xml:lang
属性(2.4.2章を参照のこと) と同様に複数のEXTENSION
要素 (cf. 3.5章を参照のこと)を含むことができる。
<POLICY-REFERENCES
>
POLICY-REF
(ポリシー参照)を含んでいてもよい。 また一つのEXPIRY
要素(その有効期限を示している)や複数のHINT
要素、そして、複数のEXTENSION
要素 (cf. 3.5章)を含んでもよい。
[6] | prf |
= |
`<META xmlns="http://www.w3.org/2002/01/P3Pv1"` [xml-lang] `>` *extension policyrefs [policies] *extension "</META>" |
[7] | policyrefs |
= |
"<POLICY-REFERENCES>" [expiry] *policyref *hint *extension "</POLICY-REFERENCES>" |
ここで、PCDATA は[XML]で定義されている。 |
EXPIRY
要素
サーバがユーザエージェントに参照ファイルのクレームがどのくらいの期間有効であるかを知らせる事が望ましい。クライアントがポリシー参照ファイルのコンテンツをキャッシュ可能にすることによって、 Webリソースに関連したプライバシーポリシーを処理する時間を短縮する。また、これによってネットワークの負荷も縮小できる。さらに、URIに有効なポリシー参照のないクライアントは要求に対して、"セーフゾーン" プラクティスを使う必要がある。有効であるポリシー参照ファイルをクライアントが持ってる場合、処理方法に関し、情報に基づく決定をしやすくなる。
このような長所を生かすために、ポリシー参照ファイルはその有効期限を示すEXPIRY
要素を含むべきである。ポリシー参照ファイルがEXPIRY
要素を含んでいないとその有効期限は24時間になる。
ポリシー参照ファイルの有効期限はユーザエージェントにポリシー参照ファイルのクレームがどのくらいの期間有効であるかを知らせる。ポリシー参照ファイルの有効期限を設定することによって、公表しているサイトはポリシー参照ファイルで述べているポリシーが適切な有効期限であることに同意する。たとえば、ポリシー参照ファイルに3日間の有効期限がある場合、ユーザエージェントは3日間ファイルをリロードする必要がなく、参照ファイルからの参照は3日間有効であると仮定することができる。一つのポリシー参照ファイルで参照されるすべてのポリシーは同じ有効期限をもつであろう。異なるポリシー参照のために異なる有効期限を指定するための唯一の方法は、個々のポリシー毎に異なるポリシー参照ファイルを使用することである。
ポリシー参照ファイルの有効期限を示すために使用されるものと同じメカニズムがP3Pポリシーの有効期限を示すのにも使用される。そのため、同様にP3PのPOLICIES
要素は関連するEXPIRY
要素を持つべきであった。この有効期限はPOLICIES
要素内に含まれるP3Pポリシー全部に適用する。P3Pポリシーと関連するEXPIRY
要素がない場合は24時間の有効期限となる。
ポリシーとポリシー参照ファイルの有効期限を決定する場合、サイトは二つの事柄を考慮する有効期限を選ぶ必要がある。その一つはユーザエージェントがキャッシングから十分な利益をうけることができるくらいの長さが有効期限として必要であること。もう一つは、有効期限の終了を非常に長く待たずに、サイトがポリシーを変更できるということである。上記二つを満たすのに妥当な有効期限は1〜7日の間であると思われる。ポリシーを更新する際、サイトはポリシーの改版要求事項を記憶する必要がある。
ポリシー参照ファイルの有効期限が終了したら、ユーザエージェントはポリシー参照ファイルを再び有効にするまで、もしくは、ポリシー参照ファイルの新しいコピーを取り出すまでは、ポリシー参照ファイルの情報を使用してはならない。
ユーザエージェントが有効期限の切れていないポリシー参照ファイルまたはポリシーファイルを再び取り出す必要はないが、 "セーフゾーン"プラクティスを使用する必要性を避ける為に、ポリシー参照ファイルの有効期限が切れる前にファイルを更新してもよいことに注意。有効なP3Pユーザエーンジェントの実装にはポリシーやポリシー参照ファイルのキャッシュを含める必要はないが、そうすればより性能はよくなる。
EXPIRY
要素 ポリシー参照ファイル(またはポリシーが)がいつまで有効かという事を示すためにEXPIRY
要素はポリシー参照ファイルおよび/またはPOLICIES
要素で使用できる。有効期限の有効期は絶対的有効期限または相対的有効期限として与えられる。絶対的有効期限は、GMTによって与えられる期間であり、ポリシー参照ファイル(またはポリシーが)が有効であるまでの期間である。相対的有効期限はポリシー参照ファイル(またはポリシーが)が有効であるための時間(秒)を与える。この相対的有効期限はクライアントがポリシー参照ファイル(またはポリシーが)を要求したか、最後に再確認した時間に相当する。この計算法はオリジナルの要求または再確認の時間と現時間を使用して行わなければならない。そしてこの両方の時間はクライアントの時計で計った時間を使用しなければならない。再確認は[HTTP1.1]のの13.3章で述べている。
相対的有効期限の最低限の時間は24時間、または、86400秒である。86400秒より少ない相対的有効期限はクライアントの実装で86400秒と同じ扱いをしなければならない。クライアントが過去に絶対的有効期限に遭遇している場合、あたかも使用可能なポリシー参照ファイル(またはポリシー)がないかのように動作しなければならない。その場合の必要な手順に関しては2.4.7章の”ポリシー参照ファイルがない場合”を参照のこと。
[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章で定義されている。 |
実際のネットワークではポリシーとポリシー参照ファイルを隠すキャッシュがあることがある。これは全体的なネットワークのパフォーマンスを上げるのに良いことではあるが、適切に使用しないとP3Pの操作に悪影響を及ぼすことがある。それには二つの懸念がある。
HTTP1.1[HTTP1.1] には強力なキャッシュ制御メカニズムがあり、クライアントはネットワークキャッシュの操作に必要事項を導入することができる。このメカニズムは上記で述べた問題を解決できる。その方法は以下に述べる。
しかし、HTTP1.0にはそういった高度なキャッシュ制御メカニズムがない。HTTP1.0のネットワークキャッシュは恐らく最後にファイルを変更した日にちを元にしてポリシー参照ファイル(またはポリシー)の有効期限を計算することになるだろう。そして結果としてできたキャッシュの有効期限はEXPIRY
要素で指定したものよりも非常に長くなるだろう。そのため、キャッシングプロキシはポリシー参照ファイル(またはポリシー)をクライアントへEXPIRY
の有効期限を超えて提供するかもしれない。その結果、ユーザエージェントは無駄なポリシー参照ファイル(またはポリシー)を受けとることになるだろう。
HTTP1.0キャッシングプロキシに関する2番目の問題はキャッシングプロキシがどのくらいの期間ポリシー参照ファイルを保存できたかということをユーザエージェントが知る方法がないということである。ポリシー参照ファイル(またはポリシー)が相対的有効期限に依存する場合、ユーザエージェントはそのポリシー参照ファイルの有効期限がすでに切れたかどうか、またはいつ切れそうであるかということを決めることができない。
そのため、ユーザエージェントがポリシー参照ファイルやポリシーを要求し、起点サーバへのパスにHTTP1.0が存在しないことを明確に知らない場合、その要求はエンドツーエンドの再確認を推し進めなければならない。このことはPragma: no-cache HTTP 要求ヘッダで行うことができる。HTTPもP3Pも与えられたネットワークパスにHTTP1.0対応のキャッシュが存在するかどうかを決める方法を定義しない事に注意。そのため外部のソースから得たこの情報をユーザエージェントが持っている場合以外、エンドツーエンドの再確認を行ってはいけない。
ユーザエージェントが起点サーバへのネットワークパスに在るキャッシュすべてがHTTP1.1に対応していることを知る方法を持つ場合(または起点サーバへのネットワークパスにキャッシュが全くない場合)、クライアントは、エンドツーエンドの再確認をする代わりに、以下を行なわなければならない。
クライアントがHTTP要求に影響する待ち時間を正確に予測する事ができないことに注意。そのため、要求をカバーしているポリシー参照ファイルはすぐに期限切れとなる場合、クライアントはその要求を続ける前に、ユーザに警告するかポリシー参照ファイルの再確認をすることを考慮したいと思ってもよい。
以下のようなの状態の時に、特別に定義されたセマンティクスが存在する。
EXPIRY
要素がある場合、参照ファイルの有効期限を決めるのには、最初にある日付を優先する。 POLICY-REF
要素 ポリシー参照ファイルは、個々の情報を指定することによって、複数のP3Pポリシーを参照するだろう。
POLICY-REF
要素は単一のP3Pポリシー属性を記述する。POLICY-REF
要素内の要素は、ポリシーの存在場所を提供し、個々のポリシーがカバーするURI空間(およびクッキー)の領域を指定する。
POLICY-REF
about
(必須の属性)
name
属性に与えられている)ポリシーの名前を示し、そのURI部分がポリシーが存在するURIを示している場合のURI参照([URI])。これが相対的URI参照であれば、ポリシー参照ファイルのURIに関連があると解釈される。[11] | policy-ref |
= |
`<POLICY-REF about="` URI-reference `">` *include *exclude *cookie-include *cookie-exclude *method-element *extension `</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は含まない。
ポリシー参照ファイルで参照されたポリシーはそれを参照しているDNS(Domain Name System)ホストのURIにのみ適用することができる。従って、例えば、ホストwww.example.comの周知の場所にあるポリシー参照ファイルはwww.example.comにあるリソースだけにポリシーを適用することができる。しかし、foo.example.comが、bar.example.comにあるポリシー参照ファイルを参照するレスポンスにP3PHTTPヘッダを含む場合、そのポリシー参照ファイルは(bar.example.comやwww.example.comではなく)foo.example.comにあるリソースに適用される。同じポリシー参照ファイルは複数のホストが送信しているP3PHTTPヘッダにおいて参照される。その場合、それを参照している各ホストにそのポリシー参照ファイルは適用される。INCLUDE
要素およびEXCLUDE
要素は、これらの要素が適用されているDNSホストのルートに関連しているURIパターンを指定しなければならない。
METHOD
要素(2.3.2.8章)が一つ以上のポリシー参照を含むことを規定する。それはつまり、記述されなかった全てのメソッドが、必然的にこのP3Pポリシーによってカバーされないことを意味する。この場合、これは与えられたURI-refixのためのポリシー参照だけとなり、ユーザエージェントは、メソッドがポリシー参照ファイルで記述されなかった全てにポリシーが実施されないとみなさなければならない。INCLUDE
要素またはCOOKIE-INCLUDE
要素なしにMETHOD
要素を供給することは正当ではあるが不適切である。
INCLUDE
要素なしにEXCLUDE
要素を供給することは正当であるが、不適切である。その場合、ユーザエージェントはEXCLUDE
要素を無視しなくてはならない。
INCLUDE
要素とEXCLUDE
要素で指定されたURIの集合は、そのURI
の内のひとつを要求するときにおこるだろうクッキーを含まないことに注意されたい。クッキーとポリシーを対応づけるためには、COOKIE-INCLUDE
と COOKIE-EXCLUDE
要素が必要である。
[12] | include |
= |
"<INCLUDE>" relativeURI "</INCLUDE>" |
[13] | exclude |
= |
"<EXCLUDE>" relativeURI "</EXCLUDE>" |
ここで、relativeURI は2.3.2.1.2章で定義されているように、'* '
文字がワイルドカードとして取り扱われている事と共にRFC 2396 [URI]に従って定義されている。 |
HINT
要素 ポリシー参照のヒントはある条件下で使用できるパフォーマンスの最適化である。サイトは周知の存在場所、P3P応答ヘッダ、または、HTML/XHTMLlink
タグを使用して自身のポリシー参照を宣言するかもしれない。また。サイトは他のサイトが宣言したものなど、さらなるポリシー参照のヒントを適用してもよい。
例えば、HTMLページはハイパーリンクや埋め込みコンテンツのポリシー参照にヒントを与え、アクションURIを作成するかもしれない。周知の存在場所からポリシー参照が使用出来ない場合、影響を受けたURIを要求する前にユーザエージェントはそのヒントメカニズムを使用してポリシー参照を発見してもよい。
ポリシー検索のためにヒントを使用するユーザエージェントは、ヒントの与えられたポリシー参照ファイルを含むサイト以外には、ポリシーを適用してはならない。
ポリシー参照ファイルはいずれも0以上のポリシー参照のヒントを含んでいることがある。各ヒントは、二つの属性、scope
およびpath
を持つHINT
要素に含まれている。
scope
属性はURIスキームとヒントの与えられたポリシー参照ファイルが適用できる権限を指定するために使用される。権限のコンポーネント(cf. [URI])がサーバコンポーネント(例えばホスト名やIPアドレス)である場合、その権限のホスト部分は、2.3.2.1.2章で定義されているように、ワイルドカードで始めてもよい。scope
属性はワイルドカーとをどこにも含んではいけないが、2.3.2.1.2章の規定に従って符号化されなければならないし、パスや照会、フラグメントURIコンポーネントを含んではならない。また、権限がサーバである場合は、ユーザ情報部分を含むべきではない。
例えば、scope
にとって合法的な値は以下を含む。
http://www.example.com
http://www.example.com:81
http://*.example.com
ftp://ftp.example.org
scope
属性にとって合法的ではない値は以下である。
http://www.*.com
; ワイルドカードは最初に置くことができる。http://www.example.com/
; 後続のスラッシュは使用できない。www.example.com
; スキームは始めなければならない。*://www.example.com
; スキームはワイルドカードとを含むことができない。http://www.example.com:*
; ポートはワイルドカードを含むことができない。path
属性は、ヒントを与えられたサイトにあるポリシー参照ファイルを探すのに使用される。また、path
属性はURIスキームを基本とする相対的URIであり、scope
属性で照合された権限である。ポリシー参照ファイルはいつもそれが適用されている同じサイトから検索されるので、path
属性は絶対的URIであってはならない。
例2.3:
<HINT scope="http://www.example.org" path="/mypolicy/p3.xml" /> <HINT scope="http://www.example.net:81" path="/w3c/prf.xml" /> <HINT scope="http://*.shop.example.com" path="/w3c/prf.xml" />
[14] | hint |
= |
`<HINT scope="` scheme ( `://` | `:/` ) authority `" path="` relativeURI `/>` |
ここで、scheme 、 authority そして relativeURI はRFC 2965 [STATE]から取り出される。 |
COOKIE-INCLUDE
と
COOKIE-EXCLUDE
要素 COOKIE-INCLUDE
およびCOOKIE-EXCLUDE
要素はポリシーとクッキーを関連づけるために使用される(cf. [COOKIES] および [STATE])。
クッキーポリシーはそのクッキーに格納されるかまたはクッキーを通じてリンクされているあらゆるデータ(P3Pの範囲内で)をカバーしなければならない。また、クッキーに格納されるか、または、クッキーを通じてリンクされているかまたは、クッキーが可能にしているデータに関連するすべての目的を参照しなければならない。また、クッキーに格納されているかまたはそれを通じてリンクされているデータ/目的はクッキーポリシーに入れられなければならない。さらに、そのリンクされたデータがHTTPによって収集された場合、
GET
/POST
、どのリクエストをもカバーしているポリシーはそのデータ収集をカバーしなければならない。例えば、CatalogExampleが顧客に名前と取り引き、出荷情報をフォームに書くよう要求をすれば、そのフォームの提出をカバーするP3PポリシーはCatalogExampleがこのデータの収集を公開し、どのように使用されたかを明らかにする。
CatalogExampleが顧客を認識し、その顧客のウェブサイトでの行動を監視できるようにクッキーを設定すれば、このクッキーに対する独立したのポリシーを持つことになるだろう。しかしながら、このクッキ-がユーザの名前と取り引き、出荷情報にリンクされていれば、
--恐らくCatalogExampleは顧客の住んでいる場所を元にして顧客カタログページを作成できる--そのデータもクッキーポリシーで公開されなければならない。
この仕様書の目的として、ステート管理メカニズムはSET-COOKIE
またはSET-COOKIE2
ヘッダを使用し、クッキーネーム空間はNAME、VALUE、Domain、およびPath属性([COOKIES]
と [STATE]で述べている)の値として定義されている。
各COOKIE-INCLUDE
およびCOOKIE-EXCLUDE
要素は、(INCLUDE
およびEXCLUDE
と同じ様に)ポリシー参照ファイルが存在するWebサイト上のリソースからクッキーが設定される際、about
属性が指定したポリシーによってカバーされているクッキーを示しながら、そのクッキーのNAME、VALUE、Domain、およびPathコンポーネントを照合するために使用することができる。
COOKIE-INCLUDE
(resp.
COOKIE-EXCLUDE
)
name
, value
,
domain
およびpath
属性を照合するクッキーを含んでいる。 (または、含んでいない。)
name
value
domain
path
domain
属性の値がドット文字(".")に設定されている場合、そのドメインはdomain
属性を省略するクッキーのみを照合する。(そして、RFC 2965 [STATE]に従って、要求ホストと同等のドメインを持つ)
path属性を省略するクッキーには、RFC 2965 [STATE]に従って、セット‐クッキーレスポンスを作成した要求URIのデフォルトパスがある。クッキーがpath
属性を省略する場合、COOKIE-INCLUDE
のpath
属性は このデフォルト値と比較されるべきである。
この4つの属性は任意である。属性がない場合、COOKIE-INCLUDE
(resp.
COOKIE-EXCLUDE
)がいずれかの値に設定されている属性を持つクッキーを照合する。
COOKIE-INCLUDE
(および任意でCOOKIE-EXCLUDE
)要素が
POLICY-REF
要素に存在している時、
POLICY-REF
要素のabout
属性で指定されているポリシーは、COOKIE-INCLUDE
要素が照合し、
COOKIE-EXCLUDE
要素が照合しないクッキーすべてに適用する。
ユーザエージェントはポリシー参照ファイルのCOOKIE-INCLUDE
要素と
COOKIE-EXCLUDE
要素を使用してポリシー参照ファイルが適用しているホストに設定、または、再現されているクッキーへ適用するポリシーを決めなければならない。COOKIE-INCLUDE
のdomain属性はより幅広く照合する(例えば、domain属性が省略される場合、いずれかのドメイン値の照合をデフォルト値としてとる)が、ユーザエージェントは、ポリシー参照ファイルが適用しているホストで設定されているクッキーで適切に使用できるドメインへのポリシーの適用を制限しなければならない。例えば、abc.xyz.example.comが <COOKIE-INCLUDE domain="*.xyz.*ple.com"/>
でpolicyrefを宣言する場合、.example.com や .xyz.sample.com.ではなく、.abc.xyz.example.com そして、.xyz.example.comなどといったドメインで宣言される。
P3Pポリシーは、再生されるホストのいずれか、またはすべて、または、クッキーを設定するホストによってクッキーと関連付けることができる。ユーザエージェントは、(恐らく)ドメインの他のホストへ再現される際にクッキーが設定され、その後適用される時、クッキーポリシーを取り出してもよい。ユーザエージェントはクッキーをホストに再現する前に、ホストからのポリシー参照ファイルを要求してもよいし、ホストがクッキーを設定していなくても、ポリシー参照ファイルに適切なCOOKIE-INCLUDE
がある場合は、ポリシーはそのクッキーに適用される。ホストがそのクッキーに対してポリシーを宣言しているかいないかに関わらず、クッキーが再現されるホストはいずれもそのクッキーに関連するすべてのポリシーを有効にできなければならない。従って、ドメイン内で複数のホストに再現されるクッキーを設定するサイトは、すべてのホストが宣言されたポリシーに従うことができるかを確認するために調整を行う必要がある。更に、サイトは、ポリシーが適用されるべきではないクッキーへポリシーを不注意に適用しないようにするために、ワイルドカードの使用には注意すべきである。(まだ使用中のクッキーをあらかじめ設定したり、ドメインのほかのホストで設定されたクッキーなどを含む)
関連するポリシー参照ファイルがポリシーの有効期限より早く無効になったとしても(しかし、クッキーが設定された後)、ポリシーの有効期限が終了するまではクッキーを適用しているポリシーは有効である。クッキーと対応しているポリシーの期限が終了している場合、ユーザエージェントはクッキーを送信する前にクッキーポリシーを再度評価するべきである。さらに、ユーザエージェントは新規のセットクッキーイベントを評価する際は有効期限の切れていないポリシーやポリシー参照ファイルを使用しなければならない。
例2.4 では/P3P/Policies.xml#first
がクッキーすべてに適用していることを示している。
例2.4 :
<META xmlns="http://www.w3.org/2002/01/P3Pv1"> <POLICY-REFERENCES> <POLICY-REF about="/P3P/Policies.xml#first"> <COOKIE-INCLUDE name="*" value="*" domain="*" path="*"/> </POLICY-REF> </POLICY-REFERENCES> </META>
例2.5
ではネーム値"obnoxious-cookie"、ドメイン値".example.com"、パス値"/"を持つクッキーを除いて、/P3P/Policies.xml#first
がクッキーすべてに適用していることと、/P3P/Policies.xml#second
がクッキー名"obnoxious-cookie"、ドメイン値".example.com"、パス値"/"を持つクッキーすべてを適用していることを示している。
例 2.5 :
<META xmlns="http://www.w3.org/2002/01/P3Pv1"> <POLICY-REFERENCES> <POLICY-REF about="/P3P/Policies.xml#first"> <COOKIE-INCLUDE name="*" value="*" domain="*" path="*"/> <COOKIE-EXCLUDE name="obnoxious-cookie" value="*" domain=".example.com" path="/"/> </POLICY-REF> <POLICY-REF about="/P3P/Policies.xml#second"> <COOKIE-INCLUDE name="obnoxious-cookie" value="*" domain=".example.com" path="/"/> </POLICY-REF> </POLICY-REFERENCES> </META>
[15] | cookie-include |
= |
"<COOKIE-INCLUDE" [` name="` token `"`] ; matches the cookie's NAME [` value="` token `"`] ; matches the cookie's VALUE [` domain="` token `"`] ; matches the cookie's Domain [` path="` token `"`] ; matches the cookie's Path "/>" |
[16] | cookie-exclude |
= |
"<COOKIE-EXCLUDE" [` name="` token `"`] ; matches the cookie's NAME [` value="` token `"`] ; matches the cookie's VALUE [` domain="` token `"`] ; matches the cookie's Domain [` path="` token `"`] ; matches the cookie's Path "/>" |
ここで、token , NAME ,
VALUE , Domain そしてPath は2.3.2.1.2章で示している様に、'* '
文字をワイルド文字として処理するRFC 2965
[STATE]に従って定義されている。 |
[STATE]はクッキーのドメインとパス属性のデフォルト値を示しているということに注意。これらの値は属性が特定のクッキーにない場合に比較のために使用されるべきである。また、[STATE]と同じ様に、はっきりと定義されたDomain
値がピリオド(".")で始まっててはならないこと、ユーザエージェントはピリオドを付けなければならないことに注意。また、すべてのPath
は"/" 文字で始まることにも注意されたい。
METHOD
要素 デフォルトでは、ポリシー参照は、リソースにアクセスする為に使用されるメソッドに関係なく指定されたURIに適用される。しかしウェブサイトは、リソースに適用されるメソッドに応じて、異なるP3Pポリシーを定義したいかもしれない。例えばサイトは、利用者がGET
メソッドを行っている時よりは、
PUT
やDELETE
メソッドを行っている時に、より多くの利用者情報を収集したいと望むかもしれない。
ポリシー参照ファイル内のMETHOD
要素は、含まれているポリシー参照が、参照されるリソースにアクセスする為に、指定されたメソッドが使用された時のみ有効である事を示す為に使用される。
METHOD
要素は、複数の適用できるメソッドを示す為に繰り返されるであろう。
METHOD
要素がPOLICY-REF
要素内にない場合、POLICY-REF
要素は、リソースにアクセスするメソッドに関係なく、示されたリソースをカバーする。
従って、/P3P/Policies.xml#first
が、GET
とHEAD
メソッドのために/docs/
で始まるパスを持つリソースすべてに適用し、一方で、/P3P/Policies.xml#second
は、PUT
とDELETE
メソッドの時に適用される事を示す場合、以下のポリシー参照ファイルを記述することができる:
例 2.6:
<META xmlns="http://www.w3.org/2002/01/P3Pv1"> <POLICY-REFERENCES> <POLICY-REF about="/P3P/Policies.xml#first"> <INCLUDE>/docs/*</INCLUDE> <METHOD>GET</METHOD> <METHOD>HEAD</METHOD> </POLICY-REF> <POLICY-REF about="/P3P/Policies.xml#second"> <INCLUDE>/docs/*</INCLUDE> <METHOD>PUT</METHOD> <METHOD>DELETE</METHOD> </POLICY-REF> </POLICY-REFERENCES> </META>
HTTPにおいて、GET
とHEAD
リクエスト要求は同じふるまいをすることに注意。つまり、メソッド毎に異なったP3Pポリシーを指定することは不適当である。
METHOD
要素の構文は:
[17] | method-element |
= |
`<METHOD>` Method `</METHOD>` |
ここで、Method は [HTTP1.1]の5.1.1章に定義されている |
最後に、METHOD
要素はINCLUDE
要素やCOOKIE-INCLUDE
要素と共に使用される様にデザインされていることに注意。METHOD
要素はそれ自身、POLICY-REF
をURIへ適用することはない。
ポリシー参照ファイルは与えられたURIに適用するポリシーを指定する。つまり、示されているポリシーは、その与えられたURIを参照しないことの影響をすべて述べているのである。(時々、適切に指定されたMETHOD
で)
URIをカバーするP3Pポリシーの表していることを述べている一般的な規則がある。
参照されたポリシーは、ユーザのクライアントソフトウェアがそのURIを要求した結果として行うと考えられている行動をカバーしなければならない。
明らかに、このポリシーはURIへの要求処理の結果としてサイトが行ったデータ収集すべてについて述べなければならない。従って、与えられたURIがGET
要求の言葉のためにカバーされれば、ポリシー参照ファイルが与えたポリシーはURIが参照されない際にサイトが行ったデータ収集についてすべて述べなければならない。同様に、URIがPOST
要求のためにカバーされれば、フォームやURIへの他のコンテンツをPOSTする結果として起こるデータ収集はこのポリシーで述べなければならない。
"クライアントソフトウェアが行うと考えられている行動"という概念には、クライアント側のクッキーやレスポンスによって呼び出されるステート管理メカニズムの設定が含まれている。 URIが要求された時、実行可能なコードが返されれば、URIをカバーしているP3Pポリシーはコード実行時に起こるある行動をカバーしなければならない。そのカバーされた行動はユーザがはっきりと呼び出さずにできた行動のことである。明確なユーザの行動がデータ収集を引き起こせば、その行動のためにURIをカバーしている P3Pポリシーはデータ収集を公開するだろう。
明確な例:
CGIスクリプトへのリンクや、その他のサーバ側アプリケーションへのURI([HTML]の17.3で定義されているように、アクションURIはHTML<FORM>
要素のアクション属性に与えられたURIである)フォームは特別な考察に値する。時にこれらのアクションURIはフォーム自身よりも異なるポリシーによってカバーされることがある。
もし、ユーザエージェントが、そのページから参照されるポリシー参照ファイルの与えられたアクションURIのための照合組み込み規則を見つけられない場合、それは有効なポリシーが全くないとするべきである。このような事情から、ユーザエージェントは、アクションURIをカバーするポリシー参照ファイルを見つける試みのためのアクションURIにあるホスト上の周知の存在場所をチェックするべきである。もし、アクションURIをカバーするP3Pポリシーを提供するものでなければ、ポリシーを効果的に検索するために実際にデータを提出する前に、ユーザエージェントはアクションURIのHINT
メカニズムを使用するか、HEAD
リクエストをアクションURIへ発行してポリシー参照ファイルを検索しようとしてもよい。サービスは、サーバ側のアプリケーションがHEAD
の該当するポリシー参照リンクを返すよう、明確にするべきである。このようにアプリケーションの下にあるケースの場合、HEAD
要求がわからず、問題となっているアクションURIを示す仮宣言されたポリシーが全くないことになり、ユーザエージェントは有効なポリシーが全くないとしなければならず、そしてユーザにこれについて確認し、ユーザのプリファレンスに従って通信手段を取るようにするべきである。
サービスが、POSTやGETなど、サポートされるメソッドのサブセットをカバーすることだけを行うサーバ側のアプリケーションのためのポリシーを宣言するための
<METHOD>
要素を利用することを望むかもしれないことに注意。このような事情において、問題となっているアプリケーションがポリシー参照ファイルで与えられた方法をサポートするだけであることは適切である(すなわち、PUT
要求はサポートされる必要はない)。もし、フォームのmethod属性で指定された関連するメソッドがそのページのポリシー参照ファイルで適切に仮宣言されたならば、関連するメソッド
がフォームのそのページのポリシー参照ファイルで適切に仮宣言されたならば、ユーザエージェントはアクションURIへのHEAD
リクエストを問題点として試みるべきでない。
ある場合には、異なったデータがフォームの中で選択されたものに応じて同じアクションURIで集められる。例えば、探索サービスが(名前あるいは電子メールなどで)人と(独断的な)イメージにおいて検索を試みようとするかもしれない。フォームでラジオボタンを使うとき、ひとつのサーバ側のアプリケーションはひとつに決められ、そして同じアクションURIは両方のケースを処理して、そして探索に必要な必要情報を集める。もしサービスがサーバ側のアプリケーションのデータ収集の処理を仮宣言することを望むなら、それは一つのポリシーファイルのデータ収集すべてを(アクションURIにあわせている<INCLUDE>
宣言を使用して)宣言するかもしれない。この場合、ユーザエージェントはデータ要素すべてが、あらゆる状況で収集されることを仮定しなければならない。このソリューションは一つのポリシーでは便利さを提供する。しかし、ただリストされたデータ要素の一部だけが一度に集められるという事実に適切に反映しないかもれない。サービスがアクションURIへの単純なヘッド要求(すなわち、選択されたラジオボタンの値が特に存在しないという理由なしに)はすべてのケースをカバーするようなポリシーを返すであろうことを明確にすべきである。
フォームがGETメソッドの使用を通して処理されれば、アクションURIはユーザが選択したフォーム要素の選択に反映することに注意。同じアクションを処理するURIの異なる使用に対して異なるポリシーを指定するために、ポリシー参照ファイルで許可されたワイルドカード構文を使用する事が可能である場合がある。それゆえ、ユーザエージェントはポリシー参照ファイルでINCLUDE
とEXCLUDE
を比較する時に
URIの質問列部分を含まなければならない。
ユーザエージェントは与えられたURIにどのポリシーが適用するのかを明確に決めることができなければならない。そのため、サイトは与えられたURIに対して有効な複数のポリシーを複数宣言することを避けるべきである。まれにサイトが与えられたURIに対して有効な複数のポリシーを宣言してもよい時がある。例えば、サイトがそのポリシーを変更する転換期などである。そういう場合、サイトは恐らく与えられたどのポリシーをユーザが見るのかということを明確に決めることができないかもしれない。従って、すべてのポリシーを有効にしなければならない。(これはコンパクトポリシーの場合にもいえる。4.1章および4.6章を参照)サイトは与えられたURIに対して複数のポリシーを宣言するときはそのプラクティスに慎重になり、そのポリシー全部を同時に有効にできるかを確認しなければならない。
周知の存在場所にあるポリシー参照ファイルが与えられたURIの有効期限が終了していないポリシーを宣言すれば、
HTTPヘッダまたはHTML/XHTMLlink
タグを通して引用された相反するポリシー参照ファイルに関わりなく、このポリシーは適用をおこなう。
HTTP応答に複数のポリシー参照ファイルへの参照がある場合、P3Pのユーザエージェントは2番目以降の参照をすべて無視しなければならない。
HTML(XHTML) ファイルに複数のポリシー参照ファイルへのHTML(XHTML)
link
リンクタグ参照がある場合、P3Pのユーザエージェントは2番目以降の参照をすべて無視しなければならない。
ユーザエージェントが与えられたURIで有効なP3Pポリシー参照ファイルを複数見つけた場合、(例えば、ページに異なるポリシー参照ファイルを参照するP3Pヘッダとlink
タグがあったり、サイトの2ページに対するP3Pヘッダが同じURIの異なるポリシーを宣言する異なるポリシー参照ファイルを参照しているといった理由などで)サイトがこれらのポリシー全部を有効にしなければならないので、ユーザエージェントはこれらのポリシーのいずれか(または全部)が適用していると仮定してもよい。
同一のポリシーの多言語版(翻訳版)は、そのポリシーが特定の言語によって符号化されていることを正確に示すために、
HTTPの"Content-Language
"ヘッダを用いることによって、サーバによって提供することができる。このことは、「組織(entity)」や「結果(consequence)」のような人間が読むことのできる箇所を様々な言語で表現することができるので有用である。データスキーマの多言語版を提供するために、同じメカニズムも使用することができる。与えられた言語プレファレンスを照合するポリシーが利用可能になると、サーバは、HTTP"Accept-Language
"で、レスポンスのローカル化されたポリシーをHTTP要求へ返すべきである。
同一URI上で多言語で提供されている複数のポリシーを区別するためにContent-Language
が使用される場合は、常にそれらのポリシーは各言語を通して同一の意味を持たなければならない。2つのポリシー(または2つのデータスキーマ)が同じであるためには
Accept-Language
メカニズムの利用を通して、P3Pを実装する人は、もしポリシーあるいはデータスキーマの新しい言語バージョンが加えられたなら、同じAccept-Language
リクエストヘッダを送信しても、ユーザエージェントはポリシーまたはポリシー参照ファイルの異なった言語バージョンを見る事になるかもしれないことに注意しなければならない。
最後に、言語宣言はP3P XMLファイル内に直接含むことができる。それらを含んでいる人間が読むことのできるフィールドの言語を示すため、POLICY
要素、 POLICIES
要素、META
要素、そして、DATASCHEMA
要素はxml:lang
を取り上げてもよい。(xml:lang
は普通、 [XMLの2.12章]で定義されている。)
[18] | xml-lang |
= |
` xml:lang="` language `"` |
ここで、language とは[LANG]で定義されているように、言語識別子である。 |
P3Pは”セーフゾーン”プラクティスの特別なセットを定義する。このセーフゾーンプラクティスのセットはP3Pポリシーやポリシー参照ファイルを取り出す一環として行う通信のためのP3P対応のユーザエージェントやサービスすべてで使用されるべきである。特に、ポリシー参照ファイルのための周知の存在場所のりクエストはこれらの"セーフゾーン"によってカバーされるべきである。セーフゾーンプラクティスでカバーしている通信は最低限のデータ集合のみを持つべきであり、収集されたデータはいずれも個人特定出来ない方法でのみ使用される。
このセーフゾーンをサポートするために、P3Pユーザエージェントはサイトのポリシーが取得されるまで、サイトのポリシーを発見する目的に不必要なデータの送信を控えるべきである。そのため、ユーザエージェントのセーフゾーンプラクティスには以下の事項が必要である。
Referer
ヘッダを送信すべきではない。
Accept-Language
HTTPヘッダを使うことで、プライバシ交換があることを知っている必要がある。正しいAccept-Language
ヘッダを送ることは、利用者が好む自然言語でP3Pポリシーを取得することができるだろう(もし、利用可能ならば)。しかし、それはとあるユーザの識別についての情報を見せることになる。ユーザエージェントは、ユーザにいつこれらのヘッダを送るべきかを決められるようにしたいと思ってもよい。サーバのセーフゾーンプラクティスには以下の事項が必要である。
Referer
ヘッダや、クッキー、ユーザエージェント情報、要求に対する応答に不必要なその他の情報の受領を要求するべきではない。
Accept-Language
HTTPを抑制する場合、サーバは利用可能な翻訳を自由に選択する。
セーフゾーン要求は、サイトが個人を特定可能な情報を保持することができないといっている訳ではなく、ポリシーを提供している間に収集した情報を、個人を特定可能な用途に使用するべきでない事のみをいっているということに注意。サービスへのアタックに関するトラックダウン拒否は、個人を特定可能な情報を使用する為の合法的な理由となり、この勧告を無視できる事になる。
P3Pユーザエージェントはうまく作成されたXMLであるP3Pポリシーやポリシー参照ファイルの役割をしなければならない。
P3Pユーザエージェントは、付録 4にあるXMLスキーマに従ったP3Pポリシーやポリシー参照ファイルの役割をすべきである。そして、このXMLスキーマに従わないポリシーやポリシー参照ファイルの一部に依存すべきではない。
ユーザエージェントは、XMLスキーマに合わせるためにローカルにP3Pポリシーやポリシー参照ファイルを変更してはならない。
P3PポリシーとP3Pポリシーへの参照内に、いかなる機密情報をも含むべきではない。この事は、P3Pプライバシーポリシーが関連付けられた文書の要求事項の枠を超えて、 P3Pプライバシーポリシーへの参照を送信する事に関するセキュリティーの追加要求事項が無いことを意味する。従って、通常HTML文書が暗号化なしのセッシションを通して提供されている場合、 P3Pは、P3Pプライバシーポリシーへの参照がその文書に含まれてい際、暗号化されたセッションを通して文書が提供されることを要求しないし、推奨もしない。
ウェブサイトがP3Pポリシーを変更すると、変更前のポリシーは変更が実行された時に、収集されたデータを適用することに注意。変更が行われたら、その日付に従って、過去のP3Pポリシーとポリシー参照ファイルを記録し続け、それらのポリシーを適切に適用することはサイトの責任である。
もし、サイトが新しいP3Pポリシーを以前に収集されたデータに適用したいと思えば、サイトはユーザが法律と一致する新しいポリシーや工業ガイドライン、またはサイトが作成したその他のプライバシーに関する同意書を受け入れる様に、適切な注意や機会を提供しなければならない。
与えられたサイトに対してポリシー参照ファイルが使用出来ない場合、ユーザエージェントは(空の)ポリシー参照ファイルが周知の存在場所に24時間の有効期限で存在していると思わなければならない。そのため、ユーザが24時間を過ぎてサイトを返した場合はユーザエージェントはもう一度周知の存在場所からポリシー参照ファイルを取り出そうと試みなければならない。ユーザエージェントは周知の存在場所やユーザが更新ボタンをクリックするなどの特定のイベントをより頻繁にチェックしてもよい。サイトは利用可能なポリシーがないことを示す周知の存在場所のポリシー参照ファイルを置いてもよいが、ユーザエージェントが24時間毎にチェックしなくてもいいように有効期限を設定してもよい。
ユーザエージェントは非同期的にP3Pポリシーを取り出したり評価したりしてもよい。つまり、P3Pポリシーは他のHTTPトランザクションより先に取り出したり、評価したりする必要がない。この挙動はユーザの嗜好と行われた要求の種類に依ることがある。ポリシーが評価されるまで、ユーザエージェントはプライバシーポリシーがないかの様にサイトを取り扱うべきである。ポリシーが評価されると、ユーザエージェントはユーザの嗜好を適用するべきである。ユーザエージェントは決定論者的な挙動を促進するために、矛盾のない時点までポリシーのアプリケーションを引き延ばすべきである。例えば,ユーザエージェントがナビゲーションを完了するか、フォームの提出を確認したすぐ後に、webブラウザはユーザの嗜好を適用するかもしれない。
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は、example.comのP3Pポリシーがカバーしているイメージを示し、そのポリシー参照ファイルにHINT
要素を使用してCDNの適したポリシー参照ファイルを指し示す。
シナリオ 3: また、busy.example.com
はサイトにバナー広告を提供するためclickads.example.comという広告会社と契約をしている。この契約によって、各ユーザが3回以上広告を見る事ができないようにする為にClickadsはクッキーを設定することができる。Clickadsはユーザが何回その広告を見たかという統計を収集し、商品が広告されている会社にその統計を報告する。しかし、この報告は各個人について明らかにしているものではない。シナリオ2のケースの様に、BusyのプライバシーポリシーはClickadsがホストしている広告に適用しているので、
BusyはそのP3Pポリシーがclickads.example.comから提供されている埋め込みコンテンツへ適用していることを述べ、そのポリシー参照ファイルにHINT
要素を使用してClickadsの適したポリシー参照ファイルを指し示す。商品宣伝広告されている会社が受け取るデータが総合されているので、その会社は、Busyのプライバシーポリシーに述べられる必要はない。
シナリオ 4:
ユーザのためのチャットルームをホストする為にウェブサイトbusy.example.comはfunchat.example.comと契約する。ユーザがチャットルームへ参加すると、実際にはBusyサイトからは離れていく。しかしながら、このチャットルームにはBusyのロゴがあり、Busyのプライバシーポリシーでカバーされている。この場合、Funchatは、シナリオ3と違って、Busyのエージェントとして動作しているが、このコンテンツはBusyサイトには埋め込まれていない。この時、がFunchatをそのポリシー参照ファイルに組み込むことはない。BusyはHINT
要素をそのポリシー参照ファイルに使用して、適したFunchatのポリシー参照ファイルを指し示す。そのファイルはFunchatのチャットルームがBusyのプライバシーポリシーをカバーしているのと述べているので、そのチャットルームへの移行がし易くなることを述べている。
シナリオ 5:
ウェブサイトbigsearch.example.comにはユーザが検索問い合わせに入力し、他のサイトの検索エンジンを選んで作動させることができるフォームがある。ユーザが"submit"ボタンをクリックすれば、検索問い合わせは実際にその検索エンジンに直接提示される。アクションURIはbigsearch
.example.com上にはないが、ユーザが選択した検索エンジン上にはある。フォームアクションは埋め込みコンテンツではないので、BigsearchはHINT
要素を使用して対応するポリシー参照ファイルを指し示すことによって、これらの検索エンジンのプライバシーポリシーを宣言する。そのため、ユーザが"submit"ボタンをクリックすると、データが通知される前にユーザエージェントはプライバシーポリシーをチェックする。この検索選択メカニズムを操作させるために、BigsearchはサイトにアクションURIを持つフォームを有することがある。そして、適切な検索エンジンにリダイレクトする。この場合、ユーザエージェントはリダイレクトレスポンスを受け取ることに関する検索エンジンプライバシーポリシーをチェックすべきである。
シナリオ 6: ウェブサイトbigsearch.example.comには、検索問い合わせに入力し、同時に10の異なる検索エンジンを作動させることができるフォームがある。Bigsearchはその問い合わせを提示し、各検索エンジンからその結果を受け取り、複写を削除し、その結果をユーザに提示する。この場合、ユーザは自分のBigsearchのみと対話する。したがって、P3Pに関わっているのは、Bigsearch ウェブサイトをカバーしているものだけである。しかしながら、Bigsearchはこれらの検索エンジンと契約し、その検索エンジンがBigsearchへのエージェントとして動作している場合以外は、ユーザの検索問い合わせを第三者と共有していることを開示しなくてはならない。
シナリオ 7:
ウェブサイトbigsearch.example.comにはadnetwork.example.comという会社が提供したバナー広告がある。Adnetworkはさまざまに異なるウェブサイトのユーザに関するプロファイルを展開するためにクッキーを使用する。そのため、Adnetworkはユーザの興味により適した広告を提供する事ができる。ユーザがアクセスしたサイトについてのデータはBigsearch
ウェブサイトに広告を提供する目的以外に使用されているので、Adnetworkはこのコンテキストのエージェントと考えることはできない。どのコンテンツを適用しているかを示すために、Adnetworkは自身のP3Pポリシーを作成し、自身のポリシー参照ファイルを使用する。さらに、BigsearchはAdnetworkP3Pポリシー参照ファイルがその広告を適用していることを示すために、ポリシー参照ファイルのHINT
要素を任意に使用することがある。もし、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配信コンテンツのポリシーを参照するためにポリシー参照ファイルのHINT
要素を使用する。
P3Pポリシーは、XML内でネーム空間で符号化される([XML] および [XML-Nameを参照のこと]。 RDFデータモデル([RDF]) を使用して起こり得る符号化は[P3P-RDF]に掲載している。
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符号化の方法:
<POLICIES xmlns="http://www.w3.org/2002/01/P3Pv1"> <POLICY name="forBrowsers" discuri="http://www.catalog.example.com/PrivacyPracticeBrowsing.html" xml:lang="en"> <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> </POLICIES>
例3.2のXML符号化の方法:
<POLICIES xmlns="http://www.w3.org/2002/01/P3Pv1"> <POLICY name="forShoppers" discuri="http://www.catalog.example.com/Privacy/PrivacyPracticeShopping.html" opturi="http://catalog.example.com/preferences.html" xml:lang="en"> <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"/> <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="#user.login.id"/> <DATA ref="#user.login.password"/> <DATA ref="#dynamic.miscdata"> <CATEGORIES><purchase/></CATEGORIES> </DATA> </DATA-GROUP> </STATEMENT> <STATEMENT> <CONSEQUENCE> ご依頼により、貴方が興味をお持ちになると思われるマーケティングを慎重に選びお送りします。 </CONSEQUENCE> <PURPOSE> <contact required="opt-in"/> <individual-decision required="opt-in"/> <tailoring required="opt-in"/> </PURPOSE> <RECIPIENT><ours/><same required="opt-in"/></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><individual-decision 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> <pseudo-decision 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> </POLICIES>
本章では、P3Pポリシーの構文とセマンティクスを定義する。全てのポリシーは[UTF-8]を用いて表現しなければならない。
P3PのボキャブラリがWebサイトのプラクティスを記述できるほど正確ではない場合、サイトはそのプラクティスに一番近いボキャブラリ用語を使用し、CONSEQUENCE
フィールドにより詳細な説明と人間が読むことのできるポリシーを提供すべきである。しかし、ポリシーは間違ったり、誤解を受けるようなステートメントを行ってはならない。
ポリシーはPOLICIES
要素内に置かなければならない。
POLICIES
要素 POLICIES
要素は一つのファイルに複数のP3Pポリシーを集めるのに使用される。
POLICIES
要素は性能の最適化として提供される。ネットワークの行き来とキャッシングを向上させ、ポリシーの多くは一つの要求で集める事ができる。また、POLICIES
要素はMETA
要素の中のポリシー参照ファイル内に置く事ができる。この場合、ユーザエージェントはポリシー参照ファイルとポリシーの両方を持っている一つのファイルを取り出すことだけが必要である。
POLICIES
要素は含まれるポリシーの有効期限を示して、xml:lang
属性と(2.4.2章を参照のこと)EXPIRY
要素、そして、DATASCHEMA
要素を使用して埋め込まれたデータスキーマを任意に含むことができる。(5章を参照のこと)
ポリシーはPOLICIES
要素にあるので、ファイル内に唯一のname
属性を持たなければならない。この事によって、(POLICY-REF
要素の)ポリシー参照はそのポリシーにリンクすることができる。
例 3.3:
http://www.example.com/Shop/policies.xml
にあるファイルは以下のコンテンツを持つ事ができた。:
<POLICIES xmlns="http://www.w3.org/2002/01/P3Pv1"> <POLICY name="policy1" discuri="http://www.example.com/disc1"> .... </POLICY> <POLICY name="policy2" discuri="http://www.example.com/disc2"> .... </POLICY> <POLICY name="policy3" discuri="http://www.example.com/disc3"> .... </POLICY> </POLICIES>
http://www.example.com/Shop/CDs/*
のファイルはhttp://www.example.com/w3c/p3p.xmlにある以下のポリシー参照ファイルを使用して2番目のポリシー("policy2
")
と関連付けることができる。:
<META xmlns="http://www.w3.org/2002/01/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/2002/01/P3Pv1"` [xml-lang] `>` [expiry] [dataschema] *policy "</POLICIES>" |
POLICY
要素 POLICY
要素には、完全なP3Pポリシーが含まれる。各P3Pポリシーには、一つのPOLICY
要素が正しく含まれなければならない。
POLICY要素には、そのポリシーに含まれるプライバシープラクティス(
プライバシーに関する処理)の代表者となる合法組織を特定するようなENTITY
属性が含まれなければならない。さらに、POLICY要素にはACCESS
要素(情報公開要素)が含まれなければならない。また、一つ以上のSTATEMENT
要素、(ステートメント要素)DISPUTES-GROUP
要素(係争解決グループ要素)、
P3Pデータスキーマ、そして一つ以上のextension(拡張)が含まれてもよい。
<POLICY>
name
(必須の属性)
discuri
(必須の属性)
opturi
opt-in
または opt-out
に設定されている必要な属性と一緒に purpose
を含むポリシーに必須である。 opt_inまたはopt_out手順は各サイトで決定され、全サイトや自動化されたメカニズムのために中心のメカニズムを組み込まないということに注意。
xml:lang
[20] | policy |
= |
`<POLICY name=` quotedstring ` discuri=` quoted-URI [` opturi=` quoted-URI] [xml-lang] `>` *extension [test] entity access [disputes-group] 1*statement-block *extension `</POLICY>` |
[21] | quoted-URI |
= |
`"` URI `"` |
ここで、URIはRFC 2396 [URI]によって定義される。 |
TEST
要素 TEST要素はテストを目的として使用される:ポリシーにTEST
が存在するということはそのポリシーが単なる例であるという事を意味するのでそれは無視しなければならないし、有効なP3Pポリシーと考えてはいけない。
[22] | test |
= |
"<TEST/>" |
ENTITY
要素 ENTITY
要素は、プライバシープラクティス表記を行っている合法組織に関する正確な説明を提供する。
<ENTITY>
ENTITY
要素は、ビジネスデータ集合の(全て又は一部の)フィールドを参照しているDATA
要素から成る合法組織の名前と、住所、電話番号、電子メールアドレス、URIのうち一つ以上の連絡情報の両方を含まなけれならない。
それは、利用者が、ある組織のプライバシーポリシーについて連絡を取る際に使うであろう住所、電話番号、電子メールアドレスおよびその他の情報などの問い合わせ情報は、実在する名称でなければならない。また、ある法律や規則の指導では、郵便番号やその他の特有の情報を問い合わせ情報に含める必要があることに注意すること。
[23] | entity |
= |
"<ENTITY>" *extension entitydescription *extension "</ENTITY>" |
[24] | entitydescription |
= |
"<DATA-GROUP>" `<DATA ref="#business.name"/>` PCDATA "</DATA>" *(`<DATA ref="#business.` string `"/>` PCDATA "</DATA>") "</DATA-GROUP>" |
ここでstring は ビジネスデータ集合によって許される数字の間、 連続する文字( " や & でエスケープされた)で定義される。PCDATA [XML]で定義されている。 |
ACCESS
要素 ACCESS
要素は、情報の様々な種類にアクセスする機能をサイトが提供するかどうかを示す。
<ACCESS>
<all/>
以外)、
全てのデータへのアクセスが可能であることは意味せず、アクセスが可能なデータがあること、
また、どのようなデータにアクセスできるのか利用者はサービス提供者にさらに確認するべきであることを意味している。
サービス提供者は、discuriで示されたWeb以外の手段で収集された情報にアクセスする許可を与えてもよい。 しかし、P3Pステートメントが扱う範囲はHTTPまたは他のWeb転送プロトコルを通して収集されるデータに限られる。 また、アクセスがWeb経由で提供される場合は、セキュリティの問題は本文書の範囲外ではあるが、 そのようなアクセスのために強固な認証とセキュリティメカニズムを使用することを推奨する。
ACCESS
要素は、以下の要素の中から一つ構成されなければならない。:
<nonident/>
<all/>
<contact-and-other/>
<ident-contact/>
<other-ident/>
<none/>
[25] | access |
= |
"<ACCESS>" *extension access_disclosure *extension "</ACCESS>" |
[26] | access_disclosure |
= |
"<nonident/>" | ; 個人特定可能なデータは使われていない |
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
) (必須の属性)
[27] | disputes-group |
= |
"<DISPUTES-GROUP>" *extension 1*dispute *extension "</DISPUTES-GROUP>" |
[28] | dispute |
= |
"<DISPUTES" " resolution-type=" '"'("service"|"independent"|"court"|"law")'"' service=" quoted-URI [" verification=" quotedstring] [" short-description=" quotedstring] ">" *extension [longdescription] [image] [remedies] *extension "</DISPUTES>" |
[29] | longdescription |
= |
<LONG-DESCRIPTION> PCDATA </LONG-DESCRIPTION> |
[30] | image |
= |
"<IMG src=" quoted-URI [" width=" `"` number `"`] [" height=" `"` number `"`] " alt=" quotedstring "/>" |
[31] | quotedstring |
= |
`"` string `"` |
ここで string は連続する文字( " や & でエスケープされた)で定義される。PCDATA は[XML]で定義されている。 |
サービスは複数の保証サービスを持つことができ、それらはDISPUTES-GROUP
要素に含まれる複数のDISPUTES
要素の記載を通して特定できることに注意すること。ある組織のプライバシープラクティスが自組織内で保証されたものも含み、第三者機関によて監査されたり、または法的な監督機関の管轄下にあったりすることを説明することによって、このDISPUTES-GROUP要素のフィールドが様々な方法で使用されることを期待する。
REMEDIES
要素 個々のDISPUTES
要素は、ポリシーに関する違反があった場合に、可能である賠償方法を指定しているREMEDIES
要素を含むべきである。
<REMEDIES>
REMEDIES
要素は、以下の1つ以上含まなければならない。:
<correct/>
<money/>
<law/>
[32] | remedies |
= |
"<REMEDIES>" *extension 1*remedy *extension "</REMEDIES>" |
[33] | remedy |
= |
"<correct/>" | "<money/>" | "<law/>" |
ステートメントは、特定のデータの型に適用されるデータプラクティスを説明する。
STATEMENT
要素
STATEMENT
要素(ステートメント要素)は、PURPOSE
要素(目的要素)、RECIPIENT
要素(受領者要素)、RETENTION
(保有要素)、
DATA-GROUP
要素(データグループ要素)、オプショナルなものとしてCONSEQUENCE
要素(結果要素)と一つ以上の拡張を束ねたものである。
DATA-GROUP
要素で参照された全てのデータは、ステートメントに含まれたその他の要素から成る情報公開に従って取り扱われる。このように、サイトは同じ方法で取り扱われる要素をグループ化し、各グループに対してステートメントを作成することができる。サイトが収集するデータの種類に合わせて個々の目的とその他の情報を公開したい場合は、各データ要素に合わせて別々のステートメントを作成することによって、そのような公開を行うことができる。
<STATEMENT>
[34] | statement-block |
= |
"<STATEMENT>" *extension [consequence] ((purpose recipient retention 1*data-group) | (non-identifiable [purpose] [recipient] [retention] *data-group)) *extension "</STATEMENT>" |
プラクティスの宣言をコンパクト化するために、サービス提供者はデータ要素に関するステートメント内で情報公開(目的、受領者、保存)を集合化することができる。サービス提供者は、このような集合化は付加的な作業として行わなければならない。例えば、利用者の年齢は「当組織および当組織の業務委託先」に提供するが、利用者の郵便番号は「当組織と無関係な第三者」に提供するようなサイトは、利用者の名前と郵便番号を「当組織および当組織の業務委託先」および「当組織と無関係な第三者」に提供すると表明してもよい。そのようなステートメントでは、実際に行っている以上に多くのデータを第三者に提供しているように見える。自サイトの情報公開を詳細なものとするかコンパクトなものとするかどうかを決定するのは、サービス提供者次第である。NON-IDENTIFIABLE
要素を含むステートメントに開示を統合する際、ステートメントが別々に書き込まれた場合のすべてのステートメントにNON-IDENTIFIABLE
要素が存在する場合にのみ、統合されたステートメントにこの要素が含まれることがあるということに注意。
また、サービス提供者は常に、適用される全てのオプションを公開しなければならない。例えば、「サービスまたは製品のマーケティングのためにサイト訪問者と連絡をとる」という目的のみで情報を収集するサイトを考えてみる。サイトがこの「サービスまたは製品のマーケティングのためにサイト訪問者と連絡をとる」ことを「データが提供されている活動の遂行とサポート」の目的によるものだとみなしている場合でも、サイトは両方の目的を表明しなければならない。情報を「サービスまたは製品のマーケティングのためにサイト訪問者と連絡をとる」目的で「当サイトおよび当サイトの業務委託先」に提供し、「現在の活動の遂行とサポート」の目的で「公のフォーラム」に提供するサイトは、「当サイトおよび当サイトの業務委託先」と「公のフォーラム」の両方の受領者を表明しなければならない。
サービス提供者は時に、自分たちが収集したデータを集合化する。この集合データは元のデータとは違う目的で使用され、元のデータより広く共有され、または元のデータより長く保持されることがある。例えば多くのサイトは広告者に対して、Webへアクセスした人の数や、さまざまな人工統計学的なグループに適合するアクセス者のパーセンテージなどてら発表したり、公開したりする。こういった統計の数字を元にした個人や世帯のデータを取り出すことができないように、集合化した数字が使用されたり、共有されたりすると、P3Pポリシーで上記のような数値が非公開となることが必要である。しかしながら、サービスは元のデータが収集された事実を非公開にしなければならないし、データが集合化される前にそのデータから作成される使用のすべてを宣言しなければならない。
CONSEQUENCE
要素 STATEMENT
要素(ステートメント要素)には、利用者に対し、サイトのプラクティスに関して追加的な説明を与えることができる
CONSEQUENCE
要素(結果要素)を任意に含むことができる。
<CONSEQUENCE>
[35] | consequence |
= |
"<CONSEQUENCE>" PCDATA "</CONSEQUENCE>" |
NON-IDENTIFIABLE
要素 このSTATEMENT
配下には収集されたデータがないということや、STATEMENT
で
参照されているデータはすべて収集に関して匿名扱いされるということを示して、STATEMENT
要素(ステートメント要素)には任意にNON-IDENTIFIABLE
要素が含まれる事がある。
<NON-IDENTIFIABLE/>
STATEMENT
を囲む
際に参照されるデータを匿名扱いにすることを示す。”匿名扱い”されるデータを考慮するためは、
組織や第三者機関が自然人の識別のために収集されたデータを添付する妥当な方法はない。ランダム
に作成されたセッションIDの様に、データの種類によっては、元から匿名であったものもある。 ある
状況において、自然人を識別するデータ(IPアドレスや名前、住所など)は”匿名”だとみなされる
ようにするために、非可逆的な変換をなされなければならない。
非可逆的な変換の例として、IPアドレスの最後の7ビット削除し、ゼロに置き換えることがある。
この変換はバックアップ媒体に保存されるものを含む、データのコピーすべてに適用されなければならない。
識別されたデータをテーブルから一意に対応する値と置き換えるアルゴリズムは非可逆的だとはみなされない。
更に、起こり得るデータ値の集合が、起こり得るハッシュ値が作成され、ある人が逆にしようと試みている値と
比較できるほど少ない場合、一方的な暗号ハッシュは、非可逆的だとはみなされない。NON-IDENTIFIABLE
要素が、ポリシーのSTATEMENT
要素に存在する場合、この要素が匿名化される方法についての人が読むことのできる説明はdiscuriに含まれるかリンクされなければならない。
また、NON-IDENTIFIABLE
要素がSTATEMENT
に存在する場合、そのSTATEMENT
のその他の要素は任意になる。
[36] | non-identifiable |
= |
"<NON-IDENTIFIABLE/>" |
PURPOSE
要素
NON-IDENTIFIABLE
要素を含まない各STATEMENT
要素(ステートメント要素)には、一つ以上のデータ収集目的またはデータ利用目的を含むPURPOSE
要素(目的要素)が含まれなければならない。サイトは自らのデータプラクティスを、6つの特定化された目的のうちの一つ以上の目的に分類しなければならない。
<PURPOSE>
PURPOSE
要素には、以下の目的の中から一つ以上が含まれなければならない:
<current/>
<admin/>
<develop/>
<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>
各々の目的(current
を除く)には、以下のオプショナルな属性を付加することができる:
required
always
: 目的がいつも必要である。; ユーザはデータの使用に opt-in
または opt-outをすることができない。これは、required
属性が無い場合のデフォルトである。
opt-in
:
ユーザがこの使用を積極的に要求する場合にのみこの目的のために、データを使用することがある。 --
例えば、ユーザがメーリングリストに追加してほしいと要求した場合。積極的な要求にはユーザが特別な処置をしなければならない。
例えば、ユーザが調査に記入する場合、メーリングリストに追加するために追加のボックスにチェックを入れることは積極的な要求だとみなされる。
しかしながら、事前にチェック付けているメ―リングリストの要求ボックスがある調査フォームを提出することは、積極的な要求とはみなされない。
さらに、ユーザが積極的に要求する目的にたいして、ユーザが心変わりをしたり、その要求を拒否したりするにちがいない。-- そういうことはopturi
に定義されなければならない。
opt-out
:
ユーザがこの方法で使用してほしくないと要求する時以外にデータはこの目的のために使用される。 この値が選択されれば、このサービスはopturi
でユーザがこの目的をopt-out
する方法に関して分かり易い指示を提供しなければならない。
また、サービスはデータ収集の時点で、そういった指示を提供するか、指示を示すべきである。
[37] | purpose |
= |
"<PURPOSE>" *extension 1*purposevalue *extension "</PURPOSE>" |
[38] | purposevalue |
= |
"<current/>" | ; 現在の活動の遂行とサポート "<admin" [required] "/>" | ; ウェブサイトとシステムの管理 "<develop" [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>"; その他の利用 |
[39] | required |
= |
" required=" `"` ("always"|"opt-in"|"opt-out") `"` |
サービス提供者は上記の要素をデータ収集の目的を説明するために用いなければならない。サービス提供者は適用される全ての目的を公開しなければならない。サービス提供者があるデータ要素をある目的で利用することを公開しなかった場合、そのことはデータをその目的では利用しないということを意味している。「その他の利用」の目的でデータを利用すると公開したサービス提供者は、その目的に関して人間が読むことのできる説明を与えなければならない。
RECIPIENT
要素
NON-IDENTIFIABLE
要素を含まない各STATEMENT
要素(ステートメント要素)には、収集データの一つ以上の受領者を含むRECIPIENT
要素(受領者要素)が含まれなければならない。サイトはデータの受領者を、6つの特定化された受領者のうちの一つ以上の受領者に分類しなければならない。
<RECIPIENT>
RECIPIENT
要素には、以下の受領者の中から一つ以上が含まれなければならない。:
<ours>
<delivery>
<same>
<other-recipient>
<unrelated>
<public>
上記の各タグは任意に以下を含むことができる:
recipient-description
タグ;
<ours>
を例外として、required
属性:この属性は共有のopt-in/opt-outが可能であるかどうかを示して、PURPOSE
タグに類似の属性として定義されている。(そしてそのデフォルト値はalways
である。)
[40] | recipient |
= |
"<RECIPIENT>" *extension 1*recipientvalue *extension "</RECIPIENT>" |
[41] | 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>" ; 当組織と無関係な第三者 |
[42] | recdescr |
= |
"<recipient-description>" PCDATA ; 受領者の記述 "</recipient-description>" |
サービス提供者は適合する全ての受領者を公開しなければならない。 P3Pはそのデータが受領者にどのようにリリースされるのかについての区別はしない。ただ、データがリリースされれば、そのデータが必要であり、P3Pポリシーでそのデータ共有を明らかに示さなければならないだけである。 P3Pポリシーでカバーされなければならないデータの公表例には以下がある。
上記の受領者がデータすべてを記述してはいない場合があることに注意。たとえば、出荷や支払いをする人などのような取り引き業務をおこなう人(この行動の完了とサポートに必要であるが、他の業務にしたがうことに問題がある)の場合。現在、配達サービスのみポリシーで明らかに表している。他の取り引き業務については、オリジナルのサービスプロバイダに関して一番正確に表しているカテゴリで示している。
配達サービスの特別な要素は含まれているが、(銀行やクレジットカードなどの)支払い処理についての要素は、以下の理由のため含まれていない。配達の受領者は普通、配達サービスのプライバシーポリシーを見直す機会がないが、金融機関は一般的に顧客の金融データの使用に関して顧客との間に独立の同意書を持つだろう。
<delivery/>
要素は、配送を遂行するためにサービス提供者の代行としてのみデータを使用することに同意している配送サービスに対して使われるべきではないことに注意すること。
RETENTION
要素
NON-IDENTIFIABLE
要素を含まない各STATEMENT
要素(ステートメント要素)には、
そのステートメントで参照されたデータに当てはまる保有ポリシーを示すRETENTION
要素(保有要素)
が含まれなければならない。
<RETENTION>
RETENTION
要素には、以下のうちの1つが含まれなければならない:
<no-retention/>
<stated-purpose/>
<legal-requirement/>
<business-practices/>
<indefinitely/>
[43] | retention |
= |
"<RETENTION>" *extension retentionvalue *extension "</RETENTION>" |
[44] | retentionvalue |
= |
"<no-retention/>" | ; 保有しない "<stated-purpose/>" | ; 言明された目的 "<legal-requirement/>" | ; 法律に基づいて言明された目的 "<indefinitely/>" | ; 情報は無期限に保有 "<business-practices/>" ; 業務プラクティスによる |
DATA集合
とDATA
要素
NON-IDENTIFIABLE
要素を含まない各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.gender
は USER.GENDER
あるいは User.Gender
とは異なる)。
optional
optional
属性は、ポリシーにおいてのみ使用される(データスキーマの定義においては使用されない)。
ユーザエージェントは自動化した意思決定でoptional
属性を使用することついて注意すべきである。もし、optional
属性がユーザエージェントが直接管理するデータ要素(HTTP
Referer
ヘッダやクッキーのような)に関係があれば、ユーザエージェントは、データ要素が必要な場合にサイトのポリシーがユーザのプリファレンスと合わないと、データ要素が任意であるウェブサイトにこのデータが転送されないことを確認すべきである。また、ユーザが一般的に入力するフォームのデータに関して、任意のデータについてのサイトの業務がユーザのプリファレンスに合わなくなったら、ユーザエージェントはユーザに警告すべきである。
DATA
要素は、現実のデータを含むことができる(ENTITY
要素のケースでみたように)。そして、カテゴリ情報関連も含むことができる。
[45] | data-group |
= |
"<DATA-GROUP" [" base=" quoted-URI] ">" 1*dataref *extension "</DATA-GROUP>" |
[46] | 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
要素内で表現することができる。例えば、ポリシーの例の様に。
<ENTITY> <DATA-GROUP> <DATA ref="#business.name">CatalogExample</DATA> <DATA ref="#business.contact-info.postal.street">4000 Lincoln Ave.</DATA> ...
CATEGORIES
要素 カテゴリとは、利用者とユーザエージェントに、意図されたデータ利用に関してヒントを提供するデータ要素の属性である。カテゴリは、P3Pユーザエージェントの実装と使用をより容易にするために不可欠である。
カテゴリはデータ要素ではないことに注意:カテゴリによって、利用者はさらに一般化されたプリファレンスやデータ交換規則を表明することができる。
カテゴリはENTITY
要素のDATA
要素内で使用すべきではない。
データカテゴリを示すために使われている記号は以下の通りである:
[47] | categories |
= |
"<CATEGORIES>" 1*category "</CATEGORIES>" |
[48] | 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つの章で、両型の要素を5.7章で説明する。
EXTENSION
要素 P3Pは、EXTENSION
という要素を使用して、構文とセマンティクスを拡張するための柔軟かつ強力なメカニズムを提供する。この要素は拡張に属すポリシー/ポリシー参照ファイル/データスキーマの部分を示す為に使用される。EXTENSION
要素内のデータの意味は、拡張そのものによって定義される。
<EXTENSION>
optional
yes
を指定することによって示され、この拡張を理解できないアプリケーションは安全にEXTENSION
要素の内容を無視することができ、
通常どおりにポリシー(ポリシー参照ファイルまたは、データスキーマ)全体を処理することができることを意味する。optional
属性は必須ではなく、既定値はyes
:
[49] | 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上で、拡張の説明を載せたページを提供してもよい。
EXTENSION
要素はP3P構文内のさまざまな場所に存在することができる。その場所は付録 4のXMLスキーマで規範的に指定されている(そして、付録 5のAMNF構文とDTDで非公式に指定されている)。
ユーザエージェントはプリファレンスのインポートと処理が可能な方法を文書化しなければならない。また、プリファレンスがエクスポートできる方法を文書化するべきである。
P3Pユーザエージェントはユーザが選択したプレファレンス設定に従って動作しなければならない。そのためには、ユーザエージェントがポリシーとポリシー参照ファイルを処理して、ユーザのプリファレンスや設定で指定したその他の基準に関して各ポリシーを適切に評価できなければならない。設定によっては、ユーザエージェントがP3Pの必要な部分が存在するかどうかを確認したり、全ポリシーの構文が正しいかどうかを確認する必要がある。
コンパクトポリシーは、ポリシーの適用についてユーザエージェントが迅速で同時の決定をできるためのヒントを提供するP3Pポリシーを要約したものである。コンパクトポリシーはユーザエージェントやサーバの 任意である性能の最適化である。ユーザのプリファレンスに従って決定をするコンパクトポリシーから十分な情報を得る事のできないユーザエージェントは、完全なポリシーを取り出すべきである。
P3Pv1において、コンパクトポリシーはクッキー(cf. [COOKIES] および [STATE])のみのポリシー情報を含んでいる。ウェブサーバは完全なポリシーで参照されたクッキーを表すP3Pのコンパクトポリシーをビルドする責任がある。P3Pのコンパクトポリシーで指定されたポリシーはコンパクトポリシーと同じHTTP応答で設定されていたり、HTTP応答に関連するスクリプトで設定されているクッキーに格納されているデータやそのクッキーにリンクしているデータに適用する。
HTTPリソースはいずれもP3Pレスポンスヘッダ(cf. 2.2.2章)を通じてP3Pのコンパクトポリシーを含んでもよい。サイトがP3Pヘッダを使用している場合、HEAD
とOPTION
要求を含む適切なリクエスト方式のレスポンスでP3Pのコンパクトポリシーを含むべきである。
P3Pのコンパクトポリシーヘッダには一つ以上の範囲を決められたトークン("コンパクトポリシー")を含む引用された文字列がある。トークンはどの順番ででも表示できるし、スペース文字(" ") は有効なデリミッタだけである。このヘッダの構文は以下である:
[50] | compact-policy-field |
= |
`CP="` compact-policy `"` |
[51] | compact-policy |
= |
compact-token *(" " compact-token) |
[52] | compact-token |
= |
compact-access | compact-disputes | compact-remedies | compact-non-identifiable | compact-purpose | compact-recipient | compact-retention | compact-categories | compact-test |
すべてのHTTPヘッダに関して、P3Pヘッダのフィールドの名前は大文字小文字を区別しない。その代わり、フィールド値(つまり、ヘッダのコンテンツ)は大文字小文字を区別する。
HTTP応答にコンパクトポリシーが複数含まれている場合、P3Pユーザエージェントは2番目以降をすべて無視しなければならない。
P3PのコンパクトポリシーはP3Pのボキャブラリから以下の要素を表わすトークンを使用する。 ACCESS
,
CATEGORIES
, DISPUTES
, NON-INDENTIFIABLE
,
PURPOSE
, RECIPIENT
, REMEDIES
,
RETENTION
, TEST
一つのコンパクトポリシーにトークンが2回以上現れると、そのコンパクトポリシーは一度しか現れなかったポリシーと同じセマンティクを持つ。コンパクトポリシーに承認されないトークンが現れる場合、コンパクトポリシーはトークンが存在しないポリシーと同じセマンティクを持つ。
P3PのコンパクトポリシーのボキャブラリはHTTPレスポンスヘッダ内でネットワーク上のバイト数を減らすため開発者が読む事のできる言語を使用して表現される。そのトークンの構文は以下である:
ACCESS
ACCESS
要素の情報はコンパクトポリシーに
三文字コードで構成されたトークンを使用して以下のように表される:
[53] | compact-access |
= |
"NOI" | ; for <nonident/> "ALL" | ; for <all/> "CAO" | ; for <contact-and-other/> "IDC" | ; for <ident-contact/> "OTI" | ; for <other-ident/> "NON" ; for <none/> |
DISPUTES
完全なP3Pポリシーに一つ以上のDISPUTES
要素を含むDISPUTES-GROUP
要素がある場合、サーバはP3Pのコンパクトポリシーフィールドに単一の"DSP
"トークンを提供してユーザエージェントに知らせるべきである:
[54] | compact-disputes |
= |
"DSP" ; there is some DISPUTES |
REMEDIES
REMEDIES
要素の情報はコンパクトポリシーに以下のように表される:
[54] | compact-remedies |
= |
"COR" | ; for <correct/> "MON" | ; for <money/> "LAW" ; for <law/> |
NON-IDENTIFIABLE
ポリシーの各ステートメントにあるNON-IDENTIFIABLE
要素の存在はNID
トークンによって知らされる(NID
トークンはポリシー内の各ステートメントにNON-IDENTIFIABLE
要素がない限り、使用してはならない。):
[56] | compact-non-identifiable |
= |
"NID" ; for <NON-IDENTIFIABLE/> |
PURPOSE
目的(purpose)は三文字コードで構成されているトークンと一つの任意の文字属性を使用してP3Pのコンパクトポリシーに表現される。このような任意の属性は、完全なP3Pポリシー内の"required
"属性の値を記号化する:その値は"a
",
"i
" と
"o
"であり、対応するP3Pポリシー内の"required
"属性が、各々"always
",
"opt-in
" そして "opt-out
"に設定されなければならないことを意味する。
P3Pのコンパクトポリシーにおいて、完全なP3Pポリシー内にある一つ以上のother-purposesを設定しなければならない場合、完全なP3Pポリシー内に
other-purposesが存在するということをユーザエージェントに知らせるために単一のOTP
フラグが使用される。
P3Pの目的とコンパクトポリシーコードの関連性は以下である:
[57] | compact-purpose |
= |
"CUR" | ; for <current/> "ADM" [creq] | ; for <admin/> "DEV" [creq] | ; for <develop/> "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/> |
[58] | 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受領者とコンパクトポリシーコードの関連性は以下である:
[59] | 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
要素の情報はコンパクトポリシーに以下のように表される:
[60] | compact-retention |
= |
"NOR" | ; for <no-retention/> "STP" | ; for <stated-purpose/> "LEG" | ; for <legal-requirement/> "BUS" | ; for <business-practices/> "IND" ; for <indefinitely/> |
CATEGORIES
カテゴリ(Categories)はコンパクトポリシーに以下のように表される:
[61] | compact-categories |
= |
"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/> "LOC" | ; for <location/> "GOV" | ; for <government/> "OTC" ; for <other-category/> |
完全なP3Pポリシー内において、一つ以上のother-category
が指定されている場合、
単一のOTC
トークンは、ユーザエージェントにother-category
'sが完全なP3Pポリシー内に存在することを知らせるために使用される。
TEST
TEST
要素の存在はTST
トークンによって知らされる:
[62] | compact-test |
= |
"TST" ; for <TEST/> |
P3PのコンパクトポリシーがHTTPレスポンスヘッダにある場合、現在のレスポンスで設定されたクッキーに適用する。これにはHTTP
SET-COOKIE
ヘッダを使用して設定されたクッキーまたは、スクリプトで設定されたクッキーがある。
コンパクトポリシーを使用するには、完全なP3Pポリシーの効力がクッキーの有効期限に及ばなければならない。ポリシーがクッキーの有効期限を超えて有効であることを示す方法はない。なぜなら、サイトはコンパクトポリシーを送信しない限り、ユーザエージェントがいつキャッシュを最適化(キャッシングの値が限界にきている)するかを知る方法がないからである。サーバがコンパクトポリシーを送信すると、適応するクッキーの期限が有効な間は、そのコンパクトポリシーと対応する完全なP3Pポリシーも有効であるという事を示している。
P3Pのコンパクトポリシーを使用している時に、ウェブサイトはP3Pポリシー参照ファイルの
COOKIE-INCLUDE
要素が参照したポリシーを要約することによって、コンパクトポリシーを構築する責任がある。サイトのポリシー参照ファイルがCOOKIE-EXCLUDE
要素を使用している場合、そのサイトは、特定の応答で設定されたクッキーを与えられたユーザエージェントへの正しいP3Pのコンパクトポリシーの送信を管理する必要があるだろう。
P3PポリシーをP3Pのコンパクトポリシーへ変換すると、記述的なポリシー情報にロスを生み出すことがある。--コンパクトポリシーには完全なポリシーで指定されたポリシー情報をすべて含んでいなくてもよい。expiry要素、data group/data-schema要素、entity要素、consequences要素、そしてdisputes要素を含むコンパクトポリシーを実装する際に破棄された完全なポリシーからの情報は減少する。
必須の拡張子を含む完全なポリシーをコンパクトポリシーとして表してはならない。
3.3.1章で述べたように、完全なポリシーの複数のステートメントに現れる目的(purposes)、受領者(recipients)そしてカテゴリ(categories)はすべてコンパクトポリシーに収集されなければならない。その収集を行う時、ウェブサイトは関連するトークンをすべて公開しなければならない。(例えば、複数の保有(Retention)ポリシーが設定されている以下の例4.1を参照。)
また、ステートメントに現れる各固定カテゴリデータ要素に対して、関連するカテゴリは、関連するスキーマに定義されているように、コンパクトポリシーに組込まれなければならない。
例 4.1:
以下のP3Pポリシーを考えてみると:
<POLICY name="sample" 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><individual-decision required="opt-out"/></PURPOSE> <RECIPIENT><ours/></RECIPIENT> <RETENTION><stated-purpose/></RETENTION> <DATA-GROUP> <DATA ref="#user.name.given"/> <DATA ref="#dynamic.cookies"> <CATEGORIES><preference/><uniqueid/></CATEGORIES> </DATA> </DATA-GROUP> </STATEMENT> </POLICY>
対応するコンパクトポリシーは:
"NON DSP ADM DEV PSD IVDo OUR IND STP PHY PRE NAV UNI"
ユーザエージェントの中にはユーザプリファレンスを評価するのにコンパクトポリシーから完全なP3Pポリシーを作成しようとするものがある。ユーザエージェントは幾つかの属性と同様にENTITY
および
DISPUTES
要素を提供することができない。しかし:
ACCESS
要素そして:適切なCATEGORIES
を持つ
dynamic.miscdata
要素と同様に、適切なRECIPIENT
,
RETENTION
,
そしてPURPOSE
要素を含む単一のSTATEMENT
要素を
使用してポリシーを作成できなければならない。
ACCESS
要素そして:適切なCATEGORIES
を持つ
dynamic.miscdata
要素と同様に、異なった対応する
RETENTION
要素の値と適切な
RECIPIENT
とPURPOSE
要素を含む
複数のSTATEMENT
要素(コンパクトな保有(retention)の異なる値と同じ数の)を使用して
ポリシーを作成できなければならない。 2.4.1章で述べている一義性の必要事項に従って、(4.5章に従って、URIのポリシー参照ファイルで参照されている完全なポリシーがコンパクトポリシーに対して応答しない場合でも)、サイトはいずれの場合でも与えられたURIのコンパクトポリシーを有効にしなければならないことに注意。
データスキーマとはデータの集合の記述である。P3Pにはデータスキーマを記述する方法があるので、サービスは収集したデータについてユーザエージェントと通信できる。データスキーマは多くのデータ要素から作成されている。このデータ要素はサービスが収集するかもしれない特定の項目である。
データのデータ要素は以下の特性をもつ。
<DATA>
要素にこのデータ要素を持つ際に使用される。これはすべてのデータ要素で必要である。
デーータ要素は階層式に構成されている。データ要素は自動的に階層式にその配下にすべてのデータ要素を含める。例えば、”ユーザ名”を表しているデータ要素には”ユーザの名前”、”ユーザの名字”などを表わすデータ要素が含まれている。この階層はデータ要素の名前に基づいている。そのため、データ要素、user.name.given,
user.name.family,
そしてuser.name.nickname
はデータ要素user.name
の子であり、データ要素user.name
はデータ要素user
の子である。
P3Pはサービスが共通に使用するデータ要素を大量に含むP3P 基本データスキーマというデータスキーマを定義する。
サービスは、データスキーマを作成し、そのデータスキーマを公開することによって新しいデータ要素を宣言する事がある。これは<DATASCHEMA>
を使用して行われる。スキーマはXMLファイルに独立して発行することができる。そしてそれらを使用するポリシーによって参照されるか、それを参照しているポリシーファイルに埋め込むことができる。<DATASCHEMA>
要素は以下のように定義されている。
[63] | dataschema |
= |
"<DATASCHEMA" [` xmlns="http://www.w3.org/2001/09/P3Pv1"`] ">" *(datadef|datastruct|extension) "</DATASCHEMA>" |
独立したデータスキーマにはファイルの最初のXML要素のとして<DATASCHEMA>
要素があり、以下のようにP3Pデータスキーマとして識別するためにはxmlns
属性に適切なネーム空間を持たなければならない。
<DATASCHEMA xmlns="http://www.w3.org/2002/01/P3Pv1"> <DATA-STRUCT ... /> ... <DATA-DEF ... /> </DATASCHEMA>
任意にDATASCHEMA
はxml:lang
属性を含むことができる。(2.4.2章を参照)
(3.2.1章,"<POLICIES>
要素に定義されているように)データスキーマがポリシーファイルに宣言されると、<DATASCHEMA>
要素はすでに使用されているが、ネーム空間属性は与えられていない。
データスキーマには自然言語で書かれた多くのフィールドがある。データスキーマを公開しているサービスはこれらのフィールドを多言語に翻訳したいと考えても よい。データ要素の短い名前と長い名前を翻訳してもよいが、データ要素名は翻訳てきない。-このフィールドはデータスキーマの翻訳に関係なく一貫性を保たなければならない。
サービスが多言語でデータスキーマを提供しようとしする場合、最良の選択ができるようにそのデータスキーマの要求にあるAccept-Language
HTTP要求-ヘッダを調べるべきである。
データスキーマはよく、データ要素の共通のグループを再利用する必要がある。P3Pデータスキーマはデータ構造を使用してそれをサポートしている。データ構造は名前を付けられ、抽象的なデータ要素のグループの定義である。データ要素が定義されると、そのデータ要素を構造化されていないタイプであると定義することができる。その場合、子エレメントがない。また、データ要素を特別に構造化されているタイプであると定義することもできる。その場合、データ要素はデータ構造で定義されている要素すべてをサブ-要素として組込むために自動的に展開される。例えば、以下の構造が日付と時間を表示するのに使用される。
<!-- "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-DEF name="meeting.time" short-description="Meeting time" structref="#date"/> <DATA-DEF name="meeting.place" short-description="Meeting place/>
meeting.place
は構造を参照していないので、構造化されていないタイプであり、子要素を持たない。meeting.time
要素はdate
構造を使用している。このことを宣言することで以下のサブ-要素を作成する。
meeting.time.ymd.year meeting.time.ymd.month meeting.time.ymd.day meeting.time.hms.hour meeting.time.hms.minute meeting.time.hms.second
P3Pポリシーはmeeting
データ要素を収集すると宣言することができる。meeting
データ要素はすべてのmeeting
のサブ-要素を収集することまたは、階層-
meeting.time
の配下のデータ要素、例えばmeeting.time.ymd.day
など、を使用できることを暗示している。
DATA-DEF
とDATA-STRUCT
要素
<DATA-DEF>
と
<DATA-STRUCT>
<STATEMENT>
内で宣言されている。
以下の属性はこれら2つの要素で共通である:
name
(必須の属性)
user.gender
は USER.GENDER
あるいは
User.Gender
とは異なる。 なお、データ要素と構造の名前は、番号文字がドットの直後に現われることができない。
structref
strucref
属性のない(または関連した構造のない) データ要素またはデータ構造は"構造化されていない"という。
short-description
DATA-DEF
とDATA-STRUCT
要素は LONG-DESCRIPTION
要素を使って、データ要素/集合または型のLONG-DESCRIPTION
を含むことができる。
[64] | datadef |
= |
"<DATA-DEF name=" quotedstring [` structref="` URI-reference `"`] [" short-description=" quotedstring] ">" [categories] ; データ要素のカテゴリ [longdescription] ; データ要素の長い表記 "</DATA-DEF>" |
[65] | datastruct |
= |
"<DATA-STRUCT name=" quotedstring [` structref="` URI-reference `"`] [" short-description=" quotedstring] ">" [categories] ; データ構造のカテゴリ [longdescription] ; データ構造の長い表記 "</DATA-STRUCT>" |
ここで、URI-reference は[URI]で定義される。 |
データ要素は共通のプログラム言語で構造化できる:構造はデータ要素の階層的な(ツリーのような)記述である:この階層的な記述はドット(".
")文字を分離記号として使用し
name
属性でなされる。
P3Pは幅広く使用されている数多くの構造やデータ要素の組み込みの定義を持つP3P基本データスキーマを持っている。P3P実装にはP3P基本データスキーマを理解することが必要なので、P3P基本データスキーマが定義している構造や要素はいつもP3Pの実装者が利用できるようになっている。
データスキーマは構造を記述するDATA-STRUCT
を含むことがある。例えば、P3P基本データスキーマのuri
データ構造(cf. 5.5.7.1章)のために、単一のDATA-STRUCT
は存在しない。代わりに、この構造を定義するためにuri.authority
、 uri.stem
、そしてuri.querystring
が一緒に解釈される。
カテゴリはデータ構造やデータ要素に割り当てることができる。以下の規則はこれらのカテゴリがどのような意味を持つのかを定義している。
<DATA-STRUCT>
要素はその中にカテゴリ定義を含んでもよい。構造の定義にカテゴリが含まれている場合、データ定義にあるこれらの構造とデータ構成を使用するとそのカテゴリが選択される。構造の定義にカテゴリがない場合、他の構造やデータ要素で構造の定義を使用する際、その構造のカテゴリを定義してもよい。そうでない場合は、この構造を使用するデータ要素は可変カテゴリ要素となる。ポリシーの可変カテゴリデータ要素を他で使用するとそのポリシー内にカテゴリをリストしなければならない。
<DATA-DEF>
にカテゴリが定義されていない場合、構造化されていないタイプの<DATA-DEF>
は可変カテゴリデータ要素となり、カテゴリが含まれている場合は<DATA-DEF>
にリストされているカテゴリを持つことになる。
<DATA-DEF>
または<DATA-STRUCT>
にカテゴリが定義されていない場合、その構造に定義されているカテゴリがない構造化されたタイプの<DATA-DEF>
または<DATA-STRUCT>
は可変カテゴリデータ要素・構造を作成する。<DATA-DEF>
または<DATA-STRUCT>
にリストされたカテゴリがある場合、カテゴリはそのデータ要素またはサブ要素に適用される。つまり、構造化されたタイプとなるデータ要素を定義し、その構造化されたタイプがカテゴリを定義しない場合、カテゴリはサブ-要素に押し下げられる。
<DATA-DEF>
はその構造にリストされたカテゴリすべてを選択する。さらに、
カテゴリは<DATA-DEF>
にリストされることがあり、構造で定義したカテゴリに付加される。これらのカテゴリはデータ要素のレベルでのみ定義され、サブー要素に”押し下げられる”ことはない。
<DATA-STRUCT>
はそのサブタイプにリストしているカテゴリすべてを選択する。
<DATA-STRUCT>
はそのサブタイプにリストしているカテゴリすべてを置き換える。
foo.a.w
,
foo.a.y
, そしてfoo.b.z
が定義したカテゴリはすべて、データ要素foo
に適用すると考えなければならない。
<DATA-STRUCT>
は可変カテゴリ要素や固定カテゴリ要素で定義することはできない。構造のサブ-要素はすべて可変カテゴリに無くてはならない、か、または、そのすべてに複数のカテゴリが割り当てられなければならない。
<DATA-DEF>
を参照してはならない。つまり、データベーススキーマに存在するdynamic
構造(cf. 5.6.4章 "Dynamic Data")はポリシー内では参照できない、ということである。(そのサブ要素、dynamic.clickstream
、やdynamic.http
などは個々に参照できる。)HyperSpeedExample社が車両の特徴をvehicle
という構造を使用して述べたいと考えているというケースを考える。この構造には以下が含まれる。
vehicle.model
),
vehicle.color
),
vehicle.built.year
), and
vehicle.price
). また、HyperspeedExampleは車両製造業者の場所の定義を組込みたい場合、国や住所、郵便番号などの関連するデータでその他のフィールドに構造を付加することができる。しかし、構造の各部分は同様にその他の構造も使用することができる。つまり、構造は構成できるということである。この場合、P3P基本データスキーマ
は場所の郵便情報をすべて表記して、postal
構造を持っている。そのため構造車輌の最終的な定義は以下となる。
vehicle.model
(構造化されていない)
vehicle.color
(構造化されていない)
vehicle.price
(構造化されていない)
vehicle.built.year
(構造化されていない)
vehicle.built.where
(基本データスキーからのpostal
構造がある)
基本構造postalにはpostal.street
,
postal.city
などといったフォームの記述がある。私達は基本構造postalをvehicle.built.where
に適用しているので、各vehicle.built.where.street
およびvehicle.built.where.city
の記述を使って車両製造の番地や都市にアクセスすることができることを意味する。従って、構造を適用する事(この場合postal
)は一つのモジュラー方法に非常に複雑な記述を作成することができることを意味する。
HyperSpeedExampleは車輌情報すべてが<preference/>
カテゴリにあることを宣言したいと考えている。vehicle.model、vehicle.color,
vehicle.price,
そしてvehicle.built.year
フィールドはすべて構造化されていないタイプなので、それらを<preference/>
カテゴリに割り当てるとHyperSpeedExample の目的は達成できる。車輌は構造化された定義なので、<preference/>
カテゴリをvehicle.built.where
に割り当てると、postal
構造が始めに他のカテゴリに定義されていたとしても、すべての要素を<preference/>
カテゴリに配置し、vehicle.built.where
カテゴリのサブ-要素すべてに定義されたカテゴリを上書き(置き換える)する。
先に述べたように、構造はデータ要素を含まない。単なる抽象的な記述である。:私達は構造を使用して、すばやくデータ要素の構造化した収集を作成することができる。車とバイクのデータを交換したいので、例の様に、HyperSpeedExampleには車両の特徴に関する抽象的な記述が必要である。従って、上記の構造vehicle
を使って、car
とmotorcycle
という二つのデータ要素を定義することができた。
このデータ要素とデータ構造の記述はデータスキーマを使って、XMLに符号化される。HyperSpeedExampleの場合、記述は以下の様になる。
<DATASCHEMA xmlns="http://www.w3.org/2002/01/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>
base
属性を使うことにより、上記の参照はもっと短縮することができる:
<DATA-GROUP base="http://www.HyperSpeed.example.com/models-schema"> <DATA ref="#car.model"/> <DATA ref="#car.built.year"/> </DATA-GROUP>
あるいはデータスキーマはポリシーファイルに直接埋め込む事ができる。この場合、ポリシーファイルは以下のようになる:
<POLICIES xmlns="http://www.w3.org/2002/01/P3Pv1"> <!-- Embedded data schema --> <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> <!-- end of embedded data schema --> <POLICY name="policy1" discuri="http://www.example.com/disc1"> ... <DATA-GROUP base=""> <DATA ref="#car.model"/> <DATA ref="#car.built.year"/> </DATA-GROUP> ... </POLICY> <POLICY name="policy2" discuri="http://www.example.com/disc2"> .... </POLICY> <POLICY name="policy3" discuri="http://www.example.com/disc3"> .... </POLICY> </POLICIES>
どんな場合も、一つのファイルに二つ以上のデータスキーマがあってはならないことに注意。
基本データスキーマや拡張データスキーマで指定されたデータ要素名はP3Pポリシー以外の目的に使用されることがあるということに注意。例えば、WebサイトはHTNLフォームフィールドにラベルを付けるためにこれらのデータ要素名を使用することがある。P3Pポリシーやフォームで同じようにデータを参照することによって、自動化された入力ツールはP3Pユーザエージェントによりよく連携することができる。
データスキーマにおける必須の要求条件は、データスキーマの持続有効性である。特定のURIから取得されるデータスキーマを拡張することによって、データスキーマを 後方互換性で変更することができる。(つまり、データスキーマを変更すると、そのスキーマを使用しているあらゆるポリシーの意味を変えることはできない。という事を意味している。)このようにして、ポリシーのURIはここに含まれているデータ要素と構造において唯一の拡張子の様に振る舞う。従って、後方互換性でないデータスキーマはすべて、新しくそして異なるURIを使用しなければならない。
データスキーマの持続有効性のあるアプリケーションは多言語サイトの例を示す為に提供されたことに注意:データスキーマ用に特定の言語が使用される事を適切に述べるために、
HTTP"Content-Language
"を使用して、同じデータスキーマの多言語サイト(翻訳)版をサーバが提供することができる。
基本データ構造はP3P基本データスキーマ(この基本の性質のため、基本データ構造は再利用されるべきであり、また同様に他の異なるデータスキーマによって再使用すべきである。)によって使用される構造である。P3Pに準拠した全てのユーザエージェントの実装は、基本データ構造を認識できなければならない。以下の個々の表では、基本データ構造の要素、属するカテゴリ、構造、利用者に示す簡易表記名を指定している。複数のカテゴリが固定データ要素に関連づけされるかもしれない。しかしながら、どの基本データ要素も可能な限り、たった一つのカテゴリに割り当てられる。データスキーマの設計者にも同じ事を行う事を推奨する。
date構造は、日付を特定する。日付に関する情報は、周囲の状況によって使われ方が異なるので、全てのdate情報は、"可変"カテゴリ(5.7.2章を参照のこと)として分類される。例えば、スキーマ定義は、このデータ構造を参照する要素内の対応するカテゴリを明白に設定できる。例えば、利用者の誕生日を要求する場合は、"人口統計学的・社会経済学的データ"になるが、クレジットカードの有効期限は、"購入情報"カテゴリとなる。
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 | 人口統計学的・社会経済学的データ | 構造化されていない | 愛称 |
login構造は認証を必要とするコンピュータシステムやWebサイトの情報(IDやパスワード)を指定する。このデータ要素は認証にデジタル認証を使用しているコンピュータシステムやWebサイトに使用すべきではないことに注意。その場合はcertificate構造が使用される。
login |
カテゴリ | 構造 | 簡易表記名 |
id | ユニークな識別子 | 構造化されていない | ログインID |
password | ユニークな識別子 | 構造化されていない | ログインパスワード |
"id"フィールドはコンピュータシステムのログイン情報のID部分を表している。パスワードは秘密にされているが、ユーザのIDは公開される。これには生物測定学的な認証メカニズムのタイプは含まれない。
"password" フィールドはコンピュータシステムのログイン情報のパスワード部分を表している。これは文字列で、ユーザを認証する際に使用される機密のデータ値である。一般的にパスワードは秘密にされていて、注意が必要な情報だと考えられている。
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 | コンピュータ情報 | 構造化されていない | 完全なホストとドメイン名 |
partialhostname | 人口統計学的 | 構造化されていない | ホスト名の一部 |
fullip | コンピュータ情報 | 構造化されていない | 全IPアドレス |
partialip | 人口統計学的 | 構造化されていない | 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 | 利用者の誕生日 |
login | ユニークな識別子 | login | 利用者のログイン情報 |
cert | ユニークな識別子 | certificate | 利用者の身元証明 |
gender | 人口統計学的・社会経済学的データ | 構造化されていない | 利用者の性別(男性または女性) |
employer | 人口統計学的・社会経済学的データ | 構造化されていない | 利用者の雇主 |
department | 人口統計学的・社会経済学的データ | 構造化されていない | 利用者が勤務している組織の部門または課 |
jobtitle | 人口統計学的・社会経済学的データ | 構造化されていない | 利用者の勤務先での肩書き |
home-info | 実社会における連絡先情報、オンライン連絡先情報、人口統計学的・社会経済学的データ | contact | 利用者の自宅への連絡先情報 |
business-info | 実社会における連絡先情報、オンライン連絡先情報、人口統計学的・社会経済学的データ | contact | 利用者の勤務先への連絡先情報 |
このデータ集合は、それ自体がデータの集合である要素を含んでいる事に注意されたい。これらの集合は、データ構造の章で定義してある。データ集合内部にある個々の要素のための簡易表記名は、例えばカンマなど、言語/スクリプトにおける区切り文字を用いて、集合と要素のために定義されている簡易表記名の連結として定義されている。例えば、user.home.postal.postalcode
の簡易表記名は、
"利用者の自宅への連絡先情報, 郵便情報,
郵便番号"となる。ユーザエージェントの実装において、開発者は利用者に情報を提示する場合、連結された表記名を使用せずに、独自の簡易表記名を使用してもよいだろう。
thirdparty
データ集合では、利用者とビジネスが、関連する第三者機関にデータを提供することを可能にする。これは、第三者機関とデータのやり取りを行う必要がある時に便利である。例えば、ある人に送られるプレゼントをオンラインで注文する時や、配偶者や共同経営者の情報を提供する時。そのような情報は、利用者のレポジトリにuser
データ集合として保存されるだろう。ユーザエージェントは、複数のそのようなthirdparty
データ集合を保存する機能を提供し、必要な時にリストから適切な物を利用者が選択できるようにするだろう。
thirdparty
データ集合は、user
データ集合と同等である。詳細は5.6.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ステータスコード。
URIパス分析を行うサイトと同様に標準のサーバアクセスログを集めるWebサイトはこのデータ要素を使用して、
どのようにしてこのデータが使用されるのかを述べることができる。
clickstream
要素用にリスト化されたデータ要素を数個しか収集しないWebサイトは、
dynamic.clickstream
要素全体よりもこれら特定の要素をリストすることを選んでもよい。
このことによって、より制約されたデータ収集プラクティスをもつサイトが正確にサイト訪問者に そのプラクティスを表すことができる。
http
http
要素にはHTTPプロトコルに含まれている追加情報がある。
特定の要素の定義に関してはhttpinfo
構造の定義を参照のこと。
必要であれば、サイトはhttpinfo
構造のすべての要素をカバーする為に dynamic.http
を簡略伝達として使用してもよいし、 httpinfo構造にある特定の要素を参照してもよい。
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/2002/01/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"/> <!-- "login" Data Structure --> <DATA-STRUCT name="login.id" short-description="Login ID"> <CATEGORIES><uniqueid/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="login.password" short-description="Login Password"> <CATEGORIES><uniqueid/></CATEGORIES> </DATA-STRUCT> <!-- "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" structref="#personname"> </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><demographic/></CATEGORIES> </DATA-STRUCT> <DATA-STRUCT name="postal.stateprov" short-description="State or Province"> <CATEGORIES><demographic/></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><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"> </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><computer/></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><computer/></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"> </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/><demographic/></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.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> <DATA-DEF name="dynamic.miscdata" short-description="Miscellaneous Non-base Data Schema = information"/> <!-- "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.login" short-description="User's Login Information" structref="#login"> <CATEGORIES><uniqueid/></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.login" short-description="Third Party's Login Information" structref="#login"> <CATEGORIES><uniqueid/></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/><online/><demographic/></CATEGORIES> </DATA-DEF> </DATASCHEMA>
付録4には、P3Pポリシー参照ファイルとP3Pポリシー文書とP3Pデータスキーマの文書のためのXMLスキーマがある。P3Pポリシー参照ファイル、P3Pポリシー文書そしてP3Pデータスキーマの文書はこのスキーマと一致しなければならないXML文書である。 このXMLスキーマはXMLスキーマ仕様書XML-Schema1][XML-Schema2]に基づいていることに注意されたい。このスキーマはURIhttp://www.w3.org/2002/01/P3Pv1.xsd の独立したファイルに表示されている。
<?xml version='1.0' encoding='UTF-8'?> <schema xmlns='http://www.w3.org/2001/XMLSchema' xmlns:p3p='http://www.w3.org/2002/01/P3Pv1' targetNamespace='http://www.w3.org/2002/01/P3Pv1' elementFormDefault='qualified'> <!-- enabling xml:lang attribute --> <import namespace='http://www.w3.org/XML/1998/namespace' schemaLocation='http://www.w3.org/2001/xml.xsd' /> <!-- 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> <sequence> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> <element ref='p3p:POLICY-REFERENCES'/> <element ref='p3p:POLICIES' minOccurs='0'/> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> </sequence> <attribute ref='xml:lang' use='optional'/> </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'/> <element ref='p3p:HINT' minOccurs='0' maxOccurs='unbounded'/> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> </sequence> </complexType> </element> <element name='POLICY-REF'> <complexType> <sequence> <element name='INCLUDE' minOccurs='0' maxOccurs='unbounded' type='anyURI'/> <element name='EXCLUDE' minOccurs='0' maxOccurs='unbounded' type='anyURI'/> <element name='COOKIE-INCLUDE' minOccurs='0' maxOccurs='unbounded' type='p3p:cookie-element'/> <element name='COOKIE-EXCLUDE' minOccurs='0' maxOccurs='unbounded' type='p3p:cookie-element'/> <element name='METHOD' minOccurs='0' maxOccurs='unbounded' type='anyURI'/> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> </sequence> <attribute name='about' type='anyURI' use='required'/> </complexType> </element> <complexType name='cookie-element'> <attribute name='name' type='string' use='optional'/> <attribute name='value' type='string' use='optional'/> <attribute name='domain' type='string' use='optional'/> <attribute name='path' type='string' use='optional'/> </complexType> <!-- ************* HINT ************* --> <element name='HINT'> <complexType> <attribute name='scope' type='string' use='required'/> <attribute name='path' type='string' use='required'/> </complexType> </element> <!-- ************ POLICIES ************ --> <element name='POLICIES'> <complexType> <sequence> <element ref='p3p:EXPIRY' minOccurs='0'/> <element ref='p3p:DATASCHEMA' minOccurs='0'/> <element ref='p3p:POLICY' minOccurs='0' maxOccurs='unbounded'/> </sequence> <attribute ref='xml:lang' use='optional'/> </complexType> </element> <!-- ************* EXPIRY ************* --> <element name='EXPIRY'> <complexType> <attribute name='max-age' type='nonNegativeInteger' use='optional'/> <attribute name='date' type='string' use='optional'/> </complexType> </element> <!-- **************** Policy **************** --> <!-- ************* POLICY ************* --> <element name='POLICY'> <complexType> <sequence> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> <element ref='p3p:TEST' minOccurs='0'/> <element ref='p3p:ENTITY'/> <element ref='p3p:ACCESS'/> <element ref='p3p:DISPUTES-GROUP' minOccurs='0'/> <element ref='p3p:STATEMENT' maxOccurs='unbounded'/> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> </sequence> <attribute name='discuri' type='anyURI' use='required'/> <attribute name='opturi' type='anyURI' use='optional'/> <attribute name='name' type='ID' use='required'/> <attribute ref='xml:lang' use='optional'/> </complexType> </element> <!-- ************* TEST ************* --> <element name='TEST'> <complexType/> </element> <!-- ************* ENTITY ************* --> <element name='ENTITY'> <complexType> <sequence> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> <element name='DATA-GROUP'> <complexType> <sequence> <element name='DATA' type='p3p:data-in-entity' maxOccurs='unbounded'/> </sequence> </complexType> </element> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> </sequence> </complexType> </element> <complexType name='data-in-entity' mixed='true'> <attribute name='ref' type='anyURI' use='required'/> </complexType> <!-- ************* ACCESS ************* --> <element name='ACCESS'> <complexType> <sequence> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> <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:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> <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='anyURI' 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='anyURI' 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> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> <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'/> <choice> <sequence> <element ref='p3p:PURPOSE'/> <element ref='p3p:RECIPIENT'/> <element ref='p3p:RETENTION'/> <element name='DATA-GROUP' type='p3p:data-group-type' maxOccurs='unbounded'/> </sequence> <sequence> <element name='NON-IDENTIFIABLE'/> <element ref='p3p:PURPOSE' minOccurs='0'/> <element ref='p3p:RECIPIENT' minOccurs='0'/> <element ref='p3p:RETENTION' minOccurs='0'/> <element name='DATA-GROUP' type='p3p:data-group-type' minOccurs='0' maxOccurs='unbounded'/> </sequence> </choice> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> </sequence> </complexType> </element> <!-- ************ PURPOSE ************* --> <element name='PURPOSE'> <complexType> <sequence> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> <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='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' default='always' /> </complexType> <!-- *********** RECIPIENT ************ --> <element name='RECIPIENT'> <complexType> <sequence> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> <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> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> <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 ************** --> <complexType name='data-group-type'> <sequence> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> <element name='DATA' type='p3p:data-in-statement' maxOccurs='unbounded'/> <element ref='p3p:EXTENSION' minOccurs='0' maxOccurs='unbounded'/> </sequence> <attribute name='base' type='anyURI' use='optional' default='http://www.w3.org/TR/P3P/base'/> </complexType> <complexType name='data-in-statement' mixed='true'> <sequence minOccurs='0' maxOccurs='unbounded'> <element ref='p3p:CATEGORIES'/> </sequence> <attribute name='ref' type='anyURI' use='required'/> <attribute name='optional' use='optional' default='no' type='p3p:yes_no'/> </complexType> <!-- ************** 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> <attribute ref='xml:lang' use='optional'/> </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='anyURI' 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='location' 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='optional' default='yes' type='p3p:yes_no'/> </complexType> </element> </schema>
この付録では、P3Pポリシー参照ファイル、P3Pポリシー文書そしてP3Pデータスキーマ文書のためのDTDを含む。 P3Pが有効であることを確認するためにこのDTDを使用してもよい。(しかし、DTDと比較した場合、拒否される有効なファイルが存在することがあることに注意。) DTDはURIhttp://www.w3.org/2002/01/P3Pv1.dtdの独立したファイルに表示されている。
<!-- *************** Entities *************** --> <!ENTITY % URI "CDATA"> <!ENTITY % NUMBER "CDATA"> <!-- *********** Policy Reference *********** --> <!-- ************** META ************** --> <!ELEMENT META (EXTENSION*, POLICY-REFERENCES, POLICIES?, EXTENSION*)> <!ATTLIST META xml:lang NMTOKEN #IMPLIED> <!ATTLIST META xmlns #FIXED "http://www.w3.org/2002/01/P3Pv1"> <!-- ******* POLICY-REFERENCES ******** --> <!ELEMENT POLICY-REFERENCES (EXPIRY?, POLICY-REF*, HINT*, EXTENSION*)> <!-- *********** POLICY-REF *********** --> <!ELEMENT POLICY-REF (INCLUDE*, EXCLUDE*, METHOD*, EXTENSION*)> <!ATTLIST POLICY-REF about %URI; #REQUIRED > <!-- ************** HINT ************** --> <!ELEMENT HINT EMPTY> <!ATTLIST HINT scope CDATA #IMPLIED path CDATA #IMPLIED > <!-- ************* EXPIRY ************* --> <!ELEMENT EXPIRY EMPTY> <!ATTLIST EXPIRY max-age %NUMBER; #IMPLIED date CDATA #IMPLIED > <!-- ************ POLICIES ************ --> <!ELEMENT POLICIES (EXPIRY?, DATASCHEMA?, POLICY*)> <!ATTLIST POLICIES xml:lang NMTOKEN #IMPLIED> <!ATTLIST POLICIES xmlns #FIXED "http://www.w3.org/2002/01/P3Pv1"> <!-- ***** INCLUDE/EXCLUDE/METHOD ***** --> <!ELEMENT INCLUDE (#PCDATA)> <!ELEMENT EXCLUDE (#PCDATA)> <!ELEMENT COOKIE-INCLUDE EMPTY> <!ATTLIST COOKIE-INCLUDE name CDATA #IMPLIED value CDATA #IMPLIED domain CDATA #IMPLIED path CDATA #IMPLIED> <!ELEMENT COOKIE-EXCLUDE EMPTY> <!ATTLIST COOKIE-EXCLUDE name CDATA #IMPLIED value CDATA #IMPLIED domain CDATA #IMPLIED path CDATA #IMPLIED> <!ELEMENT METHOD (#PCDATA)> <!-- **************** Policy **************** --> <!-- ************* POLICY ************* --> <!ELEMENT POLICY (EXTENSION*, TEST?, ENTITY, ACCESS, DISPUTES-GROUP?, STATEMENT+, EXTENSION*)> <!ATTLIST POLICY name ID #REQUIRED discuri %URI; #REQUIRED opturi %URI; #IMPLIED xml:lang NMTOKEN #IMPLIED> <!-- ******** TEST ******** --> <!ELEMENT TEST EMPTY> <!-- ************* ENTITY ************* --> <!ELEMENT ENTITY (EXTENSION*, DATA-GROUP, EXTENSION*)> <!-- ************* ACCESS ************* --> <!ELEMENT ACCESS (EXTENSION*, (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 (EXTENSION*, 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 (EXTENSION*, (correct | money | law)+, EXTENSION*)> <!ELEMENT correct EMPTY> <!ELEMENT money EMPTY> <!ELEMENT law EMPTY> <!-- *********** STATEMENT ************ --> <!ELEMENT STATEMENT (EXTENSION*, CONSEQUENCE?, ((PURPOSE,RECIPIENT,RETENTION,DATA-GROUP+)| (NON-IDENTIFIABLE,PURPOSE?,RECIPIENT?,RETENTION?,DATA-GROUP*)), EXTENSION*)> <!-- ********** CONSEQUENCE *********** --> <!ELEMENT CONSEQUENCE (#PCDATA)> <!-- ******** NON-IDENTIFIABLE ******** --> <!ELEMENT NON-IDENTIFIABLE (EMPTY)> <!-- ************ PURPOSE ************* --> <!ELEMENT PURPOSE (EXTENSION*, (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-decision %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 (EXTENSION*, (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 (EXTENSION*, (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 (EXTENSION*, 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)*> <!ATTLIST DATASCHEMA xml:lang NMTOKEN #IMPLIED> <!ATTLIST DATASCHEMA xmlns #FIXED "http://www.w3.org/2002/01/P3Pv1"> <!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 | location | 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 location EMPTY> <!ELEMENT government EMPTY> <!ELEMENT other EMPTY> <!-- *********** EXTENSION ************ --> <!ELEMENT EXTENSION ANY> <!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), Brooks Dobbs (DoubleClick), Rajeev Dujari (Microsoft), Matthias Enzmann (GMD), Patrick Feng (RPI), Aaron Goldfeder (Microsoft), 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.), Tri Tran (AvenueA), Mark Uhrmacher (DoubleClick), Danny Weitzner (W3C), Michael Wallent (Microsoft), Rigo Wenning (W3C), Betty Whitaker (NCR), Allen Wyke (Engage), 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.).
2001年9月28日ラストコールワーキングドラフトからの改訂履歴
ACCESS
、DISPUTES-GROUP
、 REMEDIES
、PURPOSE
、RECIPIENT
、RETENTION
、DATA-GROUP
の始めにオプションの拡張子を追加した。POLICY-REF
の終わりにオプションの拡張子を追加した。META
は拡張メカニズムを使用し、P3Pコンポーネントの後には一般的なマークアップはない。(DTDとスキーマをはめ込む。)META
、POLICIES
そして、DATASCHEMA
に追加した。