[[← 1 節に戻る|Palm OS Programmer's Companion Volume II/3-1]] [[↑3 章トップへ|Palm OS Programmer's Companion Volume II/3]] [[3 節に進む →|Palm OS Programmer's Companion Volume II/3-3]] ---- !!! 3-2 PDI ライブラリについて Palm OS PDI ライブラリは、以下のオブジェクトと関数を提供する共有ライブラリです。 *入力データストリームから vCard オブジェクトの読み取り。[[PDI リーダの作成|Palm OS Programmer's Companion Volume II/3-3]]ではどのように PDI リーダを作成して使用するかを説明し、[[PDI リーダの利用例|Palm OS Programmer's Companion Volume II/3-5]]セクションでは入力ストリームから vCard データを読み取る例を提供します。 *出力データストリームへ vCard オブジェクトの書き込み。[[PDI ライタの作成|Palm OS Programmer's Companion Volume II/3-3]]ではどのように PDI ライタを作成して使用するかを説明し、[[PDI ライタの利用例|Palm OS Programmer's Companion Volume II/3-6]]セクションでは出力ストリームへ vCard データを書き込む例を提供します。 :訳注:リスト2番目の説明文が1番目と同じく PDI リーダに関するものだったので、適宜変更しました。 PDI ライブラリは、多くのフォーマット・多くのメディアからのオブジェクトの読み書きを扱います。メディアの指定について詳しくは「[[異なるメディアへの UDA の使用|Palm OS Programmer's Companion Volume II/3-4]]」を参照して下さい。 !!PDI プロパティとパラメータの形式 PDI ライブラリは、リーダまたはライタオブジェクトでプロパティ情報を指定するのに使用できる定数を提供します。これらは vObject標準で定義されている以下の形式の定数を含みます。 *'''プロパティ名'''定数は、PDI プロパティ名を表します。各プロパティ名定数は {{span style='color:blue;font-family:monospace;',kPdiPRN_}} プレフィックスで始まります。例えば、{{span style='color:blue;font-family:monospace;',kPdiPRN_ADR}} 定数は {{span style='color:blue;font-family:monospace;',ADR}} プロパティ名を表します。詳しくは、''Palm OS Programmer's API Reference'' の[[第 88 章「Personal Data Interchange Library」]]を参照して下さい。 *'''プロパティ値フィールド'''定数は、構造化されたフィールド値を持つプロパティの、プロパティ値フィールドの位置を表します。各プロパティ値フィールド定数は {{span style='color:blue;font-family:monospace;',kPdiPVF_}} プレフィックスで始まります。例えば、{{span style='color:blue;font-family:monospace;',kPdiPVF_ADR_COUNTRY}} 定数は {{span style='color:blue;font-family:monospace;',ADR}} プロパティ値の {{span style='color:blue;font-family:monospace;',COUNTRY}} フィールドを表します。詳しくは、''Palm OS Programmer's API Reference'' の[[第 88 章「Personal Data Interchange Library」]]セクションを参照して下さい。 *'''パラメータ名'''定数は、vObject プロパティのパラメータ名を表します。各パラメータ名定数は {{span style='color:blue;font-family:monospace;',kPdiPAN_}} プレフィックスで始まります。例えば、{{span style='color:blue;font-family:monospace;',kPdiPAN_Type}} 定数は {{span style='color:blue;font-family:monospace;',TYPE}} パラメータを表し、{{span style='color:blue;font-family:monospace;',kPdiPAN_Encoding}} 定数は {{span style='color:blue;font-family:monospace;',ENCODING}} パラメータを表します。詳しくは、''Palm OS Programmer's API Reference'' の[[第 88 章「Personal Data Interchange Library」]]セクションを参照して下さい。 *'''パラメータ値'''定数は、パラメータの名前と値が結合したものを表します。各パラメータ値定数は {{span style='color:blue;font-family:monospace;',kPdiPAV_}} プレフィックスで始まります。例えば、{{span style='color:blue;font-family:monospace;',kPdiPAV_ENCODING_BASE64}} 定数は {{span style='color:blue;font-family:monospace;',Base64} エンコーディングを表します。詳しくは、''Palm OS Programmer's API Reference'' の[[第 88 章「Personal Data Interchange Library」]]セクションを参照して下さい。 これら定数の完全な一覧は、{{span style='color:blue;font-family:monospace;',PdiConst.h}} ファイルを参照して下さい。 !!PDI ライブラリプロパティ辞書 PDI ライブラリは「よく知られた(well-known)」とみなされるプロパティについての情報を保管する辞書をfeatureしています。よく知られたプロパティは、 vObject標準(vCard と vCal 標準を含む)仕様で定義されたものの一つです。これらの標準は、PDI developer's web page(http://www.imc.org/pdi/pdiproddev.html) にてオンラインで探すことができます。 PDI リーダとライタは、特定のプロパティに対してどのように読み書きを行なうかを決めるために、プロパティ辞書内の情報を使用します。もっと明確に言うなら、この辞書は各プロパティ値のフォーマットについての情報を保存しています。つまり、リーダはプロパティ値を正確に解釈するためにこの情報を使用し、ライタは書き込む値を正確にフォーマットするためにこの情報を使用します。プロパティ値は複数フィールドで構造化されていることがあるため、この情報は重要です。 例えば、標準的な住所({{span style='color:blue;font-family:monospace;',ADR}})プロパティは 7 つのフィールドを持った構造化された値を持っており、フィールドはセミコロンで区切られています。辞書はこの情報を保管しており、PDI リーダは ADR プロパティを解釈する際に 7 つのセミコロンで区切られたフィールドを読み取ることを知っています。 デフォルトによって、入出力の解釈時に各 PDI リーダ及びライタは標準辞書を使用します。しかし、他の方法でプロパティの値を解釈もしくは生成するようにこの振舞いを上書きすることも可能です。詳しくは、「[[プロパティ値の読み取り|Palm OS Programmer's Companion Volume II/3-3]]」または「[[プロパティ値の書き込み|Palm OS Programmer's Companion Volume II/3-3]]」を参照して下さい。 あなたのアプリケーション向けにカスタマイズされた PDI プロパティの解釈あるいは生成を追加するために、辞書を改めたり置き換えたりすることもできます。詳しくは「[[カスタム拡張子の追加|Palm OS Programmer's Companion Volume II/3-3]]」を参照して下さい。 !!PDI リーダ vObject 入力の読み取り及び解釈のために、PDIライブラリはPDI リーダオブジェクトを提供します。PDI リーダオブジェクトは、PDI 入力ストリーム解釈の現在の状態を保持する構造体です。 PDI リーダは入力ストリームを一つのプロパティに解釈します。Begin Object プロパティで始まり End Object プロパティで終わります。 {{span style='color:blue;font-family:monospace;',PdiReaderType}} 構造体は、入力ストリームの解釈の現在状態について様々な情報を保持します。また、現在のプロパティについて以下の情報を含みます。 *エンコードとキャラクタセット *現在のプロパティ、パラメータ、プロパティ値、の形式 *現在のプロパティとパラメータの名前 *現在のプロパティの値文字列 *現在のプロパティが遭遇した解釈イベントのマスク !解釈イベントについて PDI リーダは、プロパティの処理中に遭遇した各解釈イベントを記録します。例えば、{{span style='color:blue;font-family:monospace;',BEGIN:VCARD}} プロパティを解釈するとき、PDI リーダは {{span style='color:blue;font-family:monospace;',kPdiBeginObjectEventMask}} を記録します。また、プロパティ名を解釈するとき、PDI リーダは {{span style='color:blue;font-family:monospace;',kPdiPropertyNameEventMask}} を記録します。 各イベントは {{span style='color:blue;font-family:monospace;',PdiReaderType}} 構造体の一つとして表現されます。 現在のプロパティを解釈している間に特定のイベントが発生したかどうかを、そのイベントの定数をリーダ構造体内の {{span style='color:blue;font-family:monospace;',events}} フィールドに対してテストすることによって決定することができます。例えば、入力ストリームの最後に達したなら以下のステートメントは {{span style='color:blue;font-family:monospace;',false}} を返します。 return((reader->events & kPdiEOFEventMask)==0); !!PDI ライタ vObject 出力の書き込みのために、PDI ライブラリは PDI ライタオブジェクトを提供します。PDI ライタオブジェクトは、PDI データについて状態の保持や生成の管理を行なう構造体です。 PDI ライタは、一つのプロパティにつき一回データを出力ストリームに送ります。Begin Object プロパティで始まり End Object プロパティで終わります。 {{span style='color:blue;font-family:monospace;',PdiWriterType}}構造体は、出力ストリームへの書き込みの状態についての情報を保持します。以下のものが含まれます。 *現在のプロパティのエンコードとキャラクタセット *現在のプロパティ、パラメータ、プロパティ値、の形式 *現在のプロパティとパラメータの名前 *現在のプロパティの値文字列 *現在のプロパティが遭遇した解釈イベントのマスク *現在のプロパティのエンコーディングとキャラクタセット *現在のプロパティ値を書き込むのに使用するモード(プロパティ値がどのように構造化されているかを指定する) *現在のプロパティ値に要求されるフィールドの数 !!フォーマットの互換性 PDI ライブラリは以下のフォーマットでデータストリームを読み書きすることができます。 *vCard 3.0 *vCard 2.1 *vCal 1.0 *iCalendar *Palm フォーマット あるフォーマットを使用した入力データストリームを別フォーマットの出力データストリームへ変換するのに PDI ライブラリを使用することができます。詳しくは[[「PDI バージョンの指定」|Palm OS Programmer's Companion Volume II/3-3]]を参照してください。 !Palm OS 旧バージョンとの互換性 PDI ライブラリは Palm OS の旧バージョンとの互換性を維持できるようにデザインされています。つまり、旧バージョンのデバイスから vObject を受信したり逆に vObject を送信したりするのに、ライブラリ関数を使用できるということです。 この互換性の利点を得るために、PDI ライブラリは異なるフォーマット( {{span style='color:blue;font-family:monospace;',ImcUtils}} 実装を含む旧バージョンの Palm OSでサポートされるフォーマット)のデータを送受信するように構築されています。 この互換性サポートを PDI リーダに含めるには、{{span style='color:blue;font-family:monospace;',PdiReaderNew}} 関数のコール時に{{span style='color:blue;font-family:monospace;',kPdiOpenParser}} 定数を指定します。 この互換性サポートを PDI ライタに含めるには、{{span style='color:blue;font-family:monospace;',PdiWriterNew}} 関数のコール時に kPdiPalmCompatibility オプションを指定します。 !!国際性の考慮 PDI ライブラリはカタカナを含む様々なキャラクタセットを扱います。もし入力ストリームで {{span style='color:blue;font-family:monospace;',CHARSET}} パラメータを指定するなら、PDI リーダはプロパティ値を性格に読み取るでしょう。 Palm OS{{sup (R)}} 4.0 に含まれる PDI ライブラリは、以下のキャラクタセットを理解します。 *{{span style='color:blue;font-family:monospace;',charEncodingAscii}} *{{span style='color:blue;font-family:monospace;',charEncodingISO8859_1}} *{{span style='color:blue;font-family:monospace;',charEncodingShiftJIS}} *{{span style='color:blue;font-family:monospace;',charEncodingISO2022Jp}} もし未知のキャラクタセットを指定するなら、現在のキャラクタセットは {{span style='color:blue;font-family:monospace;',charEncodingUnknown}} 定数で表される「未知」の状態になります。 !!未サポートのフィーチャー Palm OS 4.0 に含まれる PDI ライブラリは以下のフィーチャーを扱えません。 *マルチパート MIME メッセージは扱えません。 *vObject の XML バージョンはサポートされません。 *アプリケーションはグルーピングを無視します。PDI リーダはグループ識別しを解釈しますが、それらを無視します。しかし、最近解釈したグループ名は {{span style='color:blue;font-family:monospace;',PdiReaderType}} オブジェクトの {{span style='color:blue;font-family:monospace;',groupName}} フィールドに保持されます。 ---- [[← 1 節に戻る|Palm OS Programmer's Companion Volume II/3-1]] [[↑3 章トップへ|Palm OS Programmer's Companion Volume II/3]] [[3 節に進む →|Palm OS Programmer's Companion Volume II/3-3]]