JP2007535755A - モジュラードキュメントフォーマット - Google Patents

モジュラードキュメントフォーマット Download PDF

Info

Publication number
JP2007535755A
JP2007535755A JP2007510691A JP2007510691A JP2007535755A JP 2007535755 A JP2007535755 A JP 2007535755A JP 2007510691 A JP2007510691 A JP 2007510691A JP 2007510691 A JP2007510691 A JP 2007510691A JP 2007535755 A JP2007535755 A JP 2007535755A
Authority
JP
Japan
Prior art keywords
package
parts
xml
document
markup
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2007510691A
Other languages
English (en)
Inventor
シュール アンドレー
ダニエッツ ジェリー
フォエール オリバー
エマーソン ダニエル
ヒルバーグ マイク
ヤン ガー キム
ポラック ジョシュ
シェス サラナ
オルンステイン デービッド
パオリ ジャン
ジョーンズ ブライアン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2007535755A publication Critical patent/JP2007535755A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/103Formatting, i.e. changing of presentation of documents
    • G06F40/114Pagination
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/131Fragmentation of text files, e.g. creating reusable text-blocks; Linking to fragments, e.g. using XInclude; Namespaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/14Tree-structured documents
    • G06F40/143Markup, e.g. Standard Generalized Markup Language [SGML] or Document Type Definition [DTD]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Document Processing Apparatus (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Computer And Data Communications (AREA)
  • Credit Cards Or The Like (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

モジュール形式のコンテンツフレームワークおよびドキュメントフォーマットの方法およびシステムについて説明する。ドキュメント中心のコンテンツの構成、パッケージ化、配布、およびレンダリングのためのビルディングブロックを一式定義する。これらのビルディングブロックは、ソフトウェアおよびハードウェアシステムによりドキュメントの生成、交換、および表示を信頼性が高く一貫性のある形で行えるようにするドキュメントフォーマットのためのプラットフォーム依存性のないフレームワークを定義する。この一般的なフレームワークおよびフォーマットに加えて、一般的なフレームワークを使用してリーチパッケージフォーマットと呼ばれる特定のフォーマットが定義される。リーチパッケージのコンテンツは、様々な環境および様々なシナリオにおいて各種デバイスおよびアプリケーションに完全な忠実性を保ちながら表示または印刷をすることができる。

Description

本発明は、コンテンツフレームワーク(content framework)、ドキュメントフォーマット(document format)、ならびにその両方を利用できる関連する方法およびシステムに関する。
今日では、コンテンツを表す様々な種類のコンテンツフレームワーク、および、様々な種類のドキュメントをフォーマットする様々な種類のドキュメントフォーマットがある。多くの場合、関連するドキュメントのビルド、作成、処理、または消費のために、これらのフレームワークおよびフォーマットのそれぞれが、専用の関連するソフトウェアを必要とする。しかるべきデバイスに特定の関連するソフトウェアをインストールしたことのある人にとっては、関連ドキュメントのビルド、作成、処理、または消費は、大きな問題ではない。しかるべきソフトウェアを所有していない人にとっては、関連ドキュメントのビルド、作成、処理、または消費は、通常、不可能である。
このような背景において、ドキュメントの作成と消費に関する限り、遍在性(Ubiquityあらゆるところで使用できること)に対する要求は絶えずある。モジュール形式のコンテンツフレームワークおよびドキュメントフォーマットの方法およびシステムについて説明する。
説明されるフレームワークおよびフォーマットでは、ドキュメント中心のコンテンツの構成、パッケージ化、配布、および表示のためのビルディングブロックの一式を定義する。これらのビルディングブロックは、ソフトウェアおよびハードウェアシステムによりドキュメントの生成、交換、および表示を信頼性が高く一貫性のある形で行えるようにするドキュメントフォーマットのためのプラットフォーム依存性のないフレームワークを定義する。このフレームワークおよびフォーマットは、自由度が高く、拡張性のある方式で設計されている。
この一般的なフレームワークおよびフォーマットに加えて、一般的なフレームワークを使用して「リーチパッケージ」フォーマット(reach package format)と呼ばれる特定のフォーマットが定義される。リーチパッケージフォーマットは、ページ付けされたドキュメントを保存するためのフォーマットである。リーチパッケージのコンテンツは、様々な環境および様々なシナリオにおいて各種デバイスおよびアプリケーションに完全な忠実性を保ちながら、表示または印刷することができる。
概要
本明細書では、モジュール形式のコンテンツフレームワークおよびドキュメントフォーマットについて説明する。フレームワークおよびフォーマットでは、ドキュメント中心のコンテンツの構成、パッケージ化、配布、および表示のためのビルディングブロックの一式を定義する。これらのビルディングブロックは、ソフトウェアおよびハードウェアシステムによるドキュメントの生成、交換、および表示を、信頼性が高く一貫性のある形で行えるようにするドキュメントフォーマットのための、プラットフォーム依存性のないフレームワークを定義する。このフレームワークおよびフォーマットは、自由度が高く、拡張性のある方式で設計されている。様々な実施形態においては、取り込めるコンテンツの種類、コンテンツの提示方法、またはコンテンツの取り扱いのためクライアントをビルドするプラットフォームに関して、なんら制約はない。
この一般的なフレームワークのほかに、一般的なフレームワークを使用して特定のフォーマットを定義する。このフォーマットは、本明細書ではリーチパッケージフォーマットと呼ばれ、ページ付けされたまたは事前ページ付けされたドキュメントの保存ためのフォーマットである。リーチパッケージのコンテンツは、様々な環境および様々なシナリオにおいて、各種デバイスおよびアプリケーションに完全な忠実性を保ちながら表示または印刷することができる。
後述のフレームワークの複数の目標のうちの1つは、後述のフレームワークおよびフォーマットにより作成されるコンテンツを読み書きする、独立して作成されたソフトウェアおよびハードウェアシステムの相互運用性を保証しようということである。この相互運用性を実現するために、説明されているフォーマットは、コンテンツを読み書きするシステムが満たしていなければならない正式な要求条件を定義する。
以下の説明は、以下の行に構成され、「フレームワーク」という表題のセクションと「リーチパッケージフォーマット」という表題のセクションの2つの主要セクションに分けられる。
「フレームワーク」という表題のセクションは、具体的なパッケージ化モデルを示し、フレームワークパッケージを構成する様々なパーツおよび関係を説明する。フレームワークパッケージにおける記述的メタデータ(descriptive metadata)の使用に関する情報を取りあげるとともに、物理的コンテナへのマッピング、フレームワークマークアップの拡張、およびフレームワークバージョン管理機構の使用のプロセスについても説明する。
「リーチパッケージフォーマット」という表題のセクションでは、リーチパッケージと呼ばれるある特定の種類のフレームワークビルドパッケージの構造を検討する。このセクションでは、さらに、固定ペイロードに特有のパッケージパーツについて説明し、リーチパッケージのマークアップモデルおよび描画モデルを定義する。このセクションでは、リーチマークアップ要素およびそのプロパティとさらに具体的なサンプルで締めくくる。
引き続く説明のハイレベルの概要として、図1を考察する。ここでは、一般的に100で表される本発明のフレームワークおよびフォーマットのいくつかの態様を考察する。フレームワークのいくつかのコンポーネントの実施例が102に例示されており、リーチパッケージフォーマットのいくつかのコンポーネントが104に例示されている。
フレームワーク102は、関係コンポーネント、プラガブルコンテナコンポーネント、インタリービング/ストリーミングコンポーネント、およびバージョン管理/拡張性コンポーネントなどのコンポーネントの実施例を含み、それぞれを以下で詳しく調べる。リーチパッケージフォーマット104は、セレクタ/シーケンサコンポーネントおよびパッケージマークアップ定義コンポーネントを含むコンポーネントを含む。
以下の説明では、定期的に図1に戻り、説明されているコンポーネントが、このフレームワークおよびパッケージフォーマットのどこに適合するかを読者が常に概観できるようにする。
フレームワーク
以下の説明では、一般的フレームワークを取りあげる。独立した主要な小見出しは、「パッケージモデル」、「構成パーツ:セレクタおよびシーケンス」、「記述的メタデータ」、「物理的モデル」、「物理的マッピング」、および「バージョン管理および拡張性」である。それぞれの主要な小見出しは、1つまたは複数の関連する小見出しを持つ。
パッケージモデル
このセクションでは、パッケージモデルについて説明し、パッケージおよびパーツ、ドライバ、関係、パッケージ関係、および開始パーツを説明する小見出しが用意される。
パッケージおよびパーツ
例示され、説明されているモデルでは、コンテンツは1つのパッケージ内に保持される。パッケージは、関連するパーツのコレクションを保持する論理エンティティである。パッケージの目的は、ドキュメントのすべての断片(または他の種類のコンテンツ)を集めて、プログラマおよびエンドユーザが簡単に取り扱える1つのオブジェクトにまとめることである。例えば、図2を考察すると、これは、ドキュメントを表すXMLマークアップパーツ202、ドキュメント内で使用されるフォントを記述するフォントパーツ204、ドキュメントのページを記述する多数のページパーツ206、およびドキュメント内の画像を表す画像パーツ208を含む多数のパーツからなる、ドキュメントを保持するパッケージ200を例示している。ドキュメントを表すXMLマークアップパーツ202は、パッケージのコンテンツ全体を解析することなく、検索および参照を容易に行えるという点で有益である。これは、以下においてさらに明白になる。
本明細書全体を通じて、リーダー(消費者ともいう)およびライター(作成者ともいう)という概念を導入し説明する。リーダーという用語は、本明細書で使用されているように、モジュール形式のコンテンツフォーマットベースのファイルまたはパッケージを読み込むエンティティを指す。ライターという用語は、本明細書で使用されているように、モジュール形式のコンテンツフォーマットベースのファイルまたはパッケージを書き込むエンティティを指す。例えば、図3を考察すると、これは、パッケージを作成するライターとパッケージを読み込むリーダーを示している。通常、ライターおよびリーダーは、ソフトウェアとして具体化される。少なくとも一実施形態においては、パッケージの作成およびフォーマットに関連する処理のオーバーヘッドおよび複雑さの大半を、ライター側に負わせる。こうすると、処理の複雑さおよびオーバーヘッドの多くがリーダー側から取り除かれ、当業者であれば理解できるように、これは、多くの現行のモデルからは、新機軸となっている。この側面は、以下においてさらに明らかになる。
少なくとも一実施形態によれば、単一パッケージは、パッケージに保持されているコンテンツの1つまたは複数の表現を含む。多くの場合、パッケージは単一ファイルであり、この明細書においては、コンテナと呼ばれるものである。これは、例えば、エンドユーザがドキュメントのコンポーネント断片(イメージ、フォント、データなど)をすべて付属させてドキュメントを配布する便利な手段となる。パッケージは直接単一ファイルに対応するが、これは必ずしも常にそうであるというわけではない。パッケージは、様々な方法(限定されないが、例えば、単一ファイル、バラバラのファイルのコレクション、データベース、ネットワーク接続を介した一時的移動など)で物理的に表現できる論理エンティティである。したがって、コンテナにパッケージが保持されるが、すべてのパッケージがコンテナの中に格納されるわけではない。
抽象モデルは、物理的な記憶機構とは無関係にパッケージを記述する。例えば、抽象モデルでは、「ファイル」、「ストリーム」、または、パッケージが置かれている物理的世界に関連する他の物理的な用語を参照しない。後述するように、抽象モデルを使用すると、ユーザは、様々な物理的フォーマット、通信プロトコルなどに対するドライバを作成することができる。類推により、アプリケーション側でイメージを印刷したい場合は、プリンタの抽象化を使用する(特定の種類のプリンタを認識するドライバにより与えられる)。したがって、アプリケーション側では、特定の印刷デバイスについて、または印刷デバイスとの通信方法について知る必要がない。
コンテナは、他の方法ではバラバラのファイルのコレクションになりうるものに比べて、多くの点で勝っている。例えば、類似のコンポーネントを集めて、コンテンツにインデックスを付け、圧縮することができる。さらに、コンポーネント間の関係を識別し、権利管理、電子署名、暗号化、およびメタデータをコンポーネントに適用することができる。もちろん、コンテナは、特に上で列挙していない他の機能についても使用することができ、またそれらの機能を実現することができる。
共通パーツプロパティ
例示され、説明されている実施形態では、パーツは、共通プロパティ(例えば、名前)および複数バイトからなるストリームを含む。これは、ファイルシステム内のファイル、またはHTTPサーバ上のリソースに類似している。コンテンツに加えて、それぞれのパーツは、いくつかの共通パーツプロパティを持つ。これらは、名前−パーツの名前と、コンテンツタイプ−パーツ内に格納されているコンテンツのタイプを含む。パーツは、さらに、後述するように、1つまたは複数の関連付けられた関係(relationship)を持つ。
パーツ名は、何らかの方法でパーツを参照する必要が生じたときに必ず使用される。例示され説明されている実施形態においては、名前は階層方式で構成され、ファイルシステム上のパスまたはURIによるパスに類似している。以下にパーツ名の例を示す。
Figure 2007535755
上に示されているように、この実施形態では、パーツ名は以下の特性を持つ。
・パーツ名は、従来のファイルシステムのファイル名に類似している。
・パーツ名は、スラッシュ(「/」)で始まる。
・ファイルシステムのパスまたはURIのパスのように、パス名は一組のディレクトリ風の名前(上の例では、tickets、images/march、およびpages)により階層形式で構成することができる。
・ この階層は、スラッシュで区切られた複数のセグメントからなる。
・名前の最後のセグメントは、従来のファイルシステムのファイル名と似ている。
パーツに名前を付ける規則、特にパーツ名に使用することができる有効な文字は、本明細書で説明されているフレームワークに固有のものであることに注意することが重要である。これらのパーツ名規則は、インターネット標準URI命名規則に基づいている。この実施形態においては、この実施形態でパーツ名を指定するために使用する文法はabs_path構文と正確に一致する。abs_path構文は、RFC2396のセクション3.3(パスコンポーネント)および(Uniform Resource Identifiers(URI:Generic Syntax)仕様の5(Relative URI References)で定義されている。
以下の追加制約事項が、abs_pathに有効なパーツ名として適用される。
・クエリコンポーネントは、セクション3(URI構文コンポーネント)および3.4(クエリコンポーネント)で定義されているように、パーツ名には適用できない。
・フラグメント識別子は、セクション4.1(フラグメント識別子)で説明されているように、パーツ名には適用できない。
・*(「/」セグメント)を既存のパーツのパーツ名に付加することにより作成された名前を持つパーツがあるのは不正である。
パーツ名の文法は、以下のとおりである。
Figure 2007535755
パッケージ内のすべてのパーツの名前のセグメントは、木を形成することがわかる。これは、ファイルシステム内で生じていることに類似しており、ファイルシステムにおいては、木の葉以外のすべての節点はフォルダであり、葉節点はコンテンツが含まれる実際のファイルである。名前の木のこれらのフォルダに似た節点(つまり、葉以外の節点)は、パッケージ内でパーツを編成する類似の機能に使用される。しかし、これらの「フォルダ」は命名階層内において、概念としてのみ存在する、つまり永続性フォーマットによる他の現れ方はないということを忘れないことが重要である。
パーツ名は、「フォルダ」レベルでは存続しえない。特に、パーツ命名階層(「フォルダ」)内の葉以外の節点は、パーツおよび同じ名前のサブフォルダを含むことはできない。
例示され説明されている実施形態においては、すべてのパーツは、パーツ内にどのようなタイプのコンテンツが格納されるかを識別するコンテンツタイプを持つ。コンテンツタイプの例には、以下のものがある。
image/jpeg
text/xml
text/plain;charset="us-ascii"
コンテンツタイプは、RFC2045(Multipurpose Internet Mail Extensions;(MIME))で定義されているように、例示されているフレームワーク内で使用される。特に、それぞれのコンテンツタイプは、媒体タイプ(例えば、text)、サブタイプ(例えば、plain)、およびkey=value形式の任意のパラメータ群(例えば、charset=“us-ascii”)を含み、パラメータが複数ある場合は、パラメータ同士をセミコロンで区切る。
パーツのアドレス指定
多くの場合、パーツは他のパーツへの参照を含む。単純な例として、マークアップファイルとイメージの2つのパーツを含むコンテナを考える。マークアップファイルでは、マークアップファイルが処理されるときに関連するイメージが識別され特定できるように、イメージへの参照を保持するようにしたい。コンテンツタイプおよびXMLスキーマの設計者は、URIを使用して、これらの参照を表すことができる。これを可能にするために、パーツ名の世界とURIの世界との間のマッピングを定義する必要がある。
パッケージ内でURIを使用できるようにするために、パッケージベースのコンテンツでURIを評価するときに、特別なURI解釈規則を使用しなければならない。パッケージ自体はURI参照に関する「権限」として処理されるべきであり、URIのパスコンポーネントが、パッケージ内のパーツ名階層をナビゲートするのに使用される。
例えば、http://www.example.com/foo/something.package というパッケージURIが与えられたとすると、/abc/bar.xmlへの参照は、/abc/bar.xmlと呼ばれるパーツを意味するように解釈され、URI http://www.example.com/abc/bar.xmlを意味するようには解釈されない。
コンテナ内の一方のパーツから他方のパーツへの参照を設定する必要がある場合には、相対URIを使用すべきである。相対参照を使用すると、コンテナのコンテンツをまとめて異なるコンテナに(または、例えばファイルシステムからコンテナ内に)移動することができ、相互パーツ参照を修正しなくて済む。
パーツからの相対参照は、その参照を含むパーツの「ベースURI」に相対的に解釈される。デフォルトでは、パーツのベースURIはパーツの名前である。
以下の名前を持つパーツを含むコンテナを考察する。
/markup/page.xml
/images/picture.jpeg
/images/other_picture.jpeg
「/markup/page.xml」パーツが「../images/picture.jpeg」へのURI参照を含む場合、この参照は、上の規則によりパーツ名「/images/picture.jpeg」を参照しているものとして解釈しなければならない。
いくつかのコンテンツタイプは、コンテンツ内の異なるベースを指定することによりデフォルトのベースURIに優先する手段を提供する。これらの優先の1つが存在していれば、明示的に指定されたベースURIをデフォルトの代わりに使用しなければならない。
ときには、パーツ内の一部または特定のポイントを「アドレス指定」することが有用なこともある。URI世界では、フラグメント識別子が使用される[例えば、RFC2396を参照]。コンテナでは、この機構は同じ働きをする。特に、フラグメントは、アドレス指定されたパーツのコンテンツタイプに関して理解されている追加情報を含む文字列である。例えば、ビデオファイルでは、フラグメントはフレームを識別し、XMLファイルでは、xpathを介してXMLファイルの一部を識別することができる。
フラグメント識別子を、パーツをアドレス指定するURIとともに使用して、アドレス指定されたパーツのフラグメントを識別する。フラグメント識別子はオプションであり、シャープ記号(「#」)によりURIから区切られる。したがって、これはURIの一部ではないが、URIとともに使用されることが多い。
以下の説明においては、パッケージおよびパーツの命名モデルはかなり自由度が大きいので、パーツ命名のためのある種のガイダンスを与える。このような自由度があるため、フレームワークパッケージを幅広く適用できるのである。しかし、フレームワークは、複数の無関係のソフトウェアシステムが互いに衝突せずにパッケージの「固有」パーツを操作できるシナリオを可能にする設計となっていることを認識することが重要である。これを可能にするため、いくつかの指針が用意されており、この指針に従えばこれが可能になる。
ここで与えた指針は、パーツ命名の衝突発生を最小にするか、または少なくとも減らし、発生した場合に対処するための機構について説明したものである。パッケージ内にパーツを作成するライターは、パッケージ内の既存のパーツとの命名の衝突を検出して対処するステップを実行しなければならない。名前の衝突が発生しても、ライターはむやみに既存のパーツを置き換えなくてよい。
パッケージが単一のライターにより操作されることが保証されている状況では、そのライターはこれらの指針から逸脱してもよい。しかし、複数の独立したライターが1つのパッケージを共有している可能性がある場合、すべてのライターがこれらの指示に従う必要がある。しかし、いずれにしてもすべてのライターがこれらの指針に従うことを推奨する。
・既存のコンテナにパーツを追加するライターは、パーツをルートまたは既存のフォルダ内に直接置くのではなく、命名階層の新しい「フォルダ」内でそうする必要がある。このようにして、名前の衝突の可能性は、パーツ名の第1のセグメントに限られる。この新しいフォルダ内に作成されたパーツは、既存のパーツとの衝突のリスクを犯さずに名前を付けることができる。
・フォルダの「好ましい」名前がすでに、既存のパーツにより使用されている場合、ライターは、他のフォルダ名を選択する何らかの戦略をとらなければならない。ライターは、使用可能なフォルダ名が見つかるまで好ましい名前に桁を付加して行く戦略をとらなければならない(何回か失敗を繰り返してからGUIDを使用することも考えられる)。
・このポリシーの1つの結果として、リーダーは「マジック」または「よく知られている」パーツ名を介してパーツを特定することを試みなくてよくなる。その代わりに、ライターは、作成されるフォルダ毎に少なくとも1つのパーツとのパッケージ関係を作成しなければならない。リーダーは、よく知られている名前に依存するのではなく、それらのパッケージ関係を使用してパーツを特定しなければならない。
・リーダーがフォルダ内に少なくとも1つのパーツを見つけると(前述のパッケージ関係の1つを介して)、そのフォルダ内でよく知られているパーツ名に関する規約を使用して、他のパーツを見つけることができる。
ドライバ
本明細書で説明されているファイルフォーマットは、異なるアプリケーション、異なるドキュメントタイプなどにより使用されることができ、そのうち多くのものが衝突する用途、衝突するフォーマットなどを持つ。1つまたは複数のドライバを使用して、ファイルフォーマットの相違、通信プロトコルの相違など様々な衝突を解決する。例えば、ばらばらのファイルおよび複合ファイルなど様々なファイルフォーマット、http、ネットワーク、および無線プロトコルなど、様々な通信プロトコルがある。各種ドライバ群は、様々なファイルフォーマットおよび通信プロトコルを抽象化して、単一のモデルにまとめたものである。異なるシナリオ、異なる顧客要件、異なる物理的構成などに対し、複数のドライバを用意することができる。
関係(relationships)
パッケージ内のパーツは、そのパッケージ内の他のパーツへの参照を含むことができる。しかし、一般に、これらの参照は、参照する側のパーツ内で、そのパーツのコンテンツタイプに特有の方法で、つまり、任意のマークアップまたはアプリケーション固有の符号化によって表現される。これは、実際に、そのような参照を含むパーツのコンテンツタイプを認識しないリーダーからのパーツ間の内部リンクを非表示にする。
共通コンテンツタイプ(「リーチパッケージ」セクションで説明されている固定ペイロードマークアップなど)であっても、リーダーは、他のパーツへの参照を発見し解決するために、パーツ内のすべてのコンテンツを解析する必要があるであろう。例えば、ドキュメントを1度に1ページずつ印刷する印刷システムを実装する場合、特定のページに含まれる画像およびフォントを識別できることが望ましい。既存のシステムでは、各ページのすべての情報を解析しなければならず、これは時間のかかる作業である。また、それぞれのページの言語を認識しなければならず、これは特定のデバイスまたはリーダーによってはあり得ない状況である(例えば、デバイスに向かう途中でプロセッサのパイプラインを通るときにドキュメントに対し中間処理を実行しているもの)。その代わりに、本明細書で説明されているシステムおよび方法では、関係を使うことによって、パーツ間の関係を識別し、それらの関係の性質を記述する。この関係言語は単純であり、リーダーが複数の異なる言語を認識することなしに関係を認識できるように、一度だけ定義される。一実施形態においては、これらの関係は、XMLで個々のパーツとして表される。それぞれのパーツは、パーツがソースである関係を含む関連付けられた関係パーツを持つ。
例えば、スプレッドシートアプリケーションでは、このフォーマットを使用し、異なるスプレッドシートをパーツとして記憶する。スプレッドシート言語について何も認識しないアプリケーションであっても、そのまま、スプレッドシートに関連付けられている様々な関係を発見することができる。例えば、アプリケーションでは、スプレッドシート内のイメージおよびスプレッドシートに関連付けられているメタデータを発見することができる。関係スキーマの実施例を以下に示す。
Figure 2007535755
このスキーマでは、2つのXML要素、つまり「relationships」と呼ばれる要素と「relationship」と呼ばれる要素を定義している。「relationship」要素は、本明細書で説明されているような単一の関係を記述するために使用され、属性として(1)ソースパーツの関係先パーツを示す「target」、(2)関係のタイプまたは性質を示す「name」を持つ。「relationships」要素は、0または複数の「relationship」要素を保持できるように定義され、単純に、それらの「relationship」要素を集めて1つのユニットにまとめるために使用される。
本明細書で説明されているシステムおよび方法は、さらに高いレベルの機構を導入して、「関係(relationships)」と呼ばれるこれらの問題を解決する。関係は、パッケージ内のソースパーツとターゲットパーツとの間の接続の種類を表す追加的な手段を提供する。関係は、パーツ内のコンテンツを見ることなしに、直接的に、「発見可能」なパーツ間を接続する。それらはコンテンツ特有のスキーマとは無関係であり、解決が速い。さらに、これらの関係はプロトコルの依存性がない。様々な異なる関係を、特定のパーツに関連付けることができる。
関係は、第2の重要な機能を持ち、パーツを修正することなく関連付けことができる。ときには、この情報は、「注釈」という形で使用され、その場合「注釈付き」パーツのコンテンツタイプでは、与えられた情報を添付する手段を定義しない。実施例として可能なものには、添付された記述的メタデータ、プリントチケット、および実際の注釈がある。最後に、シナリオによっては、情報を既存のパーツに、特にそのパーツを修正せずに添付する必要があるものもある。例えば、パーツが暗号化されているときに解読できない場合や、パーツが電子署名されており、変更すると署名が無効になるような場合である。他の例では、ユーザはJPEGイメージファイルに注釈を添付したい場合がある。JPEGイメージフォーマットは、現在のところ、注釈の識別をサポートしていない。JPEGフォーマットを変更してこのユーザの希望をかなえるようにすることは、現実的ではない。しかし、本明細書で説明されているシステムおよび方法を使用することによって、ユーザはJPEGイメージフォーマットを修正せずに、JPEGファイルに注釈を付加することができる。
一実施形態では、関係は、関係バーツ内においてXMLを使用することで表される。1つまたは複数の関係のソースであるコンテナ内のそれぞれのパーツは、関係パーツが関連付けられている。この関係パーツは、そのソースパーツの関係のリストを保持する(コンテンツタイプapplication/PLACEHOLDERを使用してXMLで表される)。
以下に示す図4は、「スパイン」パーツ402(FixedPanelに似ている)が3つのページ406、408、および410をバインドしてまとめる環境400を示している。スパインによりバインドされまとめられたページ群は、「プリントチケット」404が関連付けられる。さらに、2ページ目には、専用のプリントチケット412がある。スパインパーツ402からプリントチケット404、および2ページ目からそのプリントチケット412までの接続は、関係を使って表される。図4の配置では、スパインパーツ402は、以下の実施例で示されているように、スパインをticket1に接続する関係が含まれる関連付けられた関係パーツを持つ。
Figure 2007535755
関係は、単一の<Relationships>要素内に入れ子になっている<Relationship>要素を使用して表される。これらの要素は、http://mmcfrels(PLACEHOLDER)名前空間内で定義される。関係の実施例については、上のスキーマの実施例、および関連する説明を参照のこと。
関係(relationship)要素は、以下の追加属性を持つ。
Figure 2007535755
Name属性は、必ずしも実際のアドレスではない。異なる種類の関係が、Namesにより識別される。これらの名前は、名前空間がXML名前空間に対し定義されるのと同じようにして定義される。特に、インターネットドメイン名空間にならって付けられた名前を使用することにより、非調整パーティは衝突しない関係名を安全に−XML名前空間について作成するのとちょうど同じようにして−作成できる。
関係パーツは、他の関係に参加することは許されない。しかし、他のすべての意味において1級のパーツである(例えば、URIアドレス指定可能である、開く、読む、削除するなどの操作を行えるなど)。関係は、通常、パッケージの外部にあるものは参照しない。関係ターゲットを識別するために使用されるURIは、一般に、URIスキームを含まない。
パーツおよび関連付けられた関係パーツは、命名規約により接続される。この例では、スパインに対する関係パーツは、/content/_rels/spine.xml.relsに格納され、ページ2に対する関係は、/content/_rels/p2.xml.relsに格納される。ここでは2つの特別な命名規約が使用されていることに注意されたい。まず、名前階層内の与えられた「フォルダ」内のある(他の)パーツに対する関係パーツは、_relsと呼ばれる「サブフォルダ」内に格納される(関係を識別するために)。第2に、この関係保持パーツの名前は、.rels拡張子をオリジナルのパーツの名前に付加することにより形成される。特定の実施形態では、関係パーツは、コンテンツタイプapplication/xml+relationshipsPLACEHOLDERである。
関係は、2つのパーツの間の有向接続を表す。関係を表す方法のため、ソースパーツから関係を行き来する(traverse)のが効率よい(任意に与えられたパーツに対する関係パーツを見つけることは自明であるので)。しかし、関係のターゲットから逆方向に関係を行き来するのは効率的ではない(パーツとのすべての関係を見つける方法はコンテナ内のすべての関係を探すことだからである)。
関係の逆方向トラバース(行き来する)を可能にするために、新しい関係を使用して、他の(トラバース可能な)方向を表す。これは、あるタイプの関係の設計者が使用できるモデリング手法である。上の例に従うと、ticket1が添付されているスパインを見つけられることが重要であるとすれば、以下のようなチケットからスパインに接続する第2の関係を使用する。
Figure 2007535755
パッケージ関係(Package Relationships)
「パッケージ関係」は、パッケージ内のよく知られているパーツを見つけるために使用される。この方法を用いると、パッケージ内のパーツを見つける際に命名規約に依存しなくてすみ、異なるペイロードの同一のパーツ名の間で、衝突がないことが保証される。
パッケージ関係は、ターゲットはパーツであるが、ソースはパーツではない、つまりソースは全体としてパッケージである特別な関係である。「よく知られている」パーツを備えることは、実際には、そのパーツを見つけやすくする「よく知られている」関係名を持つことである。非調整パーティにより関係に名前を付けることができる明確に定義されている機構があるため、これらは機能するが、いくつかの実施形態においては、パーツ名に対するそのような機構がない。したがって、それらの実施形態においては、一組の指針に制限される。パッケージ関係は、パッケージ関係パーツ内に見つかり、関係パーツに対する標準命名規約を使用して名前が付けられる。そこで、名前は「/_rels/.rels」となる。
このパッケージ関係パーツ内の関係は、よく知られているパーツを見つける際に役立つ。
開始パーツ(The Start Part)
パッケージレベルの一例においては、よく知られているパーツはパッケージ「start」パーツである。これは、パッケージが開かれたときに通常処理されるパーツである。これは、パッケージに格納されているドキュメントコンテンツの論理ルートを表す。パッケージの開始パーツは、よく知られているパッケージ関係に従うことにより特定される。一実施例においては、この関係は、「http://mmcf-start-part-PLACEHOLDER」という名前を持つ。
構成パーツ(Composition Part):セレクタおよびシーケンス
説明されているフレームワークでは、セレクタおよびシーケンスというパーツから高次の構造を構築するための2つの機構を定義する。
セレクタは、多数の他のパーツのうちから「選択する」パーツである。例えば、セレクタパーツは、英語版のドキュメントを表すパーツとフランス語版のドキュメントを表すパーツのいずれかを「選択する」ことができる。シーケンスは、多数の他のパーツを「順序付ける」パーツである。例えば、シーケンスパーツは、パーツの1つが5ページのドキュメントを表し、もう1つが10ページのドキュメント表す2つのパーツを(線形的な順序で)組み合わせることができる。
これら2つのタイプの構成パーツ(シーケンスおよびセレクタ)およびそれらを組み立てる規則は、構成モデルからなる。構成パーツは、他の構成パーツを構成することができる。したがって、例えば、2つの構成のうちから選択するセレクタを備えることも可能である。例えば、図5を考察すると、これは、英語とフランス語の両方の表現を含む財務レポートの一例を示している。これらの表現はそれぞれ、さらに、序文(表紙)とそれに続く財務内容(スプレッドシート)からなる。この例では、セレクタ500は、英語表現のレポートとフランス語表現のレポートのうちから選択する。英語表現が選択された場合、シーケンス502により、英語序文パーツ506、英語財務パーツ508と順序付けられる。あるいはその代わりに、フランス語表現が選択された場合、シーケンス504により、フランス語序文パーツ510、フランス語財務パーツ512と順序付けられる。
構成パーツXML
例示され説明されている実施形態においては、構成パーツは、少数のXML要素を使用して記述され、すべて共通構成名前空間(common composition namespace)から取り出される。例えば、以下を考察する。
Figure 2007535755
例えば、上の図5の例に対するXMLを以下に示す。
Figure 2007535755
このXMLでは、MainDocument.xmlは、パッケージ内のパーツ全体を表し、「selection」タグに基づいて、選択が、「item」タグでカプセル化された異なるアイテム、つまり「EnglishRollup.xml」と「FrenchRollup.xml」との間で選択が行われることを示す。
EnglishRollup.xmlおよびFrenchRollup.xmlは、「sequence」タグに基づき、それぞれの「item」タグによりカプセル化されたそれぞれのアイテムを、順序付けしてまとめるシーケンスである。
したがって、単純なXML文法が、セレクタおよびシーケンスの記述のため準備されている。この構成ブロック内のそれぞれのパーツが構築され、1つのオペレーション−選択または順序付けのいずれか−を実行する。パーツの階層を使用することにより、選択およびシーケンスの異なる堅牢なコレクションを構築することができる。
構成ブロック
パッケージの構成ブロック(Composition Block)は、パッケージの開始パーツから到達可能なすべての構成パーツ(セレクタまたはシーケンス)の集合を含む。パッケージの開始パーツがセレクタでもシーケンスでもない場合、構成ブロックは空であると考えられる。開始パーツが構成パーツの場合、それらの構成パーツ内の複数の子<item>が、再帰的にトラバースされて、構成パーツの有向非巡回グラフを生成する(非構成パーツに遭遇するとトラバースが停止する)。このグラフが、構成ブロックである(さらに、実施形態により、パッケージが有効であるためには、非巡回グラフでなければならない)。
構成の意味の決定
上で比較的簡単なXML文法を確立したが、以下では、コンテンツタイプに基づき選択を行えるような情報を表す手段について説明する。つまり、上述のXMLは、組み立てられ1つの構成にまとめられるパーツをリーダーが特定するのに十分な情報を与える。しかし、構成の性質に関する詳細をリーダーに知らせるほど十分ではない。例えば、2つのパーツを構成する選択が与えられたとすると、リーダーはどのような基準(例えば、言語、用紙サイズなど)に基づいてその選択を行うのか?その答えは、これらの規則は構成パーツのコンテンツタイプに関連付けられているということである。したがって、言語に基づいて表現を選択するのに使用されるセレクタパーツは、用紙サイズに基づいて表現を選択するセレクタパーツと異なる関連付けられたコンテンツタイプを持つ。
一般的なフレームワークでは、以下のコンテンツタイプの一般的形式を定義する。
Application/XML+Selector-SOMETHING
Application/XML+Sequence-SOMETHING
これらのコンテンツタイプの中のSOMETHINGは、選択またはシーケンスの性質、例えば、ページサイズ、色、言語、リーダーデバイス上の常駐ソフトウェアなどを示す単語で置き換えることができる。このフレームワークにおいては、こうすると、すべての種類のセレクタおよびシーケンスを創作することができ、それぞれ非常に異なる意味を持ち得る。
説明されているフレームワークは、さらに、すべてのリーダーまたは読み込みデバイスが認識しなければならない、以下のよく知られているコンテンツタイプを定義する。
Figure 2007535755
例として、以下のような考察をしてみる。パッケージはページを持つドキュメントを含むと仮定し、ページの真ん中にビデオが現れる領域がある。この例では、ページのビデオパーツは、Quicktimeビデオの形式のビデオを含むことができる。このシナリオの問題の1つは、Quicktimeビデオは広く受け入れられているわけではないという点である。しかしながら、このフレームワーク、さらに具体的には後述のリーチパッケージフォーマットに従って、広く受け入れられているイメージフォーマット−JPEG−があると仮定する。上述のドキュメントを含むパッケージを作成するときに、作成者は、パッケージの一部としてビデオを定義することに加えて、そのページのJPEGイメージを定義し、SupportedContentTypeセレクタを挿入する。これによって、ユーザのコンピュータにQuicktimeビデオを認識するソフトウェアが装備されている場合は、Quicktimeビデオが選択され、そうでない場合には、JPEGイメージが選択されるようにすることも可能である。
したがって、上述のように、フレームワークレベルのセレクタおよびシーケンスコンポーネントにより、この例では、XMLで定義されている堅牢な階層を構築できる。さらに、コンテンツタイプを使用して、セレクタおよびシーケンスの挙動を識別する明確に定義された手段もある。さらに、一実施形態においては、一般的なフレームワークは、定義済みで、消費者(例えば、リーダーまたは読み取りデバイス)が何を認識し何を認識しないかに基づいてパッケージの処理および利用を可能にする、1つの特定のコンテンツタイプを含む。
他の構成パーツコンテンツタイプも、類似の規則を使用して定義することができ、その実施例について以下で説明する。
記述的メタデータ
一実施形態においては、記述的メタデータパーツは、パッケージのライターまたは作成者に、パッケージのリーダーが高い信頼度で発見できるようにするプロパティの値を保存する手段を提供する。これらのプロパティは、通常、コンテナ内の個々のパーツに関する情報だけでなくをパッケージ全体の追加的情報を記録するために使用される。例えば、パッケージ内の記述的メタデータパーツは、パッケージの著者、キーワード、要約などの情報を保持することが可能である。
例示され説明されている実施形態においては、記述的メタデータは、XMLで表され、よく知られているコンテンツタイプのパーツに保存され、よく知られている関係タイプを使用して見つけることができる。
記述的メタデータは、メタデータプロパティを保持する。メタデータプロパティは、プロパティ名および1つまたは複数のプロパティ値により表される。プロパティ値は、単純データ型を持ち、したがって、それぞれのデータ型は単一のXML qnameで記述される。記述的メタデータプロパティが単純な型を持つという事実は、複雑なXMLの型を持つデータをパッケージに格納できないということを意味するわけではない。この場合、完全なXMLパーツとして情報を保存しなければならない。これが行われると、単純な型のみの使用に関するすべての制約はなくなるが、「フラット」な記述的メタデータプロパティモデルの簡潔さは失われる。
プロパティの集まりを定義する汎用の機構に加えて、この機構を使用して格納される、特定の明確に定義されているドキュメントコアプロパティの集まりがある。これらのドキュメントコアプロパティは、通常、ドキュメントを記述するために使用され、タイトル、キーワード、著者などのプロパティを含む。
最後に、これらのドキュメントコアプロパティを保持するメタデータパーツは、さらに、ドキュメントコアプロパティのほかに、追加カスタム定義プロパティを保持することもできる。
メタデータフォーマット
一実施形態によれば、記述的メタデータパーツは、コンテンツタイプを持ち、以下の規則に従う関係の対象となる。
Figure 2007535755
以下のXMLパターンは、一実施形態により記述的メタデータを表す場合に使用される。マークアップの各コンポーネントに関する詳細は、サンプルの後の表にまとめた。
Figure 2007535755
Figure 2007535755
ドキュメントコアプロパティ
以下に、プロパティの名前、プロパティの型、および説明を含む、ドキュメントコアプロパティの表を示す。
Figure 2007535755
Figure 2007535755
物理的モデル
物理的モデルにより、ライターおよびリーダーによるパッケージの様々な使用法が定義される。このモデルは、ライター、リーダー、およびそれらの間のパイプの3つのコンポーネントに基づく。図6は、ライターおよびリーダーが連携してパッケージに関する通信を行ういくつかの実施例を示す図である。
パイプは、データをライターからリーダーに搬送する。多くのシナリオにおいて、パイプは、単に、ローカルファイルシステムからパッケージをリーダーに読み出させるAPI呼び出しを含むだけである。これは、直接アクセスと呼ばれる。
しかし、リーダーおよびライターは、ある種のプロトコルを介して互いに通信しなければならない。この通信は、例えば、プロセスの境界にまたがって、またはサーバとデスクトップコンピュータとの間で実行される。これは、ネットワーク接続アクセスと呼ばれ、パイプの通信特性(特に、速度と要求待ち時間)ゆえに重要なものである。
最大の性能を発揮させるために、物理パッケージ設計では、アクセススタイル、レイアウトスタイル、および通信スタイルの3つの重要な領域におけるサポートを考慮しなければならない。
アクセス形式(Accsess Style)
ストリーミング消費
ネットワーク接続アクセスを使用したライターとリーダーとの間の通信は瞬間的なものではないため、パッケージの連続的な作成および消費に対応することが重要である。特に、この実施形態によれば、パッケージのすべてのビットがパイプを通して送り込まれる前に、リーダーが受け取るデータ(例えば、パーツ)の解釈および処理を開始できるように物理的パッケージフォーマットを設計することが推奨される。この機能は、ストリーミング消費(streaming consumption)と呼ばれる。
ストリーミング作成
ライターがパッケージの作成を開始しても、パッケージに入れられるものを常に知っているとは限らない。一実施例では、アプリケーション側でプリントスプールファイルパッケージのビルドを開始する場合、アプリケーション側では、パッケージに入れる必要のあるページの数がわからない場合がある。他の実施例では、動的にレポートを生成しているサーバ上のプログラムには、レポートを完全に生成するまでは、レポートの長さまたはレポートに含まれる画像の数はわからない。このようなライターを許容するために、物理的パッケージにより、他のパーツがすでに追加されていた場合に、ライターがその後にパーツを動的に追加できるようにしなければならない(例えば、ライターは作成を開始するといくつのパーツが作成されるかをあらかじめ記述しておくように要求されてはならない)。さらに、物理的パッケージを使用することで、ライターはそのパーツの最終的な長さを知らなくてもパーツのコンテンツの書き込みを開始できなければならない。つまり、これらの要件によりストリーミング作成が可能になるのである。
同時作成および消費
高度にパイプライン化されているアーキテクチャでは、ストリーミング作成およびストリーミング消費は、特定のパッケージに対して同時に実行することが可能である。物理的パッケージを設計する際に、ストリーミング作成のサポートとストリーミング消費のサポートで、設計が反対方向に推し進められることがある。しかし、両方をサポートする設計を見つけられる場合も多い。パイプライン化アーキテクチャにはメリットがあるため、物理的パッケージで同時作成および消費をサポートすることを推奨する。
レイアウトスタイル
物理的パッケージは、パーツのコレクションを持つ。これらのパーツは、単純な順序付けとインタリーブの2つのスタイルのうちの1つでレイアウトすることができる。単純な順序付けでは、パッケージ内のパーツは、定められた順序によりレイアウトされる。そのようなパッケージが純粋に直線的な方法で送出される場合、パッケージ内の第1のバイトから始まり、最後のバイトへと続き、第1のパーツのすべてのバイトが最初に到着し、その後、第2のパーツのすべてのバイトが到着し、というように続く。
インタリーブされたレイアウトでは、複数のパーツのバイトがインタリーブされ、いくつかのシナリオではパフォーマンスを改善できる。インタリービングを著しく利用する2つのシナリオとしては、マルチメディアの再生(例えば、ビデオとオーディオを同時に送出する)およびインラインリソース参照(例えば、マークアップファイルの途中でのイメージへの参照)がある。
インタリービングは、インタリーブされたパーツのコンテンツを編成するための特別な規約を通じて処理される。パーツを断片に分け、それらの断片をインタリーブすることにより、元の大きなパーツをそのまま簡単に再構成することが可能としながら、インタリービングの所望の結果を得ることが可能である。インタリービングの仕組みを理解するために、図7では、content.xml 702およびimage.jpeg 704の2つのパーツを伴う単純な例を示している。第1のパーツ、content.xmlでは、ページのコンテンツを記述し、そのページの真ん中に、ページ上に現れなければならないイメージ(image.jpeg)への参照が置かれている。
インタリービングが価値ある理由を理解するために、図8に示されているように、これらのパーツが単純な順序付けを使用してパッケージ内にどのように配置されるかを考察する。このパッケージを処理している(かつ、バイトを順次受け取っている)リーダーは、content.xmlパーツだけでなくimage.jpegをもすべて受け取るまでは、画像を表示することができない。状況によっては(例えば、パッケージが小さく単純な場合、または通信リンクが高速な場合)、これは問題にならないであろう。他の状況では(例えば、content.xmlが非常に大きいか、または通信リンクは非常に低速だった場合)、content.xmlパーツをすべて読み切ってからでないとイメージを取得できないため、許容できないパフォーマンスとなるか、またはリーダーシステムに妥当とは思えないほどのメモリが要求されることになる。
理想的なパフォーマンスに近づけるためには、content.xmlパーツを分割し、image.jpegパーツを中間に、画像が参照された場所のすぐ後ろに、挿入できるとよいであろう。こうすると、リーダーは早い段階でイメージの処理を開始することができ、したがって、参照に出くわすとすぐに、イメージデータが後に続く。例えば、図9に示されているパッケージレイアウトが生成される。パフォーマンスのメリットがあるため、物理的パッケージがインタリービングをサポートするのが望ましい場合が多い。使用されている物理的パッケージの種類に応じて、インタリービングはサポートされる場合もされない場合もある。物理的パッケージが異なれば、インタリービングの内部表現の取り扱い方も異なる。物理的パッケージがインタリービングをどのように処理しようと、インタリービングは、物理的レベルで実行される最適化であり、1つのパーツが物理的ファイル内で複数の断片に分割されているとしても、それは1つの論理的パーツであり、断片自体はパーツでないことに留意することが重要である。
通信形式
ライターとリーダーとの間の通信は、パーツの順次配送に基づくか、または順序バラバラでアクセスできるパーツへのランダムアクセスにより行うことができる。これらの通信形式のうちのどれを使用するかは、パイプおよび物理的パッケージフォーマットの両方の機能に依存する。一般に、パイプはすべて順次配送をサポートする。物理的パッケージは、順次配送をサポートしなければならない。ランダムアクセスのシナリオをサポートするには、使用しているパイプと物理的パッケージの両方がランダムアクセスをサポートしていなければならない。ある種のパイプは、ランダムアクセスを使用可能にできるプロトコルに基づいている(例えば、バイトレンジのサポートがあるHTTP1.1)。これらのパイプが使用されている場合に最大のパフォーマンスを引き出すためには、物理的パッケージでランダムアクセスをサポートすることが推奨される。このようなサポートが行われていないと、リーダーは、必要とするパーツが順次配送されてくるまでひたすら待つことになる。
物理的マッピング
論理パッケージングモデルでは、パッケージ抽象化を定義しており、パッケージの実際のインスタンスは、パッケージのなんらかの特定の物理的表現に基づく。パッケージングモデルは、物理的永続フォーマットだけでなく、様々なトランスポート(例えば、ネットワークベースのプロトコル)にもマッピングすることができる。物理的パッケージフォーマットは、抽象パッケージングモデルのコンポーネントから特定の物理的フォーマットの機能へのマッピングとして説明することができる。パッケージングモデルでは、パッケージのアーカイブ、配布、またはスプーリングに使用すべき物理的パッケージフォーマットを指定しない。一実施形態では、論理的構造のみが指定される。パッケージは、バラバラのファイルのコレクション、.ZIPファイルアーカイブ、複合ファイル、またはその他のフォーマットにより「物理的に」実現することができる。選択されたフォーマットは、ターゲットの消費デバイスまたはそのデバイス用のドライバによりサポートされる。
マッピングされるコンポーネント
それぞれの物理的パッケージフォーマットは、以下のコンポーネントのマッピングを定義する。いくつかのコンポーネントは、オプションであり、特定の物理的パッケージフォーマットではそれらのオプションコンポーネントをサポートしていない場合がある。
Figure 2007535755
共通マッピングパターン
Figure 2007535755
機能が部分的にパッケージングモデルコンポーネントと一致する物理的記憶フォーマットは多数存在する。パッケージングモデルからそのような記憶フォーマットへのマッピングを定義する際に、パッケージングモデルと物理的記憶媒体との間の機能の類似性を利用することが望ましい場合があるが、マッピングのレイヤを使用して追加機能を実現することは、物理的記憶媒体に本来的に持つ機能ではない。例えば、いくつかの物理的パッケージフォーマットは、個々のパーツをファイルシステム内の個別ファイルとして格納することができる。そのような物理的フォーマットでは、多くのパーツ名を直接同じ物理的ファイル名にマッピングするのが自然であろう。有効なファイルシステムファイル名でない文字を使用しているパーツ名は、何らかの種類の回避機構を必要とするかもしれない。
多くの場合、異なる物理的パッケージフォーマットの設計者は、単一の共通マッピング問題に直面する可能性がある。共通マッピング問題の例として、任意のコンテンツタイプをパーツに関連付ける場合と、インタリーブされたレイアウトスタイルをサポートする場合の2つがある。本明細書では、そのような共通マッピング問題に対する共通の解決策を提案する。特定の物理的パッケージフォーマットの設計者は、ここで定義されている共通マッピング解決策を使用するよう奨励されるが、必ずそうしなければならないわけではない。
パーツのコンテンツタイプの識別
物理的パッケージフォーマットのマッピングにより、それぞれのパーツのコンテンツタイプを格納するための機構が定義される。いくつかの物理的パッケージフォーマットは、コンテンツタイプを表すための固有の機構を備える(例えば、MIMEによる「Content−Type」ヘッダ)。このような物理的パッケージについては、マッピングにその固有の機構を使用してパーツのコンテンツタイプを表すよう推奨する。他の物理的パッケージフォーマットについては、他の何らかの機構を使用して、コンテンツタイプを表す。これらのパッケージ内でコンテンツタイプを表すための推奨される機構は、タイプストリームと呼ばれる特別な名前のXMLストリームをパッケージに入れることである。このストリームは、パーツではなく、したがって、それ自体URIアドレス指定可能ではない。しかし、パーツのインタリーブに使用されるのと同じ機構を使用して物理的パッケージ内でインタリーブすることができる。
タイプストリーム(types stream)は、最上位レベルの「Types」要素、および1つまたは複数の「Default」および「Override」子要素を持つXMLを含む。「Default」要素は、パーツ名拡張子からコンテンツタイプへのデフォルトのマッピングを定義する。これは、ファイル拡張子は多くの場合、コンテンツタイプに対応しているという事実を利用している。「Override」要素は、デフォルトのマッピングの対象になっていない、またはデフォルトのマッピングとは整合しないパーツ上で、コンテンツタイプを指定する場合に使用される。パッケージライターは、「Default」要素を使用して、パーツ毎の「Override」要素の個数を減らすことができるが、必ずそうしなければならないわけではない。
「Default」要素は、以下の属性を持つ。
Figure 2007535755
「Override」要素は、以下の属性を持つ。
Figure 2007535755
以下に、タイプストリームに含まれるXMLの一実施例を示す。
Figure 2007535755
以下の表は、パーツのサンプルリスト、および上述のタイプストリームにより定義されるような対応するコンテンツタイプをまとめたものである。
Figure 2007535755
パッケージ内のすべてのパーツについて、タイプストリームは、(a)1つの一致する「Default」要素、(b)1つの一致する「Override」要素、または(c)一致する「Default」要素および一致する「Override」要素の両方(この場合「Override」要素が優先する)のいずれかを含む。一般に、与えられた拡張子に対し、高々1つの「Default」要素と、与えられたパーツ名に対し、高々1つの「Override」要素がある。
タイプストリーム内の「Default」要素および「Override」要素の順序は、重要ではない。しかし、インタリーブされたパッケージでは、物理的パッケージ内において「Default」および「Override」要素は、それらが対応するパーツの前に現れる。
インタリービング
すべての物理的パッケージが、本来含まれるものとしてパーツのデータストリームのインタリービングをサポートしているわけではない。一実施形態では、そのような物理的パッケージへのマッピングでは、このセクションで説明されている一般的な機構を使用してパーツのインタリービングを可能にする。この一般的な機構では、パーツのデータストリームを複数の断片に分割してから、他のパーツの断片、またはパーツ全体とインタリーブするという方法によって動作する。パーツの個々の断片は、物理的マッピング内に存在し、論理的パッケージングモデルではアドレス指定できない。断片のサイズは0であってもよい。
パーツ名からパーツの個々の断片の名前への以下の独特なマッピングが定義され、リーダーは断片を縫い合わせるようにして元の順序に戻し、パーツのデータストリームを形成することができる。
与えられたパーツ名の断片名を導出するための文法は、以下のとおりである。
Figure 2007535755
この文法により生成されたpiece_namesに対しては、以下の妥当性制約条件が存在する。
・断片番号は0から始まり、正の連続する整数である。断片番号は左側が0でパッディングされる。
・パーツの断片の集まりの中の最後の断片は、断片名の中で「.piece」の前に「.last」が付く。
・物理的パッケージ内で名前にマッピングされる前に、断片名は論理的パーツの名前から生成される。
断片を自然な順序で格納する必要はないが、そのような格納方法をとれば最適な効率が得られる可能性がある。インタリーブされた(断片化された)パーツを収めた物理的パッケージは、さらに、非インタリーブ(ワンピース)パーツを含むこともでき、したがって、以下の例は有効であろう。
Figure 2007535755
特定のマッピング
「Windows(登録商標)ファイルシステム内のバラバラのファイル」では、次の物理的フォーマットの特定のマッピングを定義する。
Windows(登録商標)ファイルシステム内のバラバラのファイルへのマッピング
論理的モデルの要素を物理的フォーマットにマッピングする方法をよく理解できるように、MetroパッケージをWindows(登録商標)ファイルシステム内のバラバラのファイルのコレクションとして表す基本的な場合について考察する。論理的パッケージ内のそれぞれのパーツは、別々のファイル(ストリーム)に格納される。論理的モデル内のそれぞれのパーツ名は、ファイルの名前に対応している。
Figure 2007535755
パーツ名は、以下の表に例示されているように、有効なWindows(登録商標)ファイル名に翻訳される。
以下に、論理的パーツ名セグメント(URIセグメント)およびWindows(登録商標)ファイル名に対し有効な2つの文字集合を示す。この表は、以下の重要な2つの事項を明らかにする。
URIをファイル名に変換する際にはエスケープする必要がある、2つの有効なURI記号であるコロン(:)とアスタリスク(*)がある。
URI内に存在し得ない有効なファイル名の記号^{}[]#がある(これらは、インタリービングなどの特別のマッピング目的に使用することができる)。
「エスケープ」は、パーツ名にファイル名内で使用できない文字が含まれている場合に有効なファイル名文字を作り出すための一手法として使用される。文字をエスケープするには、キャレット記号(^)の後にその文字の16進数表現を続ける。
abs_path(パーツ名)からファイル名にマッピングするには、以下のようにする。
先頭の/を除去し、
すべての/を\に変換し、
コロンとアスタリスク文字をエスケープする
例えば、パーツ名/a:b/c/d*.xamlはa^25b\c\d^2a.xamlにというファイル名になる。
逆のマッピングを実行するには、以下のようにする。
すべての\を/に変換し、
/を文字列の先頭に追加し、
^[16進数コード]を対応する文字で置き換えることにより文字のエスケープを解除する
Figure 2007535755
バージョン管理と拡張性
他の技術的仕様と同様、本明細書に含まれる仕様は、将来の技術的進歩とともに発展する可能性がある。この仕様の第1版の設計は、第1版に基づいて書かれたソフトウェアシステムと将来の版に合わせて書かれたソフトウェアシステムとの間でドキュメントを将来交換できるようにする計画を含んでいる。同様に、この仕様により、第三者が仕様に対する拡張機能を作成することができる。このような拡張により、例えば、ある特定のプリンタの存在を認識しない他のリーダーとの互換性を維持しつつ、そのプリンタの機能を利用するドキュメントを構成することができる。
新しいバージョンの固定ペイロードマークアップ、またはマークアップに対するサードパーティー拡張を使用するドキュメントでは、リーダー側で、挙動に関する適切な決定を下す必要がある(例えば、視覚的に表示する方法)。リーダーのガイドとなるように、ドキュメントの作成者(またはドキュメントを生成したツール)は、他の方法では認識されない要素または属性に出会ったリーダーの、適切な挙動を識別しなければならない。リーチドキュメントについては、このタイプのガイダンスが重要である。
新しいプリンタ、ブラウザ、およびその他のクライアントは、将来の機能に対する様々なサポートを実施することができる。新しいバージョンまたは拡張機能を利用するドキュメント作成者は、それらのバージョンの拡張を認識しないリーダーの挙動を慎重に検討しなければならない。
名前空間のバージョン管理
XMLマークアップ認識は、名前空間のURIに基づいている。XML名前空間については、リーダーはその名前空間内で定義されているXML要素およびXML属性の全部を認識するか、またはどれも認識しないことが予想される。リーダーが新しい名前空間を認識しない場合、リーダーはそのドキュメント内で指定されている通りフォールバックレンダリングオペレーション(fallback rendering operations)を実行する必要がある。
XML名前空間URI「http://PLACEHOLDER/version-control」は、バージョン適応可能なおよび拡張適応可能な固定ペイロードマークアップを構成するために使用されるXML要素および属性を含む。固定ペイロードは、中にバージョン管理要素が含まれている必要はない。しかし、適応可能コンテンツをビルドするには、<ver:Compatibility.Rules> および <ver:AlternativeContent>XML要素のうちの、少なくとも1つを使用しなければならない。
固定ペイロードマークアップの指定には、xmlns URI「http://PLACEHOLDER/pdl」が関連付けられる。固定ペイロード内でこの名前空間を使用することによって、この仕様で定義されている要素のみが使用されることを、リーダーアプリケーションに通知する。この仕様の将来のバージョンには、それ独自の名前空間が付属する。新しい名前空間を知っているリーダーアプリケーションは、旧バージョンで定義されている属性の要素の上位集合をサポートする方法を認識する。新しいバージョンを知らないリーダーアプリケーションは、PDLへの何らかの未知の拡張であるかのように新しいバージョンのURIを検討する。これらのアプリケーションは、名前空間の間に関係が存在すること、一方は他方の上位集合であることを認識できない。
下位互換性と「上位」互換性
本明細書で説明されているシステムおよび方法をサポートしているアプリケーションまたはデバイスに関して、旧バージョンの仕様、または仕様の未知の拡張もしくはバージョンを使用してオーサリングされたドキュメントをクライアントが解析し表示することができるということによって、互換性があることが示される。様々なバージョン管理機構で「下位互換性」に対応しているため、後述のように、クライアントは将来の実装において、仕様のダウンレベルバージョンに基づきドキュメントをサポートできる。
プリンタなどの実装されたクライアントがマークアップ言語の将来のバージョンを使用してビルドされたドキュメントを受け取った場合、クライアントは使用可能なレンダリングオプションを解析し、理解することができる。仕様の旧バージョンに基づいて書かれたクライアントソフトウェアが、新しいバージョンの機能を使用したいくつかのドキュメントを処理できることを、「上位互換性」と呼ぶ。上位互換性を使用できるように書かれたドキュメントは、「バージョン適応可能(version−adaptive)」と呼ばれる。
さらに、実装されたクライアントは新しい要素またはプロパティを表す未知の拡張機能を持つドキュメントをサポートできる必要もあるため、様々な意味を付加して「拡張適応可能(extension adaptive)」であるドキュメントのより一般的なケースをサポートする。
プリンタまたはビューアが未知の拡張機能に出会った場合、これは、周囲のコンテンツの適応レンダリングに関するガイダンスのための拡張機能を使用することにより埋め込まれている情報を探す。この適応は、未知の要素または属性を認識されているコンテンツで置き換えることを伴う。しかし、適応は、未知のコンテンツを純粋に無視することを含む他の形を取りうる。明示的なガイダンスがない場合、リーダーは、マークアップ内に認識されていない拡張機能が存在していることを、誤った状態として取り扱わなければならない。ガイダンスが提供されない場合、この拡張機能は、コンテンツを認識するための基本であるとみなされる。レンダリングの失敗が記録され、ユーザに報告される。
このモデルをサポートするために、新しいおよび拡張されたバージョンのマークアップ言語は、名前空間内において関連する拡張機能を論理的にグループ化しなければならない。このようにして、ドキュメント作成者は、最小限度の名前空間の数を使用して拡張機能を利用することができる。
マークアップのバージョン管理
拡張適応可能な挙動をサポートするためのXML語彙は、以下の要素を含む。
Figure 2007535755
<Compatibility.Rules>要素
Compatibility.Rulesは、添付属性を保持できる要素だけでなくXamlルート要素にも添付できる。<Compatibility.Rules>要素は、パーサが未知の要素または属性にどのような反応をするかを制御する。通常、このようなアイテムはエラーとして報告される。無視可能な要素をCompatibility.Rulesプロパティに追加することで、特定の名前空間からのアイテムを無視できることをコンパイラに通知できる。
Compatibility.Rulesは、IgnorableおよびMustUnderstand要素を含むことができる。デフォルトでは、すべての要素および属性は、MustUnderstandであると想定される。要素および属性は、Ignorable要素をコンテナのCompatibility.Rulesプロパティに追加することにより、Ignorableにできる。要素またはプロパティは、MustUnderstand要素を入れ子になっているコンテナの1つに追加することにより、これもまたMustUnderstandにできる。1つのIgnorableまたはMustUnderstandは、同じCompatibility.Rules要素内の特定の名前空間URIを参照する。
<Compatibility.Rules>要素は、コンテナの自タグまたは属性ではなく、コンテナのコンテンツに影響を及ぼす。コンテナのタグまたは属性に影響を及ぼすには、コンテナに互換性規則が含まれていなければならない。Xamlルート要素を使用することにより、Canvasなどの、この要素を使用しないとルート要素となる要素に対し互換性規則を指定することができる。Compatibility.Rules複合属性は、コンテナ内の第1の要素である。
<Ignorable>要素
<Ignorable>要素は、囲まれている名前空間URIが無視可能であることを宣言する。<Ignorable>タグが現在のブロックまたはコンテナブロック内のアイテムの前で宣言され、名前空間URIはパーサにとっては未知のものである場合、アイテムは無視可能であるとみなすことができる。URIが知られている場合には、Ignorableタグは無視され、すべてのアイテムが認識される。一実施形態では、Ignorableと明示的に宣言されていないアイテムはすべて認識されなければならない。Ignorable要素は、<ProcessContent>および<CarryAlong>要素を含むことができ、これらは、要素の無視のされ方を修正するために使用されるだけでなく、ドキュメント編集ツールに、そのようなコンテンツを編集済みドキュメント内にどのように保存するかについてのガイダンスを与えるためにも使用される。
<ProcessContent>要素
<ProcessContent>要素は、要素が無視される場合に、その要素のコンテンツが、無視された要素のコンテナに含まれているかのように処理されることを宣言する。
<ProcessContent>属性
Figure 2007535755
<CarryAlong>要素
オプションの<CarryAlong>要素は、ドキュメントが修正されたときに、無視可能なコンテンツを保存すべきかどうかをドキュメント編集ツールに通知する。編集ツールが無視可能なコンテンツを保存または破棄するために使用する方法は、編集ツールの領分である。複数の<CarryAlong>要素が1つの名前空間内の同じ要素または属性を参照している場合、指定された最後の<CarryAlong>が優先する。
<CarryAlong>属性
Figure 2007535755
<MustUnderstand>要素
<MustUnderstand>は、Ignorable要素の効果を反転した要素である。この手法は、例えば、代替えコンテンツと組み合わせたときに、有用である。<MustUnderstand>要素により定義された範囲から外れている場合、要素はIgnorableのままである。
<MustUnderstand>属性
Figure 2007535755
<AlternateContent>要素
<AlternateContent>要素を使用すると、指定されたコンテンツの一部が認識されない場合のための代替えコンテンツを用意できる。AlternateContentブロックでは、<Prefer>および<Fallback>の両方のブロックを使用する。<Prefer>ブロック内に何か認識されないものがあれば、<Fallback>ブロックのコンテンツが使用される。名前空間を<MustUnderstand>と宣言すれば、フォールバックを使用することを指示することになる。名前空間が無視できると宣言されていて、その名前空間が<Prefer>ブロック内で使用されている場合、<Fallback>ブロック内のコンテンツは使用されない。
マークアップのバージョン管理の例
<Ignorable>の使用
この実施例では、架空のマークアップ名前空間http://PLACEHOLDER/Circleを使用する。この名前空間では、要素Circleをその初期バージョンで定義し、将来のバージョンのマークアップ(バージョン2)で導入されるCircleのOpacity属性、およびさらに後のバージョンのマークアップ(バージョン3)で導入されるLuminanceプロパティを使用する。このマークアップは、バージョン1および2、さらには3およびそれ以上のバージョンでもロード可能である。さらに、<CarryAlong>要素により、エディタがv3:Luminanceを認識しない場合に、v3:Luminanceを保存しなければならないことも指定する。
Figure 2007535755
<MustUnderstand>の使用
以下の実施例は、<MustUnderstand>要素の使い方を説明している。
Figure 2007535755
<MustUnderstand>要素を使用すると、ルート要素内でIgnorableと宣言されているとしても、v3:Luminanceへの参照はエラーとなる。この手法は、例えば、代わりにバージョン2で追加されたCanvasのLuminanceプロパティを使用する代替コンテンツと組み合わせた場合に有用である。Canvas要素の範囲から外れた場合、CircleのLuminanceプロパティは再び無視可能である。
Figure 2007535755
<AlternateContent>の使用
要素または属性が<MustUnderstand>と宣言されているが、<AlternateContent>ブロックの<Prefer>ブロックでは認識されない場合、<Prefer>ブロックは丸ごとスキップされ、<Fallback>ブロックがいつものように処理される(つまり、出会ったMustUnderstandアイテムはエラーとして報告される)。
Figure 2007535755
リーチパッケージフォーマット
以下の説明では、特定のファイルフォーマットについて説明する。このセクションの個別の主要な小見出しとして、「リーチパッケージフォーマットの紹介」。「リーチパッケージの構造」、「固定ペイロードパーツ」、「FixedPageマークアップの基本事項」、「Fixed−Payload要素およびプロパティ」、および「FixedPageマークアップ」がある。それぞれの主要な小見出しは、1つまたは複数の関連する小見出しを持つ。
リーチパッケージフォーマットへの序論
これまではフレームワークの実施例について説明したが、以下の説明は、上述のツールを利用して実現される特有のフォーマットの1つに関する。以下の説明は、1つのフォーマット例を取りあげているにすぎず、請求されている発明の対象の適用を制限する意図ではないことは評価され理解されるであろう。
この実施形態によれば、単一のパッケージに複数のペイロードを入れることができ、それぞれドキュメントの異なる表現として機能を果たす。1つのペイロードは、識別可能な「ルート」パーツ、およびそのルートパーツのその有効な処理に必要なすべてのパーツを含むパーツのコレクションである。例えば、ペイロードは、ドキュメントの固定表現、リフロー可能表現、または任意の表現とすることが可能である。
以下の説明では、固定ペイロードと呼ばれる特定の表現を定義する。固定ペイロードは、FixedPanelマークアップを含むルートパーツを持ち、FixedPanelマークアップはさらにFixedPageパーツを参照する。以上あわせて、マルチページドキュメントの正確な表示を記述する。
少なくとも1つの固定ペイロードを保持し、後述の他の規則に従うパッケージは、リーチパッケージと呼ばれる。リーチパッケージのリーダーおよびライターは、リーチパッケージフォーマットの仕様に基づいて、自前のパーサおよびレンダリングエンジンを実装することができる。
リーチパッケージの特徴
記載されている実施形態によれば、リーチパッケージでは、ドキュメントの配布、アーカイブ、および表示に関する情報作業者側の要求条件を扱う。知られている表示規則を使用することにより、リーチパッケージは、保存されているフォーマットからあいまいなところなくかつ正確に複製または印刷ができ、しかも、クライアントデバイスまたはアプリケーションは、特定のオペレーティングシステムまたはサービスライブラリに縛られない。さらに、リーチペイロードは中立の、アプリケーションに依存しない方法で表されるため、パッケージを作成するために使用されたアプリケーションがなくても、ドキュメントを普通に表示し、印刷することができる。このような機能を実現するために、固定ペイロードという概念を導入し、リーチパッケージに含める。
記載されている実施形態によれば、固定ペイロードは固定されたページ数を持ち、改ページは常に同じである。固定ペイロード内の1ページのすべての要素のレイアウトはあらかじめ設定される。それぞれのページは固定されたサイズと向きを持つ。したがって、消費側ではレイアウトの計算は一切行う必要はなく、コンテンツを単に表示するだけである。これは、グラフィックスのみならず、テキストにも適用され、これは正確な印刷上の配置で固定ペイロードにより表される。ページのコンテンツ(テキスト、グラフィックス、イメージ)は、強力な、しかし単純なビジュアルプリミティブを一式使用して説明される。
リーチパッケージでは、ページを構成するため様々な機構をサポートしている。ページの1グループを次から次へと「接着」し、「FixedPanel」にまとめる。このページグループは、従来のマルチページドキュメントとほぼ等価である。FixedPanelは、その後、さらに、構成−「複合」ドキュメントを組み立てるためビルドシーケンスおよび選択のプロセス−に参加することができる。
例示され、説明されている実施形態では、リーチパッケージは、例えば、一組のFixedPanelを接着して単一のより大きな「ドキュメント」に仕上げるために使用できる、FixedPanelシーケンスと呼ばれる特定の種類の順序列をサポートする。例えば、異なるソースを出所とする、2ページのカバーメモ(FixedPanel)と20ページのレポート(FixedPanel)の2つのドキュメントを、接着してまとめることを考える。
リーチパッケージでは、「同じ」コンテンツの代替的な表現を含むドキュメントパッケージをビルドするときに使用できる、多数の特定のセレクタをサポートする。特に、リーチパッケージでは、言語、色表現能力、およびページサイズに基づいて選択を行うことができる。したがって、例えば、セレクタを使用してドキュメントの英語表現とフランス語表現のいずれかを選ぶバイリンガルドキュメントを用意することも可能である。
リーチパッケージに構成するためにセレクタおよびシーケンスを使用するこれらの単純な方法に加えて、セレクタおよびシーケンスで他のセレクタおよびシーケンスを参照することにより、強力な集合階層を構築できることに留意することが重要である。この実施形態では、何ができて何ができないかの正確な規則は、以下の「リーチパッケージの構造」という表題のセクションで規定される。
さらに、リーチパッケージは、固定ペイロードでない追加ペイロードを含むことができる。しかし、その代わりに、ドキュメントのよりリッチで、おそらく編集可能な表現となる。これにより、パッケージは、編集アプリケーションで正しく動作するリッチで編集可能なドキュメントだけでなく、視覚的に正確な、編集アプリケーションなしで表示できる表現をも含むことができる。
最後に、この実施形態によれば、リーチパッケージは、プリントチケットと呼ばれるものもサポートしている。プリントチケットは、パッケージが印刷されるときに使用すべき設定を提供するものである。これらのプリントチケットは様々な方法で添付することができ、かなり柔軟性が高い。例えば、プリントチケットをパッケージ全体に「添付」することができ、その設定はパッケージ全体に適用される。プリントチケットは、さらに、構造内の下位のレベル(例えば、個々のページ)に添付することもでき、それらのプリントチケットは、パーツを添付先に印刷するときに使用する優先(Override)設定を備える。
リーチパッケージの構造
上で説明したように、リーチパッケージは、「固定」ページ、FixedPanels、構成、プリントチケットなどを含む機能群をサポートする。それらの機能群は、パッケージモデルのコアコンポーネントであるパーツと関係とを使用してパッケージ内に表される。このセクションおよび関連する下位セクションでは、「リーチパッケージ」の完全な定義を与える。さらに、これらのパーツおよび関係すべての組み立て、関連付けなどの作業をどのように行わなければならないかを説明する。
リーチパッケージの構造の概要
図10は、リーチパッケージの実施例および、この実施形態において、パッケージを構成し、またはパッケージ内に見出せる有効な種類の各パーツを示す図である。以下の表は、有効なそれぞれのパーツタイプの一覧であり、またそれぞれについての説明も載せてある。
Figure 2007535755
リーチパッケージは、「どこでも表示して印刷」ドキュメントとなるように設計されているため、リーチパッケージのリーダーおよびライターは、「有効な」リーチパッケージを構成するものについての共通の明確に定義された予測を共有しなければならない。以下では、「有効な」リーチパッケージの定義を与えるために、いくつかの概念を先に定義しておく。
リーチ構成パーツ(Reach Composition Parts)
リーチパッケージは、パッケージの開始パーツから構成ブロックをトラバースすることにより「発見可能」である少なくとも1つのFixedPanelを含んでいなければならない。説明されている実施形態によれば、発見プロセスは以下のアルゴリズムに従う。
・パッケージ開始パーツから始めて、構成パーツのグラフを再帰的にトラバースする。
・このトラバースを実行する際に、リーチ構成パーツ(後述)である構成パーツにのみトラバースする。
・グラフのエッジの終端節点(出て行く弧がない節点)すべてを特定する。
これらの終端節点は(<item>要素を介して)リーチペイロードのルートと呼ばれるパーツ群を参照する。
固定ペイロード(Fixed Payload)
固定ペイロードは、ルートパーツがFixedPanelパーツであるペイロードである。例えば、図10の固定ペイロードはそれぞれ、ルートパーツとして、関連するFixedPanelパーツを持つ。ペイロードは、FixedPanelの有効な処理に必要なパーツのすべての完全閉方(closure)を含む。これらに含まれるのは、以下のとおりである。
・FixedPanel自体
・FixedPanel内から参照されるすべてのFixedPages
・ペイロード内のFixedPagesのどれかにより(直接的に、またはセレクタを通じて間接的に)参照されるすべてのイメージパーツ
・ペイロード内の任意のFixedPagesで使用されるイメージブラシから直接的または間接的に参照されるすべてのリーチセレクタ(後述)
・ペイロード内のFixedPagesのどれかにより参照されるすべてのフォントパーツ
・固定ペイロード内の任意のパーツに添付されるすべての記述的メタデータパーツ
・固定ペイロード内の任意のパーツに添付される任意のプリントチケット
リーチパッケージの有効性(Validity)規則
こうして定義が適切に行われたので、説明されている実施形態に従って「有効な」リーチパッケージを記述する適合性規則について説明することにする。
・リーチパッケージは、上述のようにパッケージ関係の標準の機構を使用して定義された開始パーツを持たなければならない。
・リーチパッケージの開始パーツは、セレクタまたはシーケンスのいずれかでなければならない。
・リーチパッケージは、FixedPanelである少なくとも1つのリーチペイロードルートを持たなければならない。
・PrintTicketパーツは、複数の構成パーツのどれか、複数のFixedPanelパーツ、または1つまたは複数のFixedPanelで識別された複数のFixedPageパーツのどれかに添付することができる。この実施例では、これは、http://PLACEHOLDER/HasPrintTicketRel関係を介して行われる。
・PrintTicketsは、これらのパーツのどれかまたはすべてに添付することができる。
・与えられたパーツは、高々1つのPrintTicketが添付されなければならない。
・記述的メタデータパーツは、パッケージ内の任意のパーツに添付できる。
・FixedPayload内のすべてのFontオブジェクトは、セクション「フォントパーツ」で定義されているフォントフォーマット規則の条件を満たしていなければならない。
・固定ペイロードのFixedPage内からのイメージの参照は、選択を行い(他のセレクタを通じて再帰的に行う可能性がある)、表示される実際のイメージパーツを見つけることができるセレクタを指すことができる。
・固定ペイロードで使用されるすべてのImageオブジェクトは、セクション「イメージパーツ」で定義されているフォントフォーマット規則の条件を満たしていなければならない。
・FixedPageから(直接的に、またはセレクタを通じて間接的に)参照される任意のフォント、イメージ、またはセレクタパーツについて、参照するFixedPageから参照されているパーツへの「必須パーツ」関係(関係名=http://mmcf-fixed-RequiredResource-PLACEHOLDER)がなければならない。
リーチ構成パーツ
リーチパッケージに含まれる構成パーツは何種類あってもよいが、構成パーツのタイプの明確に定義された集合のみが、本明細書に基づく明確に定義された挙動を持つ。挙動が明確に定義されている構成パーツをリーチ構成パーツと呼ぶ。これら以外のパーツは、リーチパッケージの有効性を判断するときに関係しない。
以下のタイプの構成パーツが、リーチ構成パーツとして定義される。
Figure 2007535755
リーチセレクタ
リーチ構成パーツとして定義されているセレクタ構成パーツは、リーチセレクタと呼ばれる。上述のように、言語セレクタは、英語またはフランス語などの自然言語に基づいて表現を選択する。この言語を発見するために、セレクタは各アイテムを検査する。XMLであるもののみ考察する。これらについては、それぞれのXMLのルート要素を検査して、その言語を判別する。xml:lang属性が存在していない場合、パーツは無視される。その後セレクタはそれぞれのパーツを次々に検討し、言語がシステムのデフォルト言語と一致する最初のものを選択する。
カラーセレクタは、モノクロかカラーかに基づいて表現を選択する。ページサイズセレクタは、ページサイズに基づいて表現を選択する。コンテンツタイプセレクタは、コンテンツタイプがシステムにより認識できるかどうかに基づいて表現を選択する。
リーチシーケンス
リーチ構成パーツとして定義されているシーケンス構成パーツは、リーチシーケンスと呼ばれる。固定シーケンスでは、固定コンテンツである子を1つのシーケンスにまとめる。
固定ペイロードパーツ(Fixed Payload Parts)
固定ペイロードは、FixedPanelパーツ、FixedPageパーツ、イメージパーツ、フォントパーツ、プリントチケットパーツ、および記述的メタデータパーツを含むことができ、それぞれの小見出しのところで説明する。
FixedPanelパーツ
以下に示すように、固定ペイロードのドキュメント構造は、FixedPagesをスパインの一部として識別する。スパインパーツとページパーツとの関係は、そのスパインの関係ストリーム内で定義される。FixedPanelパーツは、コンテンツタイプapplication/xml+PLACEHOLDERである。
Fixed−Payloadコンテンツのスパインは、<FixedPanel>要素を<Document>要素内に入れることにより、マークアップで指定する。以下の例では、<FixedPanel>要素により、スパイン内に保持されているページのソースを指定している。
Figure 2007535755
<Document>要素
<Document>要素は、属性を持たず、子は1つだけ、つまり<FixedPanel>を持たなければならない。
<FixedPanel>要素
<FixedPanel>要素は、ドキュメントスパインであり、ページの順序付きシーケンスを単一のマルチページドキュメントに論理的にバインドして、1つにまとめる。ページについては、常に、その幅と高さを指定するが、<FixedPanel>要素は、さらにオプションにより、高さおよび幅を指定することもできる。この情報は、例えば、ページサイズに基づいて代替的な表現を選択することなど、様々な目的のために使用できる。<FixedPanel>要素によって高さと幅を指定している場合、通常は、<FixedPanel>内のページの幅および高さとを揃えられるが、それらの寸法は、個々のページの高さと幅とを指定しているわけではない。
以下の表は、説明されている実施形態によるFixedPanel属性のまとめである。
Figure 2007535755
<PageContent>要素は、<FixedPanel>要素の唯一の許容可能な子要素である。<PageContent>要素は、ドキュメントのページ順序と一致する順次マークアップの順序になっている。
<PageContent>要素
各<PageContent>要素は、単一ページのコンテンツのソースへの参照である。ドキュメント内のページ数を判別するには、<FixedPanel>に含まれる<PageContent>子の数を数える。
<PageContent>要素は、許容可能な子を持たず、単一の必須属性Sourceを持ち、これはページのコンテンツに対するFixedPageを参照する。
<FixedPanel>要素と同様に、<PageContent>要素は、オプションにより、PageHeightおよびPageWidth属性を含むことができ、ここでは単一ページのサイズを反映している。必須ページサイズは、FixedPageパーツで指定され、<PageContent>のオプションサイズは報告のみである。<PageContent>サイズ属性を使用すると、個々のFixedPageパーツをすべてロードして解析することなく、ドキュメントビューアなどのアプリケーションからドキュメントの視覚的レイアウト推定を素早く行うことができる。
以下に示す表は、<PageContent>のまとめであり、属性の説明も載せてある。
Figure 2007535755
ページコンテンツのURI文字列は、パッケージに相対的なコンテンツのパーツ位置を参照しなければならない。
FixedPageパーツ
<FixedPanel>内の<PageContent>要素はFixedPageパーツを名前(URI)で参照する。各FixedPageパーツは、コンテンツの単一ページの表示を記述するFixedPageマークアップを含む。FixedPageパーツは、コンテンツタイプapplication/xml+PLACEHOLDER−FixedPageである。
マークアップでのFixedPagesの記述
以下に、ソースコンテンツのマークアップで上述のスパインマークアップ例で参照されているページを探す実施例を示す(<PageContent Source=“p1.xml”/>)。
Figure 2007535755
以下の表は、FixedPageプロパティのまとめであり、プロパティの説明も載せてある。
Figure 2007535755
FixedPageマークアップの読み込み順序
一実施形態では、FixedPageに含まれるGlyphs子要素のマークアップ順序は、ページのテキストコンテンツの所望の読み込み順序と同じでなければならない。この読み込み順序は、ビューア内のFixedPageからの順次テキストの対話形式による選択/コピーのためと、アクセシビリティ技術による順次テキストへのアクセスを可能にするために使用することができる。マークアップ順序と読み込み順序との間の対応関係を保証するのは、FixedPageマークアップを生成するアプリケーション側の役目である。
イメージパーツ
サポートされているフォーマット
説明されている実施形態によれば、リーチパッケージ内でFixedPagesにより使用されるイメージパーツは、固定された数のフォーマット、例えば、PNGまたはJPEGとすることができるが、他のフォーマットを使用することもできる。
フォントパーツ
説明されている実施形態によれば、リーチパッケージでは、限られた数のフォントフォーマットをサポートする。例示され説明されている実施形態では、サポートされているフォントフォーマットとして、TrueTypeフォーマットとOpenTypeフォーマットがある。
当業者であれば理解するであろうが、OpenTypeフォントフォーマットは、TrueTypeフォントフォーマットの拡張であり、PostScriptフォントデータおよび複雑な印刷レイアウトのサポートを追加したものである。OpenTypeフォントファイルは、TrueTypeアウトラインフォントまたはPostScriptアウトラインフォントのいずれかを含む表形式のデータが格納される。
説明されている実施形態によれば、リーチパッケージでサポートされていないフォントフォーマットは、Adobe type 1、Bitmapフォント、隠し属性付きのフォント(システムフラグを使用してそれを列挙するかどうかを決定する)、ベクトルフォント、およびEUDCフォント(フォントファミリ名がEUDC)である。
フォントのサブセット化
固定ペイロードは、後で詳しく説明するGlyphs要素を使用してすべてのテキストを表す。この実施形態では、フォーマットは固定なので、FixedPayloadsにより要求されるグリフのみを含むように、フォントをサブセット化することが可能である。したがって、リーチパッケージ内のフォントは、グリフの使用法に基づいてサブセット化することができる。サブセット化されたフォントは、オリジナルフォント内のすべてのグリフを含むわけではないが、サブセット化されたフォントは有効なOpenTypeフォントファイルでなければならない。
プリントチケットパーツ
プリントチケットパーツは、パッケージが印刷されるときに使用できる設定を提供する。これらのプリントチケットは様々な方法で添付することができ、かなり柔軟性が高い。例えば、プリントチケットをパッケージ全体に「添付」することができ、その設定はパッケージ全体に適用される。プリントチケットは、さらに、構造内の下位のレベル(例えば、個々のページ)に添付することもでき、それらのプリントチケットは、パーツを添付先に印刷するときに使用する優先(Override)設定を備える。
記述的メタデータ
上述のように、記述的メタデータパーツは、パッケージのライターまたは作成者に、パッケージのリーダーが高い信頼度で発見できるようなプロパティの値を保存する手段を提供する。これらのプロパティは、通常、パッケージ全体だけでなくコンテナ内の個々のパーツに関する追加情報を記録するために使用される。
FixedPageマークアップの基本事項
このセクションでは、FixedPageマークアップに関連する一部の基本情報について説明するが、「固定ペイロードおよびその他のマークアップ標準」、「FixedPageマークアップモデル」、「リソースおよびリソース参照」、および「FixedPage描画モデル」のセクションを含む。
固定ペイロードおよびその他のマークアップ標準
リーチパッケージ内の固定ペイロードのFixedPanelおよびFixedPageマークアップは、Windows(登録商標)LonghornのAvalon XAMLのマークアップから抽出されたサブセットである。つまり、Fixed Payloadマークアップは、独立のXMLマークアップフォーマットとして孤立しているが(本明細書で説明しているように)、Longhornシステムと同じ方法でオリジナルのマルチページドキュメントのWYSIWYG複製をロードし、それを表示する。
XAMLマークアップに関するバックグラウンドとして以下について考察する。XAMLマークアップは、ユーザがオブジェクトの階層およびオブジェクトの背後にあるプログラミングロジックを、XMLベースのマークアップ言語として指定できるようにする機構である。これにより、オブジェクトモデルはXMLによって記述できる。このため、マイクロソフト社による.NET FrameworkのCommon Language Runtime(CLR)におけるクラスなどの拡張可能クラスを、XMLにおいてアクセスすることができる。XAML機構は、XMLタグをCLRオブジェクトに直接マッピングし、マークアップの中で関連コードを表すことができるようにする機能を備える。様々な実装において、XAMLのCRLベースの実装を特に利用する必要はないことは評価され理解されるであろう。むしろ、CLRベースの実装は、本明細書で説明されている実施形態の背景においては、XAMLを採用できる一手段をなすにすぎない。
より具体的に、CLR概念(左側のコンポーネント)からXML(右側のコンポーネント)へのマッピングの実施例を例示している図11とともに、以下の点を考察する。名前空間は、リフレクションと呼ばれるCLR概念を使用するxmlns宣言内に見つけられる。クラスは、XMLタグに直接マッピングされる。プロパティおよびイベントは、直接属性にマッピングされる。この階層を使用することにより、ユーザは、XMLマークアップファイル内のCLRオブジェクトの階層木を指定できる。Xamlファイルは、.xaml拡張子を持ち、媒体タイプがapplication/xaml+xmlであるxmlファイルである。Xamlファイルは、通常xmlns属性を使用して名前空間を指定する1つのルートタグを持つ。名前空間は、他のタイプのタグによって指定することができる。
続きであるが、xamlファイル内のタグは、一般に、CLRオブジェクトにマッピングされる。タグは、要素、複合プロパティ、定義、またはリソースである。要素は、一般的に実行時にインスタンス化され、オブジェクトの階層を形成するCLRオブジェクトである。複合プロパティタグは、親タグでプロパティを設定する場合に使用される。定義タグは、コードをページに追加し、リソースを定義するために使用される。リソースタグは、木をリソースとして指定することよってのみオブジェクトの木を再利用できる機能を提供する。定義タグは、さらに、他のタグ内でxmlns属性として定義することもできる。
ドキュメントがマークアップで適切に記述された後(通常は、ライターにより)、マークアップは解析して処理することができる(通常は、リーダーにより)。適宜構成されているパーサは、タグを見つけるためにどのCLRアセンブリおよび名前空間を探索すべきかを、ルートタグから判別する。様々な場合において、パーサは、xmlns属性により指定されたURLで名前空間定義ファイルを探し、見つける。名前空間定義ファイルからは、アセンブリの名前およびそのインストールパスならびにCLR名前空間のリストが得られる。パーサは、タグを見つけると、タグのxmlnsおよびそのxmlnsのxmlns定義ファイルを使用してタグが参照するCLRクラスを判別する。パーサは、定義ファイル内でアセンブリおよび名前空間が指定されている順序で探索する。一致が見つかると、パーサはそのクラスのオブジェクトをインスタンス化する。
そこで、上で説明したばかりの、上記の参照により組み込まれるアプリケーションにおいてより詳しく説明されている機構を使用することにより、マークアップタグを使用するXMLベースのファイルによって、オブジェクトモデルを表すことができる。オブジェクトモデルをマークアップタグとして表すことができるこの機能を使用すると、ベクトルグラフィックドローイング、固定フォーマットドキュメント、適応フロードキュメント、およびアプリケーションUIを非同期でまたは同期して作成することができる。
例示され説明されている実施形態では、Fixed Payloadマークアップはごく最低限度のものであり、Avalon XAMLレンダリングプリミティブのほぼ完全に倹約的なサブセットである。これは、Avalonで表すことができるものであれば何でも視覚的に表し、忠実度も完全である。固定ペイロードマークアップは、Avalon XAML要素およびプロパティのサブセットであるが、Avalon XAMLと比べて、追加規約、標準形式、または使用上の制約がプラスされている。
定義されている完全最小の固定ペイロードマークアップセットにより、プリンタRIPまたは対話形式のビューアアプリケーションなどのリーチパッケージリーダーの実装およびテストにかかわるコストが低減されるだけでなく、関連するパーサの複雑さと占有メモリ量の軽減化をはかることができる。この倹約的マークアップセットでは、さらに、サブセット化、エラー、またはリーチパッケージライターとリーダーとの間の不整合に対する機会を最小限に抑えるため、フォーマットおよびそのエコシステムは本質的により強固なものとなる。
リーチパッケージでは、固定ペイロードマークアップが最小であることに加えて、ハイパーリンク、セクション/アウトライン構造およびナビゲーション、テキスト選択、ならびにドキュメントアクセシビリティなどの機能を含むリーチパッケージドキュメントのビューアまたはプレゼンテーションをサポートするため追加の意味的情報用のマークアップを指定する。
最後に、上述のバージョン管理および拡張性機構を使用すると、特定のターゲット消費アプリケーション、ビューア、またはデバイスに対して、最小の固定ペイロードマークアップを、よりリッチな要素群によって補助することが可能である。
FixedPageマークアップモデル
例示され説明されている実施形態では、FixedPageパーツは、XML要素、XML属性、およびXML名前空間に基づくXMLベースのマークアップ言語で表される。本明細書では、3つのXML名前空間はFixedPageマークアップに含まれるように定義されている。このような名前空間の1つは、本明細書の他の場所で定義されているバージョン管理要素および属性を参照する。FixedPageマークアップで要素および属性に使用される主名前空間は、「http://schemas.microsoft.com/MMCF-PLACEHOLDER-FixedPage」である。そして最後に、FixedPageマークアップでは、後述の第3の名前空間を必要とする「リソース」という概念を導入する。
FixedPageマークアップは、XML要素およびXML属性を使用して表されるが、その仕様は、「コンテンツ」および「プロパティ」の高水準抽象モデルに基づく。FixedPage要素は、すべてXML要素として表される。ほんの一握りのFixedPage要素で、子XML要素として表される、「コンテンツ」を保持することができる。しかし、プロパティ値は、XML属性を使用するか、または子XML要素を使用して表すことができる。
FixedPageマークアップは、さらに、リソース辞書およびリソース参照の双子の概念に依存する。リソース辞書と複数のリソース参照を組み合わせることにより、単一のプロパティ値を複数のFixedPageマークアップ要素の複数のプロパティにより共有することができる。
FixedPageマークアップのプロパティ
例示され説明されている実施形態では、FixedPageマークアッププロパティの値を指定するために使用できる3つの形式のマークアップがある。
プロパティがリソース参照を使用して指定される場合、プロパティ名はXML属性名として使用され、属性値の特別なシンタックスはリソース参照が存在することを示す。リソース参照を表すシンタックスは、「リソースおよびリソース参照」という表題のセクションで説明される。
リソース参照として指定されていないプロパティ値は、値が設定されているプロパティを識別する入れ子になっている子XML要素を使用して、XMLで表すことができる。この「複合プロパティシンタックス」については後述する。
最後に、いくつかの非リソース参照プロパティ値は、単純テキスト文字列として表すことができる。このようなプロパティ値はすべて複合プロパティシンタックスを使用して表すことができるが、これらはさらに、単純なXML属性シンタックスを使用して表すこともできる。
与えられた要素について、プロパティは、値を指定するのに使用されているシンタックスに関係なく、高々1回設定することができる。
単純属性シンタックス
単純文字列として表すことができるプロパティ値については、XML属性シンタックスを使用してプロパティ値を指定することができる。例えば、「Color」というプロパティを持つ「SolidColorBrush」と呼ばれるFixedPageマークアップ要素が与えられた場合、以下のシンタックスを使用してプロパティ値を指定できる。
Figure 2007535755
複合プロパティシンタックス
ある種のプロパティ値は、単純文字列として表すことができず、例えば、XML要素を使用してプロパティ値を記述する。このようなプロパティ値は、単純な属性シンタックスを使用して表すことはできない。しかし、複合プロパティシンタックスを使用すると表すことができる。
複合プロパティシンタックスでは、子XML要素が使用されるが、XML要素名は親要素名とプロパティ名との組合せを、ピリオドで区切ったものから派生される。<SolidColorBrush>に設定することができるプロパティ「Fill」を持つFixedPageマークアップ要素<Path>が与えられた場合、以下のマークアップを使用して、<Path>要素の「Fill」プロパティを設定することができる。
Figure 2007535755
複合プロパティシンタックスは、プロパティ値を表すのに単純な属性シンタックスで十分であっても使用することができる。したがって、前のセクションの例は以下のようになる。
Figure 2007535755
代わりに以下のように複合プロパティシンタックスで表すことができる。
Figure 2007535755
複合プロパティシンタックスを使用してプロパティ値を指定する場合、「Properties」を表す子XML要素は、「Contents」を表す子XML要素の前になければならない。個々の複合プロパティ子XML要素の順序は重要でなく、親要素の「Contents」の前にまとめて現れればよい。
例えば、<Canvas>要素(後述)のClipおよびRenderTransformプロパティの両方を使用する場合、両方とも<Canvas>の<Path>および<Glyphs>コンテンツの前に現れなければならない。
Figure 2007535755
リソースおよびリソース参照
リソース辞書は、それぞれリソースと呼ばれる共有可能プロパティ値を保持するために使用することができる。それ自体FixedPageマークアップ要素であるプロパティ値は、リソース辞書内に保持することができる。リソース辞書内のリソースには、それぞれ名前が付く。リソースの名前を使用して、プロパティのXML属性からリソースを参照することができる。
例示され説明されている実施形態では、<Canvas>および<FixedPage>要素は、リソース辞書を伴うことができる。リソース辞書は、「Resources」と呼ばれるプロパティ内の<Canvas>および<FixedPage>要素のプロパティとしてマークアップで表現される。しかし、個々のリソース値は、直に<FixedPage.Resources>または<Canvas.Resources>XML要素内に埋め込まれる。構文上は、<Canvas.Resources>および<FixedPage.Resource>のマークアップは、「Contents」を含むマークアップ要素のそれに類似している。
この実施形態によれば、<Canvas.Resources>または<FixedPage.Resources>は、<Canvas>または<FixedPage>の複合プロパティシンタックスプロパティ値の前になければならない。これらも、同様に、<Canvas>または<FixedPage>の「Contents」の前になければならない。
固定ペイロードリソース辞書の定義
<FixedPage>または<Canvas>は、<Canvas.Resources>XML要素を使用して表される、リソース辞書を伴うことができる。単一のリソース辞書内のそれぞれの要素は、要素に関連付けられたXML属性を使用して識別される固有の名前が付けられる。プロパティに対応する属性からこの「Name」属性を区別するために、Name属性をFixedFormat要素のとは別の名前空間からとる。そのXML名前空間に対するURIは、「http://schemas.microsoft.com/PLACEHOLDER-for-resources」である。下の例では、2つのジオメトリが定義されており、1つは矩形で、もう1つは円である。
Figure 2007535755
リソースの参照
プロパティ値を上で定義したリソースの1つに設定するには、リソース名を{}で囲むXML属性値を使用する。例えば、「{Rectangle}」は使用されるジオメトリを表す。以下のマークアップの例では、辞書内のジオメトリオブジェクトにより定義される矩形領域は、SolidColorBrushにより塗りつぶされる。
Figure 2007535755
この実施形態によれば、リソース参照は、リソース辞書内のリソースの定義の範囲にあってはならない。
リソース参照を解決するためのスコープ規則
同じリソース辞書内で単一の名前を2回使用することはできないが、単一のFixedPageパーツ内の2つの異なるリソース辞書内であれば同じ名前を使用できる。さらに、内側の<Canvas>のリソース辞書では、何らかの外側の<Canvas>または<FixedPage>のリソース辞書内で定義された名前を再利用することができる。
要素のプロパティを設定するのにリソース参照が使用される場合、与えられた名前のリソースの検索は様々なリソース辞書内で行われる。プロパティを持つ要素が<Canvas>であれば、その<Canvas>のリソース辞書が存在する場合、目的の名前のリソースの検索に使用される。要素が<Canvas>でない場合、検索は<Canvas>または<FixedPage>を含む最も近いものから始まる。目的の名前が最初に検索されたリソース辞書内で定義されていない場合、<Canvas>または<FixedPage>を含む次に最も近いものが検索される。検索が<FixedPage>ルート要素まで続けられ、目的の名前のリソースがその<FixedPage>と関連するリソース辞書内に見つからない場合には、エラーが発生する。
以下の実施例は、これらの規則を説明している。
Figure 2007535755
FixedPage描画モデル
FixedPage(または入れ子になっているCanvas子)要素は、他の要素が上に表示される要素である。コンテンツの配列は、FixedPage(またはCanvas)について指定されたプロパティ、FixedPage(またはCanvas)上の要素に対して指定されたプロパティ、および固定ペイロード名前空間に対し定義されている構成規則により制御される。
要素の位置決めにCanvasを使用する
固定マークアップでは、すべての要素は、座標系の現在の原点(0,0)に相対的に配置される。現在の原点を削除するには、RenderTransform属性を、要素を含むFixedPageまたはCanvasのそれぞれの要素に適用する。
以下の例では、RenderTransformを通じて要素の位置決めを行うことを例示している。
Figure 2007535755
座標系および単位
例示され説明されている実施形態によれば、座標系は、最初、浮動小数点数として表される、1インチ(2.54cm)の1/96に等しくなるように設定され、座標系の原点(0,0)はFixedPage要素の左上角である。
RenderTransform属性を子要素上で指定することにより、アフィン変換を現在の座標系に適用することができる。
ページ寸法
ページ寸法は、FixedPage要素上の「PageWidth」および「PageHeight」パラメータにより指定される。
構成規則
FixedPagesでは、アルファチャネルとともにペインタのモデルを使用する。説明されている実施形態によれば、構成は構成規則に従い、以下の順序で実行されなければならない。
・FixedPage(または入れ子になっているCanvas)は、子要素がマークアップ内に現れる順序で描画される非束縛サーフェス(unbounded surface)として考えられる。このサーフェスのアルファチャネルは「0.0」(すべて透明)に初期化されている。実際、理想的な非束縛サーフェスは、すべての子要素を表示することにより作られるすべてのマークを保持できる十分な大きさのビットマップバッファと考えることができる。
・サーフェスのコンテンツは、FixedPage(またはCanvas)のRenderTransformプロパティにより指定されたアフィン変換を使用して変換される。
・すべての子要素は、サーフェス上に表示され、FixedPage(またはCanvas)のClipプロパティ(これもまたRenderTransformプロパティを使用して変換される)によりクリッピングされる。FixedPageは、さらに、(0,0,PageWidth,PageHeight)で指定された矩形にクリッピングされる。子要素がOpacityプロパティまたはOpacityMaskプロパティを持つ場合、サーフェス上に表示される前にその子要素に適用される。
・最後に、FixedPage(またはCanvas)のコンテンツが、含む側の要素上に表示される。FixedPageの場合、含む側の要素は物理的結像面である。
レンダリングは、以下の規則に従って実行される。
・サーフェスにマークを作る要素は、「Glyphs」および「Path」だけである。
・他のすべてのレンダリング効果は、「Glyphs」および「Path」要素を「Canvas」上に配置し、その様々な有効な属性を適用することにより得られる。
固定ペイロード要素およびプロパティ
例示され説明されている実施形態によれば、固定ペイロードは、ページおよびそのコンテンツを表現するためにマークアップ内で使用される、XML要素の小さな集まりを含む。FixedPanelパーツ内のマークアップは、<Document>、<FixedPanel>、および<PageContent>要素を使用することで、ドキュメントの複数のページをふつうのインデックスの作成しやすいルートにまとめる。それぞれのFixedPageパーツは、<Path>および<Glyphs>要素(いっしょになって描画すべてを行う)、およびそれらをグループにまとめるための<Canvas>要素のみを含む、<FixedPage>要素内のページのコンテンツを表す。
固定ペイロードマークアップの要素階層を、「最上位レベルの要素」、「パスのジオメトリ、クリップ」、「パス、グリフ、またはOpacityMaskを塗りつぶすために使用されるブラシ」、「FixedPageまたはキャンバスのリソース辞書」、「アルファ透明の不透明マスク」、「クリッピングパス」、および「変換」という表題の以下のセクションにまとめた。
最上位レベルの要素
・<Document>[FixedPanelパーツ毎にちょうど1つ]
・属性:
・[なし]
・子要素:
・<FixedPanel>[ちょうど1つ]
・<FixedPanel>
・属性:
・PageHeight[オプション]
・PageWidth[オプション]
・子要素:
・<PageContent>[これらの子要素のうちの1〜N]
・<PageContent>
・属性:
・Source[必須]
・PageHeight[オプション]
・PageWidth[オプション]
・子要素:
・[なし]
・<FixedPage>
・単純なXML属性を介して直接表されるプロパティ:
・PageHeight[必須(ここでは、または子要素として)]
・PageWidth[必須(ここでは、または子要素として)]
・XML子要素としてそれ自体表されるリソース辞書:
・<FixedPage.Resources>
・XML子要素を介して表されるプロパティ
・<FixedPage.PageHeight>[必須(ここでは、または属性として)]
・<FixedPage.PageWidth>[必須(ここでは、または属性として)]
・XML子要素を介したコンテンツ:
・<Canvas>
・<Path>
・<Glyphs>
・<Canvas>
・単純なXML属性を介して直接表されるプロパティ:
・Opacity
・リソース辞書参照を介して表されるプロパティ:
・Clip
・RenderTransform
・OpacityMask
・XML子要素としてそれ自体表されるリソース辞書:
・<Canvas.Resources>
・XML子要素を介して表されるプロパティ
・<Canvas.Opacity>
・<Canvas.Clip>
・<Canvas.RenderTransform>
・<Canvas.OpacityMask>
・XML子要素を介したコンテンツ:
・<Canvas>
・<Path>
・<Glyphs>
・<Path>
・単純なXML属性を介して直接表されるプロパティ:
・Opacity
・リソース辞書参照を介して表されるプロパティ:
・Clip
・RenderTransform
・OpacityMask
・Fill
・XML子要素を介して表されるプロパティ
・<Path.Opacity>
・<Path.Clip>
・<Path.RenderTransform>
・<Path.OpacityMask>
・<Path.Fill>
・<Path.Data>
・<Glyphs>
・単純なXML属性を介して直接表されるプロパティ:
・Opacity
・BidiLevel
・FontFaceIndex
・FontHintingEmSize
・FontRenderingEmSize
・FontUri
・Indices
・OriginX
・OriginY
・Sideways
・StyleSimulations
・UnicodeString
・リソース辞書参照を介して表されるプロパティ:
・Clip
・RenderTransform
・OpacityMask
・Fill
・XML子要素を介して表されるプロパティ
・<Glyphs.Clip>
・<Glyphs.RenderTransform>
・<Glyphs.OpacityMask>
・<Glyphs.Fill>
・<Glyphs.Opacity>
・<Glyphs.BidiLevel>
・<Glyphs.FontFaceIndex>
・<Glyphs.FontHintingEmSize>
・<Glyphs.FontRenderingEmSize>
・<Glyphs.FontUri>
・<Glyphs.Indices>
・<Glyphs.OriginX>
・<Glyphs.OriginY>
・<Glyphs.Sideways>
・<Glyphs.StyleSimulations>
・<Glyphs.UnicodeString>
パスのジオメトリ、クリップ
・<Path.Data>
・属性:
・[なし]
・単一のXML子要素として表されるプロパティ値:
[Path.Dataは以下の子全体をちょうど1つとして持つ]
・<GeometryCollection>
・<PathGeometry>
・<GeometxyCollection>
・属性:
・CombineMode
・子要素:
[1〜N個の子]
・<GeometryCollection>
・<PathGeometry>
・<PathGeometry>
・属性:
・FillRule
・子要素:
[1〜N個の子]
・<PathFigure>
・<PathFigure>
・属性:
・[なし]
・子要素:
[StartSegmentが先頭で、CloseSegmentが最後、Poly*の1〜Nはその間]
・<StartSegment>
・<PolyLineSegment>
・<PolyBezierSegment>
・<CloseSegment>
・<StartSegment>
・単純なXML属性を介して直接表されるプロパティ:
・Point
・XML子要素を介して表されるプロパティ
・<StartSegment.Point>
・<PolyLineSegment>
・単純なXML属性を介して直接表されるプロパティ:
・Points
・XML子要素を介して表されるプロパティ
・<PolyLineSegment.Points>
・<PolyBezierSegment>
・単純なXML属性を介して直接表されるプロパティ:
・Points
・XML子要素を介して表されるプロパティ
・<PolyBezierSegment.Points>
パス、グリフ、またはOpacityMaskを塗りつぶすために使用されるブラシ
・<Path.Fill>
・属性:
・[なし]
・単一のXML子要素として表されるプロパティ値:
[Path.Fillは以下の子のうちのちょうど1つを持つ]
・<SolidColorBrush>
・<ImageBrush>
・<DrawingBrush>
・<LinearGradientBrush>
・<RadialGradientBrush>
・<Glyphs.Fill>
・属性:
・[なし]
・単一のXML子要素として表されるプロパティ値:
[Glyphs.Fillは以下の子のうちのちょうど1つを持つ]
・<SolidColorBrush>
・<ImageBrush>
・<DrawingBrush>
・<LinearGradientBrush>
・<RadialGradientBrush>
・<SolidColorBrush>
・単純なXML属性を介して直接表されるプロパティ:
・Opacity
・Color
・XML子要素を介して表されるプロパティ
・<SolidColorBrush.Opacity>
・<SolidColorBrush.Color>
・<ImageBrush>
・単純なXML属性を介して直接表されるプロパティ:
・Opacity
・HorizontalAlignment
・VerticalAlignment
・ViewBox
・ViewPort
・Stretch
・TileMode
・ContentUnits
・ViewportUnits
・ImageSource
・リソース辞書参照を介して表されるプロパティ:
・Transform
・XML子要素を介して表されるプロパティ
・<ImageBrush.Opacity>
・<ImageBrush.Transform>
・<ImageBrush.HorizontalAlignment>
・<ImageBrush.VerticalAligmnent>
・<ImageBrush.ViewBox>
・<ImageBrush.ViewPort>
・<ImageBrush.Stretch>
・<ImageBrush.TileMode>
・<ImageBrush.ContentUnits>
・<ImageBrush.ViewportUnits>
・<ImageBrush.ImageSource>
・<DrawingBrush>
・単純なXML属性を介して直接表されるプロパティ:
・Opacity
・HorizontalAlignment
・VerticalAlignment
・ViewBox
・ViewPort
・Stretch
・TileMode
・ContentUnits
・ViewportUnits
・リソース辞書参照を介して表されるプロパティ:
・Transform
・Drawing
・XML子要素を介して表されるプロパティ
・<DrawingBrush.Opacity>
・<DrawingBrush.Transform>
・<DrawingBrush.HorizontalAlignment>
・<DrawingBrush.VerticalAlignment>
・<DrawingBrush.ViewBox>
・<DrawingBrush.ViewPort>
・<DrawingBrush.Stretch>
・<DrawingBrush.TileMode>
・<DrawingBrush.ContentUnits>
・<DrawingBrush.ViewportUnits>
・<DrawingBrush.Drawing>
・<DrawingBrush.Drawing>
・XML子要素を介したコンテンツ:
・<Canvas>
・<Path>
・<Glyphs>
・<LinearGradientBrush>
・単純なXML属性を介して直接表されるプロパティ:
・Opacity
・MappingMode
・SpreadMethod
・StartPoint
・EndPoint
・リソース辞書参照を介して表されるプロパティ:
・Transform
・GradientStops
・XML子要素を介して表されるプロパティ
・<LinearGradientBrush.Opacity>
・<LinearGradientBrush.Transform>
・<LinearGradientBrush.MappingMode>
・<LinearGradientBrush.SpreadMethod>
・<LinearGradientBrush.StartPoint>
・<LinearGradientBrush.EndPoint>
・<LinearGradientBrush.GradientStops>
・<RadialGradientBrush>
・単純なXML属性を介して直接表されるプロパティ:
・Opacity
・Center
・Focus
・RadiusX
・RadiusY
・リソース辞書参照を介して表されるプロパティ:
・Transform
・GradientStops
・XML子要素を介して表されるプロパティ
・<RadialGradientBrush.Opacity>
・<RadialGradientBrush.Transform>
・<RadialGradientBrush.Center>
・<RadialGradientBrush.Focus>
・<RadialGradientBrush.RadiusX>
・<RadialGradientBrush.RadiusY>
・<RadialGradientBrush.GradientStops>
・<GradientStops>
・XML子要素を介したコンテンツ:
・<GradientStop>[これらの子のうちの1〜N]
・<GradientStop>
・単純なXML属性を介して直接表されるプロパティ:
・Color
・Offset
・XML子要素を介して表されるプロパティ
・<GradientStop.Color>
・<GradientStop.Offset>
FixedPageまたはCanvasのリソース辞書
・<FixedPage.Resources>
・<Canvas.Resources>
これらの要素は、リソース辞書を説明している上のセクションで説明されている。
アルファ透明の不透明マスク
・<Canvas.OpacityMask>
・属性:
・[なし]
・単一のXML子要素として表されるプロパティ値:
[Canvas.OpacityMaskは以下の子のうちのちょうど1つを持つ]
・<SolidColorBrush>
・<ImageBrush>
・<DrawingBrush>
・<LinearGradientBrush>
・<RadialGradientBrush>
・<Path.OpacityMask>
・属性:
・[なし]
・単一のXML子要素として表されるプロパティ値:
[Path.OpacityMaskは以下の子のうちのちょうど1つを持つ]
・<SolidColorBrush>
・<ImageBrush>
・<DrawingBrush>
・<LinearGradientBrush>
・<RadialGradientBrush>
・<Glyphs.OpacityMask>
・属性:
・[なし]
・単一のXML子要素として表されるプロパティ値:
[Glyphs.OpacityMaskは以下の子のうちのちょうど1つを持つ]
・<SolidColorBrush>
・<ImageBrush>
・<DrawingBrush>
・<LinearGradientBrush>
・<RadialGradientBrush>
クリッピングパス
・<Canvas.Clip>
・属性:
・[なし]
・単一のXML子要素として表されるプロパティ値:
[Canvas.Clipは以下の子のうちのちょうど1つを持つ]
・<GeometryCollection>
・<PathGeometry>
・<Path.Clip>
・属性:
・[なし]
・単一のXML子要素として表されるプロパティ値:
[Path.Clipは以下の子のうちのちょうど1つを持つ]
・<GeometryCollection>
・<PathGeometry>
・<Glyphs.Clip>
・属性:
・[なし]
・単一のXML子要素として表されるプロパティ値:
[Glyphs.Clipは以下の子のうちのちょうど1つを持つ]
・<GeometryCollection>
・<PathGeometry>
変換
・<Canvas.RenderTransform>
・単一のXML子要素として表されるプロパティ値:
・<MatrixTransform>[必須]
・<Path.RenderTransform>
・単一のXML子要素として表されるプロパティ値:
・<MatrixTransform>[必須]
・<Glyphs.RenderTransform>
・単一のXML子要素として表されるプロパティ値:
・<MatrixTransform>[必須]
・<MatrixTransform>
・単純なXML属性を介して直接表されるプロパティ:
・Matrix
・XML子要素を介して表されるプロパティ
・<MatrixTransform.Matrix>
・<ImageBrush.Transform>
・単純なXML属性を介して直接表されるプロパティ:
・MatrixTransform
・XML子要素を介して表されるプロパティ
・<ImageBrush.Transform.MatrixTransform>
・<DrawingBrush.Transform>
・単純なXML属性を介して直接表されるプロパティ:
・MatrixTransform
・XML子要素を介して表されるプロパティ
・<DrawingBrush.Transform.MatrixTransform>
・<LinearGradientBrush.Transform>
・単純なXML属性を介して直接表されるプロパティ:
・MatrixTransform
・XML子要素を介して表されるプロパティ
・<LinearGradientBrush.Transform.MatrixTransform>
・<RadialGradientBrush.Transform>
・単純なXML属性を介して直接表されるプロパティ:
・MatrixTransform
・XML子要素を介して表されるプロパティ
・<RadialGradientBrush.Transform.MatrixTransform>
FixedPageマークアップ
それぞれのFixedPageパーツは、<FixedPage>要素にルートを持つXMLマークアップでページのコンテンツを表す。このFixedPageマークアップは、わずかの要素およびプロパティ、つまり、<Path>および<Glyphs>要素(いっしょになって描画すべてを行う)、およびそれらをグループにまとめるための<Canvas>要素のみで、ライターおよびリーダーとの間のドキュメントのWYSIWWG忠実性をもたらす。
共通要素プロパティ
FixedPageマークアップにおける各要素に固有の属性について説明する前に、描画およびグループ化要素に共通の属性、つまりOpacity、Clip、RenderTransform、およびOpacityMaskについて考察する。これらは最上位レベル要素に共通の唯一のプロパティであるだけでなく、上記の構成規則のセクションで説明したように、親要素から子要素へ結果を「累積する」唯一のプロパティでもある。累積は、構成規則の適用結果である。以下の表は、これらの共通属性に関するまとめの説明であり、その後に、各属性の詳細な説明を載せた。
Figure 2007535755
Figure 2007535755
Opacity属性
不透明は、表示(アルファブレンディング)の際に2つの要素を透過的にブレンドするために使用される。Opacity属性は、0(完全透明)から1(完全不透明)まで様々な範囲を指定する。包含する範囲外の値は、マークアップ解析時にこの範囲に固定される。したがって、実際に、[−∞...0]は透明であり、[1..∞]は不透明である。
Opacity属性は、以下の計算を通じて適用される(事前乗算されていないソースおよびデスティネーション色を仮定し、両方ともscRGBとして指定される)。
:OpacityMaskでの対応する位置にある要素またはアルファ値の不透明属性
:ソースサーフェスに存在するアルファ値
:ソースサーフェスに存在する赤色値
:ソースサーフェスに存在する緑色値
:ソースサーフェスに存在する青色値
:デスティネーションサーフェスにすでに存在するアルファ値
:デスティネーションサーフェスにすでに存在する赤色値
:デスティネーションサーフェスにすでに存在する緑色値
:デスティネーションサーフェスにすでに存在する青色値
A*:デスティネーションサーフェスに対する結果のアルファ値
R*:デスティネーションサーフェスに対する結果の赤色値
G*:デスティネーションサーフェスに対する結果の緑色値
B*:デスティネーションサーフェスに対する結果の青色値
下付文字Tで指定されている値はすべて一時的な値である(例えば、RT1)。
ステップ1:ソースアルファ値に不透明度値を乗算する
=A*O
ステップ2:ソースアルファを事前乗算する
T1=A
T1=R*A
T1=G*A
T1=B*A
ステップ3:デスティネーションアルファを事前乗算する
T2=A
T2=R*A
T2=G*A
T2=B*A
ステップ3:ブレンド
T2=(1−AT1)*AT2+AT1
T2=(1−AT1)*RT2+RT1
T2=(1−AT1)*GT2+GT1
T2=(1−AT1)*BT2+BT1
ステップ4:事前乗算を逆にする
T2=0ならば、すべてのA*R*G*B*を60に設定する。
そうでなければ、
A*=AT2
R*=RT2/AT2
G*=GT2/AT2
B*=BT2/AT2
Clipプロパティ
Clipプロパティは、幾何学的要素<GeometryCollection>または<PathGeometry>の一方として指定される(詳細は、Path.Dataを参照)。
Clipプロパティは次のようにして適用される。
・Clip子要素により記述されている幾何学的要素の内側に入るすべての表示されたコンテンツは可視である。
・Clip子要素により記述されている幾何学的要素の外側にあるすべての表示されたコンテンツは可視ではない。
RenderTransform子要素
MatrixTransformは、要素に利用できる唯一の変換属性である。これは、アフィン変換を表す。シンタックスは以下のとおりである。
Figure 2007535755
Matrix属性で指定されている6個の数値は、m00、m01、m10、m11、dx、dyである。
完全な行列は以下のようになる。
m00 m01 0
m10 m11 0
dx dy 1
与えられた座標X、Yは、RenderTransformにより、以下の計算を適用することで変換され、座標X’、Y’に関する結果が得られる。
X’=X*m00+Y*m10+dx
Y’=X*m01+Y*m11+dy
OpacityMask子要素
OpacityMaskでは、Brushを指定するが、Fill Brushとは対照的に、ブラシのアルファチャネル(上のOpacity属性を参照)のみを、要素を表示するための追加パラメータとして使用する。さらに、要素の各ピクセルの各アルファ値に、OpacityMask Brush内の対応する位置のアルファ値を掛ける。
<Canvas>要素
<Canvas>要素は、複数の要素をひとまとめにする場合に使用される。通常、FixedPage要素が<Canvas>でひとまとめにされるのは、構成された共通属性(つまり、Opacity、Clip、RenderTransform、またはOpacityMask)を共有する場合である。これらの要素をCanvas上でグループ化することにより、共通属性を個々の要素ではなくキャンバスに適用できる場合が多い。
<Canvas>の属性および子要素
<Canvas>要素は、前記の共通属性、つまりOpacity、Clip、RenderTransform、およびOpacityMaskのみを持つ。これらは、以下の表で説明されているような<Canvas>要素とともに使用される。
Figure 2007535755
Figure 2007535755
以下のマークアップの実施例は、<Canvas>の使い方を説明している。
Figure 2007535755
Canvasマークアップの読み込み順序に関して、以下の点について考察する。FixedPageの場合と同様、Canvas内に含まれるGlyphs子要素のマークアップ順序は、テキストコンテンツの所望の読み込み順序と同じでなければならない。この読み込み順序は、ビューア内のFixedPageからの順次テキストの対話形式による選択/コピーのためと、アクセシビリティ技術による順次テキストへのアクセスを可能にするために使用することができる。マークアップ順序と読み込み順序との間の対応関係を保証するのは、FixedPageマークアップを生成するアプリケーション側の役目である。
入れ子になっているCanvas要素内に含まれる子Glyphs要素は、Canvasの前後に出現する兄弟Glyphs要素の間で一列に順序付けられる。
実施例:
Figure 2007535755
<Path>要素
Path要素は、幾何学的領域を記述するXMLベースの要素である。幾何学的領域とは、塗りつぶすことができる、またはクリッピングパスとして使用できる形状のことである。矩形および楕円などのふつうのジオメトリタイプは、Pathジオメトリを使用して表すことができる。パスは、Geometry.Data子要素およびFillまたはOpacityなどのレンダリング属性を指定することにより記述される。
<Path>のプロパティおよび子要素
後述のように、以下のプロパティは<Path>要素に適用可能である。
Figure 2007535755
Figure 2007535755
<Path.Data>子要素のジオメトリにより記述される領域を塗りつぶす方法を記述するために、Fillプロパティを使用する。<Path.Data>形状を描画できる領域を制約する場合には、Clipプロパティを使用する。
ジオメトリの記述のために<Path>を使用する
パスのジオメトリは、以下に示すように、<Path.Data>の入れ子になっている子要素の系列として指定される。ジオメトリは、<PathGeometry>子要素の集合を含む<GeometryCollection>、または<PathFigures>を含む単一の<PathGeometry>子要素で表すことができる。
Figure 2007535755
同じ<GeometryCollection>または<PathGeometry>要素により、Canvas、Path、またはGlyphsのClipプロパティで使用されるクリッピングパスに対するジオメトリが定義される。
以下の表では、Pathジオメトリを定義する子要素の階層を導入している。
Figure 2007535755
GeometryCollection
GeometryCollectionは、Boolean CombineModeオプションに従って表示するためにひとまとめにされる幾何学的オブジェクトの集合である。GeometryCollection要素は、FixedPageマークアップ内の、幾何学的形状の視覚的組合せを作るための機構である。
Figure 2007535755
CombineMode属性は、GeometryCollection内の幾何学的形状の集合を組み合わせるために使用されるブール演算を指定する。モードに応じて、様々な領域が含まれたり、除外されたりする。
Figure 2007535755
CombineModesは、以下のように取り扱われる。
非可換: ComplementおよびExcludeは、非可換であり、したがって、GeometryCollection内の第1のジオメトリとそれぞれの個別の残りのジオメトリとの間で定義される。例えば、集合{g1,g2,g3}に対して、ExcludeのCombineModeは((g1 exclude g2) and (g1 exclude g3))として適用される。
可換: ブール演算Union、Xor、Intersectは、可換であり、したがって、順序独立性がジオメトリに適用される。
PathGeometry
PathGeometry要素は、PathFigure要素の集合を含む。PathFiguresの和集合は、PathGeometryの内部を定義する。
Figure 2007535755
FillRule属性に関して、以下の事項を考察する。PathGeometryの塗りつぶされた領域は、Filled属性が真に設定されている包含されるPathFigureのすべてをとり、FillRuleを適用して囲まれている領域を決定することにより定義される。FillRuleオプションは、Geometryに含まれるFigure要素の共通部分領域を組み合わせることで、Geometryの結果領域を形成する方法を指定する。
説明されている実施形態では、EvenOdd FillおよびNonZero Fillアルゴリズムが実現されている。
EvenOdd Fillアルゴリズムでは、キャンバス上のある点の「内部性」、つまり内部にあるかどうかを判定するために、その点から任意の方向に無限大まで延びる光線を描画し、その後、形状のセグメントがその光線を横切る場所を調べる。カウント0から始め、セグメントが左から右へ光線を横切るたびに1を加え、パスセグメントが右から左へ光線を横切るたびに1を引く。交差点を数えた後、その結果が0であればその点はパスの外部にある。そうでなければ内部にある。
NonZero Fillアルゴリズムでは、キャンバス上のある点の「内部性」、つまり内部にあるかどうかを判定するために、その点から任意の方向に無限大まで延びる光線を描画し、その光線が横切る与えられた形状からのパスセグメントの個数を数える。この数が奇数であればその点は内部にあり、偶数であればその点は外部にある。
PathFigure
PathFigure要素は、1つまたは複数の線分もしくは曲線セグメントの集合からなる。セグメント要素により、PathFigureの形状が定義される。PathFigureでは、常に、閉じた形状を定義しなければならない。
Figure 2007535755
図はまず開始点が必要であり、その後、各線分または曲線セグメントは加えられた最後の点から続く。PathFigure集合内の第1のセグメントは、StartSegmentでなければならず、CloseSegmentは最後のセグメントでなければならない。StartSegmentはPoint属性を持つ。CloseSegmentは属性を持たない。
Figure 2007535755
Path.Dataジオメトリの固定ペイロードマークアップ
以下では、キャンバス上にパスを描画し塗りつぶすためのマークアップを取りあげる。以下の特定の実施例では、矩形パスがキャンバス上に描画され、濃い緑色のブラシで塗りつぶされる。
Figure 2007535755
以下のマークアップでは、ベジエ三次曲線の描画が記述される。つまり、PolyLineSegmentのほかに、固定ペイロードマークアップは、ベジエ三次曲線を描画するPolyBezierSegmentを含む。
Figure 2007535755
ブラシ
ブラシは、<Path>要素により定義された幾何学的形状の内部を塗りつぶす場合、および<Glyphs>要素で表示されたキャラクタビットマップを塗りつぶす場合に使用される。ブラシは、さらに、<Canvas.OpacityMask>、<Path.OpacityMask>、および<Glyphs.OpacityMask>でアルファ透明マスクを定義する際にも使用される。FixedPageマークアップは、以下のブラシを含む。
Figure 2007535755
属性は、ブラシ毎に異なるが、すべてのブラシがOpacity属性を持つ。ImageBrushおよびDrawingBrushはタイリング機能を共有する。この2つのグラディエント塗りつぶしブラシは、属性も共通に持つ。
マークアップでブラシの子要素を使用する方法を以下に示す。
Figure 2007535755
ブラシの共通プロパティ
説明されている実施形態によれば、以下のプロパティは、オプションの子要素が比較的少ない単純なブラシであるSolidColorBrushを除く、すべてのブラシに適用可能である。
Figure 2007535755
Figure 2007535755
DrawinBrushおよびImageBrushの共通属性
Figure 2007535755
Horizontal Alignment属性は、書き込まれる領域内でブラシを水平方向に揃える方法を指定する。Vertical Alignment属性は、書き込まれる領域内でブラシを垂直方向に揃える方法を指定する。ViewBox属性は、デフォルト値として(0,0,0,0)を持ち、未設定と解釈される。未設定の場合、調整は行われず、Stretch属性は無視される。ビューボックスは、コンテンツに対する新しい座標系を指定する、つまり、ビューポートの範囲と原点を再定義する。Stretch属性を使用すると、コンテンツがどのようにビューポートにマッピングされるかを指定しやすい。viewBox属性の値は、ホワイトスペースおよび/またはカンマで区切られた4つの「無次元」数のリスト、<min−x>、<min−y>、<width>、および<height>であり、Rect型である。Viewbox rectは、境界ボックスにマッピングされるユーザ空間内の矩形を指定する。この動作は、scaleXおよびscaleYを挿入することと同じである。Stretch属性(オプションがnone以外の場合)により、グラフィックスのアスペクト比を維持する制御をさらに行える。追加変換を与えられた要素のすべての子孫に適用することで、指定された効果を生み出す。Brushに対する変換がある場合、これは、ViewBoxへのマッピングの「上で」適用される。
Stretch属性は、None、Fill、Uniform、UniformToFillの4つのモードを持つ。
Figure 2007535755
単純なブラシとその属性
Path.BrushおよびCanvas.Brush子要素は、SolidColorBrush、ImageBrush、およびDrawingBrushを含む。
SolidColorBrushは、定義済みの幾何学的領域をベタ一色に塗りつぶす。色のアルファ成分がある場合、それはBrush内の対応する不透明属性と乗法的に結合される。
Figure 2007535755
以下の例は、SolidColorBrushに対する色属性の表し方を例示している。
Figure 2007535755
ImageBrushは、空間をイメージで塗りつぶす場合に使用することができる。ImageBrushのマークアップでは、URIを指定することができる。他のすべての属性がデフォルト値に設定されている場合、イメージは、その領域の境界ボックスいっぱいに引き延ばされる。
Figure 2007535755
ImageSource属性は、サポートされているリーチイメージフォーマットまたはそれらのタイプのうちの1つのイメージが得られるセレクタのいずれか一方を参照しなければならない。
DrawingBrushは、空間をベクトルドローイングで塗りつぶす場合に使用することができる。DrawingBrushはDrawing Child要素を持ち、マークアップでの使い方は以下に示されている。
Figure 2007535755
グラディエントブラシとその属性
グラディエントは、グラディエントブラシのXML子要素としてグラディエントストップ(gradient stops)の集合を指定することにより描画される。これらのグラディエントストップは、ある種の数列で色を指定する。このフレームワークでサポートされているグラディエントブラシは2種類ある、つまり線形と放射状である。
グラディエントは、指定された色空間内のグラディエントストップ間の補間を実行することにより描画される。LinearGradientBrushおよびGradientBrushは、以下の共通属性を共有する。
Figure 2007535755
Figure 2007535755
SpreadMethod属性に関して、以下の事項を考察する。SpreadMethodオプションにより、空間の塗りつぶし方を指定する。デフォルト値はPadである。
Figure 2007535755
MappingMode属性
LinearGradientBrushに関して、以下の事項を考察する。LinearGradientBrushは、ベクトルに沿って線形グラディエントブラシを指定する。
Figure 2007535755
以下のマークアップの実施例は、LinearGradientBrushの使い方を説明している。矩形パスが含まれるページは、線形グラディエントで塗りつぶされる。
Figure 2007535755
この実施例は、線形グラディエントで塗りつぶされる矩形パスが含まれるページを示している。パスは、さらに、パスをクリッピングする八角形のクリッププロパティも持つ。
Figure 2007535755
RadialGradientは、プログラミングモデルにおいては線形グラディエントに似ている。しかし、線形グラディエントはグラディエントベクトルを定義する始点と終点を持つが、放射状グラディエントは、グラディエントの挙動を定義する焦点を伴う円を持つ。この円は、グラディエントの終点を定義する、つまり、1.0でのグラディエントストップは、円の周囲の色を定義する。焦点は、グラディエントの中心を定義する。0.0のグラディエントストップは、焦点での色を定義する。
Figure 2007535755
アルファおよび透明
例示され説明されている実施形態によれば、それぞれの要素の各ピクセルは、0.0(完全透明)から1.0(完全不透明)までの範囲のアルファ値を伴う。アルファ値は、透明の視覚的効果を生み出すために要素をブレンドする場合に使用される。
それぞれの要素は、要素の各ピクセルのアルファ値に一様に乗じられるOpacity属性を持ちうる。
さらに、OpacityMaskを使用することで、表示されたコンテンツをブレンドしてデスティネーションに送るのを制御するピクセル毎の不透明度を指定することができる。OpacityMaskで指定された不透明度は、コンテンツのアルファチャネル内にすでにたまたま存在しうる不透明度と乗法的に結合される。OpacityMaskにより指定されたピクセル毎の不透明度は、マスク内の各ピクセルのアルファチャネルを見ることにより判別されるが、色データは無視される。
OpacityMaskのタイプはBrushである。これにより、様々な方法でBrushのコンテンツをコンテンツの及ぶ範囲へマッピングする仕方を指定することができる。ジオメトリの塗りつぶしに使用された場合と同様に、ブラシは、デフォルトでは、コンテンツ空間全体を塗りつぶし、そのコンテンツを適宜引き延ばすかまたは複製する。これは、ImageBrushがそのImageSourceを引き延ばして、コンテンツを完全に覆い、GradientBrushは辺から辺へ延びることを意味する。
アルファブレンディングに必要な計算は、「Opacity属性」という前のセクションで説明されている。
以下の実施例は、OpacityMaskを使用して、「フェード効果」をGlyphs要素に与える方法を例示している。実施例のOpacityMaskは、不透明黒色から透明黒色へフェードする線形グラディエントである。
Figure 2007535755
リーチドキュメント内のイメージ
FixedPagesでは、イメージは囲まれている領域を塗りつぶす。FixedPage上にイメージを配置するには、ページ上で領域をまず指定しなければならない。この領域は、Path要素のジオメトリにより定義される。
Path要素のFillプロパティは、描かれている領域に対する塗りつぶしコンテンツを指定する。イメージは、ImageBrushにより領域内に描画される、一種の塗りつぶしである。すべてのブラシは、適宜ブラシコンテンツの引き延ばしまたは反復(タイリング)のいずれかにより領域全体を塗りつぶすデフォルトの挙動を持つ。ImageBrushの場合、ImageSourceプロパティにより指定されたコンテンツは、その領域を完全に覆うように引き延ばされる。
以下のマークアップは、イメージをキャンバス上に置く方法を示している。
Figure 2007535755
多くのイメージは矩形なので、リソース辞書に矩形パス要素を入れることは、マークアップの簡素化に役立つと考えられる。その後、RenderTransform属性を使用してPathの位置を決めることができる(上を参照)。
Figure 2007535755

色は、scRGBまたはsRGB表記を使用して例示され説明されているマークアップで指定することができる。scRGB規格は、「IEC 61966−2−2 scRGB」と呼ばれ、www.iec.chから入手することができる。
ARGBパラメータを以下の表に示す。
Figure 2007535755
カラーマッピング
現在、カラーコンテキストを指定するメタデータで、色分け要素のタグ付けをすることが検討中である。このようなメタデータは、ICCカラープロファイルまたは他の色定義データを含むことが可能である。
<Glyphs>要素
テキストは、Glyphs要素を使用して固定ペイロードにより表される。要素は、印刷およびリーチドキュメントの要件を満たすように設計されている。
Glyphs要素は、以下のプロパティの複数の組合せを持つことができる。
Figure 2007535755
Figure 2007535755
Figure 2007535755
Figure 2007535755
テキストマークアップの概要
グリフメトリクス
それぞれのグリフは、他のグリフとの位置の揃え方を指定するメトリクスを定義する。一実施形態によるメトリクスの実施例を図12に示す。
送り幅(Advance width)と組合せマーク
一般に、フォント内のグリフは、ベースグリフまたはベースグリフに付けられる組合せマークのいずれかである。ベースグリフは、通常、非ゼロの送り幅と0,0のオフセットベクトルを持つ。組合せマークは、通常、送り幅が0である。オフセットベクトルは、組合せマークの位置を調整するために使用することができ、したがって、組合せマークに対して非0,0値を設定することができる。
グリフラン内の各グリフは、その位置を制御する3つの値を持つ。これらの値は、原点、送り幅、およびグリフオフセットを示すが、以下ではこれらについて説明する。
・原点:各グリフは、名目上の原点が与えられていると想定され、ランの中の最初のグリフに対して、これはランの原点である。
・送り幅:各グリフの送り幅は、このグリフ原点に対する次のグリフの原点を与える。アドバンスベクトルは、常にランの進行方向に描画される。
・グリフオフセット(ベースまたはマーク):グリフオフセットベクトルにより名目上の原点に関してこのグリフ位置を調整する。
文字、グリフ、およびクラスタマップ
クラスタマップは、Unicodeコードポイントによる1つのエントリを含む。エントリ内の値は、このコードポイントを表すGlyphIndices配列内の第1のグリフのオフセットである。それとは別に、コードポイントが不可分の文字クラスタを表すコードポイントのグループの一部である場合、GlyphIndices配列内の第1のグリフは、そのクラスタを表す第1のグリフのオフセットを表す。
クラスタマッピング
クラスタマップは、1対1、多対1、1対多、または多対多であるコードポイント−グリフ間マッピングを表すことができる。1対1マッピングは、それぞれのコードポイントがちょうど1つのグリフで表される場合のもので、図13のクラスタマップエントリは、0、1、2、...である。
多対1マッピングは、2つ以上のコードポイントが単一のグリフにマッピングされる場合のものである。これらのコードポイントのエントリは、グリフインデックスバッファ内でそのグリフのオフセットを指定する。図14の例では、「f」および「i」の文字は、多くのセリフフォントの通常の活字組方法と同様に、合字で置き換えられている。
1対多マッピングに関しては、図15について以下の事項を考察する。「Sara Am」は、前のベース文字の上に置かれている部分(リング)とベース文字の右に置かれている部分(フック)を含む。タイ語のテキストが微調整される場合、フックはベース文字から間隔をあけて並べられるが、リングは、ベース文字の上に残り、したがって、多くのフォントでは、リングとフックを別々のグリフとして符号化する。1つのコードポイントが2つ以上のグリフにマッピングされる場合、そのコードポイントに対するClusterMap内の値は、そのコードポイントを表すGlyphIndeces配列内の第1のグリフを参照する。
多対多マッピングに関しては、図16について以下の事項を考察する。ある種のフォントでは、文字クラスタのコードポイントの不可分グループは、複数のグリフにマッピングされる。例えば、これは、インド語書き文字をサポートするフォントでは普通のことである。コードポイントの不可分のグループが1つまたは複数のグリフにマッピングされる場合、それらのコードポイントのそれぞれに対するClusterMap内の値は、そのコードポイントを表すGlyphIndeces配列内の第1のグリフを参照する。
以下の実施例は、タミル語の単語□□□□のUnicodeおよびグリフの表現を示している。最初の2つのコードポイントが組み合わさって、3つのグリフができる。
クラスタの指定
クラスタ指定は、非1:1クラスタの第1のグリフに対するグリフ指定の前に来る(マッピングは、1文字対1グリフよりも複雑になる)。
各クラスタ指定は、以下の形式を持つ。
(ClusterCodepointCount[:ClusterGlyphCount])
Figure 2007535755
<Glyphs>マークアップ
Glyphs要素では、フォントをURI、書体インデックス、および上述の一組の他の属性として指定する。例えば、
Figure 2007535755
各グリフ指定は、以下の形式を持つ。
[GlyphIndex][,[Advance][,[uOffset][,[vOffset][,[Flags]]]]]
グリフ指定の各部はオプションである。
Figure 2007535755
丸め誤差が累積しないアドバンス計算について、以下の事項を考察する。それぞれのアドバンス値は、後続のグリフの丸めを行っていない正確な原点から先行するグリフの計算で求めた(つまり、丸めた)送り幅の合計を、引いた値として計算しなければならない。このようにして、各グリフは、正確な位置のemの0.5%以内で位置決めされる。
グリフマークアップの実施例
Figure 2007535755
Figure 2007535755
グリフマークアップのサイズの最適化
グリフインデックスおよび送り幅などのマークアップの詳細は、ターゲットのクライアントがそれらを確実に再生できれば省略できる。以下のオプションにより、通常使用される単純なスクリプトの劇的な最適化が可能になる。
グリフインデックスのマークアップの最適化
グリフインデックスは、Unicode文字列内の文字の位置とグリフ文字列内のグリフの位置との間の1対1マッピングがある場合にマークアップから省略することができ、グリフインデックスは、フォントのCMAP(キャラクタマッピング)テーブル内の値であり、Unicode文字はあいまいさのない意味を持つ。
グリフインデックスは、文字からグリフへのマッピングが以下の場合にマークアップ内に用意すべきである。
・2つ以上のコードポイントが単一のグリフを形成する場合(合字)など、1対1でないか、または
・1つのコードポイントで複数のグリフを生成しているか、または
・OpenType機能の適用などによる、他の形態のグリフ置換が生じた場合。
グリフインデックスは、レンダリングエンジンがフォント内のCMAP(キャラクタマッピング)テーブル内のグリフと異なるグリフを置き換えるおそれがある場合に、マークアップに用意すべきである。グリフインデックスは、所望のグリフ表現がフォントのCMAPテーブル内にある表現でない場合に用意すべきである。
グリフ位置のマークアップの最適化
グリフ送り幅は、必要な送り幅が、正確にフォントのHMTX(水平メトリクス)またはVMTX(垂直メトリクス)テーブル内のグリフの送り幅である場合、マークアップから省略することができる。
グリフ垂直オフセットは、それが0の場合にマークアップから省略することができる。これは、ベース文字についてはほとんどいつでもそのとおりであり、より単純なスクリプト内の組合せマークについても一般的にそのとおりである。しかし、これは、アラビア語やインド語などのより複雑なスクリプト中の組合せマークについては当てはまらないことが多い。
グリフフラグのマークアップの最適化
グリフフラグは、通常のジャスティフィケーション優先度を持つベースグリフについては省略できる。
コンテナ
コンテナは、パーツをコレクションにまとめて保持する論理的実体である。
Figure 2007535755
コンストラクタ
protected Container (FileInfo fileInfo, FileAccess access)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
基本クラスのprotectedコンストラクタ。このコンストラクタのドキュメント化およびメンテナンスが簡単に行えるように、このクラス内で明示的に定義すること。指定されていなければ、コンパイラによってとにかくコンストラクタが1つ追加されていることであろう。また、これは抽象クラスとサブクラスとの間の現在のコントラクトでもある。fileInfoオブジェクトがnullの場合、これは、ストリーム上のコンテナが開かれたか、または作成されたかを定義する。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
プロパティ
public virtual DateTime CreationTime {get; set;}
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
このコンテナの作成時刻を取得または設定する。この値を設定した場合、LastAccessTimeおよびLastWriteTimeも同じ値に更新されなければならない。この値を操作するためにSystem.IO.FileInfoオブジェクトが使用される。
例外
− InvalidArgumentException−CreationTimeがLastAccessTimeまたはLastWriteTimeよりも大きな値に設定された場合。
− InvalidOperationException−Containerがストリーム上で開かれた場合、このプロパティを取得する手段はない。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public virtual DateTime LastAccessTime {get; set;}
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
このコンテナを最後に開いた時刻を取得または設定する。この値を操作するためにSystem.IO.FileInfoオブジェクトが使用される。
例外
− InvalidArgumentException−LastAccessTimeがCreationTimeまたはLastWriteTimeよりも小さな値に設定された場合。
− InvalidOperationException−Containerがストリーム上で開かれた場合、このプロパティを取得する手段はない。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public virtual DateTime LastWriteTime {get; set;}
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
このコンテナを最後に修正した時刻を取得または設定する。また、LastWriteTimeが更新された場合、LastAccessTimeは同じ値に更新されなければならない。この値を操作するためにSystem.IO.FileInfoオブジェクトが使用される。
例外
− InvalidArgumentException−LastWriteTimeがCreationTimeよりも小さな値に設定された場合。
− InvalidOperationException−Containerがストリーム上で開かれた場合、このプロパティを取得する手段はない。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public FileAccess FileOpenAccess {get;}
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
コンテナを開いたときに使用したFileAccessを取得する。これは読み取り専用プロパティである。このプロパティは、コンテナが開かれるときに設定される。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public abstract Part StartingPart {get; set;}
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
このコンテナのStartingPartを取得または設定する。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メソッド
public static Container OpenOnFile (string path)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
OpenOnFileメソッドのこのオーバーロードバージョンのメソッドは、与えられたパスで指定されたContainerを返す。このメソッドは、以下のデフォルト値ですべてのパラメータを受け入れるオーバーロードを呼び出す。

FileMode − FileMode.OpenOrCreate
FileAccess − FileAccess.ReadWrite
FileShare − FileShare.None
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public static Container OpenOnFile (string path, FileMode mode)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
OpenOnFileメソッドのこのオーバーロードバージョンのメソッドは、指定されたファイルモードおよび与えられたパスで指定されたContainerを返す。このメソッドは、以下のデフォルト値ですべてのパラメータを受け入れるオーバーロードを呼び出す−
FileAccess − FileAccess.ReadWrite
FileShare − FileShare.None
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public static Container OpenOnFile (string path, FileMode mode, FileAccess access)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
OpenOnFileメソッドのこのオーバーロードバージョンのメソッドは、指定されたファイルモードおよびファイルアクセス方法ならびに与えられたパスで指定されたContainerを返す。このメソッドは、以下のデフォルト値ですべてのパラメータを受け入れるオーバーロードを呼び出す−
FileShare − FileShare.None
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public static Container OpenOnFile (string path, FileMode mode, FileAccess access, FileShare share)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
OpenOnFileメソッドのこのオーバーロードバージョンのメソッドは、与えられた値に設定されたモード、アクセス方法、および共有方法ならびに与えられたパスで指定されたコンテナを開く。
例外
− InvalidArgumentException−FileMode、FileAccess、およびFileShareパラメータの組合せが無意味な場合。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public static Container OpenOnUri (Uri uri)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
OpenOnUriメソッドのこのオーバーロードバージョンのメソッドは、与えられたuriで指定されたContainerを返す。このメソッドは、以下のデフォルト値ですべてのパラメータを受け入れるオーバーロードを呼び出す−
FileMode − FileMode.Open
FileAccess − FileAccess.Read
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public static Container OpenOnUri (Uri uri, FileMode mode)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
OpenOnUriメソッドのこのオーバーロードバージョンのメソッドは、指定されたファイルモードおよび与えられたuriで指定されたContainerを返す。このメソッドは、以下のデフォルト値ですべてのパラメータを受け入れるオーバーロードを呼び出す−
FileAccess − FileAccess.Read
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public static Container OpenOnUri (Uri uri, FileMode mode, FileAccess access)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
OpenOnUriメソッドのこのオーバーロードバージョンのメソッドは、与えられた値に設定されたモードおよびアクセス方法ならびに与えられたuriで指定されたコンテナを開く。コンテナを取得するためにWebRequest/WebResponse機構が使用される。FileModeおよびFileAccessパラメータは、これから開こうとしているコンテナに適用される。このメソッドは、正しいコンテンツタイプとともにOpenOnStreamメソッドを呼び出す。
例外
− InvalidArgumentException−FileMode、FileAccess、およびFileShareパラメータの組合せが無意味な場合。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public static Container OpenOnStream (Stream stream, string content Type)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
OpenOnStreamメソッドのこのオーバーロードバージョンのメソッドは、与えられたストリーム上のContainerを返す。このメソッドは、以下のデフォルト値ですべてのパラメータを受け入れるオーバーロードを呼び出す−
FileMode − FileMode.Open
FileAccess − FileAccess.Read
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public static Container OpenOnStream (Stream stream, string contentType, FileMode mode)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
OpenOnStreamメソッドのこのオーバーロードバージョンのメソッドは、指定されたファイルモードで与えられたストリーム上のContainerを返す。このメソッドは、以下のデフォルト値ですべてのパラメータを受け入れるオーバーロードを呼び出す−
FileAccess − FileAccess.Read
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public static Container OpenOnStream (Stream stream, string contentType, FileMode mode, FileAccess access)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
OpenOnStreamメソッドのこのオーバーロードバージョンのメソッドは、与えられた値に設定されたモードおよびアクセス方法で準備されるストリーム上のコンテナを開く。FileModeおよびFileAccessパラメータは、これから開こうとしているコンテナに適用される。contentTypeパラメータは、適切なサブクラスオブジェクトをインスタンス化するために使用される。
例外
− InvalidArgumentException−FileMode、FileAccess、およびFileShareパラメータの組合せが無意味な場合。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public Part AddPart (MMCFUri uri, string contentType)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
指定されたUriに対応するPartがコンテナに追加される。このメソッドは、ストリームに対する読み込みまたは書き込みの明示的な呼び出しが行われない場合に空のストリームでPartを追加する。このメソッドは、物理的実装に関連する実際の作業を行うAddPartCoreを呼び出す。
例外
− InvalidArgumentException−このUriに対応するPartがすでにコンテナ内に存在する場合。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public Part GetPart (MMCFUri uri)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
与えられたUriに対するPartが返される。uriは、コンテナのルートに相対的である。このメソッドは、パーツを実際にフェッチするGetPartCoreを呼び出す。
例外
− InvalidArgumentException−このUriに対応するPartがコンテナ内に存在しない場合。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public virtual bool Exists (MMCFUri uri)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
まだ存在していないターゲットを指す関係も可能なので、このメソッドは、Partが実際に基礎となるContainer内に存在しているかどうかを知るための便利な手段を提供する。このuriは、コンテナのルートに相対的でなければならない。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public void DeletePart (MMCFUri uri)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
このメソッドは、現在のコンテナからコンテナパーツを削除する。また、このパーツがSourcePartであったすべての関係も削除される。このメソッドは、基礎となるストリームを削除し、オブジェクトを捨てる。また、このPartの複数のインスタンスが開いている場合、このパーツの開いている他のすべてのインスタンスを捨てる。このメソッドは、この挙動を強制する必要なクリーンアップ作業を実行するが、ストリームの実際の削除は、基礎となる物理的実装に固有のものであり、したがって、実際のストリームを削除するDeletePartCoreメソッドを呼び出す。未処理のPart列挙子は無効化される。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public PartCollection GetParts ()
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
これは、コンテナ内のすべてのPartのコレクションを返す。関係は返されない。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public void Flush ()
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
このメソッドは、開かれている個々のパーツ上でフラッシュを呼び出し、これにより、すべてのパーツおよび関係が基礎となるコンテナにフラッシュされる。本質的にこのクラスは、ハンドアウトされるすべてのPartの配列を維持し、すべてのPart上でFlushを呼び出す。その後、全体としてコンテナに特有の作業を実行するFlushCore()を呼び出す。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public virtual void Dispose ()
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
開いているすべてのPartおよびRelationshipが基礎となるコンテナにフラッシュされる。このクラスはハンドアウトされるすべてのPartの配列を維持するので、このメソッドはハンドアウトされるすべてのPart上でDispose()を呼び出す。他のリソースがクリーンアップされる必要がある場合、サブクラスでこのメソッドをオーバーライドし、追加クリーンアップを実行しなければならない。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public void Close ()
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Closeメソッドは、Disposeと同じであり、内部的にDispose()メソッドを呼び出している。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public Relationship AddRelationship (Uri uri)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
このメソッドは、ContainerとURIにより指定されたPartとの間の関係を追加する。Relationshipオブジェクトを返す。この変更は、Flush()メソッドの呼び出しが行われた後でしか基礎となるコンテナにフラッシュされない。同じソースとターゲットとの間には複数の関係がありうる。未処理のすべての関係列挙子(enumerator)は無効化される。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public void DeleteRelationship (Relationship relationship)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
このメソッドは、Relationshipオブジェクト指定されたターゲット関係を削除する。この変更は、Flush()メソッドの呼び出しが行われた後でしか、基礎となるコンテナにフラッシュされない。削除オペレーションは、オブジェクトの「名前」に基づいて実行され、したがってそれぞれのオブジェクトは、一意的に識別される。未処理のすべての関係列挙子は無効化される。
例外
− InvalidArgumentException−関係のソースが現在のPartと同じでない場合。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public RelationshipCollection GetRelationships ()
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
これは、コンテナらのすべてのターゲット関係のコレクションを返す。コンテナのターゲット関係はよく知られているuriに配置されるので、関係Partを開く既定の実装を用意し、その後、ストリームからxmlを読み込み、コレクションオブジェクトを作成することが可能である(例外−基礎となるコンテナから読み込まれたXMLが不正な形式である場合)。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
protected abstract Part AddPartCore (MMCFUri uri, string contentType)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
このメソッドは、基礎となるファイルフォーマットのカスタム実装用である。AddPartメソッドから呼び出される。これは、実際には、基礎となるコンテナ内にパートを作成する。この呼び出しを行った結果として、空のパーツが作成されなければならない。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
protected abstract Part GetPartCore (MMCFUri uri)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
このメソッドは、基礎となるファイルフォーマットのカスタム実装用である。GetPartメソッドから呼び出される。このメソッドは、基礎となるコンテナから実際のパーツをフェッチする。パーツが存在しない場合には、「null」を返さなければならない。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
protected abstract void DeletePartCore (MMCFUri uri)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
このメソッドは、基礎となるファイルフォーマットのカスタム実装用である。このメソッドは、このパーツに対応するストリームを実際に削除しなければならない。また、与えられURIに対応するパーツが存在しない場合も、例外をスロー(throw)しない。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
protected abstract Part [] GetPartsCore ()
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
このメソッドは、基礎となるファイルフォーマットのカスタム実装用である。このメソッドは、コンテナ内のすべてのPartの配列を返さなければならない。コンテナ内のすべてのパーツを取得する方法は実際の物理フォーマットに固有のものなので、このメソッドは有用である。このようになっているのは、実際のGetParts呼び出しはこの配列をPartCollectionに受け渡すだけであり、われわれがその上に列挙子を用意できるようにするためである。そこで、PartCollectionクラスは具象クラスでありうる。また、コンテナにパーツがない場合、GetPartsCoreは空の配列を返さなければならない。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
protected abstract void Flush Core ()
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
このメソッドは、基礎となるファイルフォーマットのカスタム実装用である。このメソッドは、すべてのコンテンツをディスクにフラッシュする。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
protected abstract void DisposeCore ()
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
このメソッドは、基礎となるファイルフォーマットのカスタム実装用である。このメソッドは、実際の物理フォーマットに対応するリソースを解放しなければならない。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
パーツ
パーツは次の3つの構成要素からなる。
・URI−コンテナのルートに相対的である。
・ContentType−このパーツにより表されるストリームのMIMEタイプである。
・Stream−このパーツに対応する実際のストリーム。
さらに、パーツは、Relationshipsで他のパーツにリンクすることができる。ある関係のSourcePartは、その関係を所有するという。
Figure 2007535755
コンストラクタ
protected Part (Container container, MMCFUri uri, string contentType)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
基本クラスのprotectedコンストラクタ。このコンストラクタのドキュメント化およびメンテナンスが簡単に行えるように、このクラス内で明示的に定義すること。指定されていなければ、コンパイラによってとにかくコンストラクタが1つ追加されていることであろう。また、これは抽象クラスとサブクラスとの間の現在のコントラクトでもある。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
プロパティ
public MMCFUri Uri {get ;}
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
このプロパティはPartのMMCFUriを返す。これは読み取り専用プロパティである。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public string ContentType {get;}
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
このプロパティは、Partにより表されるストリームのコンテンツタイプを返す。これは読み取り専用プロパティである。public Container Container{get;}
このプロパティはPartの親コンテナを返す。これは読み取り専用プロパティである。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メソッド
public Stream GetStream ()
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
このメソッドは、このパーツに対応するストリームを返す。これは、以下のデフォルト値ですべてのパラメータを受け入れるオーバーロードを呼び出す−
FileMode − Open
FileAccess − ReadWrite
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public Stream GetStream (FileMode mode)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
このメソッドは、指定されたモードでこのパーツに対応するストリームを返す。これは、以下のデフォルト値ですべてのパラメータを受け入れるオーバーロードを呼び出す−
FileAccess − ReadWrite
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public Stream GetStream (FileMode mode, FileAccess access)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
このメソッドは、このパーツに対応するストリームを返す。これは、実際のストリームを返すGetStreamCoreを呼び出す。このメソッドは、開いているすべてのストリームを追跡するために必要なハウスキーピングを実行する。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public abstract Stream GetStreamCore (FileMode mode, FileAccess access)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
このメソッドは、このパーツに対応するストリームを返す。このメソッドは、カスタム実装用である。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public Relationship AddRelationship (Uri uri)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
このメソッドは、指定されたURIにあるPartと現在のPartとの間の関係を追加する。Relationshipオブジェクトを返す。この変更は、Flush()メソッドの呼び出しが行われた後でしか、基礎となるコンテナにフラッシュされない。同じソースとターゲットとの間には複数の関係があり得る。未処理のすべての関係列挙子は無効化される。
例外
− InvalidOperationException−現在のPartが関係である場合。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public void DeleteRelationship (Relationship relationship)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
このメソッドは、Relationship指定されたターゲット関係を削除する。この変更は、Flush()メソッドの呼び出しが行われた後でしか基礎となるコンテナにフラッシュされない。削除オペレーションは、オブジェクトの「参照」に基づいて実行され、したがってそれぞれのオブジェクトは、一意的に識別される。未処理のすべての関係列挙子は無効化される。
例外
− InvalidArgumentException−関係のソースが現在のPartと同じでない場合。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public RelationshipCollection GetRelationships ()
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
これは、このPartのすべてのターゲット関係のコレクションを返す。このPartのターゲット関係はよく知られているuriに配置されるので、関係Partを開く既定の実装を用意し、その後、ストリームからxmlを読み込み、コレクションオブジェクトを作成することが可能である(例外−基礎となるコンテナから読み込まれるXMLが不正な形式である場合)。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
関係
このクラスは、ソースとターゲットパーツとの間の関係を表すために使用される。Relationshipを作成する唯一の方法は、Part.AddRelationship(Uri uri)を呼び出すことである。関係は、ソースパーツにより所有され、したがって、ソースパーツが削除されると、そのソースパーツが所有している関係もすべて削除される。関係のターゲットは存在している必要はない。
Figure 2007535755
コンストラクタ
internal Relationship (Uri source, Uri target, string name)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Relationshipオブジェクトを返す。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
プロパティ
public Part Source {get;}
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
RelationshipのSourceパーツを取得する。これは読み取り専用プロパティである。これは、Relationshipが作成されるときに設定される。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public Uri TargetUri {get;}
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
RelationshipのTargetUriを取得する。このuriは、ソースuriに相対的なものとして取り扱わなければならない。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public string Name {get;}
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
このRelationshipに対応する名前を取得する。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
PartCollection
これは、コンテナ内のパーツのコレクションである。
Figure 2007535755
コンストラクタ
internal PartCollection (Dictionary<MMCFUri, Part> partDictionary)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Partオブジェクトの汎用辞書(generic dictionary)に基づいてPartCollectionを作成する。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メソッド
public IEnumerator GetEnumerator ()
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
IEnumerableインターフェースのメンバ。これは、パーツコレクション上の列挙子を返す。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
RelationshipCollection
これは、コンテナ内のパーツに関連付けられた関係のコレクションである。与えられたソースとターゲットパーツとの間に複数の関係があり得る。
Figure 2007535755
コンストラクタ
internal RelationshipCollection (Relationship [] relationships)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Relationshipオブジェクトの配列に基づいてRelationshipCollectionを作成する。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
メソッド
public IEnumerator GetEnumerator ()
MMCFUri
このクラスはURIクラスから継承する。このUriクラスの主要な機能は、指定されたURIの先頭を必ず「/」にすることである。このクラスを用意した動機は以下のとおりである。
1.個々のそれぞれのパーツに使用されるURIの先頭を必ず「/」にするため。これにより、パーツ名は必ずコンテナのルートに相対的になる。
2.System.Uriクラスでは、2つの相対的なURIを解決できないので、それらのURIは異なる方法で解決される必要があり、そのようなロジックを1つの場所に置くと都合がよいであろう。
3.Containerは権威であるという事実を強制する。したがって、相対参照は、コンテナの外部にある場所に解決されてはならない。
Figure 2007535755
コンストラクタ
public MMCFUri (string uri)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
与えられたuri文字列からMMCFUriオブジェクトを作成する。Uriは相対的であり、「/」から始まることを確実なものとする。
例外−InvalidArgumentException−URIがホスト名とプロトコルとからなる場合、つまり、絶対URIである場合。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public MMCFUri (MMCFUri baseUri, string relativeUri)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
与えられたUriオブジェクトおよび相対的なUri文字列からMMCFUriオブジェクトを作成する。基本Uriに関して相対的なuriを解決する。Uriは相対的であり、「/」から始まるのを確実なものとする。
例外−InvalidArgumentException−URIがホスト名とプロトコルとからなる場合、つまり、絶対URIである場合。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
コードサンプル
Figure 2007535755
Figure 2007535755
他のAPIの詳細
OpenOnFile、OpenOnUri、およびOpenOnStreamメソッド
これらのメソッドは、ハードコーディングされたロジックを備え、これらのメソッドが認識する唯一の物理コンテナフォーマットは複合ファイルの実装である。これらのクラスを用意しているため、Staticメソッドから呼び出されるサブクラスConstructorsに関して何らかの仮定がある。また、それらの静的メソッドは、今のところ、ファイル拡張子またはストリームのコンテンツタイプに基づいて正しいサブクラスオブジェクトをインスタンス化する。
OpenOnStreamメソッド、およびContainerの指定されたAccessの意味
ストリーム上でコンテナを作成する場合、コンテナに対して指定されたFileAccessが与えられたストリームと必ず互換性を持つようにすることが重要である。以下の表は、様々な可能性と、それらを取り扱う実施例とをまとめたものである。
第1行では、ストリームに対するアクセスが多く、作成されているコンテナの制限をきつくしたい場合に、受信ストリームを、適切なCanReadおよびCanWrite値が設定されているRestrictedStreamというプライベートストリームでラップする。
メモリにおけるPartおよびRelationshipオブジェクトのキャッシュ
Dictionaryは、アクセスされるすべてのパーツを保持し、2度目にパーツが要求された場合には、辞書からそのパーツへの参照が返される。これは、より効率的であり、Partオブジェクトは不変なので、これは問題なく動作する。同じことがRelationshipにもあてはまる。しかし、基礎となるコンテナが共有書き込みモードで開かれ、基礎となるコンテナに対しパーツの追加または削除を行う第2のユーザがいた場合、それらの変更はこのキャッシュ内には反映しえない。
結論
上記のモジュール型のコンテンツフレームワークおよびドキュメントフォーマットの方法およびシステムでは、ドキュメント中心のコンテンツの構成、パッケージ化、配布、およびレンダリングのためのビルディングブロックを一式備える。これらのビルディングブロックは、ソフトウェアおよびハードウェアシステムによりドキュメントの生成、交換、および表示を信頼性が高く一貫性のある形で行えるようにするドキュメントフォーマットのためのプラットフォーム独立のフレームワークを定義する。例示され説明されているリーチパッケージフォーマットは、ページ付けまたは事前ページ付けドキュメントを格納するためのフォーマットであり、これにより、様々な環境および様々なシナリオにわたるデバイスおよびアプリケーション間での、リーチパッケージのコンテンツの完全に忠実な表示または印刷が可能になる。本発明は構造的機能および/または方法論的ステップに固有の言語で説明されているが、付属の請求項で定められている発明は、説明した特定の機能またはステップに必ずしも限られないことは理解されるであろう。むしろ、特定の機能およびステップは請求されている発明を実施する好ましい形態として開示されている。
一実施形態におけるフレームワークおよびフォーマットの実施例のコンポーネントのブロック図である。 一実施形態における多数のパーツを含むドキュメントを保持するパッケージの実施例のブロック図である。 一実施形態における、パッケージを作成するライターおよびパッケージを読み込むリーダーの実施例を示すブロック図である。 3つの別々のページをバインドして1つにするパーツの例を示す図である。 一実施形態における、レポートの英語とフランス語の両方の表現を収めた財務レポートを作成するように配列されたセレクタおよびシーケンスの例を示す図である。 一実施形態における、ライターおよびリーダーが連携してパッケージに関する通信を行ういくつかの例を示す図である。 ドキュメントの複数のパーツをインタリーブする一実施例を示す図である。 図7に示されているドキュメントの複数のパーツをパッケージ化する様々な実施例を示す図である。 図7に示されているドキュメントの複数のパーツをパッケージ化する様々な実施例を示す図である。 一実施形態における、リーチパッケージの実施例およびパッケージを構成する、またはパッケージ内に見つかる有効な種類のパーツのそれぞれを示す図である。 一実施形態における、Common Language Runtime概念をXMLにマッピングする実施例を示す図である。 一実施形態における、縦書きと横書きの両方のグリフメトリクスを例示する図である。 一実施形態による1対1のクラスタマップを例示する図である。 一実施形態による多対1のクラスタマップを例示する図である。 一実施形態による1対多のクラスタマップを例示する図である。 一実施形態による多対多のクラスタマップを例示する図である。

Claims (34)

  1. ドキュメントを定義するパッケージを作成するステップであって、前記ドキュメントは前記ドキュメントを構成する複数のパーツを含み、前記複数のパーツの各々は関連付けられた名前と関連付けられたコンテンツタイプを有することと、
    前記パッケージに関連付けられた複数のドライバを提供するステップであって、前記複数のドライバは異なるドキュメントフォーマットにも関連付けられ、前記複数のドライバによって、複数のアプリケーションの各々に関連付けられるドキュメントフォーマットに関係なく、前記複数のアプリケーションは前記パッケージにアクセスできることと、
    を備えることを特徴とする方法。
  2. それぞれのパーツに関連付けられている前記名前は、一意であることを特徴とする請求項1に記載の方法。
  3. それぞれのパーツに関連付けられている前記名前は、階層的アドレスを含むことを特徴とする請求項1に記載の方法。
  4. それぞれのパーツに関連付けられている前記名前は、Uniform Resource Identifierのローカル部分を含むことを特徴とする請求項1に記載の方法。
  5. それぞれのパーツに関連付けられている前記コンテンツタイプは、前記パーツに含まれる情報の種類の記述を含むことを特徴とする請求項1に記載の方法。
  6. 前記複数のパーツの各々は、特定のファイルにマッピングされることを特徴とする請求項1に記載の方法。
  7. 前記複数のパーツは、単一のファイルに格納されることを特徴とする請求項1に記載の方法。
  8. 前記ドライバの少なくとも1つは、異なる通信プロトコルにさらに関連付けられていることを特徴とする請求項1に記載の方法。
  9. 前記複数のドライバにより、前記複数のアプリケーションの各々に関連付けられる通信形式に関係なく、前記複数のアプリケーションは前記パッケージにアクセスできることを特徴とする請求項8に記載の方法。
  10. 前記複数のドライバにより、前記複数のアプリケーションの各々に関連付けられるファイルフォーマットに関係なく、前記複数のアプリケーションは前記パッケージにアクセスできることを特徴とする請求項8に記載の方法。
  11. 前記複数のパーツはそれぞれ、関連付けられた関係の集合を持つことを特徴とする請求項1に記載の方法。
  12. 前記ドキュメントを構成する前記複数のパーツは、第1の関連付けられたコンテンツタイプを有する第1のパーツ並びに第2の関連付けられたコンテンツタイプを有する第2のパーツを含むことを特徴とする請求項1に記載の方法。
  13. コンテンツタイプデータは、前記パッケージに関連付けられたファイルに格納されることを特徴とする請求項1に記載の方法。
  14. 消費者によって前記パッケージを消費できる媒体上に、前記パッケージを置くステップをさらに備えることを特徴とする請求項1に記載の方法。
  15. コンピュータ可読命令を含み、前記命令が実行されると、請求項1に記載の方法が実行されることを特徴とする1つまたは複数のコンピュータ読取り可能媒体。
  16. 請求項15に記載の前記コンピュータ読取り可能媒体を実現することを特徴とするコンピューティングシステム。
  17. 複数のパーツを含むパッケージを受信するステップであって、前記複数のパーツの各々は、関連付けられた名前を介して一意に識別され、アドレス指定可能なことと、
    前記受信されたパッケージに関連付けられているドライバを識別するステップと、
    前記受信されたパッケージに関連付けられている前記ドライバを使用して、アプリケーションプログラムにより前記受信されたパッケージを処理するステップと、
    を備えることを特徴とする方法。
  18. 前記複数のパーツの各々は、Uniform Resource Identifierのローカル部分により識別されることを特徴とする請求項17に記載の方法。
  19. 前記複数のパーツの各々は、前記パーツに含まれるデータの型の記述を含む関連付けられたコンテンツタイプを有することを特徴とする請求項17に記載の方法。
  20. 前記受信されたパッケージに関連付けられている前記ドライバは、特定の通信プロトコルにもさらに関連付けられていることを特徴とする請求項17に記載の方法。
  21. 前記受信されたパッケージに関連付けられている前記ドライバは、特定のファイルフォーマットにもさらに関連付けられていることを特徴とする請求項17に記載の方法。
  22. 前記受信されたパッケージに関連付けられている関係の集合を識別するステップをさらに備えることを特徴とする請求項17の記載の方法。
  23. コンピュータ可読命令を含み、前記命令が実行されると、請求項17に記載の方法が実行されることを特徴とする1つまたは複数のコンピュータ読取り可能媒体。
  24. 請求項23に記載の前記コンピュータ読取り可能媒体を実現することを特徴とするコンピューティングシステム。
  25. 1つまたは複数のコンピュータ読取り可能媒体上に実現されるアプリケーションプログラムインターフェースであって、
    複数のパーツを1つにまとめて保持するパッケージを作成する第1の方法を公開することと、
    第1のパーツを前記パッケージに追加する第2の方法を公開することと、
    前記パッケージから第2のパーツを取り出す第3の方法を公開することと、
    データのストリームを識別する第4の方法を公開することと、
    を備えることを特徴とするアプリケーションプログラムインターフェース。
  26. 前記パッケージは、関連付けられたUniform Resource Identifierを有することを特徴とする請求項25に記載のアプリケーションプログラムインターフェース。
  27. 前記第1の方法は、関連付けられたファイルアクセスパラメータを有することを特徴とする請求項25に記載のアプリケーションプログラムインターフェース。
  28. 前記第1の方法は、関連付けられたファイル共有パラメータを有することを特徴とする請求項25に記載のアプリケーションプログラムインターフェース。
  29. 前記データのストリームは、関連付けられたコンテンツタイプを有することを特徴とする請求項25に記載のアプリケーションプログラムインターフェース。
  30. 前記パッケージから既存のパーツを削除する第5の方法をさらに備えることを特徴とする請求項25に記載のアプリケーションプログラムインターフェース。
  31. 1つまたは複数のコンピュータ読取り可能媒体上に実現されるアプリケーションプログラムインターフェースであって、
    パッケージに格納されている複数のパーツを識別する第1の方法を呼び出すことと、
    新しいパーツを前記パッケージに追加する第2の方法を呼び出すことと、
    前記パッケージに格納されている前記パーツのうちの1つに関連付けられているデータのストリームを識別する第3の方法を呼び出すことと、
    を備えることを特徴とするアプリケーションプログラムインターフェース。
  32. 前記パッケージに格納されている前記複数のパーツのうちの1つを取り出す第4の方法を呼び出すことをさらに備えることを特徴とする請求項31に記載のアプリケーションプログラムインターフェース。
  33. 前記パッケージは、関連付けられたファイルアクセスパラメータおよびファイル共有パラメータを有することを特徴とする請求項31に記載のアプリケーションプログラムインターフェース。
  34. 前記データのストリームに関連付けられているコンテンツタイプを識別する第4の方法を呼び出すことをさらに備えることを特徴とする請求項31に記載のアプリケーションプログラムインターフェース。
JP2007510691A 2004-04-30 2004-07-29 モジュラードキュメントフォーマット Pending JP2007535755A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/836,326 US7512878B2 (en) 2004-04-30 2004-04-30 Modular document format
PCT/US2004/024444 WO2005111830A1 (en) 2004-04-30 2004-07-29 Modular document format

Publications (1)

Publication Number Publication Date
JP2007535755A true JP2007535755A (ja) 2007-12-06

Family

ID=35394329

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007510691A Pending JP2007535755A (ja) 2004-04-30 2004-07-29 モジュラードキュメントフォーマット

Country Status (11)

Country Link
US (1) US7512878B2 (ja)
EP (1) EP1741032A4 (ja)
JP (1) JP2007535755A (ja)
KR (1) KR101109307B1 (ja)
CN (1) CN100565493C (ja)
AU (1) AU2004279163B9 (ja)
BR (1) BRPI0406392A (ja)
CA (1) CA2501858C (ja)
MX (1) MXPA05006625A (ja)
RU (1) RU2368943C2 (ja)
WO (1) WO2005111830A1 (ja)

Families Citing this family (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8661332B2 (en) 2004-04-30 2014-02-25 Microsoft Corporation Method and apparatus for document processing
US7383500B2 (en) 2004-04-30 2008-06-03 Microsoft Corporation Methods and systems for building packages that contain pre-paginated documents
WO2005124579A1 (en) * 2004-06-17 2005-12-29 Objective Systems Pty Limited Reproduction of documents into requested forms
US7617450B2 (en) 2004-09-30 2009-11-10 Microsoft Corporation Method, system, and computer-readable medium for creating, inserting, and reusing document parts in an electronic document
US7752632B2 (en) 2004-12-21 2010-07-06 Microsoft Corporation Method and system for exposing nested data in a computer-generated document in a transparent manner
US7770180B2 (en) 2004-12-21 2010-08-03 Microsoft Corporation Exposing embedded data in a computer-generated document
US8065604B2 (en) * 2004-12-30 2011-11-22 Massachusetts Institute Of Technology Techniques for relating arbitrary metadata to media files
JP2006252001A (ja) * 2005-03-09 2006-09-21 Fuji Xerox Co Ltd ドキュメント処理装置
WO2006116676A2 (en) 2005-04-28 2006-11-02 Wms Gaming Inc. Wagering game device having ubiquitous character set
US7783686B2 (en) * 2006-06-16 2010-08-24 Microsoft Corporation Application program interface to manage media files
US9519621B2 (en) * 2006-06-30 2016-12-13 Adobe Systems Incorporated Deterministic rendering of active content
JP2008078777A (ja) * 2006-09-19 2008-04-03 Brother Ind Ltd 印刷物管理装置
US8396878B2 (en) 2006-09-22 2013-03-12 Limelight Networks, Inc. Methods and systems for generating automated tags for video files
US8214374B1 (en) * 2011-09-26 2012-07-03 Limelight Networks, Inc. Methods and systems for abridging video files
US9015172B2 (en) 2006-09-22 2015-04-21 Limelight Networks, Inc. Method and subsystem for searching media content within a content-search service system
US8966389B2 (en) 2006-09-22 2015-02-24 Limelight Networks, Inc. Visual interface for identifying positions of interest within a sequentially ordered information encoding
JP2008074068A (ja) * 2006-09-25 2008-04-03 Brother Ind Ltd 画像形成装置
JP4197027B2 (ja) * 2006-09-28 2008-12-17 ブラザー工業株式会社 画像形成装置及びプログラム
JP2008084152A (ja) * 2006-09-28 2008-04-10 Brother Ind Ltd 画像形成装置及びプログラム
JP2008085844A (ja) * 2006-09-28 2008-04-10 Brother Ind Ltd データ処理装置及び被記録媒体
JP2008090340A (ja) * 2006-09-29 2008-04-17 Brother Ind Ltd 文書データ編集装置、文書作成システム、及びプログラム
US7855799B2 (en) * 2007-01-16 2010-12-21 Shah Pradip K Print workflow automation
DE102008012329B4 (de) * 2008-03-03 2011-07-14 Océ Printing Systems GmbH, 85586 Verfahren, Drucksystem und Computerprogramm zum Erzeugen und Verarbeiten von Dokumentendatenströmen
KR100890861B1 (ko) * 2008-03-04 2009-03-27 정병수 3차원 응용프로그램 프레임워크를 생성하는 방법 및 그 3차원 응용프로그램 프레임워크를 기반으로 하는 응용프로그램 구현 방법
US8504909B2 (en) * 2008-04-04 2013-08-06 Microsoft Corporation Load-time memory optimization
US8239763B1 (en) * 2009-01-07 2012-08-07 Brooks Ryan Fiesinger Method and apparatus for using active word fonts
US20100325528A1 (en) * 2009-06-17 2010-12-23 Ramos Sr Arcie V Automated formatting based on a style guide
US8301722B2 (en) * 2009-07-29 2012-10-30 Hewlett-Packard Development Company, L.P. Associating version information with a component document of a modular document
US8972843B2 (en) * 2009-07-29 2015-03-03 Hewlett-Packard Development Company, L.P. Sending a subset of component documents of a modular document to an electronic device
US20110029482A1 (en) * 2009-07-29 2011-02-03 Roger Brian Gimson Synchronizing a change of a modular document
US8286077B2 (en) * 2009-12-03 2012-10-09 Microsoft Corporation Remote batch editing of formatted text via an HTML editor
US8938668B2 (en) 2011-08-30 2015-01-20 Oracle International Corporation Validation based on decentralized schemas
US20130159889A1 (en) * 2010-07-07 2013-06-20 Li-Wei Zheng Obtaining Rendering Co-ordinates Of Visible Text Elements
US10268662B2 (en) 2012-09-10 2019-04-23 The Boeing Company Panoptic visualization of a document according to the structure thereof
US10489493B2 (en) 2012-09-13 2019-11-26 Oracle International Corporation Metadata reuse for validation against decentralized schemas
CN103761279B (zh) * 2014-01-09 2017-02-08 北京京东尚科信息技术有限公司 一种基于关键词检索的网络爬虫调度方法及系统
RU2610241C2 (ru) * 2015-03-19 2017-02-08 Общество с ограниченной ответственностью "Аби ИнфоПоиск" Способ и система синтеза текста на основе извлеченной информации в виде rdf-графа с использованием шаблонов
GB2539461B (en) 2015-06-16 2020-01-08 Canon Kk Image data encapsulation
US10657323B2 (en) 2015-09-30 2020-05-19 Obschestvo S Ogranichennoy Otvetstvennostyu “Intersoft” Method of preparing documents in markup languages
RU2613026C1 (ru) * 2015-09-30 2017-03-14 Общество с ограниченной ответственностью "Интерсофт" Способ подготовки документов на языках разметки при реализации пользовательского интерфейса для работы с данными информационной системы
RU2651161C1 (ru) * 2017-02-01 2018-04-18 Общество с ограниченной ответственностью "Интерсофт" Способ подготовки документов на языках разметки при реализации пользовательского интерфейса для работы с данными информационной системы
CN109933752B (zh) * 2017-12-15 2023-05-30 北京京东尚科信息技术有限公司 一种导出电子文档的方法和装置
KR102393412B1 (ko) * 2020-03-04 2022-05-02 김경철 번역 문서의 공유 플랫폼 운용 방법
KR102415923B1 (ko) * 2020-03-04 2022-07-04 김경철 번역 플랫폼 운용 방법
CN115952775A (zh) * 2021-10-08 2023-04-11 北京字跳网络技术有限公司 文档的处理方法、装置、终端和存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002091958A (ja) * 2000-09-12 2002-03-29 Canon Inc 情報処理装置及びその方法、コンピュータ可読メモリ
JP2003195870A (ja) * 2001-08-13 2003-07-09 Texas Instruments Inc 通信網メディア・プレーヤーで使用するための汎用デコーダ

Family Cites Families (163)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4410286A (en) 1981-06-16 1983-10-18 International Business Machines Corporation Printing complex characters
US4594674A (en) 1983-02-18 1986-06-10 International Business Machines Corporation Generating and storing electronic fonts
US4870611A (en) 1983-11-15 1989-09-26 International Business Machines Corporation Apparatus and method for system printing mode control
US4649513A (en) 1983-11-15 1987-03-10 International Business Machines Corporation Apparatus and method for processing system printing data records on a page printer
US5148366A (en) 1989-10-16 1992-09-15 Medical Documenting Systems, Inc. Computer-assisted documentation system for enhancing or replacing the process of dictating and transcribing
EP0518967A4 (en) 1990-03-05 1993-06-30 Interleaf, Inc. Extensible electronic document processing system for creating new classes of active documents
US5222205A (en) 1990-03-16 1993-06-22 Hewlett-Packard Company Method for generating addresses to textured graphics primitives stored in rip maps
US5469533A (en) 1992-07-10 1995-11-21 Microsoft Corporation Resource-oriented printer system and method of operation
AU675816B2 (en) 1992-12-14 1997-02-20 Commonwealth Of Australia, The Message document security
US5745910A (en) 1993-05-10 1998-04-28 Apple Computer, Inc. Frame structure which provides an interface between parts of a compound document
US5487138A (en) 1993-09-02 1996-01-23 Hewlett-Packard Company Method to reduce memory requirements in Asian printers while improving performance
US5537526A (en) * 1993-11-12 1996-07-16 Taugent, Inc. Method and apparatus for processing a display document utilizing a system level document framework
US5752056A (en) 1994-03-02 1998-05-12 Apple Computer, Inc. System for binding document parts and handlers by fidelity of parts or by automatic translation of parts
US5608909A (en) 1994-04-15 1997-03-04 Microsoft Corporation Method and system for caching presentation data of a source object in a presentation cache
US5649083A (en) 1994-04-15 1997-07-15 Hewlett-Packard Company System and method for dithering and quantizing image data to optimize visual quality of a color recovered image
US5579466A (en) 1994-09-01 1996-11-26 Microsoft Corporation Method and system for editing and formatting data in a dialog window
US5881213A (en) 1994-10-05 1999-03-09 Microsoft Corporation Deferred printing
US5602974A (en) 1994-10-05 1997-02-11 Microsoft Corporation Device independent spooling in a print architecture
JPH08297669A (ja) 1994-12-27 1996-11-12 Internatl Business Mach Corp <Ibm> 複合ドキュメント内の複数のパートを自動的にリンクするシステムおよび方法
JPH08212205A (ja) 1995-02-07 1996-08-20 Nec Corp 複合文書管理システム
US6952801B2 (en) 1995-06-07 2005-10-04 R.R. Donnelley Book assembly process and apparatus for variable imaging system
US6199082B1 (en) 1995-07-17 2001-03-06 Microsoft Corporation Method for delivering separate design and content in a multimedia publishing system
US5675788A (en) 1995-09-15 1997-10-07 Infonautics Corp. Method and apparatus for generating a composite document on a selected topic from a plurality of information sources
JPH09128380A (ja) 1995-10-30 1997-05-16 Matsushita Electric Ind Co Ltd 文書蓄積管理システム
JPH09128379A (ja) 1995-11-06 1997-05-16 Hitachi Ltd 情報処理方法
US5893109A (en) * 1996-03-15 1999-04-06 Inso Providence Corporation Generation of chunks of a long document for an electronic book system
US5903903A (en) * 1996-04-25 1999-05-11 Microsoft Corporation System for determining the sequence and placement of pages for a multiple-page document
US5903905A (en) * 1996-04-30 1999-05-11 Microsoft Corporation Method for simultaneously constructing and displaying a dynamic preview of a document that provides an accurate customized document
US6457017B2 (en) 1996-05-17 2002-09-24 Softscape, Inc. Computing system for information management
US5933841A (en) * 1996-05-17 1999-08-03 Ameritech Corporation Structured document browser
US6026416A (en) 1996-05-30 2000-02-15 Microsoft Corp. System and method for storing, viewing, editing, and processing ordered sections having different file formats
US20040139049A1 (en) * 1996-08-22 2004-07-15 Wgrs Licensing Company, Llc Unified geographic database and method of creating, maintaining and using the same
US6144974A (en) 1996-12-13 2000-11-07 Adobe Systems Incorporated Automated layout of content in a page framework
EP0956673A4 (en) * 1996-12-20 2005-04-06 Financial Services Technology METHOD AND SYSTEM FOR PROCESSING ELECTRONIC DOCUMENTS
US6449653B2 (en) 1997-03-25 2002-09-10 Microsoft Corporation Interleaved multiple multimedia stream for synchronized transmission over a computer network
US6023714A (en) * 1997-04-24 2000-02-08 Microsoft Corporation Method and system for dynamically adapting the layout of a document to an output device
US6604144B1 (en) 1997-06-30 2003-08-05 Microsoft Corporation Data format for multimedia object storage, retrieval and transfer
US6269403B1 (en) 1997-06-30 2001-07-31 Microsoft Corporation Browser and publisher for multimedia object storage, retrieval and transfer
US6182080B1 (en) * 1997-09-12 2001-01-30 Netvoyage Corporation System, method and computer program product for storage of a plurality of documents within a single file
US6094665A (en) 1997-09-18 2000-07-25 Hewlett-Packard Company Method and apparatus for correcting a uniform resource identifier
US6134552A (en) 1997-10-07 2000-10-17 Sap Aktiengesellschaft Knowledge provider with logical hyperlinks
US6594682B2 (en) 1997-10-28 2003-07-15 Microsoft Corporation Client-side system for scheduling delivery of web content and locally managing the web content
GB9800100D0 (en) * 1998-01-06 1998-03-04 Ibm A method and component for presentation of information
US6470364B1 (en) 1998-02-24 2002-10-22 Sun Microsystems, Inc. Method and apparatus for generating text components
US20010013043A1 (en) 1998-03-12 2001-08-09 Richard J. Wagner System and method for determining browser package and version compatibility of a web document
US6247018B1 (en) * 1998-04-16 2001-06-12 Platinum Technology Ip, Inc. Method for processing a file to generate a database
US6212530B1 (en) 1998-05-12 2001-04-03 Compaq Computer Corporation Method and apparatus based on relational database design techniques supporting modeling, analysis and automatic hypertext generation for structured document collections
US6496206B1 (en) 1998-06-29 2002-12-17 Scansoft, Inc. Displaying thumbnail images of document pages in an electronic folder
US6182096B1 (en) * 1998-06-30 2001-01-30 International Business Machines Corporation Method and apparatus of creating highly portable output files by combining pages from multiple input files
US6067531A (en) * 1998-07-21 2000-05-23 Mci Communications Corporation Automated contract negotiator/generation system and method
US6538760B1 (en) 1998-09-08 2003-03-25 International Business Machines Corp. Method and apparatus for generating a production print stream from files optimized for viewing
US6407821B1 (en) 1998-09-08 2002-06-18 International Business Machines Corporation Method and apparatus for printing documents including embedded print objects with an intelligent printing system
US6715126B1 (en) 1998-09-16 2004-03-30 International Business Machines Corporation Efficient streaming of synchronized web content from multiple sources
US6549918B1 (en) * 1998-09-21 2003-04-15 Microsoft Corporation Dynamic information format conversion
US5993088A (en) 1998-09-30 1999-11-30 International Business Machines Corporation Method for improving print performance and quality by accumulating, storing and using resource accounting information with a print job
US6362870B2 (en) 1998-10-26 2002-03-26 Hewlett-Packard Company Image copier having enhanced duplex capabilities; method of printing a copy of a document to produce a duplex copy product
US6583789B1 (en) 1998-12-03 2003-06-24 International Business Machines Corporation Method and system for processing glyph-based quality variability requests
US6675356B1 (en) 1998-12-22 2004-01-06 Xerox Corporation Distributed document-based calendaring system
US6608693B1 (en) 1999-04-30 2003-08-19 Hewlett-Packard Development Company, L.P. Apparatus and method for generating a print job from a command stream describing multiple copies of a document
US6658477B1 (en) 1999-05-12 2003-12-02 Microsoft Corporation Improving the control of streaming data through multiple processing modules
US6674540B1 (en) 1999-05-24 2004-01-06 Hewlett-Packard Development Company, L.P. Assembling and printing compound documents
DE19964198A1 (de) 1999-07-15 2001-04-12 Erland Wittkoetter Datenverarbeitungsvorrichtung
US6675353B1 (en) * 1999-07-26 2004-01-06 Microsoft Corporation Methods and systems for generating XML documents
US6694485B1 (en) * 1999-07-27 2004-02-17 International Business Machines Corporation Enhanced viewing of hypertext markup language file
US6763343B1 (en) 1999-09-20 2004-07-13 David M. Brooke Preventing duplication of the data in reference resource for XML page generation
US6418448B1 (en) * 1999-12-06 2002-07-09 Shyam Sundar Sarkar Method and apparatus for processing markup language specifications for data and metadata used inside multiple related internet documents to navigate, query and manipulate information from a plurality of object relational databases over the web
US6812941B1 (en) 1999-12-09 2004-11-02 International Business Machines Corp. User interface management through view depth
US20010044813A1 (en) 2000-01-10 2001-11-22 Frank Kenneth B. Document production platform
US6981207B1 (en) 2000-01-11 2005-12-27 Ecora Software Corporation Automatic documentation of configurable systems by outputting explanatory information of configuration parameters in a narrative format and configuration parameters differences
US6643652B2 (en) 2000-01-14 2003-11-04 Saba Software, Inc. Method and apparatus for managing data exchange among systems in a network
US6701314B1 (en) * 2000-01-21 2004-03-02 Science Applications International Corporation System and method for cataloguing digital information for searching and retrieval
JP3879350B2 (ja) 2000-01-25 2007-02-14 富士ゼロックス株式会社 構造化文書処理システム及び構造化文書処理方法
US6785673B1 (en) 2000-02-09 2004-08-31 At&T Corp. Method for converting relational data into XML
US8122344B2 (en) * 2000-03-01 2012-02-21 Research In Motion Limited System and method for rapid document conversion
US6591278B1 (en) * 2000-03-03 2003-07-08 R-Objects, Inc. Project data management system and method
WO2001067362A2 (en) 2000-03-07 2001-09-13 Broadcom Corporation An interactive system for and method of automating the generation of legal documents
US7284199B2 (en) 2000-03-29 2007-10-16 Microsoft Corporation Process of localizing objects in markup language documents
WO2001076119A2 (en) * 2000-04-03 2001-10-11 Juergen Stark Method and system for content driven electronic messaging
US7055095B1 (en) 2000-04-14 2006-05-30 Picsel Research Limited Systems and methods for digital document processing
US6789229B1 (en) 2000-04-19 2004-09-07 Microsoft Corporation Document pagination based on hard breaks and active formatting tags
US20040049737A1 (en) * 2000-04-26 2004-03-11 Novarra, Inc. System and method for displaying information content with selective horizontal scrolling
US6781609B1 (en) 2000-05-09 2004-08-24 International Business Machines Corporation Technique for flexible inclusion of information items and various media types in a user interface
GB0011426D0 (en) * 2000-05-11 2000-06-28 Charteris Limited A method for transforming documents written in different XML-based languages
FR2828307B1 (fr) * 2000-05-18 2004-10-22 Il System Procede pour la constitution d'une base de donnees relative aux informations contenues dans un document
US6771291B1 (en) 2000-06-07 2004-08-03 The Perfect Web Corporation Method for developing electronic documents employing multiple display regions
GB2364141A (en) * 2000-06-28 2002-01-16 Peter David Hudson System for producing a patent specification and application
JP2002024211A (ja) 2000-06-30 2002-01-25 Hitachi Ltd 文書管理方法およびシステム並びにその処理プログラムを格納した記憶媒体
US6681223B1 (en) * 2000-07-27 2004-01-20 International Business Machines Corporation System and method of performing profile matching with a structured document
EP1305737A2 (en) * 2000-07-28 2003-05-02 Glaxo Group Limited Document management and publication using reusable packages and components
US20020049790A1 (en) 2000-08-08 2002-04-25 Ricker Jeffrey M Data interchange format transformation method and data dictionary used therefor
AU2001287421A1 (en) 2000-08-21 2002-03-04 Thoughtslinger Corporation Simultaneous multi-user document editing system
US7584413B2 (en) * 2000-09-12 2009-09-01 Canon Kabuhsiki Kaisha Electronic document binder builder
US7694218B2 (en) * 2000-09-13 2010-04-06 Canon Kabushiki Kaisha Information processing apparatus, method therefor, and computer-readable memory
US6657647B1 (en) 2000-09-25 2003-12-02 Xoucin, Inc. Controlling the order in which content is displayed in a browser
US7051276B1 (en) * 2000-09-27 2006-05-23 Microsoft Corporation View templates for HTML source documents
JP3494292B2 (ja) * 2000-09-27 2004-02-09 インターナショナル・ビジネス・マシーンズ・コーポレーション アプリケーションデータの誤り訂正支援方法、コンピュータ装置、アプリケーションデータ提供システム、および記憶媒体
US20020065857A1 (en) * 2000-10-04 2002-05-30 Zbigniew Michalewicz System and method for analysis and clustering of documents for search engine
US6925631B2 (en) 2000-12-08 2005-08-02 Hewlett-Packard Development Company, L.P. Method, computer system and computer program product for processing extensible markup language streams
US6907457B2 (en) * 2001-01-25 2005-06-14 Dell Inc. Architecture for access to embedded files using a SAN intermediate device
US7210096B2 (en) * 2001-01-30 2007-04-24 International Business Machines Corporation Methods and apparatus for constructing semantic models for document authoring
JP2004192017A (ja) * 2001-02-06 2004-07-08 Dainippon Printing Co Ltd Icカードを装着した移動体通信端末を利用した情報家電端末の遠隔制御システムとそれに使用する移動体通信端末とicカード
US20020107886A1 (en) * 2001-02-07 2002-08-08 Gentner Donald R. Method and apparatus for automatic document electronic versioning system
US20020116421A1 (en) * 2001-02-17 2002-08-22 Fox Harold L. Method and system for page-like display, formating and processing of computer generated information on networked computers
US20020169738A1 (en) * 2001-05-10 2002-11-14 Giel Peter Van Method and system for auditing an enterprise configuration
US20040015890A1 (en) * 2001-05-11 2004-01-22 Windriver Systems, Inc. System and method for adapting files for backward compatibility
JP2005514673A (ja) * 2001-06-22 2005-05-19 オモイグイ,ノサ 知識の取得、管理、伝達、及び提示のシステム及び方法
US8001465B2 (en) * 2001-06-26 2011-08-16 Kudrollis Software Inventions Pvt. Ltd. Compacting an information array display to cope with two dimensional display space constraint
US6968504B2 (en) * 2001-06-29 2005-11-22 Microsoft Corporation Automated document formatting tool
US20030014128A1 (en) * 2001-07-10 2003-01-16 Pathak Jogen K. System, method, and apparatus for measuring application performance management
DE60222782D1 (de) * 2001-08-24 2007-11-15 Intel Corp Eine allgemeine eingabe-/ausgabearchitektur und entsprechende verfahren zur unterstützung von bestehenden unterbrechungen
US9460414B2 (en) * 2001-08-28 2016-10-04 Eugene M. Lee Computer assisted and/or implemented process and system for annotating and/or linking documents and data, optionally in an intellectual property management system
GB2380016A (en) * 2001-09-21 2003-03-26 Hewlett Packard Co Generating a contract
US7054841B1 (en) * 2001-09-27 2006-05-30 I2 Technologies Us, Inc. Document storage and classification
US20030065946A1 (en) * 2001-10-01 2003-04-03 Holliday John F. Paragraph management software system
JP2005505076A (ja) * 2001-10-04 2005-02-17 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ ユーザインターフェースを様式合わせする方法及び適応型ユーザインターフェースを備える装置
US6783343B2 (en) * 2001-11-19 2004-08-31 Tripoint Llc Two-piece retread envelope
JP2003223440A (ja) * 2001-11-21 2003-08-08 Ricoh Co Ltd 文書処理装置
US6910843B2 (en) * 2001-11-26 2005-06-28 Hewlett-Packard Development Company, L.P. Cover authoring systems and methods and bookbinding systems incorporating the same
US7080083B2 (en) * 2001-12-21 2006-07-18 Kim Hong J Extensible stylesheet designs in visual graphic environments
JP4291999B2 (ja) * 2002-01-18 2009-07-08 株式会社インターネットディスクロージャー 書類作成システム及び作成管理プログラム
US6912555B2 (en) * 2002-01-18 2005-06-28 Hewlett-Packard Development Company, L.P. Method for content mining of semi-structured documents
US7155670B2 (en) * 2002-01-18 2006-12-26 Internet Disclosure Co., Ltd. Document authoring system and authoring management program
US7307745B2 (en) * 2002-01-21 2007-12-11 Canon Kabushiki Kaisha Web-based print server and client
JP2003281197A (ja) 2002-03-25 2003-10-03 Honda Motor Co Ltd 電子パーツリストシステム
US20040030987A1 (en) * 2002-04-30 2004-02-12 Manelli Donald D. Method for generating customized patient education documents
US20030222890A1 (en) * 2002-05-31 2003-12-04 David Salesin System and method for adaptable presentations
US7669120B2 (en) * 2002-06-21 2010-02-23 Microsoft Corporation Method and system for encoding a mark-up language document
US20040015782A1 (en) * 2002-07-17 2004-01-22 Day Young Francis Templating method for automated generation of print product catalogs
US20060155529A1 (en) * 2002-08-16 2006-07-13 Teamware Group Oy System and method for a context-independent framework for management and execution of xml processing tasks
US7418661B2 (en) * 2002-09-17 2008-08-26 Hewlett-Packard Development Company, L.P. Published web page version tracking
EP1403778A1 (en) * 2002-09-27 2004-03-31 Sony International (Europe) GmbH Adaptive multimedia integration language (AMIL) for adaptive multimedia applications and presentations
US20040066527A1 (en) * 2002-10-02 2004-04-08 Nexpress Solutions Llc Finish verification in printing
US7249067B2 (en) * 2002-10-04 2007-07-24 Vpi Color, Llc System and method for creating customized catalogues
KR100636909B1 (ko) * 2002-11-14 2006-10-19 엘지전자 주식회사 확장성 표기 언어 기반의 전자문서 버전 매김 및 버전을이용한 갱신 문서 제공 방법
US7441116B2 (en) * 2002-12-30 2008-10-21 International Business Machines Corporation Secure resource distribution through encrypted pointers
US20040267553A1 (en) * 2003-06-25 2004-12-30 Brunton Greg M. Evaluating storage options
US20050022113A1 (en) * 2003-07-24 2005-01-27 Hanlon Robert Eliot System and method to efficiently switch between paper, electronic and audio versions of documents
US7171618B2 (en) * 2003-07-30 2007-01-30 Xerox Corporation Multi-versioned documents and method for creation and use thereof
US20050066335A1 (en) * 2003-09-23 2005-03-24 Robert Aarts System and method for exposing local clipboard functionality towards external applications
US20050063010A1 (en) * 2003-09-24 2005-03-24 Hewlett-Packard Development Company, L.P. Multiple flow rendering using dynamic content
US7721254B2 (en) * 2003-10-24 2010-05-18 Microsoft Corporation Programming interface for a computer platform
US8065616B2 (en) * 2003-10-27 2011-11-22 Nokia Corporation Multimedia presentation editor for a small-display communication terminal or computing device
JP4194476B2 (ja) * 2003-11-13 2008-12-10 キヤノン株式会社 文書処理装置及び文書処理方法
US7650512B2 (en) * 2003-11-18 2010-01-19 Oracle International Corporation Method of and system for searching unstructured data stored in a database
US7434160B2 (en) * 2003-12-03 2008-10-07 Hewlett-Packard Development Company, L.P. PDF document to PPML template translation
US7464330B2 (en) * 2003-12-09 2008-12-09 Microsoft Corporation Context-free document portions with alternate formats
US7788662B2 (en) * 2004-07-28 2010-08-31 Microsoft Corporation Automatic upgrade of pluggable components
US20060025091A1 (en) * 2004-08-02 2006-02-02 Matsushita Electric Industrial Co., Ltd Method for creating and using phrase history for accelerating instant messaging input on mobile devices
US7636891B2 (en) * 2004-08-31 2009-12-22 Research In Motion Limited Method for paginating a document structure of a document for viewing on a mobile communication device
US7712027B2 (en) * 2004-08-31 2010-05-04 Research In Motion Limited Method for document page delivery to a mobile communication device
US7617450B2 (en) * 2004-09-30 2009-11-10 Microsoft Corporation Method, system, and computer-readable medium for creating, inserting, and reusing document parts in an electronic document
US20060080316A1 (en) * 2004-10-08 2006-04-13 Meridio Ltd Multiple indexing of an electronic document to selectively permit access to the content and metadata thereof
US7277890B2 (en) * 2004-12-01 2007-10-02 Research In Motion Limited Method of finding a search string in a document for viewing on a mobile communication device
US8108773B2 (en) * 2004-12-17 2012-01-31 Xerox Corporation Method and apparatus for generating instances of documents
US7617229B2 (en) * 2004-12-20 2009-11-10 Microsoft Corporation Management and use of data in a computer-generated document
US7617444B2 (en) * 2004-12-20 2009-11-10 Microsoft Corporation File formats, methods, and computer program products for representing workbooks
US7620889B2 (en) * 2004-12-20 2009-11-17 Microsoft Corporation Method and system for linking data ranges of a computer-generated document with associated extensible markup language elements
US20060136816A1 (en) * 2004-12-20 2006-06-22 Microsoft Corporation File formats, methods, and computer program products for representing documents
US7614000B2 (en) * 2004-12-20 2009-11-03 Microsoft Corporation File formats, methods, and computer program products for representing presentations
US7752632B2 (en) * 2004-12-21 2010-07-06 Microsoft Corporation Method and system for exposing nested data in a computer-generated document in a transparent manner
US7154503B2 (en) 2005-03-31 2006-12-26 Microsoft Corporation Methods and systems for brush composition
US20070022128A1 (en) * 2005-06-03 2007-01-25 Microsoft Corporation Structuring data for spreadsheet documents
US7725530B2 (en) * 2005-12-12 2010-05-25 Google Inc. Proxy server collection of data for module incorporation into a container document

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002091958A (ja) * 2000-09-12 2002-03-29 Canon Inc 情報処理装置及びその方法、コンピュータ可読メモリ
JP2003195870A (ja) * 2001-08-13 2003-07-09 Texas Instruments Inc 通信網メディア・プレーヤーで使用するための汎用デコーダ

Also Published As

Publication number Publication date
RU2005120697A (ru) 2006-04-10
AU2004279163A1 (en) 2005-12-08
CA2501858A1 (en) 2005-10-30
US20050268221A1 (en) 2005-12-01
KR101109307B1 (ko) 2012-01-31
US7512878B2 (en) 2009-03-31
AU2004279163B9 (en) 2010-08-19
MXPA05006625A (es) 2006-01-24
EP1741032A4 (en) 2011-12-07
CN1823330A (zh) 2006-08-23
CN100565493C (zh) 2009-12-02
KR20070011058A (ko) 2007-01-24
EP1741032A1 (en) 2007-01-10
BRPI0406392A (pt) 2006-02-07
AU2004279163B2 (en) 2010-06-10
CA2501858C (en) 2012-10-30
WO2005111830A1 (en) 2005-11-24
RU2368943C2 (ru) 2009-09-27

Similar Documents

Publication Publication Date Title
JP5231013B2 (ja) パッケージの中のパーツ間の関係を維持する方法および装置
JP4854658B2 (ja) ドキュメントを処理する方法および装置
JP4698668B2 (ja) 文書マークアップ方法およびシステム
JP2007535755A (ja) モジュラードキュメントフォーマット
US7383500B2 (en) Methods and systems for building packages that contain pre-paginated documents
JP2007535749A (ja) ドキュメントのパーツをインタリーブする方法と装置
JP2007535747A (ja) ドキュメントに選択可能なまたは/および順序付け可能なパーツを定義する方法およびシステム

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100223

RD13 Notification of appointment of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7433

Effective date: 20100316

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20100316

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100521

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20100730