このトピックは最新ではありません。 最新の情報については、「印刷スキーマ仕様」を参照してください。
PrintTicket プロバイダーは、任意の目的で使用する前に PrintTicket を検証する必要があります。 PrintTicket が検証された後、クライアントに返されるか、使用後に破棄される可能性があります。 このチェックリストでは、検証中にプロバイダーが実行する必要があるタスクについて説明します。 検証プロセスでは PrintTicket の内容が頻繁に変更されますが、以前に検証された PrintTicket は変更されません。
検証は、PrintCapabilities ドキュメントで定義されている Feature、Option、ParameterDef インスタンスのセットを持つ特定のデバイスに対して常に実行されます。 検証コードは、特定のデバイスの Feature インスタンス (および含まれている Option インスタンス) と ParameterDef インスタンスのセットにアクセスでき、PrintCapabilities にアクセスする必要はありません。 Feature、Option、ParameterDef インスタンスの情報は、検証プロセスの特定の部分で必要です。
対応する要素または一致する要素を検索しようとすると、修飾名が一致と見なされる前に、要素の名前空間が一致する必要があることに注意してください。 すべての要素名、属性名、およびインスタンス名は名前空間で修飾されます。 入れ子になっている要素の場合、要素が一致と見なされる前に、その場所が一致している必要があります。
すべての要素タグがパブリック名前空間内にあり、PrintTicket スキーマによって定義されていること、適切な XML 属性と属性値が含まれていること、および各要素の種類の場所が PrintTicket スキーマ定義の使用法に準拠していることを確認します。
PrintCapabilities ドキュメントによって報告されるすべての名前空間を決定します。 インスタンス名が PrintCapabilities ドキュメントによって報告されない名前空間に属している PrintTicket からすべての要素 (およびその子孫) を削除します。 このケースと次のケースの違いに注意してください。これには、既知の名前空間内で認識されないインスタンス名が含まれます。
スキーマは新しい要素インスタンス定義を追加して継続的に拡張されているため、特定の名前空間内のすべてのインスタンス名が既知であるという前提で検証コードを記述しないでください。 検証コードでは、既知の名前空間内の認識できないインスタンス名をエラーとして扱うことはできません。また、PrintTicket から削除することもできません。
PrintTicket スキーマで許可されていない重複する兄弟がある要素インスタンスがある場合は、最初の出現箇所のみを保持し、重複する要素の内容を含めて重複を削除します。
PrintCapabilities ドキュメントに対応するフィーチャーがないフィーチャーまたはサブフィーチャー (およびそのすべての子) を PrintTicket から削除します。
PrintTicket 内の残りのフィーチャー インスタンスごとに、PrintCapabilities ドキュメントで定義されている SelectionType プロパティを確認します。 SelectionType プロパティが PickOne に設定されているフィーチャーには、PrintTicket に 1 つの Option インスタンスが存在する必要があり、SelectionType プロパティが PickMany であるフィーチャーには複数の Option インスタンスが存在する必要があります。 PrintTicket フィーチャーに Option インスタンスがない場合は、既定の Option インスタンスを指定します。 プロバイダーであるため、どのオプションがすべての機能の既定のオプションであるかがわかります。
SelectionType プロパティが PickMany であるフィーチャーで、PrintTicket で複数のオプションが選択されている場合は、オプションが IdentityOption として指定されていないことを確認します。 存在する場合は、指定された 1 つの IdentityOption のみを残して、他のすべてのオプションを削除します。
PrintCapabilities ドキュメントに対応する ParameterDef インスタンスがない PrintTicket 内の ParameterInit インスタンスを削除します。
PrintTicket 内の他の ParameterInit インスタンスの場合は、それぞれの値が PrintCapabilities ドキュメントの ParameterDef インスタンスに準拠していることを確認します。 値がない場合は、ParameterDef で提供される既定値を指定します。
スコアリング プロセスの結果に基づいて、PrintTicket 内の各 Option インスタンスを、PrintCapabilities ドキュメントの対応するフィーチャーにリストされているオプションとペアリングします。 スコアリングは、PrintCapabilities ドキュメントで、PrintTicket で指定されたオプションに最も一致するオプションを検索するプロセスです。 スコアリング プロセス中に考慮される内容の詳細については、「オプション定義 参照してください。 PrintTicket の各参照オプションを、対応する最適な候補の PrintCapabilities ドキュメント オプションに置き換えます。 また、制約の競合によって最適な候補が使用されない場合に備えて、すべての候補をスコア別にランク付けし、この情報を解決ステージに渡すこともできます。 このような場合、解決プロセスでは、ランダムに別の候補を選択するのではなく、2 番目に適した候補を使用できます。
SelectionType プロパティが PickMany に設定され、PrintTicket で複数のオプションが選択されているフィーチャーの場合は、オプションが IdentityOption として指定されていないことを確認します。 このようなオプションが存在する場合は、指定された 1 つの IdentityOption のみを残して、他のすべてのオプションを削除します。 この手順は、スコアリング プロセスが適用される前と後に実行する必要があります。
この手順を 2 回実行する必要がある理由は、スコアリング プロセスで複数の参照 Option インスタンスを同じ候補の Option にマップできるためです。 その場合は、重複する Option インスタンスを削除して、特定の PickMany フィーチャーに一覧表示されているオプションが一意になるようにします。
PrintTicket に表示されない PrintCapabilities ドキュメントに存在するフィーチャーを PrintTicket に追加します。 このような機能の場合は、デフォルトのオプションを選択オプションとして設定します。
次のすべての条件を満たす ParameterDef インスタンスがあるかどうかを判断します。
ParameterDef インスタンスは PrintCapabilities ドキュメントに表示されますが、PrintTicket には表示されません。
ParameterDef インスタンスの Mandatory プロパティは、無条件または条件付きのいずれかに設定されます。
ParameterDef インスタンスは、Option インスタンス内の PrintTicket 内の ParameterRef インスタンスによって参照されます。
PrintCapabilities ドキュメント内のこのような ParameterDef インスタンスごとに、対応する ParameterInit インスタンスを PrintTicket に追加します。 新しく追加された ParameterInit インスタンスの値を、対応する ParameterDef インスタンスで指定された既定値に設定します。
制約の競合検出を実行し、そのような競合を排除するように構成を変更します。 このトピックでは、制約の競合を解決するために使用する特定のプロセスを定義しません。 PrintTicket で指定された構成の全体的な意図に最も影響を与えるのが最も少ないものを選択するには、変更できる Feature または ParameterInit インスタンスと適切な Option または Value をそれぞれ決定する必要があります。 前述のように、各オプションのマッピング スコアを使用し、2 番目に高いスコアの Option を使用できます。 変更するフィーチャーまたは ParameterInit を決定するには、クライアントが PrintTicket に追加できるプライベート プロパティを定義できます。 このプロパティは、Feature インスタンスと ParameterInit インスタンスの優先順位を定義して、リゾルバー プロセスに、クライアントにとって重要な Feature または ParameterInit インスタンス (および PrintTicket で保持する必要がある) と重要度の低いインスタンスを通知できます。
制約解決プロセスによって PrintTicket が変更され、必須プロパティが Conditional に設定されている ParameterRef インスタンスが変更された場合は、現在表示されている既定値を持つ ParameterInit インスタンスを追加し、表示されなくなった ParameterRef インスタンスの ParameterInit インスタンスを削除します。
PrintTicket の Option インスタンス内に表示されるすべてのプロパティ インスタンスとその内容を削除します。 プロパティ要素は、PrintTicket にロールを持っていません。 特定のフィーチャーの検証済みオプションが既製のオプションと完全に一致する場合は、Property インスタンスの名前空間が PrintCapabilities ドキュメントに登録されている条件に従って、その Option 内のすべてのプロパティ インスタンスを、検証前の PrintTicket から現在検証済みの PrintTicket に転送します。 2 つの Option インスタンスを完全一致と見なすには、1 つのオプションで見つかった ScoredProperty ごとに、対応する ScoredProperty が他のオプションに存在する必要があり、両方の ScoredProperty インスタンスの値が同じである必要があることに注意してください。
PrintTicket プロバイダーが、この時点まで存続したプライベートまたはパブリックの Property インスタンスを認識してサポートしている場合は、検証を実行します。 プロパティが認識されないという理由だけで、この時点でプロパティを削除しないでください。これは、ドキュメント処理の別のフェーズを意図している可能性があります。
関連トピック