文書のある表現における変更を別の表現に反映させるための文書処理及び管理方法
少なくともルート要素及び宣言を有する新規のXML文書を生成する方法である。この方法は、ルート要素を有する新規のXMLファイルのための少なくとも1つのXMLテンプレートを備える新規フラグメントXML文書をストレージから検索する工程を含む。少なくとも1つのXMLテンプレートが選択され、選択されたXMLテンプレートがXML文書を生成するために用いられる。ユーザ及びプログラマのインタフェースや、この方法を実現可能な装置及びシステムの構造も提供される。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、情報のある形式の表現における変更を、同じ情報の別の形式の表現に自動的に伝達する技術を開示する。とくに、本技術は、ソースDOMツリーにより表現された文書に対する変更を、別の表現に描写されたデスティネーションDOMツリーへ自動的に伝達することに関する。
【背景技術】
【0002】
この出願は、「文書処理及び文書管理システム」という名称で、2004年8月2日に出願され、同時継続している米国仮出願(出願番号60/592,369)からの優先権を主張する。
【0003】
インターネットの出現により、ユーザによって処理され管理される文書の数が、ほぼ指数関数的に増加してきた。インターネットの核を形成するウェブ(World Wide Web)は、そのような文書データの大きな受け皿となっている。ウェブは、文書に加えて、このような文書の情報検索システムを提供する。これらの文書は、通常、マークアップ言語により記述される。マークアップ言語のシンプルかつポピュラーな例の一つにHTML(HyperText Markup Language)がある。このような文書は、ウェブの他の位置に格納されている他の文書へのリンクをさらに含む。XML(eXtensible Markup Language)は、さらに高度でポピュラーなマークアップ言語である。ウェブ文書にアクセスし、閲覧するためのシンプルなブラウザが、Java(登録商標)のようなオブジェクト指向のプログラミング言語で開発されている。
【0004】
マークアップ言語により記述された文書は、通常、ブラウザや他のアプリケーションの中では、ツリーデータ構造の形で表現される。この構造は、文書を構文解析した結果のツリーに相当する。DOM(Document Object Model)は、文書を表現し、操作するために使用される、よく知られたツリーベースのデータ構造モデルである。DOMは、HTMLやXML文書などを含む文書を表現するための標準的なオブジェクトのセットを提供する。DOMは、文書内のコンポーネントを表現するオブジェクトがどのようにつながっているかという標準モデルと、それらのオブジェクトにアクセスしたり操作したりするための標準インタフェイスという、2つの基本的なコンポーネントを含む。
【0005】
アプリケーション開発者は、独自のデータ構造やAPI(Application Program Interface)へのインタフェイスとしてDOMをサポートすることができる。他方、文書を作成するアプリケーション開発者は、彼らのAPIの独自インタフェイスではなく、DOMの標準インタフェイスを使用することができる。したがって、標準を提供するというその能力により、DOMは、様々な環境、特にウェブにおいて、文書の相互利用を促進させるために有効である。DOMのいくつかのバージョンが定義されており、異なるプログラミング環境及びアプリケーションによって使用されている。
【0006】
DOMツリーは、対応するDOMの内容に基づいた文書の階層的表現である。DOMツリーは「根(ルート)」、及びルートから発生する1つ以上の「節(ノード)」を含む。ルートが文書全体を表す場合もある。中間のノードは、例えば、テーブル及びそのテーブル中の行及び列のような要素を表すことができる。DOMツリーの「葉」は、通常、それ以上分解できないテキストや画像のようなデータを表す。DOMツリーの各ノードは、フォント、サイズ、色、インデントなど、ノードによって表される要素のパラメータを記述する属性に関連付けられてもよい。
【0007】
HTMLは、文書を作成するために一般に用いられる言語であるが、フォーマット及びレイアウト用の言語であり、データ記述のための言語ではない。HTMLドキュメントを表現するDOMツリーのノードは、HTMLのフォーマッティングタグとして予め定義されたエレメントであって、通常、HTMLは、データの詳述や、データのタギング/ラベリングのための機能を提供しないので、HTMLドキュメント中のデータに対するクエリを定式化することは多くの場合困難である。
【0008】
ネットワーク設計者たちの目指すものは、ウェブ上の文書がソフトウェアアプリケーションによってクエリされたり処理されたりできるようにすることである。表示方法とは無関係で、階層的に構造化された言語であれば、そのようにクエリされ処理されることができる。XML(eXtensible Markup Language)のようなマークアップ言語は、これらの機能を提供することができる。
【0009】
HTMLとは逆に、XMLのよく知られた利点は、文書の設計者が自由に定義可能な「タグ」を使用して、データ要素にラベルを付けることが可能である点である。このようなデータ要素は、階層的に構造化することができる。さらに、XML文書は、文書内で用いられるタグ及びそれらの相互関係の「文法」を記述した文書型定義を含むことができる。構造化されたXML文書の表示方法を定義するために、CSS(Cascading Style Sheet)又はXSL(XML Style Language)が使用される。DOM、HTML、XML、CSS、XSL及び関連する言語の特徴に関する付加的な情報は、ウェブからも得ることができる。(例えば、http://www.w3.org/TR/)
【0010】
Xpathは、XML文書の部分の位置を指定するために共通のシンタックス及びセマンティクスを提供する。機能性の例として、XML文書に対応するDOMツリーのトラバース(移動)がある。それは、XML文書の様々な表現に関連した文字列、数、及びブーリアン文字の操作のための基本的な機能を提供する。Xpathは、XML文書の見た目のシンタックス、例えば、テキストとしてみたときに何行目であるとか何文字目であるとかといった文法ではなく、DOMツリーなどの抽象的・論理的な構造において動作する。Xpathを使用することにより、例えばXML文書のDOMツリー内の階層的構造を通じて場所を指定することができる。アドレシングのための使用の他に、Xpathは、DOMツリー中のノードがパターンにマッチするか否かをテストするために使用されるようにも設計されている。
【0011】
XPathに関する更なる詳細は、http://www.w3.org/TR/xpathで得ることができる。
【0012】
XMLの既知の利点及び特徴により、マークアップ言語(例えばXML)で記述された文書を扱うことができ、文書を作成及び修正するためのユーザフレンドリーなインタフェイスを提供することができる、効果的な文書処理システムが求められる。
【0013】
XMLは、複雑な文書のための、またネットワークなどを介して複数のドキュメントにまたがってデータを共有するのに特に適した形式である。XML文書を作成、表示、編集するための多くのアプリケーションが開発されている(たとえば、特許文献1参照)。
【特許文献1】特開2001−290804号公報
【発明の開示】
【発明が解決しようとする課題】
【0014】
ボキャブラリは、任意に定義することが許されており、理論上、無限に多くのボキャブラリが存在しうる。これらのボキャブラリの全てに対応して専用の表示・編集環境を提供するのは現実的ではない。従来、専用の編集環境が用意されていないボキャブラリにより記述された文書を編集する場合、テキストデータにより構成された文書のソースを直接テキストエディタなどで編集していた。
【0015】
既存のアプリケーションは、処理・管理できるXML文書に大きな制限があったため、幅広く文書を受け入れることができなかった。例えばXML文書処理システムの中には、XML文書の中で、文書の内容を表し、表示メソッドとは関係ない文字列を表示することができるものがある。この機能は一見優れているようであるが、実際にはユーザがXML文書を直接編集できないという不都合な点も持つ。この問題を解決するために、XML文書処理システムの中には、XMLの入力を受け付ける画面を特別にデザインするものもある。しかし、画面デザインの柔軟性は限られていた。それらのXML文書処理システムにおいては、前述の画面デザインは事前にハードコーディングされている必要があったからである。
【0016】
この制限を考慮して、XSLTは標準的なスタイルシート言語の一つとして開発された。このような技術によりユーザはハードコーディングから解放され、XML文書を表示するために適用されるメソッドとも混在可能になった。しかし、XSLTを使用しても、特定の形式のXML文書の編集はできない場合があった。
【0017】
さらに、それらのXML文書処理システムは、「スキーマ」に定義された順序をあてにしている。そのため、一旦スキーマが決定されると、処理システムで処理可能なのは、そのスキーマの構造に最上位から合致するXML文書のみであった。換言すると、それらのシステムは過度に制限的で柔軟性を欠いている。
【課題を解決するための手段】
【0018】
今回開示するシステムは、前述のような制限が無い。完全なXML文書の構造は固定的に決定される必要はない。様々な構造が複合したXML文書であっても、XML文書をより小さな部分に分割して安全に処理できる。それぞれの小さい部分は、より柔軟性を高めるため、個別に編集モジュールに振り分けられる。加えて、編集モジュールは、プラグインとして提供されるのが望ましい。さらにユーザは、何らのハードコーディングをすることなく柔軟性のある画面デザインを実装できる。いわゆるWYSIWYG(What You See Is What You Get)を実現できる。
【0019】
ここで説明されるシステムの構成のうちのいくつかは、MVC(Model−View−Controller)と呼ばれる、よく知られたGUI(Graphical User Interface)パラダイムを用いて説明される。MVCパラダイムは、アプリケーション又はアプリケーションのインタフェイスの一部を、3つの部分、すなわち、モデル、ビュー、コントローラに分割する。MVCは、元は、GUIの世界に、従来の入力、処理、出力の役割を割り当てるために開発された。
【0020】
[入力] → [処理] → [出力]
【0021】
[コントローラ]→ [モデル] → [ビュー]
【0022】
MVCパラダイムによれば、外界のモデリング、ユーザへの視覚的なフィードバック、及びユーザの入力は、モデル(M)、ビュー(V)、及びコントローラ(C)オブジェクトにより分離されて扱われる。コントローラは、ユーザからのマウスとキーボード入力のような入力を解釈し、これらのユーザアクションを、適切な変更をもたらすためにモデル及び/又はビューに送られるコマンドにマップするように作用する。モデルは、1以上のデータ要素を管理するように作用し、その状態に関するクエリに応答し、状態を変更する指示に応答する。ビューは、ディスプレイの長方形の領域を管理するように作用し、グラフィクスとテキストの組合せによりユーザにデータを提示する機能を有する。
【0023】
ワードプロセッサなどの標準的な文書生成アプリケーションでは、ユーザは文書を生成又は編集するときに、特定の動作を実行し、後で取り消したいことがある。このように、ユーザの動作を取り消すような避けられない必要性が予期されるので、「逆」操作が定義される必要がある。従来、逆操作の定義はプログラマ自身により生成されていた。広く行われている技術として、「取消可能な」操作が別の「取消可能な」操作を結合され、結合された取消可能な操作が実現される。しかし、プログラマによる介入のための要求は、高価でかつ非効率的である。逆操作をプログラムするためにプログラマを必要としない、取消可能なコマンドの定義が望まれる。
【0024】
この目的の達成は、文書を生成するときに生じる様々な操作の取消は、適用される編集環境によって異なるという事実により阻害される。例えば、テキストエディタは、文字入力ごとに取消操作を有する。しかし、XMLのDOM編集環境においては、最小の取消可能な単位はDOMの変更であるから、操作の取消は注意深く取り扱われる必要がある。しかし、DOM変更を単位とした取消操作の実行は、ユーザにとっては無益で意味が無く、XML文書全体の不整合を生じさせる可能性もある。
【0025】
したがって、XML環境では、DOMに対する取消操作を意味のある粒度で行う必要がある。1つの方法は、DOMにアクセスするメソッドを提供する文書モデルを提供し、全ての取消操作をメソッドベースで行うことである。このようなメソッドベースの方法は、任意のDOM操作をシームレスに取消可能とするが、DOMと相互作用するプログラマ独自の方法を記述することができないという不利益が生じる。全ての相互作用は定義済みのメソッドを通じて行われる必要がある。さらに、このメソッドを追加するためには、文書のモデル全体が変更される必要がある。
【0026】
このように、逆操作を簡易に定義し、プログラマにより逆操作をプログラムする必要のない取消可能なコマンドを提供可能とする方法及び構成が必要である。
【0027】
本発明のある態様は、DOMにより表現されたXML文書の取消を提供する方法である。この方法は、前記DOMの変更を検知する工程と、前記DOMにおける検知された変更に対応する編集命令を生成する工程と、コマンドにより前記編集命令を検知する工程と、複数の検知された前記編集命令を収集する工程と、収集された前記編集命令を登録する工程と、を備える。
【発明を実施するための最良の形態】
【0028】
以下、添付の図面を参照して、発明の典型的な実施例を詳細に記述する。
【0029】
本発明の境界と範囲を定めるのは請求の範囲のみである。説明する実施の形態や実施例、効果は単なる例示であり、本発明を制限するものと考えてはならない。本発明の詳細な説明は説明を意図しており、請求の範囲を制限するものではない。当業者には多くの代替例、改造例や変形例が理解される。
【0030】
A.文書処理システムの全体構成
図1(a)は、後述するタイプの文書処理システムの基礎として機能する要素の標準的な構成例を示す。構成10は、通信経路によりメモリ12に接続されたCPU又はマイクロプロセッサ11などの形式のプロセッサを含む。メモリ12は、現在又は将来に利用可能な任意のROM及び/又はRAMの形式であってもよい。通信経路は、典型的にはバスとして設けられる。マウス、キーボード、音声認識システムなどのユーザ入力装置14及び表示装置15(又は他のユーザインタフェイス)に対する入出力インタフェイス16も、プロセッサ11とメモリ12の通信のためのバスに接続される。この構成は、スタンドアロンであってもよいし、複数の端末及び1以上のサーバが接続されてネットワーク化された形式であってもよいし、既知のいかなる方式により構成されてもよい。本発明は、これらのコンポーネントの配置、集中又は分散されたアーキテクチャー、あるいは様々なコンポーネントの通信方法により制限されない。
【0031】
さらに、本システム及びここで議論される実施例は、様々な機能性を提供するいくつかのコンポーネント及びサブコンポーネントを含むものとして議論される。これらのコンポーネント及びサブコンポーネントは、注目された機能性を提供するために、ハードウェアとソフトウェアの組合せだけでなく、ハードウェアのみ、ソフトウェアのみによっても実現されうる。さらに、ハードウェア、ソフトウェア、及びそれらの組合せは、汎用の計算装置、専用のハードウェア、又はそれらの組合せにより実現されうる。したがって、コンポーネント又はサブコンポーネントの構成は、コンポーネント又はサブコンポーネントの機能性を提供するための特定のソフトウェアを実行する汎用/専用の計算装置を含む。
【0032】
図1(b)は、文書処理システムの一例の全体のブロック図を示す。このような文書処理システムにおいて文書が生成され編集される。これらの文書は、例えばXMLなど、マークアップ言語の特徴を有する任意の言語により記述されてもよい。また、便宜上、特定のコンポーネント及びサブコンポーネントの用語及び表題を創造した。しかしながら、これらは、この開示の一般的な教示の範囲を制限するために解釈されるべきではない。
【0033】
文書処理システムは、2つの基本的な構成を有するものととらえることができる。第1の構成は、文書処理システムが動作する環境である「実行環境」101である。例えば、実行環境は、文書の処理中及び管理中に、ユーザだけでなくシステムも支援する、基本的なユーティリティ及び機能を提供する。第2の構成は、図1(c)に示す、実行環境において走るアプリケーションから構成される「アプリケーション」102である。これらのアプリケーションは、文書自身及び文書の様々な表現を含む。
【0034】
1.実行環境
実行環境101のキーとなるコンポーネントはProgramInvoker(プログラムインボーカ:プログラム起動部)103である。ProgramInvoker103は、文書処理システムを起動するためにアクセスされる基本的なプログラムである。例えば、ユーザが文書処理システムにログオンして開始するとき、ProgramInvoker103が実行される。ProgramInvoker103は、例えば、文書処理システムにプラグインとして加えられた機能を読み出して実行させたり、アプリケーションを開始して実行させたり、文書に関連するプロパティを読み出すことができる。ProgramInvoker103の機能はこれらに限定されない。ユーザが実行環境内で実行されるように意図されたアプリケーションを起動したいとき、ProgramInvoker103は、そのアプリケーションを見つけ、それを起動して、アプリケーションを実行する。例えばユーザが文書(実行環境ではアプリケーションとして扱われる)を編集したいときには、ProgramInvoker103は最初にその文書を発見し、文書を展開し、編集するために必要な機能を実行する。
【0035】
ProgramInvoker103には、プラグインサブシステム104、コマンドサブシステム105、及びResource(リソース)モジュール109などのいくつかのコンポーネントがアタッチされている。これらの構成については、以下に詳述する。
【0036】
a)プラグインサブシステム
プラグインサブシステム104は、文書処理システムに機能を追加するための高度に柔軟で効率的な構成として使用される。プラグインサブシステム104は、また、文書処理システムに存在する機能を修正又は削除するために使用することができる。さらに、種々様々の機能をプラグインサブシステムを使用して追加又は修正することができる。例えば、画面上への文書の描画を支援するように作用するEditlet(エディットレット:編集部)機能を追加することもできる。Editletプラグインは、システムに追加されるボキャブラリの編集も支援する。
【0037】
プラグインサブシステム104は、ServiceBroker(サービスブローカ:サービス仲介部)1041を含む。ServiceBroker1041は、文書処理システムに加えられるプラグインを管理することにより、文書処理システムに加えられるサービスを仲介する。
【0038】
所望の機能性を実現する個々の機能は、Service(サービス)1042の形でシステムに追加される。利用可能なService1042のタイプは、Application(アプリケーション)Service、ZoneFactory(ゾーンファクトリ:ゾーン生成部)Service、Editlet(エディットレット:編集部)Service、CommandFactory(コマンドファクトリ:コマンド生成部)Service、ConnectXPath(コネクトXPath:XPath管理部)Service、CSSComputation(CSSコンピューテーション:CSS計算部)Serviceなどを含むが、これらに限定されない。これらのService、及びシステムの他の構成とそれらとの関係は、文書処理システムについてのよりよい理解のために、以下に詳述される。
【0039】
プラグインとServiceの関係は以下の通りである。プラグインは、1以上のServiceProvider(サービスプロバイダ:サービス提供部)を含むことができるユニットである。それぞれのServiceProviderは、それに関連したServiceの1以上のクラスを有する。例えば、適切なソフトウェアアプリケーションを有する単一のプラグインを使用することにより、1以上のServiceをシステムに追加することができ、これにより、対応する機能をシステムに追加することができる。
【0040】
b)コマンドサブシステム
コマンドサブシステム105は、文書の処理に関連したコマンドの形式の命令を実行するために使用される。ユーザは、一連の命令を実行することにより、文書に対する操作を実行することができる。例えば、ユーザは、コマンドの形で命令を発行することにより、文書処理システム中のXML文書に対応するXMLのDOMツリーを編集し、XML文書を処理する。これらのコマンドは、キーストローク、マウスクリック、又は他の有効なユーザインタフェイスアクションを使用して入力されてもよい。1つのコマンドにより1以上の命令が実行されることもある。この場合、これらの命令が1つのコマンドにラップ(包含)され、連続して実行される。例えば、ユーザが、誤った単語を正しい単語に置換したいとする。この場合、第1の命令は、文書中の誤った単語を発見することであり、第2の命令は、誤った単語を削除することであり、第3の命令は、正しい単語を挿入することであってもよい。これらの3つの命令が1つのコマンドにラップされてもよい。
【0041】
コマンドは、関連した機能、例えば、後で詳述する「アンドゥ」機能を有してもよい。これらの機能は、オブジェクトを生成するために使用されるいくつかの基本クラスにも割り当てられてもよい。
【0042】
コマンドサブシステム105のキーとなるコンポーネントは、選択的にコマンドを与え、実行するように作用するCommandInvoker(コマンドインボーカ:コマンド起動部)1051である。図1(b)には、1つのCommandInvokerのみが示されているが、1以上のCommandInvokerが使用されてもよく、1以上のコマンドが同時に実行されてもよい。CommandInvoker1051は、コマンドを実行するために必要な機能及びクラスを保持する。動作において、実行されるべきCommand(コマンド:命令)1052は、Queue(キュー)1053に積まれる。CommandInvokerは、連続的に実行するコマンドスレッドを生成する。CommandInvoker内で既に実行中のCommandがなければ、CommandInvoker1051により実行されるように意図されたCommand1052が実行される。CommandInvokerが既にコマンドを実行している場合、新しいCommandは、Queue1053の最後に積まれる。しかしながら、それぞれのCommandInvoker1051では、一度に1つのCommandのみが実行される。指定されたCommandの実行に失敗した場合、CommandInvoker1051は例外処理を実行する。
【0043】
CommandInvoker1051により実行されるCommandの型は、UndoableCommand(取消可能コマンド)1054、AsynchronousCommand(非同期コマンド)1055、及びVCCommand(VCコマンド)1056を含むが、これらに限定されない。UndoableCommand1054は、ユーザが望めば、そのCommandの結果を取り消すことが可能なCommandである。UndoableCommandの例として、切り取り、コピー、テキストの挿入、などがある。動作において、ユーザが文書の一部を選択し、その部分に切り取りコマンドを適用するとき、UndoableCommandを用いることにより、切り取られた部分は、必要であれば、「切り取られていない」ようにすることができる。
【0044】
VCCommand1056は、ボキャブラリコネクション記述子(Vocabulary Connection Descriptor:VCD)スクリプトファイルに格納される。これらは、プログラマにより定義されうるユーザ指定のCommandである。Commandは、例えば、XMLフラグメントを追加したり、XMLフラグメントを削除したり、属性を設定したりするための、より抽象的なCommandの組合せであってもよい。これらのCommandは、特に、文書の編集に焦点を合わせている。
【0045】
AsynchronousCommand1055は、文書のロードや保存など、システムよりのCommandであり、UndoableCommandやVCCommandとは別に、非同期的に実行される。AsynchronousCommandは、UndoableCommandではないので、取り消すことはできない。
【0046】
AsynchronousCommands1055は、ボキャブラリコネクションの下位のレベルに存在する。それらは文書処理システムに対するより特別なコマンドである。AsynchronousCommandsはCommandInvoker1051に直接届けられる。一方で、VocabularyConnectionCommands1056は解釈され、AsynchronousCommandsに変換されたのち、CommandInvoker1051に届けられる。
【0047】
c)リソース
Resource109は、様々なクラスに、いくつかの機能を提供するオブジェクトである。例えば、ストリングリソース、アイコン、及びデフォルトキーバインドは、システムで使用されるResourceの例である。
【0048】
2.アプリケーションコンポーネント
文書処理システムの第2の主要な特徴であるアプリケーションコンポーネント102は、実行環境101において実行される。アプリケーションコンポーネント102は、実際の文書と、システム内における文書の様々な論理的、物理的な表現を含む。さらに、アプリケーションコンポーネント102は、文書を管理するために使用されるシステムの構成を含む。アプリケーションコンポーネント102は、さらに、UserApplication(ユーザアプリケーション)106、アプリケーションコア108、ユーザインタフェイス107、及びCoreComponent(コアコンポーネント)110を含む。
【0049】
a)ユーザアプリケーション
UserApplication106は、ProgramInvoker103と共にシステム上にロードされる。UserApplication106は、文書と、文書の様々な表現と、文書と対話するために必要なユーザインタフェイスとをつなぐ接着剤となる。例えば、ユーザが、プロジェクトの一部である文書のセットを生成したいとする。これらの文書がロードされると、文書の適切な表現が生成される。ユーザインタフェイス機能は、UserApplication106の一部として追加される。言いかえれば、UserApplication106は、ユーザがプロジェクトの一部を形成する文書と対話することを可能とする文書の表現と、文書の様々な態様とを、共に保持する。一旦UserApplication106が生成されると、ユーザがプロジェクトの一部を形成する文書との対話を望むたびに、ユーザは簡単に実行環境上にUserApplication106をロードすることができる。
【0050】
b)コアコンポーネント
CoreComponent110は、複数のPane(ペイン)の間で文書を共有する方法を提供する。後で詳述するように、Paneは、DOMツリーを表示し、画面の物理的なレイアウトを扱う。例えば、物理的な画面は、個々の情報の断片を描写する画面内の複数のPaneからなる。ユーザから画面上に見える文書は、1又はそれ以上のPaneに出現しうる。また、2つの異なる文書が画面上で2つの異なるPaneに現れてもよい。
【0051】
図1(c)に示されるように、画面の物理的なレイアウトもツリーの形式になっている。Paneは、RootPane(ルートペイン)1084にもなり得るし、SubPane(サブペイン)1085にもなり得る。RootPane1084は、Paneのツリーの根に当たるPaneであり、SubPane1085は、RootPane1084以外の任意のPaneである。
【0052】
CoreComponent110は、さらに、フォントを提供し、ツールキットなど、文書のための複数の機能的な操作のソースの役割を果たす。CoreComponent110により実行されるタスクの一例に、複数のPane間におけるマウスカーソルの移動がある。実行されるタスクの他の例として、あるPane中の文書の一部をマークし、それを異なる文書を含む別のPane上にコピーする。
【0053】
c)アプリケーションコア
上述したように、アプリケーションコンポーネント102は、システムにより処理され管理される文書から構成される。これは、システム内における文書の様々な論理的及び物理的な表現を含む。アプリケーションコア108は、アプリケーションコンポーネント102の構成である。その機能は、実際の文書を、それに含まれる全てのデータとともに保持することである。アプリケーションコア108は、DocumentManager(ドキュメントマネージャ:文書管理部)1081及びDocument(ドキュメント:文書)1082自身を含む。
【0054】
DocumentManager1081の様々な態様を以下に詳述する。DocumentManager1081は、Document1082を管理する。DocumentManager1081は、RootPane1084、SubPane1085、ClipBoard(クリップボード)ユーティリティ1086、及びSnapShot(スナップショット)ユーティリティ1087にも接続される。ClipBoardユーティリティ1086は、ユーザがクリップボードに加えることを決定した文書の部分を保持する方法を提供する。例えば、ユーザが、文書の一部を切り取り、後で再考するために新規文書にそれを保存することを望んだとする。このような場合、切り取られた部分がClipBoardに追加される。
【0055】
つづいて、SnapShotユーティリティ1087についても説明する。SnapShotユーティリティ1087は、アプリケーションがある状態から別の状態まで移行するときに、アプリケーションの現在の状態を記憶することを可能とする。
【0056】
d)ユーザインタフェイス
アプリケーションコンポーネント102の別の構成は、ユーザがシステムと物理的に対話する手段を提供するユーザインタフェイス107である。例えば、ユーザインタフェイスは、ユーザが文書をアップロードしたり、削除したり、編集したり、管理したりするために使用される。ユーザインタフェイスは、Frame(フレーム)1071、MenuBar(メニューバー)1072、StatusBar(ステータスバー)1073、及びURLBar(URLバー)1074を含む。
【0057】
Frame1071は、一般に知られているように、物理的な画面のアクティブな領域であると考えてもよい。MenuBar1072は、ユーザに選択を提供するメニューを含む画面領域である。StatusBar1073は、アプリケーションの実行状態を表示する画面領域である。URLBar1074は、インターネットをナビゲートするためにURLアドレスを入力する領域を提供する。
【0058】
B.文書管理及び関連するデータ構造
図2は、DocumentManager1081の詳細を示す。これは、文書処理システム内で文書を表現するために用いられるデータ構造及び構成を含む。分かりやすくするために、このサブセクションで説明される構成は、MVCパラダイムを用いて説明される。
【0059】
DocumentManager1081は、文書処理システム内にある全ての文書を保持しホストするDocumentContainer(ドキュメントコンテナ:文書コンテナ)203を含む。DocumentManager1081にアタッチされたツールキット201は、DocumentManager1081により使用される様々なツールを提供する。例えば、DomService(DOMサービス)は、文書に対応するDOMを生成し、保持し、管理するために必要とされる全ての機能を提供するために、ツールキット201により提供されるツールである。ツールキット201により提供される別のツールであるIOManager(入出力管理部)は、システムへの入力及びシステムからの出力を管理する。同様に、StreamHandler(ストリームハンドラ)は、ビットストリームによる文書のアップロードを扱うツールである。これらのツールは、図中に特に示さず、参照番号を割り当てないが、ツールキット201のコンポーネントを形成する。
【0060】
MVCパラダイムの表現によれば、モデル(M)は、文書のDOMツリーモデル202を含む。前述したように、全ての文書は、文書処理システムにおいてDOMツリーとして表現される。文書は、また、DocumentContainer203の一部を形成する。
【0061】
1.DOMモデル及びゾーン
DOMはW3Cが策定した標準規格であり、Nodeを操作するための標準的なインタフェイスを定義するが、実際には、ボキャブラリごと又はNodeごとに特有の操作があるので、これらの操作をAPIとして用意しておくのが好都合である。文書処理システムでは、このような各Nodeに特有のAPIをFacetとして用意し、各Nodeにアタッチする。これにより、DOMの標準規格に準拠しつつ、有用なAPIを付加することができる。また、ボキャブラリごとに特有のDOMを実装するのではなく、標準的なDOMの実装に、後から特有のAPIを付加するようにすることで、多様なボキャブラリを統一的に処理することができるともに、複数のボキャブラリが任意の組合せで混在した文書を適切に処理することができる。標準的にはDOMはDOMツリー形式で表現される。
【0062】
文書を表現するDOMツリーは、Node(ノード)2021を有するツリーである。DOMツリーの部分集合であるZone(ゾーン)209は、DOMツリー内の1以上のNodeの関連領域を含む。例えば、画面上で文書の一部のみを表示し得るが、この可視化された文書の一部はZone209を用いて表示される。Zoneは、ZoneFactory(ゾーンファクトリ:ゾーン生成部)205と呼ばれるプラグインを用いて、生成され、取り扱われ、処理される。ZoneはDOMの一部を表現するが、1以上の「名前空間」を使用してもよい。よく知られているように、名前空間は、名前空間内でユニークな名前の集合である。換言すれば、名前空間内に同じ名前は存在しない。
【0063】
2.Facet及びFacetとZoneとの関係
Facet(ファセット)2022は、MVCパラダイムのモデル(M)部分内の別の構成である。Facetは、ZoneにおいてNodeを編集するために使用される。Facet2022は、Zone自身の内容に影響を与えずに実行することができる手続(プロシージャ)を使用して、DOMへのアクセスを編成する。次に説明するように、これらの手続は、Nodeに関連した重要で有用な操作を実行する。
【0064】
各Node2021は、対応するFacet2022を有する。DOMの中のNodeを直接操作する代わりに、操作を実行するためにFacetを使用することによって、DOMの保全性は保護される。そうでなく、操作がNode上で直接実行される場合、いくつかのプラグインがDOMを同時に変更することができ、その結果矛盾を引き起こす。
【0065】
ボキャブラリは、名前空間に属するタグ(例えばXMLのタグ)のセットである。上述したように、名前空間は、ユニークな名前(ここではタグ)のセットを有する。ボキャブラリは、XML文書を表現するDOMツリーのサブツリーとして現れる。このサブツリーはZoneを含む。特定の例においては、タグセットの境界はZoneによって定義される。Zone209は、ZoneFactory205と呼ばれるServiceを利用して生成される。上述したように、Zone209は、文書を表現するDOMツリーの一部の内部表現である。このような文書の一部へのアクセスを提供するために、論理的な表現が要求される。この論理的表現は、文書が画面上で論理的にどのように表現されるかについてコンピュータに通知する。Canvas(キャンバス)210は、Zoneに対応する論理的なレイアウトを提供するように作用するServiceである。
【0066】
他方、Pane211は、Canvas210により提供される論理的なレイアウトに対応する物理的な画面レイアウトである。実際、ユーザは表示画面上で文字や画像によって文書のレンダリングのみを見る。したがって、文書は、画面上に文字や画像を描画するプロセスにより、画面上に描写されなければならない。文書は、Pane211により提供される物理的なレイアウトに基づいて、Canvas210により画面上に描写される。
【0067】
Zone209に対応するCanvas210は、Editlet206を使用して生成される。文書のDOMは、Editlet206及びCanvas210を使用して編集される。元の文書の完全性を維持するために、Editlet206及びCanvas210は、Zone209における1以上のNodeに対応するFacetを使用する。これらのServiceは、Zone及びDOM内のNodeを直接操作しない。Facetは、Command207を利用して操作される。
【0068】
ユーザは、一般に、画面上のカーソルを移動させたり、コマンドをタイプしたりすることによって、画面と対話する。画面上の論理的なレイアウトを提供するCanvas2010は、このカーソル操作を受け付ける。Canvas2010は、対応するアクションをFacetに実行させることができる。この関係により、カーソルサブシステム204は、DocumentManager1081に対して、MVCパラダイムのコントローラ(C)として機能する。Canvas2010は、イベントを扱うタスクも有する。例えば、Canvas2010は、マウスクリック、フォーカス移動、及びユーザにより起こされた同様のアクションなどのイベントを扱う。
【0069】
3.Zone、Facet、Canvas及びPaneの間の関係の概要
文書処理システム内の文書は、少なくとも4つの観点から見ることができる。すなわち、1)文書処理システムにおいて文書の内容及び構造を保持するために用いられるデータ構造、2)文書の保全性に影響を与えずに文書の内容を編集する手段、3)文書の画面上の論理的なレイアウト、4)文書の画面上の物理的なレイアウト、である。Zone、Facet、Canvas及びPaneは、前述の4つの観点に相当する、文書処理システムのコンポーネントをそれぞれ表す。
【0070】
4.アンドゥサブシステム
上述したように、文書に対するいかなる変更(例えば編集)も取消可能であることが望ましい。例えば、ユーザが編集操作を実行し、次に、その変更の取消を決定したとする。図2に関連して、アンドゥサブシステム212は、文書管理部の取消可能なコンポーネントを実現する。UndoManager(アンドゥマネージャ:アンドゥ管理部)2121は、ユーザによって取り消される可能性のある全ての文書に対する操作を保持する。
【0071】
例えば、ユーザが、文書中の単語を別の単語に置換するコマンドを実行したとする。その後、ユーザは考え直し、元の単語に戻すことを決定したとする。アンドゥサブシステム212は、このような操作を支援する。UndoManager2121は、このようなUndoableEdit(アンドゥアブルエディット:取消可能な編集)2122の操作を保持する。
【0072】
5.カーソルサブシステム
前述したように、MVCのコントローラ部分は、カーソルサブシステム204を備えてもよい。カーソルサブシステム204は、ユーザから入力を受け付ける。これらの入力は、一般にコマンド及び/又は編集操作の性格を有している。したがって、カーソルサブシステム204は、DocumentManager1081に関連したMVCパラダイムのコントローラ(C)部分であると考えることができる。
【0073】
6.ビュー
前述したように、Canvas2010は、画面上に提示されるべき文書の論理的なレイアウトを表す。XHTML文書の例では、Canvasは、文書が画面上でいかに見えるかを論理的に表現したボックスツリー208を含んでもよい。このボックスツリー208は、DocumentManager1081に関連したMVCパラダイムのビュー(V)部分に含まれよう。
【0074】
C.ボキャブラリコネクション
文書処理システムの重要な特徴は、XML文書を、他の表現にマップして取り扱うことが可能で、かつ、マップした先の表現を編集すると、その編集が元のXML文書に整合性を保ちつつ反映される環境を提供することにある。
【0075】
マークアップ言語により記述された文書、例えばXML文書は、文書型定義により定義されたボキャブラリに基づいて作成されている。ボキャブラリは、タグのセットである。ボキャブラリは、任意に定義されてもよいため、無限に多くのボキャブラリが存在しうる。しかしながら、多数の可能なボキャブラリのそれぞれに対して専用の処理/管理環境を提供するのは現実的ではない。ボキャブラリコネクションは、この問題を解決する方法を提供する。
【0076】
例えば、文書は2以上のマークアップ言語により記述されてもよい。文書は、例えば、XHTML(eXtensible HyperText Markup Language)、SVG(Scalable Vector Graphics)、MathML(Mathematical Markup Language)、その他のマークアップ言語により記述されてもよい。換言すれば、マークアップ言語は、XMLにおけるボキャブラリやタグセットと同様に見なされてもよい。
【0077】
ボキャブラリは、ボキャブラリプラグインを用いて処理される。文書処理システムにおいてプラグインが利用不可能であるボキャブラリにより記述された文書は、プラグインが利用可能である別のボキャブラリの文書にマッピングすることにより表示される。この特徴により、プラグインが用意されていないボキャブラリの文書も適切に表示することができる。
【0078】
ボキャブラリコネクションは、定義ファイルを取得し、取得した定義ファイルに基づいて2つの異なるボキャブラリの間でマッピングする能力を含む。あるボキャブラリで記述された文書は、別のボキャブラリにマッピングすることができる。このように、ボキャブラリコネクションは、文書がマッピングされるボキャブラリに対応した表示/編集プラグインにより文書を表示し編集することを可能にする。
【0079】
上述したように、各文書は、一般に複数のノードを有するDOMツリーとして文書処理システムにおいて記述される。「定義ファイル」は、それぞれのノードについて、そのノードと他のノードとの対応を記述する。各ノードの要素値及び属性値が編集可能か否かが指定される。ノードの要素値又は属性値を用いた演算式が記述されてもよい。
【0080】
マッピングという特徴を利用して、定義ファイルを適用したデスティネーションDOMツリーが生成される。このように、ソースDOMツリーとデスティネーションDOMツリーの関係が構築され保持される。ボキャブラリコネクションは、ソースDOMツリーとデスティネーションDOMツリーの対応を監視する。ユーザから編集指示を受けると、ボキャブラリコネクションは、ソースDOMツリーの関連したノードを変更する。ソースDOMツリーが変更されたことを示す「ミューテーションイベント」が発行され、デスティネーションDOMツリーがそれに応じて変更される。
【0081】
ボキャブラリコネクションの使用により、少数のユーザのみに知られていた比較的マイナーなボキャブラリを、別のメジャーなボキャブラリに変換することができる。したがって、少数のユーザによって利用されるマイナーなボキャブラリであっても、文書を適切に表示し、望ましい編集環境を提供することができる。
【0082】
このように、文書処理システムの一部であるボキャブラリコネクションサブシステムは、文書の複数の表現を可能にする機能を提供する。
【0083】
図3は、ボキャブラリコネクション(VC:Vocabulary Connection)サブシステム300を示す。VCサブシステム300は、同一の文書の2つの代替表現の整合性を維持する方法を提供する。例えば、2つの表現は、同一文書の、2つの異なるボキャブラリによる表現であってもよい。前述したように、一方はソースDOMツリーであってもよく、他方はデスティネーションDOMツリーであってもよい。
【0084】
1.ボキャブラリコネクションサブシステム
ボキャブラリコネクションサブシステム300の機能は、VocabularyConnection301と呼ばれるプラグインを使用して、文書処理システムにおいて実現される。文書が表現されるVocabulary305ごとに、対応するプラグインが要求される。例えば、文書の一部がHTMLで記述され、残りがSVGで記述されている場合、HTMLとSVGに対応するボキャブラリプラグインが要求される。
【0085】
VocabularyConnectionプラグイン301は、適切なVocabulary305の文書に対応した、Zone209又はPane211のための適切なVCCanvas(ボキャブラリコネクションキャンバス)310を生成する。VocabularyConnection301を用いて、ソースDOMツリー内のZone209に対する変更は、変換ルールにより、別のDOMツリー306の対応するZoneに伝達される。変換ルールは、ボキャブラリコネクション記述子(Vocabulary Connection Descriptor:VCD)の形式で記述される。このようなソースDOMとデスティネーションDOMの間の変換に対応するそれぞれのVCDファイルについて、対応するVCManager(ボキャブラリコネクションマネージャ)302が生成される。
【0086】
2.Connector
Connector304は、ソースDOMツリーのソースノードと、デスティネーションDOMツリーのデスティネーションノードとを接続する。Connector304は、ソースDOMツリー中のソースノード、及びソースノードに対応するソース文書に対する修正(変更)を見るために作用する。そして、対応するデスティネーションDOMツリーのノードを修正する。Connector304は、デスティネーションDOMツリーを修正することができる唯一のオブジェクトである。例えば、ユーザは、ソース文書、及び対応するソースDOMツリーに対してのみ修正を行うことができる。その後、Connector304がデスティネーションDOMツリーに、対応する修正を行う。
【0087】
Connector304は、ツリー構造を形成するために、論理的にリンクされる。Connector304により形成されたツリーは、ConnectorTree(コネクタツリー)と呼ばれる。Connector304は、ConnectorFactory(コネクタファクトリ:コネクタ生成部)303と呼ばれるServiceを用いて生成される。ConnectorFactory303は、ソース文書からConnector304を生成し、それらをリンクしてConnectorTreeを形成する。VocabularyConnectionManager302は、ConnectorFactory303を保持する。
【0088】
前述したように、ボキャブラリは名前空間におけるタグのセットである。図示されるように、Vocabulary305は、VocabularyConnection301によって文書に対して生成される。これは、文書ファイルを解析し、ソースDOMとデスティネーションDOMの間の写像のための適切なVocabularyConnectionManager302を生成することにより行われる。さらに、Connectorを生成するConnectorFactory303と、Zone209を生成するZoneFactory205と、Zone内のノードに対応するCanvasを生成するEditlet206との間の適切な関係が作られる。ユーザがシステムから文書を処分又は削除するとき、対応するVocabularyConnectionManager302が削除される。
【0089】
Vocabulary305は、VCCanvas310を生成する。さらに、Connector304及びデスティネーションDOMツリー306が対応して生成される。
【0090】
ソースDOM及びCanvasは、それぞれ、モデル(M)及びビュー(V)に対応する。しかしながら、このような表現は、ターゲットのボキャブラリが画面上に描写可能である場合に限って意味がある。描写は、ボキャブラリプラグインにより行われる。ボキャブラリプラグインは、主要なボキャブラリ、例えば、XHTML、SVG、MathMLについて提供される。ボキャブラリプラグインは、ターゲットのボキャブラリに関連して使用される。これらは、ボキャブラリコネクション記述子を用いてボキャブラリ間でマッピングする方法を提供する。
【0091】
このようなマッピングは、ターゲットのボキャブラリが、マッピング可能で、画面上に描写される方法が予め定義されたものである場合にのみ意味がある。このようなレンダリング方法は、例えばXHTMLなどのように、W3Cなどの組織により定義された標準規格となっている。
【0092】
ボキャブラリコネクションが必要であるとき、VCCanvasが使用される。この場合、ソースのビューを直接生成することができないので、ソースのCanvasは生成されない。この場合、VCCanvasが、ConnectorTreeを使用して生成される。このVCCanvasは、イベントの変換のみを扱い、画面上の文書の描写を援助しない。
【0093】
3.DestinationZone、Pane、及びCanvas
上述したように、ボキャブラリコネクションサブシステムの目的は、同一の文書の2つの表現を同時に生成し保持することである。第2の表現も、DOMツリーの形式であり、これはデスティネーションDOMツリーとして既に説明した。第2の表現における文書を見るために、DestinationZone、Canvas及びPaneが必要である。
【0094】
VCCanvasが作成されると、対応するDestinationPane307が生成される。さらに、関連するDestinationCanvas308と、対応するBoxTree309が生成される。同様に、VCCanvas310も、ソース文書に対するPane211及びZone209に関連づけられる。
【0095】
DestinationCanvas308は、第2の表現における文書の論理的なレイアウトを提供する。特に、DestinationCanvas308は、デスティネーション表現における文書を描写するために、カーソルや選択のようなユーザインタフェイス機能を提供する。DestinationCanvas308に生じたイベントは、Connectorに供給される。DestinationCanvas308は、マウスイベント、キーボードイベント、ドラッグアンドドロップイベント、及び文書のデスティネーション(第2)表現のボキャブラリに特有なイベントを、Connector304に通知する。
【0096】
4.ボキャブラリコネクションコマンドサブシステム
ボキャブラリコネクション(VC)サブシステム300の要素として、ボキャブラリコネクション(VC)コマンドサブシステム313がある。ボキャブラリコネクションコマンドサブシステム313は、ボキャブラリコネクションサブシステム300に関連した命令の実行のために使用されるVCCommand(ボキャブラリコネクションコマンド)315を生成する。VCCommandは、内蔵のCommandTemplate(コマンドテンプレート)3131を使用して、及び/又は、スクリプトサブシステム314においてスクリプト言語を使用してスクラッチからコマンドを生成することにより、生成することができる。
【0097】
コマンドテンプレートには、例えば、「If」コマンドテンプレート、「When」コマンドテンプレート、「挿入(Insert)」コマンドテンプレートなどがある。これらのテンプレートは、VCCommandを作成するために使用される。
【0098】
5.XPathサブシステム
XPathサブシステム316は、文書処理システムの重要な構成であり、ボキャブラリコネクションの実現を支援する。Connector304は、一般にxpath情報を含む。上述したように、ボキャブラリコネクションのタスクの1つは、ソースDOMツリーの変化をデスティネーションDOMツリーに反映させることである。xpath情報は、変更/修正を監視されるべきソースDOMツリーのサブセットを決定するために用いられる1以上のxpath表現を含む。
【0099】
6.ソースDOMツリー、デスティネーションDOMツリー、及びConnectorTreeの概要
ソースDOMツリーは、別のボキャブラリに変換される前のボキャブラリで文書を表現したDOMツリー又はZoneである。ソースDOMツリーのノードは、ソースノードと呼ばれる。
【0100】
それに対して、デスティネーションDOMツリーは、ボキャブラリコネクションに関連して前述したように、同一の文書を、マッピングにより変換された後の異なるボキャブラリで表現したDOMツリー又はZoneである。デスティネーションDOMツリーのノードは、デスティネーションノードと呼ばれる。
【0101】
ConnectorTreeは、ソースノードとデスティネーションノードの対応を表すConnectorに基づく階層的表現である。Connectorは、ソースノードと、ソース文書になされた修正を監視し、デスティネーションDOMツリーを修正する。Connectorは、デスティネーションDOMツリーを修正することを許された唯一のオブジェクトである。
【0102】
D.文書処理システムにおけるイベントフロー
実用のためには、プログラムはユーザからのコマンドに応答しなければならない。イベントは、プログラム上で実行されたユーザアクションを記述し実行する方法である。多くの高級言語、例えばJava(登録商標)は、ユーザアクションを記述するイベントに頼っている。従来、プログラムは、ユーザアクションを理解し、それを自身で実行するために、積極的に情報を集める必要があった。これは、例えば、プログラムが自身を初期化した後、ユーザが画面、キーボード、マウスなどでアクションを起こしたときに適切な処理を講じるために、ユーザのアクションを繰り返し確認するループに入ることを意味する。しかしながら、このプロセスは扱いにくい。さらに、それは、ユーザが何かをするのを待つ間、CPUサイクルを消費してループするプログラムを必要とする。
【0103】
多くの言語が、異なるパラダイムを採用することにより、これらの問題を解決している。そのうちの一つは、現代の全てのウィンドウシステムの基礎となっている、イベントドリブンプログラミングである。このパラダイムでは、全てのユーザアクションは、「イベント」と呼ばれる抽象的な事象の集合に属する。イベントは、十分詳細に、特定のユーザアクションを記述する。プログラムがユーザにより生成されたイベントを積極的に収集するのではなく、監視すべきイベントが生じたときに、システムがプログラムに通知する。この方法によりユーザとの対話を扱うプログラムは「イベントドリブン」であると言われる。
【0104】
これは、多くの場合、全てのユーザにより生成されたイベントの基本特性を獲得する「Event(イベント)」クラスを使用して扱われる。
【0105】
文書処理システムは、自身のイベント、及びこれらのイベントを扱う方法を定義して使用する。いくつかの型のイベントが使用される。例えば、マウスイベントは、ユーザのマウスアクションから起こるイベントである。マウスを含むユーザアクションは、Canvas210によって、マウスイベントに渡される。このように、Canvasは、システムのユーザによる相互作用の最前部にあると言える。必要であれば、最前部にあるCanvasは、そのイベントに関連した内容を子へ渡す。
【0106】
それに対して、キーストロークイベントは、Canvas210から流れる。キーストロークイベントは、即時的なフォーカスを有する。すなわち、それは、いかなる瞬間でも作業に関連する。Canvas210上に入力されたキーストロークイベントは、その親に渡される。キー入力は、文字列挿入を扱うことが可能な、異なるイベントによって処理される。文字列の挿入を扱うイベントは、キーボードを使用して文字が挿入されたときに発生する。他の「イベント」は、例えば、ドラッグイベント、ドロップイベント、マウスイベントと同様に扱われる他のイベントを含む。
【0107】
1.ボキャブラリコネクション外のイベントの取り扱い
イベントは、イベントスレッドを用いて渡される。Canvas210は、イベントを受け取ると、その状態を変更する。必要であれば、Command1052がCanvas210によりCommandQueue1053にポストされる。
【0108】
2.ボキャブラリコネクション内のイベントの取り扱い
VocabularyConnectionプラグイン301を用いて、DestinationCanvasの一例であるXHTMLCanvas1106は、発生したイベント、例えば、マウスイベント、キーボードイベント、ドラッグアンドドロップイベント、及びボキャブラリに特有のイベントなどを受け取る。これらのイベントは、Connector1104に通知される。より詳細には、図11に図示されるように、VocabularyConnectionプラグイン301内のイベントフローは、SourcePane1103、VCCanvas1104、DestinationPane1105、DestinationCanvasの一例であるDestinationCanvas1106、デスティネーションDOMツリー及びConnectorTreeを通過する。
【0109】
E.ProgramInvoker及びProgramInvokerと他の構成との関係
ProgramInvoker103及びそれと他の構成との関係は、図4(a)に更に詳細に示される。ProgramInvoker103は、文書処理システムを開始するために実行される実行環境中の基本的なプログラムである。図1(b)に図示されるように、UserApplication106、ServiceBroker1041、CommandInvoker1051、及びResource109は、全てProgramInvoker103に接続される。前述したように、アプリケーション102は、実行環境中で実行されるコンポーネントである。同様に、ServiceBroker1041は、システムに様々な機能を加えるプラグインを管理する。他方、CommandInvoker1051は、ユーザにより提供される命令を実行して、コマンドを実行するために使用されるクラス及びファンクションを保持する。
【0110】
1.プラグイン及びサービス
ServiceBroker1041について、図4(b)を参照して更に詳細に説明する。前述したように、ServiceBroker1041は、システムに様々な機能を追加するプラグイン(及び関連するサービス)を管理する。Service1042は、文書処理システムに特徴を追加又は変更可能な最も下の層である。「Service」は、ServiceCategory401とServiceProvider402の2つの部分からなる。図4(c)に図示されるように、1つのServiceCategory401は、複数の関連するServiceProvider402を持ちうる。それぞれのServiceProviderは、特定のServiceCategoryの一部または全部を実行するように作用する。ServiceCategory401は、他方では、Serviceの型を定義する。
【0111】
Serviceは、1)文書処理システムに特定の特色を提供する「特色サービス」、2)文書処理システムにより実行されるアプリケーションである「アプリケーションサービス」、3)文書処理システムの全体にわたって必要な特色を提供する「環境サービス」、の3つの型に分類することができる。
【0112】
Serviceの例は、図4(d)に示される。アプリケーションServiceのCategoryにおいては、システムユーティリティが対応するServiceProviderの例である。同様に、Editlet206はCategoryであり、HTMLEditlet及びSVGEditletは対応するServiceProviderである。ZoneFactory205は、Serviceの別のCategoryであり、対応するServiceProvider(図示せず)を有する。
【0113】
プラグインは、文書処理システムに機能性を加えると既に説明したが、いくつかのServiceProvider402及びそれらに関連するクラスからなるユニットと見なされてもよい。各プラグインは、宣言ファイルに記述された依存性及びServiceCategory401を有する。
【0114】
2.ProgramInvokerとアプリケーションとの関係
図4(e)は、ProgramInvoker103とUserApplication106との関係についての更なる詳細を示す。必要な文書やデータなどは、ストレージからロードされる。必要なプラグインは、全てServiceBroker1041上にロードされる。ServiceBroker1041は、全てのプラグインを保持し管理する。プラグインは、システムに物理的に追加することができ、又、その機能はストレージからロードすることができる。プラグインの内容がロードされると、ServiceBroker1041は、対応するプラグインを定義する。つづいて、対応するUserApplication106が生成され、実行環境101にロードされ、ProgramInvoker103にアタッチされる。
【0115】
F.アプリケーションサービスと環境との関係
図5(a)は、ProgramInvoker103上にロードしたアプリケーションサービスの構成についての更なる詳細を示す。コマンドサブシステム105のコンポーネントであるCommandInvoker1051は、ProgramInvoker103内のCommand1052を起動又は実行する。Command1052は、文書処理システムにおいて、XMLなどの文書を処理し、対応するXMLDOMツリーを編集するために用いられる命令である。CommandInvoker1051は、Command1052を実行するために必要なクラス及びファンクションを保持する。
【0116】
ServiceBroker1041も、ProgramInvoker103内で実行される。UserApplication106は、ユーザインタフェイス107及びCoreComponent110に接続される。CoreComponent110は、全てのPaneの間で文書を共有する方法を提供する。CoreComponent110は、さらにフォントを提供し、Paneのためのツールキットの役割を果たす。
【0117】
図5(a)及び図5(b)は、Frame1071、MenuBar1072、及びStatusBar1073の関係を示す。
【0118】
G.アプリケーションコア
図6(a)は、全ての文書、及び文書の一部及び文書に属するデータを保持するアプリケーションコア110についての更なる説明を提供する。CoreComponent110は、Document1082を管理するDocumentManager1081にアタッチされる。DocumentManager1081は、文書処理システムに関連づけられたメモリに格納される全てのDocument1082の所有者である。
【0119】
画面上の文書の表示を容易にするために、DocumentManager1081はRootPane1084にも接続される。ClipBoard1086、SnapShot1087、Drag&Drop601、及びOverlay602の機能も、アプリケーションコアにアタッチされる。
【0120】
SnapShot1087は、図6(a)で示したように、アプリケーションの状態を元に戻すために使用される。ユーザがSnapShot1087を起動したとき、アプリケーションの現状が検知され、格納される。その後、アプリケーションの状態が別の状態に変わるとき、格納された状態の内容は保存される。SnapShotは、図6(b)に図示される。動作において、アプリケーションがあるURLから他へ移動するときに、前に戻る動作及び先に進む動作をシームレスに実行可能とするために、SnapShotは以前の状態を記憶する。
【0121】
H.DocumentManager内における文書の構成
図7(a)は、DocumentManager1081の更なる説明と、DocumentManagerにおいて文書が構成され保持される様子を示す。図1(b)に示したように、DocumentManager1081は、Document1082を管理する。図7(a)に示される例において、複数のDocumentのうちの1つはRootDocument(ルート文書)701であり、残りの文書はSubDocument(サブ文書)702である。DocumentManager1081は、RootDocument701に接続され、RootDocument701は、全てのSubDocument702に接続される。
【0122】
図2及び図7(a)に示すように、DocumentManager1081は、全ての文書1082を管理するオブジェクトであるDocumentContainer203に結合される。DOMService703及びIOManager704を含むツールキット201(例えばXMLツールキット)の一部を形成するツールも、DocumentManager1081に供給される。再び図7(a)を参照して、DOMService703は、DocumentManager1081により管理される文書に基づいたDOMツリーを生成する。各Document705は、それがRootDocument701であってもSubDocument702であっても、対応するDocumentContainer203によって管理される。
【0123】
図7(b)は、文書A−Eが階層的に配置される様子を示す。文書AはRootDocumentである。文書B−Dは、文書AのSubDocumentである。文書Eは、文書DのSubDocumentである。図7(c)では、これと同じ文書の階層が画面上に表示された例を示す。RootDocumentである文書Aは、基本フレームとして表示される。文書AのSubDocumentである文書B−Dは、基本フレームAの中のサブフレームとして表示される。文書DのSubDocumentである文書Eは、サブフレームDのサブフレームとして画面に表示される。
【0124】
再び図7(a)を参照して、UndoManager(アンドゥマネージャ:アンドゥ管理部)706及びUndoWrapper(アンドゥラッパー)707は、それぞれのDocumentContainer203に対して生成される。UndoManager706及びUndoWrapper707は、取消可能なコマンドを実行するために使用される。この特徴を使用することにより、編集操作を使用して文書に対して実行された変更を取り消すことができる。SubDocumentの変更は、RootDocumentとも密接な関係を有する。アンドゥ操作は、階層内の他の文書に影響する変更を考慮に入れて、例えば、図17(c)に示されるような連鎖状の階層における全ての文書の間で整合性が維持されることを保証する。
【0125】
UndoWrapper707は、DocumentContainer203内のSubDocumentに関連するアンドゥオブジェクトをラップし、それらをRootDocumentに関連するアンドゥオブジェクトに結合させる。UndoWrapper707は、UndoableEditAcceptor(アンドゥアブルエディットアクセプタ:アンドゥ可能編集受付部)709に利用可能なアンドゥオブジェクトを収集させる。
【0126】
UndoManager706及びUndoWrapper707は、UndoableEditAcceptor708及びUndoableEditSource(アンドゥアブルエディットソース)708に接続される。当業者には理解されるように、Document705がUndoableEditSource708であってもよく、取消可能な編集オブジェクトのソースであってもよい。
【0127】
I.アンドゥコマンド及びアンドゥフレームワーク
図8(a)及び図8(b)は、アンドゥフレームワーク及びアンドゥコマンドについて更なる詳細を提供する。図8(a)に示されるように、UndoCommand801、RedoCommand802、及びUndoableEditCommand803は、図1(b)に示したようにCommandInvoker1051に積むことができるコマンドであり、順に実行される。UndoableEditCommand803は、UndoableEditSource708及びUndoableEditAcceptor709に更にアタッチされる。「foo」EditCommand803及び「bar」EditCommand804は、UndoableEditCommandの例である。
【0128】
1.UndoableEditCommandの実行
図8(b)は、UndoableEditCommandの実行を示す。まず、ユーザが編集コマンドを使用してDocument705を編集すると仮定する。第1ステップS1では、UndoableEditAcceptor709が、Document705のDOMツリーであるUndoableEditSource708にアタッチされる。第2ステップS2では、ユーザにより発行されたコマンドに基づいて、Document705がDOMのAPIを用いて編集される。第3ステップS3では、ミューテーションイベントのリスナーが、変更がなされたことを通知される。すなわち、このステップでは、DOMツリーの全ての変更を監視するリスナーが編集操作を検知する。第4ステップS4では、UndoableEditがUndoManager706のオブジェクトとして格納される。第5ステップS5では、UndoableEditAcceptor709がUndoableEditSource708からデタッチされる。UndoableEditSource708は、Document705自身であってもよい。
【0129】
J.システムへの文書のロードに関する手順
上記のサブセクションでは、システムの様々なコンポーネント及びサブコンポーネントについて説明した。以下、これらのコンポーネントの使用に関する方法論について説明する。図9は、文書処理システムに文書がロードされる様子の概要を示す。それぞれのステンプは、図14−18において、特定の例に関連して詳述される。
【0130】
簡単には、文書処理システムは、文書に含まれるデータからなるバイナリデータストリームからDOMを生成する。ApexNode(エイペックスノード:頂点ノード)が、注目対象でありZoneに属する文書の一部のために生成される。つづいて、対応するPaneが特定される。特定されたPaneは、ApexNode及び物理的な画面表面からZone及びCanvasを生成する。Zoneは、次に、それぞれのノードにFacetを生成し、それらに必要とされる情報を提供する。Canvasは、DOMツリーから、ノードをレンダリングするためのデータ構造を生成する。
【0131】
図19(a)で示すように、SHTMLやSVGコンテンツの両方で記述された複雑な文書はストレージ901からステップ0としてロードされる。その文書のDOMツリー902が作成される。DOMツリー902が一つの頂点ノード905を有し、そして木が他の枝に降りるように、境界では2方向に分かれる。他のボキャブラリ、例えばSVGの一つの頂点ノードもこれに従う。複雑な文書をこのように表現することは、文書を描写し、最終的に表示する方法を理解するのに有益である。
【0132】
次に、文書を保持するための、対応するDocumentContainer903が生成される。DocumentContainer903は、DocumentManager904にアタッチされる。DOMツリーは、ルートノードと、ときには複数のセカンダリノードを含む。
【0133】
一般に、このような文書は、テキスト及びグラフィクスの双方を含む。したがって、DOMツリーは、例えば、XHTMLサブツリーだけでなくSVGサブツリーを有してもよい。XHTMLサブツリーは、XHTMLのApexNode905を有する。同様に、SVGサブツリーは、SVGのApexNode906を有する。
【0134】
ステップ1では、ApexNode906が、画面の論理的なレイアウトであるPane907にアタッチされる。ステップ2では、Pane907は、PaneOwner(ペインオーナー:ペインの所有者)908であるCoreComponentに、ApexNode906のためのZoneFactoryを要求する。ステップ3では、PaneOwner908は、ZoneFactoryと、ApexNode906のためのCanvasFactoryであるEditletとを返す。
【0135】
ステップ4では、Pane907がZone909を生成する。Zone909はPane907にアタッチされる。ステップ5では、Zone909がそれぞれのノードに対してFacetを生成し、対応するノードにアタッチする。ステップ6では、Pane907がCanvas910を生成する。Canvas910はPane907にアタッチされる。Canvas910には様々なCommandが含まれる。ステップ7では、Canvas910が文書を画面にレンダリングするためのデータ構造を構築する。XHTMLの場合、これはボックスツリー構造を含む。
【0136】
1.ZoneのMVC
図9(b)は、MVCパラダイムを用いてZoneの構成の概要を示す。この場合、Zone及びFacetは文書に関連した入力であるから、モデル(M)はZone及びFacetを含む。Canvasと、文書を画面にレンダリングするためのデータ構造体は、ユーザが画面上に見る出力であるから、ビュー(V)はCanvas及びデータ構造体に対応する。Commandは、文書とその様々な関係に対して制御操作を実行するので、コントロール(C)はCanvasに含まれるCommandを含む。
【0137】
K.文書の表現
図10を用いて、文書及びその様々な表現の例について以下に説明する。この例で使用される文書は、テキストと画像の双方を含む。テキストは、XHTMLを用いて表され、画像は、SVGを用いて表される。図10は、文書のコンポーネント及び対応するオブジェクトの関係のMVC表現を詳細に示す。この例において、Document1001は、Document1001を保持するDocumentContainer1002にアタッチされる。文書はDOMツリー1003により表現される。DOMツリーは、ApexNode1004を含む。
【0138】
ApexNodeは、黒丸で表される。頂点でないノードは、白丸で表される。ノードを編集するために用いられるFacetは、三角形で表され、対応するノードにアタッチされる。文書がテキストと画像を有するので、この文書のDOMツリーは、XHTML部分とSVG部分を含む。ApexNode1004は、XHTMLサブツリーの最上のノードである。これは、文書のXHTML部分の物理的な表現のための最上PaneであるXHTMLPane1005にアタッチされる。ApexNode1004は、文書のDOMツリーの一部であるXHTMLZone1006にもアタッチされる。
【0139】
Node1004に対応するFacetも、XHTMLZone1006にアタッチされる。XHTMLZone1006は、XHTMLPane1005にアタッチされる。XHTMLEditletは、文書の論理的な表現であるXHTMLCanvas1007を生成する。XHTMLCanvas1007は、XHTMLPane1005にアタッチされる。XHTMLCanvas1007は、Document1001のXHTMLコンポーネントのためのBoxTree1009を生成する。文書のXHTML部分を保持し描画するために必要な様々なCommand1008も、XHTMLCanvas1005に追加される。
【0140】
同様に、文書のSVGサブツリーのApexNode1010は、文書のSVGコンポーネントを表現するDocumentのDOMツリーの一部であるSVGZone1011にアタッチされる。ApexNode1010は、文書のSVG部分の物理的な表現の最上のPaneであるSVGPane1013にアタッチされる。文書のSVG部分の論理的な表現を表すSVGCanvas1012は、SVGEditletにより生成され、SVGPane1013にアタッチされる。画面上に文書のSVG部分をレンダリングするためのデータ構造及びコマンドは、SVGCanvasにアタッチされる。例えば、このデータ構造は、図示されるように、円、線、長方形などを含んでもよい。
【0141】
図10に関連して説明された文書例の表現の一部について、図11(a)、図11(b)に関連して、前述したMVCパラダイムを用いて更に説明する。図11(a)は、文書1001のXHTMLコンポーネントにおけるMVの関係を簡略化して示す。モデルは、Document1001のXHTMLコンポーネントのためのXHTMLZone1103である。XHTMLZoneのツリーには、いくつかのNode及びそれらに対応するFacetが含まれる。対応するXHTMLZone及びPaneは、MVCパラダイムのモデル(M)部分の一部である。MVCパラダイムのビュー(V)部分は、Document1001のHTMLコンポーネントの、対応するXHTMLCanvas1102及びBoxTreeである。文書のXHTML部分は、Canvasと、それに含まれるCommandを使用して画面に描写される。キーボードやマウス入力などのイベントは、図示されるように、逆方向へ進む。
【0142】
SourcePaneは、更なる機能、すなわち、DOMの保有者としての役割を有する。図11(b)は、図11(a)に示したDocument1001のコンポーネントに対するボキャブラリコネクションを提供する。DOMホルダーとして機能するSourcePane1103は、文書のソースDOMツリーを含む。ConnectorTreeは、ConnectorFactoryにより生成され、デスティネーションDOMの保有者としても機能するDestinationPane1105を生成する。DestinationPane1105は、XHTMLDestinationCanvas1106としてボックスツリーの形式でレイアウトされる。
【0143】
L.プラグインサブシステム、ボキャブラリコネクション、及びコネクタの関係
図12(a)−(c)は、それぞれ、プラグインサブシステム、ボキャブラリコネクション、及びConnectorに関連する更なる詳細を示す。プラグインサブシステムは、文書処理システムに機能を追加又は交換するために用いられる。プラグインサブシステムは、ServiceBroker1041を含む。図12(a)で示すように、「My Own XML vocabulary」はVcBasePlugInとして提供され、そのプラグインには、My Own XML ConnectorFactoryTree及びボキャブラリ(ZoneFactoryBuilder)を含む。ServiceBroker1041にアタッチされるZoneFactoryService1201は、文書の一部に対するZoneを生成する。EditletService1202も、ServiceBrokerにアタッチされる。EditletService1202は、Zone中のNodeに対応するCanvasを生成する。
【0144】
ZoneFactoryの例は、XHTMLZone及びSVGZoneをそれぞれ生成するXHTMLZoneFactory1211及びSVGZoneFactory1212である。文書例に関連して前述したように、文書のテキストコンポーネントは、XHTMLZoneを生成することにより表現されてもよいし、画像はSVGZoneを用いて表現されてもよい。EditletServiceの例は、XHTMLEditlet1221及びSVGEditlet1222を含む。
【0145】
図12(b)は、ボキャブラリコネクションに関連する更なる詳細を示す。ボキャブラリコネクションは、前述したように、文書処理システムの重要な特徴であり、2つの異なる方法で文書の整合のとれた表現及び表示を可能とする。ConnectorFactory303を保持するVCManager302は、ボキャブラリコネクションサブシステムの一部である。図12(c)で示すように、ConnectorFactory303は、文書のConnector304を生成する。前述したように、Connectorは、ソースDOM中のノードを監視し、2つの表現の間の整合性を維持するために、デスティネーションDOM中のノードを修正する。
【0146】
Template317は、いくつかのノードの変換ルールを表す。ボキャブラリコネクション記述子(VCD)ファイルは、特定のパス又はルールを満たす要素又は要素の集合を他の要素に変換するいくつかのルールを表すTemplateのリストである。Template317及びCommandTemplate3131は、全てVCManager302にアタッチされる。VCManagerは、VCDファイル中の全てのセクションを管理するオブジェクトである。1つのVCDファイルに対して、1つのVCManagerオブジェクトが生成される。
【0147】
図12(c)は、Connectorに関連する更なる詳細を提供する。ConnectorFactory303は、ソース文書からConnectorを生成する。ConnectorFactory303は、Vocabulary、Template、及びElementTemplateにアタッチされ、それぞれ、VocabularyConnector、TemplateConnector、ElementConnectorを生成ずる。
【0148】
VCManager302は、ConnectorFactory303を保持する。Vocabularyを生成するために、対応するVCDファイルが読み込まれる。こうして、ConnectorFactory303が生成される。このConnectorFactory303は、Zoneを生成するZoneFactory及びCanvasを生成するEditletに関連する。
【0149】
つづいて、ターゲットボキャブラリのEditletServiceが、VCCanvasを生成する。VCCanvasも、ソースDOMツリー又はZoneにおけるApexNodeのConnectorを生成する。必要に応じて、子のConnectorが再帰的に生成される。ConnectorTreeは、VCDファイル中のテンプレートの集合により生成される。
【0150】
テンプレートは、マークアップ言語の要素を他の要素に変換するためのルールの集合である。例えば、各テンプレートは、ソースDOMツリー又はZoneにマッチされる。適切にマッチした場合には、頂点Connectorが生成される。例えば、テンプレート「A/*/D」は、間にどんなノードがあるかに関係なく、ノードAで始まりノードDで終わる全ての枝に合致する。同様に、「//B」は、ルートからの全ての「B」ノードに一致する。
【0151】
M.ConnectorTreeに関係するVCDファイルの例
特定の文書と関係する処理を説明する例を続ける。ドキュメントタイトルのある「MySampleXML」というタイトルの文書が文書処理システムにロードされる。図13は、「MySampleXML」ファイルのための、VCManager及びConnectorFactoryTreeを用いたVCDスクリプトの例を示す。スクリプトファイル中のボキャブラリセクション、テンプレートセクションと、VCManagerにおける対応するコンポーネントが示される。タグ「vcd:vocabulary」において、属性「match」は「sample:root」、「label」は「MySampleXML」、「call−template」は「sample template」となっている。
【0152】
この例では、Vocabularyは、「MySampleXML」のVCManagerにおいて「sample:root」として頂点要素を含む。対応するUIラベルは、「MySampleXML」である。テンプレートセクションにおいて、タグは「vcd:template」であり、名前は「sample:template」である。
【0153】
N.ファイルがシステムにロードされる方法の詳細な例
図14−18は、文書「MySampleXML」のロードについての詳細な記述を示す。図14(a)に示されるステップ1では、文書がストレージ1405からロードされる。DOMServiceは、DocumentContainer1401と対応するDOMツリー及びDocumentManager1406を生成する。DocumentContainer1401は、DocumentManager1406にアタッチされる。文書は、XHTML及びMySampleXMLのサブツリーを含む。XHTMLのApexNode1403は、タグ「xhtml:html」が付されたXHTMLの最上のノードである。「MySampleXML」のApexNode1404は、タグ「sample:root」が付された「MySampleXML」の最上ノードである。
【0154】
図14(b)に示されるステップ2では、RootPaneが文書のXHTMLZone、Facet、及びCanvasを生成する。Pane1407、XHTMLZone1408、XHTMLCanvas1409、及びBoxTree1410が、ApexNode1403に対応して生成される。
【0155】
図14(c)に示されるステップ3では、XHTMLZoneが知らないタグ「sample:root」を発見し、HTMLCanvasの領域からSubPaneを生成する。
【0156】
図15に示されるステップ4では、SubPaneが「sample:root」を扱うことができ、適切なZoneを生成可能なZoneFactoryを得る。このZoneFactoryは、ZoneFactoryを実行可能なVocabulary内にある。それは、「MySampleXML」のVocabularySectionの内容を含む。
【0157】
図16に示されるステップ5では、「MySampleXML」に対応するVocabularyがDefaultZone1601を生成する。対応するEditletが生成され、対応するCanvasを生成するためにSubPane1501が提供される。Editletは、VCCanvasを生成する。そして、それはTemplateSectionを呼ぶ。ConnectorFactoryTreeも含まれている。ConnectorFactoryTreeは、ConnectorTreeとなる全てのConnectorを生成する。文書のXHTMLコンテンツに関係するApexNodeに対するBoxTreeとXHTMLCanvas同様に、RootPaneとXHTMLZoneとの関係も前述の内容からすぐに理解されよう。
【0158】
図17(a)に示されるステップ6では、ソースDOMツリー間の対応をもとに、各ConnectorがデスティネーションDOMオブジェクトを生成する。コネクタのうちのいくつかはxpath情報を含んでいる。xpath情報は、変更/修正を監視する必要のあるソースDOMツリーの部分集合を決定するために使用される1以上のxpath表現を含む。
【0159】
図17(b)に示されるステップ7では、ソース・VC・ディスティネーションの関係に従って、ボキャブラリは、ソースDOMのペインからデスティネーションDOMツリーのDestinationPaneを作成する。これは、SourcePaneに基づいてなされる。デスティネーションツリーのApexNodeは、DestinationPane及び対応するZoneにアタッチされる。DestinationPaneは、DestinationCanvasを生成し、文書をデスティネーションのフォーマットでレンダリングするためのデータ構造及びコマンドを構築する、自身のEditletを提供される。
【0160】
図18(a)は、対応するソースノードを持たず、デスティネーションツリーにのみ存在するノード上でイベントが発生したときのフローを示す。マウスイベント、キーボードイベントなど、Canvasが取得したイベントは、デスティネーションツリーを通過して、ElementTemplateConnectorに伝達される。ElementTemplateConnectorは対応するソースノードを持たないので、伝達されたイベントはソースノードに対する編集操作ではない。ElementTemplateConnectorは、伝達されたイベントがCommandTemplateに記述されたコマンドに合致すれば、それに対応するActionを実行する。合致するコマンドがなければ、ElementTemplateConnectorは、伝達されたイベントを無視する。
【0161】
図18(b)は、TextOfConnectorによりソースノードに対応づけられているデスティネーションツリーのノード上でイベントが発生したときのフローを示す。TextOfConnectorは、ソースDOMツリーのXPathで指定されたノードからテキストノードを取得して、デスティネーションDOMツリーのノードにマッピングする。マウスイベント、キーボードイベントなど、Canvasが取得したイベントは、デスティネーションツリーを通過して、TextOfConnectorに伝達される。TextOfConnectorは、伝達されたイベントを、対応するソースノードの編集コマンドにマッピングし、Queue1053に積む。編集コマンドは、Facetを介して実行されるDOMのAPIコールの集合である。キューに積まれたコマンドが実行されると、ソースノードが編集される。ソースノードが編集されると、ミューテーションイベントが発行され、リスナーとして登録されたTextOfConnectorにソースノードの変更が通知される。TextOfConnectorは、ソースノードの変更を、対応するデスティネーションノードに反映させるように、デスティネーションツリーを再構築する。このとき、TextOfConnectorを含むテンプレートに、「for each」や「for loop」などの制御文が含まれている場合、ConnectorFactoryがこの制御文を再評価し、TextOfConnectorを再構築した後、デスティネーションツリーが再構築される。
【0162】
(取消操作の詳細)
本発明は、XMLなどのマークアップ言語を用いて用意された文書における変更を、プログラマがコマンドを直接取り消す操作を実装したり、DOM構造を自身で編集し全ての変更を監視可能に設けたりするよりも、効率的な方式で取り消す機能に関する。
【0163】
開示された文書処理/管理システムにおいて取消機能を提供するための効率的な方法及び構成の必要性により、図8(a)及び図8(b)に関連して既に説明した第1の方法が導かれた。ユーザにより発行されたコマンドに対応する文書705の編集は、ミューテーションイベント及びDOMに対する変更として監視され、取消可能な編集として識別されて、後のアクセスのためにアンドゥ管理部706に格納される。別の方法も、DOMツリーを監視し、DOMツリー自身を、取消可能なコマンドにより受信される取消可能な編集を発行し、蓄積及び後のアクセスのためにアンドゥ管理部に送信するオブジェクトとして用いることにより実現される。いずれの場合も、DOMツリーとして文書を表現することに関連して2つの方法を説明したが、開示された技術はツリー又はグラフとして表現可能な任意の情報に適用可能であるから、本発明はDOMツリー構造の使用に限られない。
【0164】
取消操作を実現するための最初の方法に関連して、図7(a)、8(a)、8(b)、及び11(b)に関連して既に説明したように、図3に示したconnectXpathの機能であるXpathを用いて、コネクタがソースノードを監視する。Xpathは、テンプレートマッチングプロセスにおいてテンプレートを用いてソースノードを監視する。任意の種類のテンプレートマッチングがソースDOMツリーのノードの部分集合を監視するための用いられてもよい。実際の例において、DOMツリーの部分集合は、DOMツリーの部分集合を監視し、部分集合がテンプレートにマッチするか否かを判定する基本的なテンプレート方式を用いて監視されてもよい。監視されたDOMツリーの部分集合における任意の変更が検出されると、監視された部分集合における変更を反映するために、DOMツリーの表現が自動的に更新される。例えば、DOMに対する変更を監視することに関連して既に説明したように、テンプレート「A/*/D」は、間のノードが何であるかに関わらず、ノード「A」で始まり、ノード「D」で終わるツリーの全ての枝を監視する。同様に、「//B」は、ルートからの全てのノード「B」に対応する。
【0165】
connectXpathにより監視されたノードの集合内のノードに変更が生じたとき、DOM構造内の変更イベントのリスナーがこれを受信する。ミューテーションイベントリスナーは、変更イベントを識別すると、「ミューテーションイベント」通知を送信する。connectXpat(図17参照)hは、このミューテーションイベントを取得する。connectXpathは、ミューテーションイベントを評価する。監視されたノードに変更が生じると、値の変更を受信する1以上の機能が通知される。監視されたノードに影響を与える他のノードが存在する場合、これらのノードもリスナーに提供される。
【0166】
図19(a)は、connectXpathがVCとともに用いられた、変更ベースの取消操作の実装例を示す。編集される文書は、DOM1910により表現される。DOM1910は、ノードAを頂点ノードとする複数のリンクされたノードA、B、C、D、及びEを有する。編集の結果、波線により示されるように、別のノードBがノードAに追加される。VCDはルートからそれぞれの元の「B」ノードの表現を生成するように記述されている。この場合、この場合、connectXpathは、テンプレート「//B」のパスを充足する全てのノードを監視する。図から分かるように、実際のDOMには、2つの「B」ノード1901、1902がある。第3の「B」ノード1903が編集されたDOMに追加される。connectXpath1905はDOMに対するこの変更1904をピックアップし、新規に生成された「B」ノードにマップする。ミューテーションイベント1904も、取消編集オブジェクトを生成し登録するために、アンドゥ管理部1940に提供される。
【0167】
必要であれば、適切なミューテーションイベントのみが実行されるように、文書の特定の部分が監視され、抽出される。
【0168】
図19(b)は、DOMの変更が取消可能な編集の生成及び保存をもたらす別の方式の概略的表現である。図1(b)において、コマンドシステム105に関連して既に説明したように、本発明によれば、DOMに対する操作は、ユーザが定義可能なDOM操作である「コマンド」にカプセル化される。コマンドが実行されると、DOMはなされた変更のそれぞれについて「取消可能な編集」を発行し、UndoableCommandサービスは「取消可能な編集」を検出して、対応する取消操作を生成する。実行が終わると、まとめられた取消可能な編集が取消のためにアンドゥ管理部に登録される。
【0169】
再び図19(b)を参照して、ノードAを頂点ノードとする複数のリンクされたノードA、B、C、D、及びEを有するDOM1910のツリー状の表現が設けられる。ノードAにつながる波線により示されるようにノードBを変更する編集の結果、変更を指示した複数のUndoableCommand1920のうちの1つが変更の実行を検知し、UndoableEdit1930を生成させる。UndoableEdit1930は、与えられた変更を取り消す必要が生じたときのアクセスのために、アンドゥ管理部1930(図2のUndoManager2121に対応する)に格納される。編集は、文書のテキスト、図、チャート、画像、又は音楽及び映像要素のいずれであってもよい。
【0170】
図20及び21は、複合取消編集操作の図解及びチャート形式の流れをそれぞれ提供する。アンドゥプロセス2000、2100によれば、第1のフローステップ2110において、1以上のインスタンス2011、2012において発行された種々のコマンドのいすれかによるDOM2005の操作又は変更DOM2005の変更のトリガとなる。DOMの操作は、このようなコマンド、例えば、図7(a)、8(a)、及び8(b)におけるUndoableEditAcceptor708に対応するUndoableCommand2030を介して発行されなければならない。このような変更は、ステップ2120において、DOM2005による1以上のUndoableEdit2025、2026などの生成をもたらす。それぞれのUndoableEdit2025、2026などは、UndoableCommandプロセス2030によりピックアップされる1以上の取消可能な編集オブジェクトに関連付けられ、ステップ2130において、発行されたコマンドの実行が終了するまで収集される。編集は細かい粒度で発行され、DOMに対する意味のある操作の集合を形成するように収集されなければならないので、複数の取消可能な編集オブジェクトの収集が必要である。図7(a)に関連して、この収集操作はUndoWrapper707により実行される。収集された又はラップされた取消可能な編集オブジェクトは、ステップ2140に示されるように、アンドゥ管理部2040(図7(a)では706)に登録される。
【0171】
複数のUndoableEditCommandが存在するとき、与えられた文書のために集められた「複合編集」2050がある。この場合、実行が完了すると、UndoableCommand2030の1以上のUndoableEditの集合がアンドゥ管理部560に登録される。
【0172】
UndoableCommandプロセスの実施例は、図22−32に示される複合文書の複合編集に関連した一連のスクリーンショットの形式で提供される。スクリーンショットは、複合文書に対するいくつかの編集を通じて、本発明の実施の形態に係る取消操作の流れを示す。文書自体は、画面上に表示されるXHTML部分とSVG部分の組合せである。画面は、既知のJava(登録商標)−Eclipseプラットフォームに基づく。
【0173】
図22に示した取消操作は、XHTML部分2210、SVG部分2220、及び別のXHTML部分2230を有する複合文書2200の編集を含む。前述の説明に基づいて、編集操作は文書を表現するモデルであるDOMの操作により実現されることが理解されよう。DOMに対する変更はDOMにより発行され、アンドゥ管理部2040に収集され格納される変更及び/又は取消可能な編集を検知することにより監視される。ユーザにより入力される一連の編集コマンドとして、DOMが変更され、アンドゥ管理部のエントリが蓄積される。以前のエントリは上書き又は破壊されない。さらに、DOMが操作されると、文書のモデルとしてのDOMの現バージョンが、文書の現在編集されたバージョンの表示を画面に描画するために用いられる。前述したように、ボックス方式を用いることにより、レンダリングのスピードを向上させることができる。同じ又はリンクされた文書の複数のXMLコンテンツの間のリンクに基づいて、リンクされた全ての表示要素に編集が反映される。同様に、編集が逆戻り又は取り消されると、取消可能な編集オブジェクトを取得するためにアンドゥ管理部2040にアクセスし、DOMの変更により編集が逆戻りされる。後述するように、DOMの描画により編集の逆戻りが示される。
【0174】
図23に関連して、「第1の編集」2310がXHTML部分2110において文書2200になされ、「第2の編集」2220がSVG部分2220になされる。その後、「第3の編集」2330がXHTML部分2210になされる。本発明は、取消機能を確立し、処理する機能を有し、図23の例に示したように、「第3の編集」2330、「第2の編集」2320、及び「第1の編集」2310に対するシームレスな取消操作を実現する。
【0175】
図24は、ユーザの画面に表示された第1の編集2310、第2の編集2320、及び第3の編集2330と、ソースコーリスト2400の対応するエントリ2410、2420、及び2430を並列して示す。
【0176】
上述したように、取消操作は、それぞれの取消編集をアンドゥオブジェクトとして格納又は登録したアンドゥ管理部2040にアクセスすることにより実行される。アンドゥオブジェクトの取得により、文書のモデルとしてのDOMに更なる操作が行われ、実行された編集を逆に勧めることによりDOMが元に戻される。後述するように、編集が元に戻されたことが、画面上にDOMをレンダリングすることにより示される。こうして、図25に示すように、入力時において最後の編集であった「第3の編集」から「取消」が開始され、追加されたXHTMLの編集の最後の文字から取り消しが始まる。図示するように、最後の編集の最後の文字は「t」であり、図の2510に文字「t」が取り消された状態が示される。取消操作は、XHTMLアプリケーションに対して、編集が完了するまで文字毎に続行される。つづいて、取消操作は、用いられたアプリケーション(XHTML、SVG、MATHMLなど)にかかわらず、最後から2番目に入力された編集へ続く。
【0177】
例によれば、最後から2番目の編集は「第2の編集」2320であったので、取消処理により「第3の編集」が削除されると、次の取消操作は第2の編集にうつり、図26に示すように、その全体が削除されるまで続けられる。第2の編集は1つの操作により追加されたので、1つの取消操作で削除可能である。第1の編集2310はまだ残っている。
【0178】
図27に示すように、更なる取消操作は「第1の編集」2310にうつり、本発明の一形態によれば、XHTMLによる入力は文字毎に扱われるので、2710で示される文字「t」の削除から開始される。文書のXHTML部分において、取消操作を目的とした文字毎の取扱が望ましいが、単語毎、文毎など、必要であれば他のルールに変更可能であることは明らかである。
【0179】
取消操作が完了し、第1、第2、及び第3の編集の全てが取り消されると、図28に示した画面となる。
【0180】
図29は、コマンドベースの取消操作を示す。この「daily−report2.vcd」において、コマンド「add−report」が定義される。このコマンドを実行すると、レポートが追加される。その他のコマンド、例えば、「レポートの削除」、「画像の削除」、「新規SVG」、「テーブル挿入」などが定義されてもよい。コマンドの実行は、編集の準備、実行(図10に関連して説明した方式で図2の「Facet」2022サービスを用いて)、登録を含む。コマンドが実行され登録されると、取消操作が可能となる。取消操作は、コマンド全体を取り消す効果を有する。ユーザに提示されるコマンド自体を図30に示す。
【0181】
タグ「diary:report」及びその子が図31において追加される。この画面から取消操作を実行すると、図32にようになる。1つの取消操作でコマンド自体を取り消すことができる。
【0182】
上記の説明から、DOMの監視が変更の監視によるものであっても、取消編集コマンドの識別によるものであっても、後続の逆戻りのために取消イベントオブジェクトの収集及び登録をもたらす。検知、識別、及び登録は、イベントベースで行われてもよいし、ボックスツリー方式を用いてイベントを収集することにより行われてもよい。後者の場合、複数のイベントが単一のボックスに発生するので、変更されたがまだ描画されていないボックスの内容を識別する「ダーティーフラグ」技術が用いられてもよい。こうして、描画は、異なるスレッドを用いた並列的な実行により、文書に対する関連した複数の変更が完了するまで、適切な期間延期される。
【0183】
さらに、開示された取消技術により、プログラマは、コマンドを用いる所定のテンプレートを参照するだけで取消操作のためのコマンドを用意することができる。この方式では、Java(登録商標)言語の抽象クラスとして編集操作を実装可能である。
【0184】
本発明の他の改良や変更は、上記の開示及び教示から当業者には明らかである。したがって、本発明の特定の実施例のみをとくに例示したが、本発明の趣旨及び範囲から逸脱することなく、それらに種々の変更が可能であることは明らかである。
【図面の簡単な説明】
【0185】
【図1(a)】開示した文書処理システムの典型的な実装の基本となるコンポーネントの標準的な配置を示す図である。
【図1(b)】典型的な文書処理システムの全体的なブロック図である。
【図1(c)】典型的な文書処理システムの全体的なブロック図である。
【図2】「Document Manager」の典型的な実装について詳細を示す図である。
【図3】「Vocabulary Connection」サブシステム300の典型的な実装について詳細を示す図である。
【図4】図4(a)は、「Program Invoker」及びそれに関連する他のコンポーネントの典型的な実装について詳細を示す図であり、図4(b)は、「Service Broker」及びそれに関連する他のコンポーネントの典型的な実装について詳細を示す図であり、図4(c)は、「Service」の典型的な実装について詳細を示す図であり、図4(d)は、「Service」の例を示す図であり、図4(e)は、「Program Invoker」103と「User Application」106との関係について詳細を示す図である。
【図5】図5(a)は、「Program Invoker」上に展開される「Application Service」の構造について詳細を示す図であり、図5(b)は、「Frame」、「MenuBar」、「StatusBar」の関係の例を示す図であり、
【図6】図6(a)は、「Application Core」の典型的な実装について詳細を示す図であり、図6(b)は、「Snap Shot」の典型的な実装について詳細を示す図である。
【図7】図7(a)は、「Application Core」の典型的な実装について詳細を示す図であり、図7(b)は、AからEの「Document」の組がどのように階層化されるのかの例を示す図であり、図7(c)は、図7(b)で示した「Document」の階層がスクリーン上でどのように見えるのかの例を示す図である。
【図8】「Undo Framework」及び「Undo Command」の典型的な実装の詳細を示す図である。
【図9】図9(a)は、図1(b)、図1(c)で示す文書処理システム内に「Document」がどのように展開されるかの全体像を示す図であり、図9(b)は、MVCパラダイムを使って、「Zone」の構造の概要を示す図である。
【図10】本発明に従って、「Document」とその様々な表現の例を示す図である。
【図11】図11(a)は、図10で示す「Document」のXHTMLコンポーネントに対する「MV」関係の概要を示す図であり、図11(b)は、図11(a)で示す「Document」に対するボキャブラリコネクションを示す図である。
【図12】プラグインサブシステム、ボキャブラリコネクション、コネクタそれぞれの典型的な実装について詳細を示す図である。
【図13】MySampleXMLに対して、ボキャブラリコネクションマネージャとコネクタファクトリーツリーを使用するVCDスクリプトの例を示す図である。
【図14】図1(b)の典型的な文書処理システムの中に、文書例MYSampleXMLが展開されるステップ0から3を示した図である。
【図15】図1(b)の典型的な文書処理システムの中に、文書例MySampleXMLが展開されるステップ4を示した図である。
【図16】図1(b)の典型的な文書処理システムの中に、文書例MySampleXMLが展開されるステップ5を示した図である。
【図17(a)】図1(b)の典型的な文書処理システムの中に、文書例MySampleXMLが展開されるステップ6を示した図である。
【図17(b)】図1(b)の典型的な文書処理システムの中に、文書例MySampleXMLが展開されるステップ7を示した図である。
【図18】図18(a)は、対応するソースノードを持たず、ディスティネーションツリーのみに依存するノードで発生するイベントのフローを示す図であり、図18(b)は、「TextOfConnector」によりソースノードと連動するディスティネーションツリーのノードで発生するイベントのフローを示す図である。
【図19(a)】DOMの変更が取消可能コマンドの生成及び保存をもたらす様子を概略的に示す図である。
【図19(b)】DOMの変更が取消可能コマンドの生成及び保存をもたらす様子を概略的に示す図である。
【図20】DOMの変更が複合的な編集をもたらす様子を概略的に示す図である。
【図21】図20でなされた変更により表現される手順を示すフローチャートである。
【図22】XHTML及びSVGコンテンツを有する複合文書を処理における取消操作の流れの第1のスクリーンショットを示す図である。
【図23】第1から第3の編集を行った図22の文書のスクリーンショットを示す図である。
【図24】ソースコードを付した図22の文書のスクリーンショットを示す図である。
【図25】XHTMLの第3の編集を文字ごとに取り消す操作のスクリーンショットを示す図である。
【図26】第3(XHTML)及び第2(SVG)の編集の取消操作のスクリーンショットを示す図である。
【図27】残りの第1の編集の取消操作のスクリーンショットを示す図である。
【図28】全ての編集が実行されていない状態のスクリーンショットを示す図である。
【図29】コマンドベースの取消操作のスクリーンショットを示す図である。
【図30】図29のコマンド自体のスクリーンショットを示す図である。
【図31】「diary:report」要素が追加された状態のスクリーンショットを示す図である。
【図32】取消操作の結果のスクリーンショットを示す図である。
【符号の説明】
【0186】
【技術分野】
【0001】
本開示は、情報のある形式の表現における変更を、同じ情報の別の形式の表現に自動的に伝達する技術を開示する。とくに、本技術は、ソースDOMツリーにより表現された文書に対する変更を、別の表現に描写されたデスティネーションDOMツリーへ自動的に伝達することに関する。
【背景技術】
【0002】
この出願は、「文書処理及び文書管理システム」という名称で、2004年8月2日に出願され、同時継続している米国仮出願(出願番号60/592,369)からの優先権を主張する。
【0003】
インターネットの出現により、ユーザによって処理され管理される文書の数が、ほぼ指数関数的に増加してきた。インターネットの核を形成するウェブ(World Wide Web)は、そのような文書データの大きな受け皿となっている。ウェブは、文書に加えて、このような文書の情報検索システムを提供する。これらの文書は、通常、マークアップ言語により記述される。マークアップ言語のシンプルかつポピュラーな例の一つにHTML(HyperText Markup Language)がある。このような文書は、ウェブの他の位置に格納されている他の文書へのリンクをさらに含む。XML(eXtensible Markup Language)は、さらに高度でポピュラーなマークアップ言語である。ウェブ文書にアクセスし、閲覧するためのシンプルなブラウザが、Java(登録商標)のようなオブジェクト指向のプログラミング言語で開発されている。
【0004】
マークアップ言語により記述された文書は、通常、ブラウザや他のアプリケーションの中では、ツリーデータ構造の形で表現される。この構造は、文書を構文解析した結果のツリーに相当する。DOM(Document Object Model)は、文書を表現し、操作するために使用される、よく知られたツリーベースのデータ構造モデルである。DOMは、HTMLやXML文書などを含む文書を表現するための標準的なオブジェクトのセットを提供する。DOMは、文書内のコンポーネントを表現するオブジェクトがどのようにつながっているかという標準モデルと、それらのオブジェクトにアクセスしたり操作したりするための標準インタフェイスという、2つの基本的なコンポーネントを含む。
【0005】
アプリケーション開発者は、独自のデータ構造やAPI(Application Program Interface)へのインタフェイスとしてDOMをサポートすることができる。他方、文書を作成するアプリケーション開発者は、彼らのAPIの独自インタフェイスではなく、DOMの標準インタフェイスを使用することができる。したがって、標準を提供するというその能力により、DOMは、様々な環境、特にウェブにおいて、文書の相互利用を促進させるために有効である。DOMのいくつかのバージョンが定義されており、異なるプログラミング環境及びアプリケーションによって使用されている。
【0006】
DOMツリーは、対応するDOMの内容に基づいた文書の階層的表現である。DOMツリーは「根(ルート)」、及びルートから発生する1つ以上の「節(ノード)」を含む。ルートが文書全体を表す場合もある。中間のノードは、例えば、テーブル及びそのテーブル中の行及び列のような要素を表すことができる。DOMツリーの「葉」は、通常、それ以上分解できないテキストや画像のようなデータを表す。DOMツリーの各ノードは、フォント、サイズ、色、インデントなど、ノードによって表される要素のパラメータを記述する属性に関連付けられてもよい。
【0007】
HTMLは、文書を作成するために一般に用いられる言語であるが、フォーマット及びレイアウト用の言語であり、データ記述のための言語ではない。HTMLドキュメントを表現するDOMツリーのノードは、HTMLのフォーマッティングタグとして予め定義されたエレメントであって、通常、HTMLは、データの詳述や、データのタギング/ラベリングのための機能を提供しないので、HTMLドキュメント中のデータに対するクエリを定式化することは多くの場合困難である。
【0008】
ネットワーク設計者たちの目指すものは、ウェブ上の文書がソフトウェアアプリケーションによってクエリされたり処理されたりできるようにすることである。表示方法とは無関係で、階層的に構造化された言語であれば、そのようにクエリされ処理されることができる。XML(eXtensible Markup Language)のようなマークアップ言語は、これらの機能を提供することができる。
【0009】
HTMLとは逆に、XMLのよく知られた利点は、文書の設計者が自由に定義可能な「タグ」を使用して、データ要素にラベルを付けることが可能である点である。このようなデータ要素は、階層的に構造化することができる。さらに、XML文書は、文書内で用いられるタグ及びそれらの相互関係の「文法」を記述した文書型定義を含むことができる。構造化されたXML文書の表示方法を定義するために、CSS(Cascading Style Sheet)又はXSL(XML Style Language)が使用される。DOM、HTML、XML、CSS、XSL及び関連する言語の特徴に関する付加的な情報は、ウェブからも得ることができる。(例えば、http://www.w3.org/TR/)
【0010】
Xpathは、XML文書の部分の位置を指定するために共通のシンタックス及びセマンティクスを提供する。機能性の例として、XML文書に対応するDOMツリーのトラバース(移動)がある。それは、XML文書の様々な表現に関連した文字列、数、及びブーリアン文字の操作のための基本的な機能を提供する。Xpathは、XML文書の見た目のシンタックス、例えば、テキストとしてみたときに何行目であるとか何文字目であるとかといった文法ではなく、DOMツリーなどの抽象的・論理的な構造において動作する。Xpathを使用することにより、例えばXML文書のDOMツリー内の階層的構造を通じて場所を指定することができる。アドレシングのための使用の他に、Xpathは、DOMツリー中のノードがパターンにマッチするか否かをテストするために使用されるようにも設計されている。
【0011】
XPathに関する更なる詳細は、http://www.w3.org/TR/xpathで得ることができる。
【0012】
XMLの既知の利点及び特徴により、マークアップ言語(例えばXML)で記述された文書を扱うことができ、文書を作成及び修正するためのユーザフレンドリーなインタフェイスを提供することができる、効果的な文書処理システムが求められる。
【0013】
XMLは、複雑な文書のための、またネットワークなどを介して複数のドキュメントにまたがってデータを共有するのに特に適した形式である。XML文書を作成、表示、編集するための多くのアプリケーションが開発されている(たとえば、特許文献1参照)。
【特許文献1】特開2001−290804号公報
【発明の開示】
【発明が解決しようとする課題】
【0014】
ボキャブラリは、任意に定義することが許されており、理論上、無限に多くのボキャブラリが存在しうる。これらのボキャブラリの全てに対応して専用の表示・編集環境を提供するのは現実的ではない。従来、専用の編集環境が用意されていないボキャブラリにより記述された文書を編集する場合、テキストデータにより構成された文書のソースを直接テキストエディタなどで編集していた。
【0015】
既存のアプリケーションは、処理・管理できるXML文書に大きな制限があったため、幅広く文書を受け入れることができなかった。例えばXML文書処理システムの中には、XML文書の中で、文書の内容を表し、表示メソッドとは関係ない文字列を表示することができるものがある。この機能は一見優れているようであるが、実際にはユーザがXML文書を直接編集できないという不都合な点も持つ。この問題を解決するために、XML文書処理システムの中には、XMLの入力を受け付ける画面を特別にデザインするものもある。しかし、画面デザインの柔軟性は限られていた。それらのXML文書処理システムにおいては、前述の画面デザインは事前にハードコーディングされている必要があったからである。
【0016】
この制限を考慮して、XSLTは標準的なスタイルシート言語の一つとして開発された。このような技術によりユーザはハードコーディングから解放され、XML文書を表示するために適用されるメソッドとも混在可能になった。しかし、XSLTを使用しても、特定の形式のXML文書の編集はできない場合があった。
【0017】
さらに、それらのXML文書処理システムは、「スキーマ」に定義された順序をあてにしている。そのため、一旦スキーマが決定されると、処理システムで処理可能なのは、そのスキーマの構造に最上位から合致するXML文書のみであった。換言すると、それらのシステムは過度に制限的で柔軟性を欠いている。
【課題を解決するための手段】
【0018】
今回開示するシステムは、前述のような制限が無い。完全なXML文書の構造は固定的に決定される必要はない。様々な構造が複合したXML文書であっても、XML文書をより小さな部分に分割して安全に処理できる。それぞれの小さい部分は、より柔軟性を高めるため、個別に編集モジュールに振り分けられる。加えて、編集モジュールは、プラグインとして提供されるのが望ましい。さらにユーザは、何らのハードコーディングをすることなく柔軟性のある画面デザインを実装できる。いわゆるWYSIWYG(What You See Is What You Get)を実現できる。
【0019】
ここで説明されるシステムの構成のうちのいくつかは、MVC(Model−View−Controller)と呼ばれる、よく知られたGUI(Graphical User Interface)パラダイムを用いて説明される。MVCパラダイムは、アプリケーション又はアプリケーションのインタフェイスの一部を、3つの部分、すなわち、モデル、ビュー、コントローラに分割する。MVCは、元は、GUIの世界に、従来の入力、処理、出力の役割を割り当てるために開発された。
【0020】
[入力] → [処理] → [出力]
【0021】
[コントローラ]→ [モデル] → [ビュー]
【0022】
MVCパラダイムによれば、外界のモデリング、ユーザへの視覚的なフィードバック、及びユーザの入力は、モデル(M)、ビュー(V)、及びコントローラ(C)オブジェクトにより分離されて扱われる。コントローラは、ユーザからのマウスとキーボード入力のような入力を解釈し、これらのユーザアクションを、適切な変更をもたらすためにモデル及び/又はビューに送られるコマンドにマップするように作用する。モデルは、1以上のデータ要素を管理するように作用し、その状態に関するクエリに応答し、状態を変更する指示に応答する。ビューは、ディスプレイの長方形の領域を管理するように作用し、グラフィクスとテキストの組合せによりユーザにデータを提示する機能を有する。
【0023】
ワードプロセッサなどの標準的な文書生成アプリケーションでは、ユーザは文書を生成又は編集するときに、特定の動作を実行し、後で取り消したいことがある。このように、ユーザの動作を取り消すような避けられない必要性が予期されるので、「逆」操作が定義される必要がある。従来、逆操作の定義はプログラマ自身により生成されていた。広く行われている技術として、「取消可能な」操作が別の「取消可能な」操作を結合され、結合された取消可能な操作が実現される。しかし、プログラマによる介入のための要求は、高価でかつ非効率的である。逆操作をプログラムするためにプログラマを必要としない、取消可能なコマンドの定義が望まれる。
【0024】
この目的の達成は、文書を生成するときに生じる様々な操作の取消は、適用される編集環境によって異なるという事実により阻害される。例えば、テキストエディタは、文字入力ごとに取消操作を有する。しかし、XMLのDOM編集環境においては、最小の取消可能な単位はDOMの変更であるから、操作の取消は注意深く取り扱われる必要がある。しかし、DOM変更を単位とした取消操作の実行は、ユーザにとっては無益で意味が無く、XML文書全体の不整合を生じさせる可能性もある。
【0025】
したがって、XML環境では、DOMに対する取消操作を意味のある粒度で行う必要がある。1つの方法は、DOMにアクセスするメソッドを提供する文書モデルを提供し、全ての取消操作をメソッドベースで行うことである。このようなメソッドベースの方法は、任意のDOM操作をシームレスに取消可能とするが、DOMと相互作用するプログラマ独自の方法を記述することができないという不利益が生じる。全ての相互作用は定義済みのメソッドを通じて行われる必要がある。さらに、このメソッドを追加するためには、文書のモデル全体が変更される必要がある。
【0026】
このように、逆操作を簡易に定義し、プログラマにより逆操作をプログラムする必要のない取消可能なコマンドを提供可能とする方法及び構成が必要である。
【0027】
本発明のある態様は、DOMにより表現されたXML文書の取消を提供する方法である。この方法は、前記DOMの変更を検知する工程と、前記DOMにおける検知された変更に対応する編集命令を生成する工程と、コマンドにより前記編集命令を検知する工程と、複数の検知された前記編集命令を収集する工程と、収集された前記編集命令を登録する工程と、を備える。
【発明を実施するための最良の形態】
【0028】
以下、添付の図面を参照して、発明の典型的な実施例を詳細に記述する。
【0029】
本発明の境界と範囲を定めるのは請求の範囲のみである。説明する実施の形態や実施例、効果は単なる例示であり、本発明を制限するものと考えてはならない。本発明の詳細な説明は説明を意図しており、請求の範囲を制限するものではない。当業者には多くの代替例、改造例や変形例が理解される。
【0030】
A.文書処理システムの全体構成
図1(a)は、後述するタイプの文書処理システムの基礎として機能する要素の標準的な構成例を示す。構成10は、通信経路によりメモリ12に接続されたCPU又はマイクロプロセッサ11などの形式のプロセッサを含む。メモリ12は、現在又は将来に利用可能な任意のROM及び/又はRAMの形式であってもよい。通信経路は、典型的にはバスとして設けられる。マウス、キーボード、音声認識システムなどのユーザ入力装置14及び表示装置15(又は他のユーザインタフェイス)に対する入出力インタフェイス16も、プロセッサ11とメモリ12の通信のためのバスに接続される。この構成は、スタンドアロンであってもよいし、複数の端末及び1以上のサーバが接続されてネットワーク化された形式であってもよいし、既知のいかなる方式により構成されてもよい。本発明は、これらのコンポーネントの配置、集中又は分散されたアーキテクチャー、あるいは様々なコンポーネントの通信方法により制限されない。
【0031】
さらに、本システム及びここで議論される実施例は、様々な機能性を提供するいくつかのコンポーネント及びサブコンポーネントを含むものとして議論される。これらのコンポーネント及びサブコンポーネントは、注目された機能性を提供するために、ハードウェアとソフトウェアの組合せだけでなく、ハードウェアのみ、ソフトウェアのみによっても実現されうる。さらに、ハードウェア、ソフトウェア、及びそれらの組合せは、汎用の計算装置、専用のハードウェア、又はそれらの組合せにより実現されうる。したがって、コンポーネント又はサブコンポーネントの構成は、コンポーネント又はサブコンポーネントの機能性を提供するための特定のソフトウェアを実行する汎用/専用の計算装置を含む。
【0032】
図1(b)は、文書処理システムの一例の全体のブロック図を示す。このような文書処理システムにおいて文書が生成され編集される。これらの文書は、例えばXMLなど、マークアップ言語の特徴を有する任意の言語により記述されてもよい。また、便宜上、特定のコンポーネント及びサブコンポーネントの用語及び表題を創造した。しかしながら、これらは、この開示の一般的な教示の範囲を制限するために解釈されるべきではない。
【0033】
文書処理システムは、2つの基本的な構成を有するものととらえることができる。第1の構成は、文書処理システムが動作する環境である「実行環境」101である。例えば、実行環境は、文書の処理中及び管理中に、ユーザだけでなくシステムも支援する、基本的なユーティリティ及び機能を提供する。第2の構成は、図1(c)に示す、実行環境において走るアプリケーションから構成される「アプリケーション」102である。これらのアプリケーションは、文書自身及び文書の様々な表現を含む。
【0034】
1.実行環境
実行環境101のキーとなるコンポーネントはProgramInvoker(プログラムインボーカ:プログラム起動部)103である。ProgramInvoker103は、文書処理システムを起動するためにアクセスされる基本的なプログラムである。例えば、ユーザが文書処理システムにログオンして開始するとき、ProgramInvoker103が実行される。ProgramInvoker103は、例えば、文書処理システムにプラグインとして加えられた機能を読み出して実行させたり、アプリケーションを開始して実行させたり、文書に関連するプロパティを読み出すことができる。ProgramInvoker103の機能はこれらに限定されない。ユーザが実行環境内で実行されるように意図されたアプリケーションを起動したいとき、ProgramInvoker103は、そのアプリケーションを見つけ、それを起動して、アプリケーションを実行する。例えばユーザが文書(実行環境ではアプリケーションとして扱われる)を編集したいときには、ProgramInvoker103は最初にその文書を発見し、文書を展開し、編集するために必要な機能を実行する。
【0035】
ProgramInvoker103には、プラグインサブシステム104、コマンドサブシステム105、及びResource(リソース)モジュール109などのいくつかのコンポーネントがアタッチされている。これらの構成については、以下に詳述する。
【0036】
a)プラグインサブシステム
プラグインサブシステム104は、文書処理システムに機能を追加するための高度に柔軟で効率的な構成として使用される。プラグインサブシステム104は、また、文書処理システムに存在する機能を修正又は削除するために使用することができる。さらに、種々様々の機能をプラグインサブシステムを使用して追加又は修正することができる。例えば、画面上への文書の描画を支援するように作用するEditlet(エディットレット:編集部)機能を追加することもできる。Editletプラグインは、システムに追加されるボキャブラリの編集も支援する。
【0037】
プラグインサブシステム104は、ServiceBroker(サービスブローカ:サービス仲介部)1041を含む。ServiceBroker1041は、文書処理システムに加えられるプラグインを管理することにより、文書処理システムに加えられるサービスを仲介する。
【0038】
所望の機能性を実現する個々の機能は、Service(サービス)1042の形でシステムに追加される。利用可能なService1042のタイプは、Application(アプリケーション)Service、ZoneFactory(ゾーンファクトリ:ゾーン生成部)Service、Editlet(エディットレット:編集部)Service、CommandFactory(コマンドファクトリ:コマンド生成部)Service、ConnectXPath(コネクトXPath:XPath管理部)Service、CSSComputation(CSSコンピューテーション:CSS計算部)Serviceなどを含むが、これらに限定されない。これらのService、及びシステムの他の構成とそれらとの関係は、文書処理システムについてのよりよい理解のために、以下に詳述される。
【0039】
プラグインとServiceの関係は以下の通りである。プラグインは、1以上のServiceProvider(サービスプロバイダ:サービス提供部)を含むことができるユニットである。それぞれのServiceProviderは、それに関連したServiceの1以上のクラスを有する。例えば、適切なソフトウェアアプリケーションを有する単一のプラグインを使用することにより、1以上のServiceをシステムに追加することができ、これにより、対応する機能をシステムに追加することができる。
【0040】
b)コマンドサブシステム
コマンドサブシステム105は、文書の処理に関連したコマンドの形式の命令を実行するために使用される。ユーザは、一連の命令を実行することにより、文書に対する操作を実行することができる。例えば、ユーザは、コマンドの形で命令を発行することにより、文書処理システム中のXML文書に対応するXMLのDOMツリーを編集し、XML文書を処理する。これらのコマンドは、キーストローク、マウスクリック、又は他の有効なユーザインタフェイスアクションを使用して入力されてもよい。1つのコマンドにより1以上の命令が実行されることもある。この場合、これらの命令が1つのコマンドにラップ(包含)され、連続して実行される。例えば、ユーザが、誤った単語を正しい単語に置換したいとする。この場合、第1の命令は、文書中の誤った単語を発見することであり、第2の命令は、誤った単語を削除することであり、第3の命令は、正しい単語を挿入することであってもよい。これらの3つの命令が1つのコマンドにラップされてもよい。
【0041】
コマンドは、関連した機能、例えば、後で詳述する「アンドゥ」機能を有してもよい。これらの機能は、オブジェクトを生成するために使用されるいくつかの基本クラスにも割り当てられてもよい。
【0042】
コマンドサブシステム105のキーとなるコンポーネントは、選択的にコマンドを与え、実行するように作用するCommandInvoker(コマンドインボーカ:コマンド起動部)1051である。図1(b)には、1つのCommandInvokerのみが示されているが、1以上のCommandInvokerが使用されてもよく、1以上のコマンドが同時に実行されてもよい。CommandInvoker1051は、コマンドを実行するために必要な機能及びクラスを保持する。動作において、実行されるべきCommand(コマンド:命令)1052は、Queue(キュー)1053に積まれる。CommandInvokerは、連続的に実行するコマンドスレッドを生成する。CommandInvoker内で既に実行中のCommandがなければ、CommandInvoker1051により実行されるように意図されたCommand1052が実行される。CommandInvokerが既にコマンドを実行している場合、新しいCommandは、Queue1053の最後に積まれる。しかしながら、それぞれのCommandInvoker1051では、一度に1つのCommandのみが実行される。指定されたCommandの実行に失敗した場合、CommandInvoker1051は例外処理を実行する。
【0043】
CommandInvoker1051により実行されるCommandの型は、UndoableCommand(取消可能コマンド)1054、AsynchronousCommand(非同期コマンド)1055、及びVCCommand(VCコマンド)1056を含むが、これらに限定されない。UndoableCommand1054は、ユーザが望めば、そのCommandの結果を取り消すことが可能なCommandである。UndoableCommandの例として、切り取り、コピー、テキストの挿入、などがある。動作において、ユーザが文書の一部を選択し、その部分に切り取りコマンドを適用するとき、UndoableCommandを用いることにより、切り取られた部分は、必要であれば、「切り取られていない」ようにすることができる。
【0044】
VCCommand1056は、ボキャブラリコネクション記述子(Vocabulary Connection Descriptor:VCD)スクリプトファイルに格納される。これらは、プログラマにより定義されうるユーザ指定のCommandである。Commandは、例えば、XMLフラグメントを追加したり、XMLフラグメントを削除したり、属性を設定したりするための、より抽象的なCommandの組合せであってもよい。これらのCommandは、特に、文書の編集に焦点を合わせている。
【0045】
AsynchronousCommand1055は、文書のロードや保存など、システムよりのCommandであり、UndoableCommandやVCCommandとは別に、非同期的に実行される。AsynchronousCommandは、UndoableCommandではないので、取り消すことはできない。
【0046】
AsynchronousCommands1055は、ボキャブラリコネクションの下位のレベルに存在する。それらは文書処理システムに対するより特別なコマンドである。AsynchronousCommandsはCommandInvoker1051に直接届けられる。一方で、VocabularyConnectionCommands1056は解釈され、AsynchronousCommandsに変換されたのち、CommandInvoker1051に届けられる。
【0047】
c)リソース
Resource109は、様々なクラスに、いくつかの機能を提供するオブジェクトである。例えば、ストリングリソース、アイコン、及びデフォルトキーバインドは、システムで使用されるResourceの例である。
【0048】
2.アプリケーションコンポーネント
文書処理システムの第2の主要な特徴であるアプリケーションコンポーネント102は、実行環境101において実行される。アプリケーションコンポーネント102は、実際の文書と、システム内における文書の様々な論理的、物理的な表現を含む。さらに、アプリケーションコンポーネント102は、文書を管理するために使用されるシステムの構成を含む。アプリケーションコンポーネント102は、さらに、UserApplication(ユーザアプリケーション)106、アプリケーションコア108、ユーザインタフェイス107、及びCoreComponent(コアコンポーネント)110を含む。
【0049】
a)ユーザアプリケーション
UserApplication106は、ProgramInvoker103と共にシステム上にロードされる。UserApplication106は、文書と、文書の様々な表現と、文書と対話するために必要なユーザインタフェイスとをつなぐ接着剤となる。例えば、ユーザが、プロジェクトの一部である文書のセットを生成したいとする。これらの文書がロードされると、文書の適切な表現が生成される。ユーザインタフェイス機能は、UserApplication106の一部として追加される。言いかえれば、UserApplication106は、ユーザがプロジェクトの一部を形成する文書と対話することを可能とする文書の表現と、文書の様々な態様とを、共に保持する。一旦UserApplication106が生成されると、ユーザがプロジェクトの一部を形成する文書との対話を望むたびに、ユーザは簡単に実行環境上にUserApplication106をロードすることができる。
【0050】
b)コアコンポーネント
CoreComponent110は、複数のPane(ペイン)の間で文書を共有する方法を提供する。後で詳述するように、Paneは、DOMツリーを表示し、画面の物理的なレイアウトを扱う。例えば、物理的な画面は、個々の情報の断片を描写する画面内の複数のPaneからなる。ユーザから画面上に見える文書は、1又はそれ以上のPaneに出現しうる。また、2つの異なる文書が画面上で2つの異なるPaneに現れてもよい。
【0051】
図1(c)に示されるように、画面の物理的なレイアウトもツリーの形式になっている。Paneは、RootPane(ルートペイン)1084にもなり得るし、SubPane(サブペイン)1085にもなり得る。RootPane1084は、Paneのツリーの根に当たるPaneであり、SubPane1085は、RootPane1084以外の任意のPaneである。
【0052】
CoreComponent110は、さらに、フォントを提供し、ツールキットなど、文書のための複数の機能的な操作のソースの役割を果たす。CoreComponent110により実行されるタスクの一例に、複数のPane間におけるマウスカーソルの移動がある。実行されるタスクの他の例として、あるPane中の文書の一部をマークし、それを異なる文書を含む別のPane上にコピーする。
【0053】
c)アプリケーションコア
上述したように、アプリケーションコンポーネント102は、システムにより処理され管理される文書から構成される。これは、システム内における文書の様々な論理的及び物理的な表現を含む。アプリケーションコア108は、アプリケーションコンポーネント102の構成である。その機能は、実際の文書を、それに含まれる全てのデータとともに保持することである。アプリケーションコア108は、DocumentManager(ドキュメントマネージャ:文書管理部)1081及びDocument(ドキュメント:文書)1082自身を含む。
【0054】
DocumentManager1081の様々な態様を以下に詳述する。DocumentManager1081は、Document1082を管理する。DocumentManager1081は、RootPane1084、SubPane1085、ClipBoard(クリップボード)ユーティリティ1086、及びSnapShot(スナップショット)ユーティリティ1087にも接続される。ClipBoardユーティリティ1086は、ユーザがクリップボードに加えることを決定した文書の部分を保持する方法を提供する。例えば、ユーザが、文書の一部を切り取り、後で再考するために新規文書にそれを保存することを望んだとする。このような場合、切り取られた部分がClipBoardに追加される。
【0055】
つづいて、SnapShotユーティリティ1087についても説明する。SnapShotユーティリティ1087は、アプリケーションがある状態から別の状態まで移行するときに、アプリケーションの現在の状態を記憶することを可能とする。
【0056】
d)ユーザインタフェイス
アプリケーションコンポーネント102の別の構成は、ユーザがシステムと物理的に対話する手段を提供するユーザインタフェイス107である。例えば、ユーザインタフェイスは、ユーザが文書をアップロードしたり、削除したり、編集したり、管理したりするために使用される。ユーザインタフェイスは、Frame(フレーム)1071、MenuBar(メニューバー)1072、StatusBar(ステータスバー)1073、及びURLBar(URLバー)1074を含む。
【0057】
Frame1071は、一般に知られているように、物理的な画面のアクティブな領域であると考えてもよい。MenuBar1072は、ユーザに選択を提供するメニューを含む画面領域である。StatusBar1073は、アプリケーションの実行状態を表示する画面領域である。URLBar1074は、インターネットをナビゲートするためにURLアドレスを入力する領域を提供する。
【0058】
B.文書管理及び関連するデータ構造
図2は、DocumentManager1081の詳細を示す。これは、文書処理システム内で文書を表現するために用いられるデータ構造及び構成を含む。分かりやすくするために、このサブセクションで説明される構成は、MVCパラダイムを用いて説明される。
【0059】
DocumentManager1081は、文書処理システム内にある全ての文書を保持しホストするDocumentContainer(ドキュメントコンテナ:文書コンテナ)203を含む。DocumentManager1081にアタッチされたツールキット201は、DocumentManager1081により使用される様々なツールを提供する。例えば、DomService(DOMサービス)は、文書に対応するDOMを生成し、保持し、管理するために必要とされる全ての機能を提供するために、ツールキット201により提供されるツールである。ツールキット201により提供される別のツールであるIOManager(入出力管理部)は、システムへの入力及びシステムからの出力を管理する。同様に、StreamHandler(ストリームハンドラ)は、ビットストリームによる文書のアップロードを扱うツールである。これらのツールは、図中に特に示さず、参照番号を割り当てないが、ツールキット201のコンポーネントを形成する。
【0060】
MVCパラダイムの表現によれば、モデル(M)は、文書のDOMツリーモデル202を含む。前述したように、全ての文書は、文書処理システムにおいてDOMツリーとして表現される。文書は、また、DocumentContainer203の一部を形成する。
【0061】
1.DOMモデル及びゾーン
DOMはW3Cが策定した標準規格であり、Nodeを操作するための標準的なインタフェイスを定義するが、実際には、ボキャブラリごと又はNodeごとに特有の操作があるので、これらの操作をAPIとして用意しておくのが好都合である。文書処理システムでは、このような各Nodeに特有のAPIをFacetとして用意し、各Nodeにアタッチする。これにより、DOMの標準規格に準拠しつつ、有用なAPIを付加することができる。また、ボキャブラリごとに特有のDOMを実装するのではなく、標準的なDOMの実装に、後から特有のAPIを付加するようにすることで、多様なボキャブラリを統一的に処理することができるともに、複数のボキャブラリが任意の組合せで混在した文書を適切に処理することができる。標準的にはDOMはDOMツリー形式で表現される。
【0062】
文書を表現するDOMツリーは、Node(ノード)2021を有するツリーである。DOMツリーの部分集合であるZone(ゾーン)209は、DOMツリー内の1以上のNodeの関連領域を含む。例えば、画面上で文書の一部のみを表示し得るが、この可視化された文書の一部はZone209を用いて表示される。Zoneは、ZoneFactory(ゾーンファクトリ:ゾーン生成部)205と呼ばれるプラグインを用いて、生成され、取り扱われ、処理される。ZoneはDOMの一部を表現するが、1以上の「名前空間」を使用してもよい。よく知られているように、名前空間は、名前空間内でユニークな名前の集合である。換言すれば、名前空間内に同じ名前は存在しない。
【0063】
2.Facet及びFacetとZoneとの関係
Facet(ファセット)2022は、MVCパラダイムのモデル(M)部分内の別の構成である。Facetは、ZoneにおいてNodeを編集するために使用される。Facet2022は、Zone自身の内容に影響を与えずに実行することができる手続(プロシージャ)を使用して、DOMへのアクセスを編成する。次に説明するように、これらの手続は、Nodeに関連した重要で有用な操作を実行する。
【0064】
各Node2021は、対応するFacet2022を有する。DOMの中のNodeを直接操作する代わりに、操作を実行するためにFacetを使用することによって、DOMの保全性は保護される。そうでなく、操作がNode上で直接実行される場合、いくつかのプラグインがDOMを同時に変更することができ、その結果矛盾を引き起こす。
【0065】
ボキャブラリは、名前空間に属するタグ(例えばXMLのタグ)のセットである。上述したように、名前空間は、ユニークな名前(ここではタグ)のセットを有する。ボキャブラリは、XML文書を表現するDOMツリーのサブツリーとして現れる。このサブツリーはZoneを含む。特定の例においては、タグセットの境界はZoneによって定義される。Zone209は、ZoneFactory205と呼ばれるServiceを利用して生成される。上述したように、Zone209は、文書を表現するDOMツリーの一部の内部表現である。このような文書の一部へのアクセスを提供するために、論理的な表現が要求される。この論理的表現は、文書が画面上で論理的にどのように表現されるかについてコンピュータに通知する。Canvas(キャンバス)210は、Zoneに対応する論理的なレイアウトを提供するように作用するServiceである。
【0066】
他方、Pane211は、Canvas210により提供される論理的なレイアウトに対応する物理的な画面レイアウトである。実際、ユーザは表示画面上で文字や画像によって文書のレンダリングのみを見る。したがって、文書は、画面上に文字や画像を描画するプロセスにより、画面上に描写されなければならない。文書は、Pane211により提供される物理的なレイアウトに基づいて、Canvas210により画面上に描写される。
【0067】
Zone209に対応するCanvas210は、Editlet206を使用して生成される。文書のDOMは、Editlet206及びCanvas210を使用して編集される。元の文書の完全性を維持するために、Editlet206及びCanvas210は、Zone209における1以上のNodeに対応するFacetを使用する。これらのServiceは、Zone及びDOM内のNodeを直接操作しない。Facetは、Command207を利用して操作される。
【0068】
ユーザは、一般に、画面上のカーソルを移動させたり、コマンドをタイプしたりすることによって、画面と対話する。画面上の論理的なレイアウトを提供するCanvas2010は、このカーソル操作を受け付ける。Canvas2010は、対応するアクションをFacetに実行させることができる。この関係により、カーソルサブシステム204は、DocumentManager1081に対して、MVCパラダイムのコントローラ(C)として機能する。Canvas2010は、イベントを扱うタスクも有する。例えば、Canvas2010は、マウスクリック、フォーカス移動、及びユーザにより起こされた同様のアクションなどのイベントを扱う。
【0069】
3.Zone、Facet、Canvas及びPaneの間の関係の概要
文書処理システム内の文書は、少なくとも4つの観点から見ることができる。すなわち、1)文書処理システムにおいて文書の内容及び構造を保持するために用いられるデータ構造、2)文書の保全性に影響を与えずに文書の内容を編集する手段、3)文書の画面上の論理的なレイアウト、4)文書の画面上の物理的なレイアウト、である。Zone、Facet、Canvas及びPaneは、前述の4つの観点に相当する、文書処理システムのコンポーネントをそれぞれ表す。
【0070】
4.アンドゥサブシステム
上述したように、文書に対するいかなる変更(例えば編集)も取消可能であることが望ましい。例えば、ユーザが編集操作を実行し、次に、その変更の取消を決定したとする。図2に関連して、アンドゥサブシステム212は、文書管理部の取消可能なコンポーネントを実現する。UndoManager(アンドゥマネージャ:アンドゥ管理部)2121は、ユーザによって取り消される可能性のある全ての文書に対する操作を保持する。
【0071】
例えば、ユーザが、文書中の単語を別の単語に置換するコマンドを実行したとする。その後、ユーザは考え直し、元の単語に戻すことを決定したとする。アンドゥサブシステム212は、このような操作を支援する。UndoManager2121は、このようなUndoableEdit(アンドゥアブルエディット:取消可能な編集)2122の操作を保持する。
【0072】
5.カーソルサブシステム
前述したように、MVCのコントローラ部分は、カーソルサブシステム204を備えてもよい。カーソルサブシステム204は、ユーザから入力を受け付ける。これらの入力は、一般にコマンド及び/又は編集操作の性格を有している。したがって、カーソルサブシステム204は、DocumentManager1081に関連したMVCパラダイムのコントローラ(C)部分であると考えることができる。
【0073】
6.ビュー
前述したように、Canvas2010は、画面上に提示されるべき文書の論理的なレイアウトを表す。XHTML文書の例では、Canvasは、文書が画面上でいかに見えるかを論理的に表現したボックスツリー208を含んでもよい。このボックスツリー208は、DocumentManager1081に関連したMVCパラダイムのビュー(V)部分に含まれよう。
【0074】
C.ボキャブラリコネクション
文書処理システムの重要な特徴は、XML文書を、他の表現にマップして取り扱うことが可能で、かつ、マップした先の表現を編集すると、その編集が元のXML文書に整合性を保ちつつ反映される環境を提供することにある。
【0075】
マークアップ言語により記述された文書、例えばXML文書は、文書型定義により定義されたボキャブラリに基づいて作成されている。ボキャブラリは、タグのセットである。ボキャブラリは、任意に定義されてもよいため、無限に多くのボキャブラリが存在しうる。しかしながら、多数の可能なボキャブラリのそれぞれに対して専用の処理/管理環境を提供するのは現実的ではない。ボキャブラリコネクションは、この問題を解決する方法を提供する。
【0076】
例えば、文書は2以上のマークアップ言語により記述されてもよい。文書は、例えば、XHTML(eXtensible HyperText Markup Language)、SVG(Scalable Vector Graphics)、MathML(Mathematical Markup Language)、その他のマークアップ言語により記述されてもよい。換言すれば、マークアップ言語は、XMLにおけるボキャブラリやタグセットと同様に見なされてもよい。
【0077】
ボキャブラリは、ボキャブラリプラグインを用いて処理される。文書処理システムにおいてプラグインが利用不可能であるボキャブラリにより記述された文書は、プラグインが利用可能である別のボキャブラリの文書にマッピングすることにより表示される。この特徴により、プラグインが用意されていないボキャブラリの文書も適切に表示することができる。
【0078】
ボキャブラリコネクションは、定義ファイルを取得し、取得した定義ファイルに基づいて2つの異なるボキャブラリの間でマッピングする能力を含む。あるボキャブラリで記述された文書は、別のボキャブラリにマッピングすることができる。このように、ボキャブラリコネクションは、文書がマッピングされるボキャブラリに対応した表示/編集プラグインにより文書を表示し編集することを可能にする。
【0079】
上述したように、各文書は、一般に複数のノードを有するDOMツリーとして文書処理システムにおいて記述される。「定義ファイル」は、それぞれのノードについて、そのノードと他のノードとの対応を記述する。各ノードの要素値及び属性値が編集可能か否かが指定される。ノードの要素値又は属性値を用いた演算式が記述されてもよい。
【0080】
マッピングという特徴を利用して、定義ファイルを適用したデスティネーションDOMツリーが生成される。このように、ソースDOMツリーとデスティネーションDOMツリーの関係が構築され保持される。ボキャブラリコネクションは、ソースDOMツリーとデスティネーションDOMツリーの対応を監視する。ユーザから編集指示を受けると、ボキャブラリコネクションは、ソースDOMツリーの関連したノードを変更する。ソースDOMツリーが変更されたことを示す「ミューテーションイベント」が発行され、デスティネーションDOMツリーがそれに応じて変更される。
【0081】
ボキャブラリコネクションの使用により、少数のユーザのみに知られていた比較的マイナーなボキャブラリを、別のメジャーなボキャブラリに変換することができる。したがって、少数のユーザによって利用されるマイナーなボキャブラリであっても、文書を適切に表示し、望ましい編集環境を提供することができる。
【0082】
このように、文書処理システムの一部であるボキャブラリコネクションサブシステムは、文書の複数の表現を可能にする機能を提供する。
【0083】
図3は、ボキャブラリコネクション(VC:Vocabulary Connection)サブシステム300を示す。VCサブシステム300は、同一の文書の2つの代替表現の整合性を維持する方法を提供する。例えば、2つの表現は、同一文書の、2つの異なるボキャブラリによる表現であってもよい。前述したように、一方はソースDOMツリーであってもよく、他方はデスティネーションDOMツリーであってもよい。
【0084】
1.ボキャブラリコネクションサブシステム
ボキャブラリコネクションサブシステム300の機能は、VocabularyConnection301と呼ばれるプラグインを使用して、文書処理システムにおいて実現される。文書が表現されるVocabulary305ごとに、対応するプラグインが要求される。例えば、文書の一部がHTMLで記述され、残りがSVGで記述されている場合、HTMLとSVGに対応するボキャブラリプラグインが要求される。
【0085】
VocabularyConnectionプラグイン301は、適切なVocabulary305の文書に対応した、Zone209又はPane211のための適切なVCCanvas(ボキャブラリコネクションキャンバス)310を生成する。VocabularyConnection301を用いて、ソースDOMツリー内のZone209に対する変更は、変換ルールにより、別のDOMツリー306の対応するZoneに伝達される。変換ルールは、ボキャブラリコネクション記述子(Vocabulary Connection Descriptor:VCD)の形式で記述される。このようなソースDOMとデスティネーションDOMの間の変換に対応するそれぞれのVCDファイルについて、対応するVCManager(ボキャブラリコネクションマネージャ)302が生成される。
【0086】
2.Connector
Connector304は、ソースDOMツリーのソースノードと、デスティネーションDOMツリーのデスティネーションノードとを接続する。Connector304は、ソースDOMツリー中のソースノード、及びソースノードに対応するソース文書に対する修正(変更)を見るために作用する。そして、対応するデスティネーションDOMツリーのノードを修正する。Connector304は、デスティネーションDOMツリーを修正することができる唯一のオブジェクトである。例えば、ユーザは、ソース文書、及び対応するソースDOMツリーに対してのみ修正を行うことができる。その後、Connector304がデスティネーションDOMツリーに、対応する修正を行う。
【0087】
Connector304は、ツリー構造を形成するために、論理的にリンクされる。Connector304により形成されたツリーは、ConnectorTree(コネクタツリー)と呼ばれる。Connector304は、ConnectorFactory(コネクタファクトリ:コネクタ生成部)303と呼ばれるServiceを用いて生成される。ConnectorFactory303は、ソース文書からConnector304を生成し、それらをリンクしてConnectorTreeを形成する。VocabularyConnectionManager302は、ConnectorFactory303を保持する。
【0088】
前述したように、ボキャブラリは名前空間におけるタグのセットである。図示されるように、Vocabulary305は、VocabularyConnection301によって文書に対して生成される。これは、文書ファイルを解析し、ソースDOMとデスティネーションDOMの間の写像のための適切なVocabularyConnectionManager302を生成することにより行われる。さらに、Connectorを生成するConnectorFactory303と、Zone209を生成するZoneFactory205と、Zone内のノードに対応するCanvasを生成するEditlet206との間の適切な関係が作られる。ユーザがシステムから文書を処分又は削除するとき、対応するVocabularyConnectionManager302が削除される。
【0089】
Vocabulary305は、VCCanvas310を生成する。さらに、Connector304及びデスティネーションDOMツリー306が対応して生成される。
【0090】
ソースDOM及びCanvasは、それぞれ、モデル(M)及びビュー(V)に対応する。しかしながら、このような表現は、ターゲットのボキャブラリが画面上に描写可能である場合に限って意味がある。描写は、ボキャブラリプラグインにより行われる。ボキャブラリプラグインは、主要なボキャブラリ、例えば、XHTML、SVG、MathMLについて提供される。ボキャブラリプラグインは、ターゲットのボキャブラリに関連して使用される。これらは、ボキャブラリコネクション記述子を用いてボキャブラリ間でマッピングする方法を提供する。
【0091】
このようなマッピングは、ターゲットのボキャブラリが、マッピング可能で、画面上に描写される方法が予め定義されたものである場合にのみ意味がある。このようなレンダリング方法は、例えばXHTMLなどのように、W3Cなどの組織により定義された標準規格となっている。
【0092】
ボキャブラリコネクションが必要であるとき、VCCanvasが使用される。この場合、ソースのビューを直接生成することができないので、ソースのCanvasは生成されない。この場合、VCCanvasが、ConnectorTreeを使用して生成される。このVCCanvasは、イベントの変換のみを扱い、画面上の文書の描写を援助しない。
【0093】
3.DestinationZone、Pane、及びCanvas
上述したように、ボキャブラリコネクションサブシステムの目的は、同一の文書の2つの表現を同時に生成し保持することである。第2の表現も、DOMツリーの形式であり、これはデスティネーションDOMツリーとして既に説明した。第2の表現における文書を見るために、DestinationZone、Canvas及びPaneが必要である。
【0094】
VCCanvasが作成されると、対応するDestinationPane307が生成される。さらに、関連するDestinationCanvas308と、対応するBoxTree309が生成される。同様に、VCCanvas310も、ソース文書に対するPane211及びZone209に関連づけられる。
【0095】
DestinationCanvas308は、第2の表現における文書の論理的なレイアウトを提供する。特に、DestinationCanvas308は、デスティネーション表現における文書を描写するために、カーソルや選択のようなユーザインタフェイス機能を提供する。DestinationCanvas308に生じたイベントは、Connectorに供給される。DestinationCanvas308は、マウスイベント、キーボードイベント、ドラッグアンドドロップイベント、及び文書のデスティネーション(第2)表現のボキャブラリに特有なイベントを、Connector304に通知する。
【0096】
4.ボキャブラリコネクションコマンドサブシステム
ボキャブラリコネクション(VC)サブシステム300の要素として、ボキャブラリコネクション(VC)コマンドサブシステム313がある。ボキャブラリコネクションコマンドサブシステム313は、ボキャブラリコネクションサブシステム300に関連した命令の実行のために使用されるVCCommand(ボキャブラリコネクションコマンド)315を生成する。VCCommandは、内蔵のCommandTemplate(コマンドテンプレート)3131を使用して、及び/又は、スクリプトサブシステム314においてスクリプト言語を使用してスクラッチからコマンドを生成することにより、生成することができる。
【0097】
コマンドテンプレートには、例えば、「If」コマンドテンプレート、「When」コマンドテンプレート、「挿入(Insert)」コマンドテンプレートなどがある。これらのテンプレートは、VCCommandを作成するために使用される。
【0098】
5.XPathサブシステム
XPathサブシステム316は、文書処理システムの重要な構成であり、ボキャブラリコネクションの実現を支援する。Connector304は、一般にxpath情報を含む。上述したように、ボキャブラリコネクションのタスクの1つは、ソースDOMツリーの変化をデスティネーションDOMツリーに反映させることである。xpath情報は、変更/修正を監視されるべきソースDOMツリーのサブセットを決定するために用いられる1以上のxpath表現を含む。
【0099】
6.ソースDOMツリー、デスティネーションDOMツリー、及びConnectorTreeの概要
ソースDOMツリーは、別のボキャブラリに変換される前のボキャブラリで文書を表現したDOMツリー又はZoneである。ソースDOMツリーのノードは、ソースノードと呼ばれる。
【0100】
それに対して、デスティネーションDOMツリーは、ボキャブラリコネクションに関連して前述したように、同一の文書を、マッピングにより変換された後の異なるボキャブラリで表現したDOMツリー又はZoneである。デスティネーションDOMツリーのノードは、デスティネーションノードと呼ばれる。
【0101】
ConnectorTreeは、ソースノードとデスティネーションノードの対応を表すConnectorに基づく階層的表現である。Connectorは、ソースノードと、ソース文書になされた修正を監視し、デスティネーションDOMツリーを修正する。Connectorは、デスティネーションDOMツリーを修正することを許された唯一のオブジェクトである。
【0102】
D.文書処理システムにおけるイベントフロー
実用のためには、プログラムはユーザからのコマンドに応答しなければならない。イベントは、プログラム上で実行されたユーザアクションを記述し実行する方法である。多くの高級言語、例えばJava(登録商標)は、ユーザアクションを記述するイベントに頼っている。従来、プログラムは、ユーザアクションを理解し、それを自身で実行するために、積極的に情報を集める必要があった。これは、例えば、プログラムが自身を初期化した後、ユーザが画面、キーボード、マウスなどでアクションを起こしたときに適切な処理を講じるために、ユーザのアクションを繰り返し確認するループに入ることを意味する。しかしながら、このプロセスは扱いにくい。さらに、それは、ユーザが何かをするのを待つ間、CPUサイクルを消費してループするプログラムを必要とする。
【0103】
多くの言語が、異なるパラダイムを採用することにより、これらの問題を解決している。そのうちの一つは、現代の全てのウィンドウシステムの基礎となっている、イベントドリブンプログラミングである。このパラダイムでは、全てのユーザアクションは、「イベント」と呼ばれる抽象的な事象の集合に属する。イベントは、十分詳細に、特定のユーザアクションを記述する。プログラムがユーザにより生成されたイベントを積極的に収集するのではなく、監視すべきイベントが生じたときに、システムがプログラムに通知する。この方法によりユーザとの対話を扱うプログラムは「イベントドリブン」であると言われる。
【0104】
これは、多くの場合、全てのユーザにより生成されたイベントの基本特性を獲得する「Event(イベント)」クラスを使用して扱われる。
【0105】
文書処理システムは、自身のイベント、及びこれらのイベントを扱う方法を定義して使用する。いくつかの型のイベントが使用される。例えば、マウスイベントは、ユーザのマウスアクションから起こるイベントである。マウスを含むユーザアクションは、Canvas210によって、マウスイベントに渡される。このように、Canvasは、システムのユーザによる相互作用の最前部にあると言える。必要であれば、最前部にあるCanvasは、そのイベントに関連した内容を子へ渡す。
【0106】
それに対して、キーストロークイベントは、Canvas210から流れる。キーストロークイベントは、即時的なフォーカスを有する。すなわち、それは、いかなる瞬間でも作業に関連する。Canvas210上に入力されたキーストロークイベントは、その親に渡される。キー入力は、文字列挿入を扱うことが可能な、異なるイベントによって処理される。文字列の挿入を扱うイベントは、キーボードを使用して文字が挿入されたときに発生する。他の「イベント」は、例えば、ドラッグイベント、ドロップイベント、マウスイベントと同様に扱われる他のイベントを含む。
【0107】
1.ボキャブラリコネクション外のイベントの取り扱い
イベントは、イベントスレッドを用いて渡される。Canvas210は、イベントを受け取ると、その状態を変更する。必要であれば、Command1052がCanvas210によりCommandQueue1053にポストされる。
【0108】
2.ボキャブラリコネクション内のイベントの取り扱い
VocabularyConnectionプラグイン301を用いて、DestinationCanvasの一例であるXHTMLCanvas1106は、発生したイベント、例えば、マウスイベント、キーボードイベント、ドラッグアンドドロップイベント、及びボキャブラリに特有のイベントなどを受け取る。これらのイベントは、Connector1104に通知される。より詳細には、図11に図示されるように、VocabularyConnectionプラグイン301内のイベントフローは、SourcePane1103、VCCanvas1104、DestinationPane1105、DestinationCanvasの一例であるDestinationCanvas1106、デスティネーションDOMツリー及びConnectorTreeを通過する。
【0109】
E.ProgramInvoker及びProgramInvokerと他の構成との関係
ProgramInvoker103及びそれと他の構成との関係は、図4(a)に更に詳細に示される。ProgramInvoker103は、文書処理システムを開始するために実行される実行環境中の基本的なプログラムである。図1(b)に図示されるように、UserApplication106、ServiceBroker1041、CommandInvoker1051、及びResource109は、全てProgramInvoker103に接続される。前述したように、アプリケーション102は、実行環境中で実行されるコンポーネントである。同様に、ServiceBroker1041は、システムに様々な機能を加えるプラグインを管理する。他方、CommandInvoker1051は、ユーザにより提供される命令を実行して、コマンドを実行するために使用されるクラス及びファンクションを保持する。
【0110】
1.プラグイン及びサービス
ServiceBroker1041について、図4(b)を参照して更に詳細に説明する。前述したように、ServiceBroker1041は、システムに様々な機能を追加するプラグイン(及び関連するサービス)を管理する。Service1042は、文書処理システムに特徴を追加又は変更可能な最も下の層である。「Service」は、ServiceCategory401とServiceProvider402の2つの部分からなる。図4(c)に図示されるように、1つのServiceCategory401は、複数の関連するServiceProvider402を持ちうる。それぞれのServiceProviderは、特定のServiceCategoryの一部または全部を実行するように作用する。ServiceCategory401は、他方では、Serviceの型を定義する。
【0111】
Serviceは、1)文書処理システムに特定の特色を提供する「特色サービス」、2)文書処理システムにより実行されるアプリケーションである「アプリケーションサービス」、3)文書処理システムの全体にわたって必要な特色を提供する「環境サービス」、の3つの型に分類することができる。
【0112】
Serviceの例は、図4(d)に示される。アプリケーションServiceのCategoryにおいては、システムユーティリティが対応するServiceProviderの例である。同様に、Editlet206はCategoryであり、HTMLEditlet及びSVGEditletは対応するServiceProviderである。ZoneFactory205は、Serviceの別のCategoryであり、対応するServiceProvider(図示せず)を有する。
【0113】
プラグインは、文書処理システムに機能性を加えると既に説明したが、いくつかのServiceProvider402及びそれらに関連するクラスからなるユニットと見なされてもよい。各プラグインは、宣言ファイルに記述された依存性及びServiceCategory401を有する。
【0114】
2.ProgramInvokerとアプリケーションとの関係
図4(e)は、ProgramInvoker103とUserApplication106との関係についての更なる詳細を示す。必要な文書やデータなどは、ストレージからロードされる。必要なプラグインは、全てServiceBroker1041上にロードされる。ServiceBroker1041は、全てのプラグインを保持し管理する。プラグインは、システムに物理的に追加することができ、又、その機能はストレージからロードすることができる。プラグインの内容がロードされると、ServiceBroker1041は、対応するプラグインを定義する。つづいて、対応するUserApplication106が生成され、実行環境101にロードされ、ProgramInvoker103にアタッチされる。
【0115】
F.アプリケーションサービスと環境との関係
図5(a)は、ProgramInvoker103上にロードしたアプリケーションサービスの構成についての更なる詳細を示す。コマンドサブシステム105のコンポーネントであるCommandInvoker1051は、ProgramInvoker103内のCommand1052を起動又は実行する。Command1052は、文書処理システムにおいて、XMLなどの文書を処理し、対応するXMLDOMツリーを編集するために用いられる命令である。CommandInvoker1051は、Command1052を実行するために必要なクラス及びファンクションを保持する。
【0116】
ServiceBroker1041も、ProgramInvoker103内で実行される。UserApplication106は、ユーザインタフェイス107及びCoreComponent110に接続される。CoreComponent110は、全てのPaneの間で文書を共有する方法を提供する。CoreComponent110は、さらにフォントを提供し、Paneのためのツールキットの役割を果たす。
【0117】
図5(a)及び図5(b)は、Frame1071、MenuBar1072、及びStatusBar1073の関係を示す。
【0118】
G.アプリケーションコア
図6(a)は、全ての文書、及び文書の一部及び文書に属するデータを保持するアプリケーションコア110についての更なる説明を提供する。CoreComponent110は、Document1082を管理するDocumentManager1081にアタッチされる。DocumentManager1081は、文書処理システムに関連づけられたメモリに格納される全てのDocument1082の所有者である。
【0119】
画面上の文書の表示を容易にするために、DocumentManager1081はRootPane1084にも接続される。ClipBoard1086、SnapShot1087、Drag&Drop601、及びOverlay602の機能も、アプリケーションコアにアタッチされる。
【0120】
SnapShot1087は、図6(a)で示したように、アプリケーションの状態を元に戻すために使用される。ユーザがSnapShot1087を起動したとき、アプリケーションの現状が検知され、格納される。その後、アプリケーションの状態が別の状態に変わるとき、格納された状態の内容は保存される。SnapShotは、図6(b)に図示される。動作において、アプリケーションがあるURLから他へ移動するときに、前に戻る動作及び先に進む動作をシームレスに実行可能とするために、SnapShotは以前の状態を記憶する。
【0121】
H.DocumentManager内における文書の構成
図7(a)は、DocumentManager1081の更なる説明と、DocumentManagerにおいて文書が構成され保持される様子を示す。図1(b)に示したように、DocumentManager1081は、Document1082を管理する。図7(a)に示される例において、複数のDocumentのうちの1つはRootDocument(ルート文書)701であり、残りの文書はSubDocument(サブ文書)702である。DocumentManager1081は、RootDocument701に接続され、RootDocument701は、全てのSubDocument702に接続される。
【0122】
図2及び図7(a)に示すように、DocumentManager1081は、全ての文書1082を管理するオブジェクトであるDocumentContainer203に結合される。DOMService703及びIOManager704を含むツールキット201(例えばXMLツールキット)の一部を形成するツールも、DocumentManager1081に供給される。再び図7(a)を参照して、DOMService703は、DocumentManager1081により管理される文書に基づいたDOMツリーを生成する。各Document705は、それがRootDocument701であってもSubDocument702であっても、対応するDocumentContainer203によって管理される。
【0123】
図7(b)は、文書A−Eが階層的に配置される様子を示す。文書AはRootDocumentである。文書B−Dは、文書AのSubDocumentである。文書Eは、文書DのSubDocumentである。図7(c)では、これと同じ文書の階層が画面上に表示された例を示す。RootDocumentである文書Aは、基本フレームとして表示される。文書AのSubDocumentである文書B−Dは、基本フレームAの中のサブフレームとして表示される。文書DのSubDocumentである文書Eは、サブフレームDのサブフレームとして画面に表示される。
【0124】
再び図7(a)を参照して、UndoManager(アンドゥマネージャ:アンドゥ管理部)706及びUndoWrapper(アンドゥラッパー)707は、それぞれのDocumentContainer203に対して生成される。UndoManager706及びUndoWrapper707は、取消可能なコマンドを実行するために使用される。この特徴を使用することにより、編集操作を使用して文書に対して実行された変更を取り消すことができる。SubDocumentの変更は、RootDocumentとも密接な関係を有する。アンドゥ操作は、階層内の他の文書に影響する変更を考慮に入れて、例えば、図17(c)に示されるような連鎖状の階層における全ての文書の間で整合性が維持されることを保証する。
【0125】
UndoWrapper707は、DocumentContainer203内のSubDocumentに関連するアンドゥオブジェクトをラップし、それらをRootDocumentに関連するアンドゥオブジェクトに結合させる。UndoWrapper707は、UndoableEditAcceptor(アンドゥアブルエディットアクセプタ:アンドゥ可能編集受付部)709に利用可能なアンドゥオブジェクトを収集させる。
【0126】
UndoManager706及びUndoWrapper707は、UndoableEditAcceptor708及びUndoableEditSource(アンドゥアブルエディットソース)708に接続される。当業者には理解されるように、Document705がUndoableEditSource708であってもよく、取消可能な編集オブジェクトのソースであってもよい。
【0127】
I.アンドゥコマンド及びアンドゥフレームワーク
図8(a)及び図8(b)は、アンドゥフレームワーク及びアンドゥコマンドについて更なる詳細を提供する。図8(a)に示されるように、UndoCommand801、RedoCommand802、及びUndoableEditCommand803は、図1(b)に示したようにCommandInvoker1051に積むことができるコマンドであり、順に実行される。UndoableEditCommand803は、UndoableEditSource708及びUndoableEditAcceptor709に更にアタッチされる。「foo」EditCommand803及び「bar」EditCommand804は、UndoableEditCommandの例である。
【0128】
1.UndoableEditCommandの実行
図8(b)は、UndoableEditCommandの実行を示す。まず、ユーザが編集コマンドを使用してDocument705を編集すると仮定する。第1ステップS1では、UndoableEditAcceptor709が、Document705のDOMツリーであるUndoableEditSource708にアタッチされる。第2ステップS2では、ユーザにより発行されたコマンドに基づいて、Document705がDOMのAPIを用いて編集される。第3ステップS3では、ミューテーションイベントのリスナーが、変更がなされたことを通知される。すなわち、このステップでは、DOMツリーの全ての変更を監視するリスナーが編集操作を検知する。第4ステップS4では、UndoableEditがUndoManager706のオブジェクトとして格納される。第5ステップS5では、UndoableEditAcceptor709がUndoableEditSource708からデタッチされる。UndoableEditSource708は、Document705自身であってもよい。
【0129】
J.システムへの文書のロードに関する手順
上記のサブセクションでは、システムの様々なコンポーネント及びサブコンポーネントについて説明した。以下、これらのコンポーネントの使用に関する方法論について説明する。図9は、文書処理システムに文書がロードされる様子の概要を示す。それぞれのステンプは、図14−18において、特定の例に関連して詳述される。
【0130】
簡単には、文書処理システムは、文書に含まれるデータからなるバイナリデータストリームからDOMを生成する。ApexNode(エイペックスノード:頂点ノード)が、注目対象でありZoneに属する文書の一部のために生成される。つづいて、対応するPaneが特定される。特定されたPaneは、ApexNode及び物理的な画面表面からZone及びCanvasを生成する。Zoneは、次に、それぞれのノードにFacetを生成し、それらに必要とされる情報を提供する。Canvasは、DOMツリーから、ノードをレンダリングするためのデータ構造を生成する。
【0131】
図19(a)で示すように、SHTMLやSVGコンテンツの両方で記述された複雑な文書はストレージ901からステップ0としてロードされる。その文書のDOMツリー902が作成される。DOMツリー902が一つの頂点ノード905を有し、そして木が他の枝に降りるように、境界では2方向に分かれる。他のボキャブラリ、例えばSVGの一つの頂点ノードもこれに従う。複雑な文書をこのように表現することは、文書を描写し、最終的に表示する方法を理解するのに有益である。
【0132】
次に、文書を保持するための、対応するDocumentContainer903が生成される。DocumentContainer903は、DocumentManager904にアタッチされる。DOMツリーは、ルートノードと、ときには複数のセカンダリノードを含む。
【0133】
一般に、このような文書は、テキスト及びグラフィクスの双方を含む。したがって、DOMツリーは、例えば、XHTMLサブツリーだけでなくSVGサブツリーを有してもよい。XHTMLサブツリーは、XHTMLのApexNode905を有する。同様に、SVGサブツリーは、SVGのApexNode906を有する。
【0134】
ステップ1では、ApexNode906が、画面の論理的なレイアウトであるPane907にアタッチされる。ステップ2では、Pane907は、PaneOwner(ペインオーナー:ペインの所有者)908であるCoreComponentに、ApexNode906のためのZoneFactoryを要求する。ステップ3では、PaneOwner908は、ZoneFactoryと、ApexNode906のためのCanvasFactoryであるEditletとを返す。
【0135】
ステップ4では、Pane907がZone909を生成する。Zone909はPane907にアタッチされる。ステップ5では、Zone909がそれぞれのノードに対してFacetを生成し、対応するノードにアタッチする。ステップ6では、Pane907がCanvas910を生成する。Canvas910はPane907にアタッチされる。Canvas910には様々なCommandが含まれる。ステップ7では、Canvas910が文書を画面にレンダリングするためのデータ構造を構築する。XHTMLの場合、これはボックスツリー構造を含む。
【0136】
1.ZoneのMVC
図9(b)は、MVCパラダイムを用いてZoneの構成の概要を示す。この場合、Zone及びFacetは文書に関連した入力であるから、モデル(M)はZone及びFacetを含む。Canvasと、文書を画面にレンダリングするためのデータ構造体は、ユーザが画面上に見る出力であるから、ビュー(V)はCanvas及びデータ構造体に対応する。Commandは、文書とその様々な関係に対して制御操作を実行するので、コントロール(C)はCanvasに含まれるCommandを含む。
【0137】
K.文書の表現
図10を用いて、文書及びその様々な表現の例について以下に説明する。この例で使用される文書は、テキストと画像の双方を含む。テキストは、XHTMLを用いて表され、画像は、SVGを用いて表される。図10は、文書のコンポーネント及び対応するオブジェクトの関係のMVC表現を詳細に示す。この例において、Document1001は、Document1001を保持するDocumentContainer1002にアタッチされる。文書はDOMツリー1003により表現される。DOMツリーは、ApexNode1004を含む。
【0138】
ApexNodeは、黒丸で表される。頂点でないノードは、白丸で表される。ノードを編集するために用いられるFacetは、三角形で表され、対応するノードにアタッチされる。文書がテキストと画像を有するので、この文書のDOMツリーは、XHTML部分とSVG部分を含む。ApexNode1004は、XHTMLサブツリーの最上のノードである。これは、文書のXHTML部分の物理的な表現のための最上PaneであるXHTMLPane1005にアタッチされる。ApexNode1004は、文書のDOMツリーの一部であるXHTMLZone1006にもアタッチされる。
【0139】
Node1004に対応するFacetも、XHTMLZone1006にアタッチされる。XHTMLZone1006は、XHTMLPane1005にアタッチされる。XHTMLEditletは、文書の論理的な表現であるXHTMLCanvas1007を生成する。XHTMLCanvas1007は、XHTMLPane1005にアタッチされる。XHTMLCanvas1007は、Document1001のXHTMLコンポーネントのためのBoxTree1009を生成する。文書のXHTML部分を保持し描画するために必要な様々なCommand1008も、XHTMLCanvas1005に追加される。
【0140】
同様に、文書のSVGサブツリーのApexNode1010は、文書のSVGコンポーネントを表現するDocumentのDOMツリーの一部であるSVGZone1011にアタッチされる。ApexNode1010は、文書のSVG部分の物理的な表現の最上のPaneであるSVGPane1013にアタッチされる。文書のSVG部分の論理的な表現を表すSVGCanvas1012は、SVGEditletにより生成され、SVGPane1013にアタッチされる。画面上に文書のSVG部分をレンダリングするためのデータ構造及びコマンドは、SVGCanvasにアタッチされる。例えば、このデータ構造は、図示されるように、円、線、長方形などを含んでもよい。
【0141】
図10に関連して説明された文書例の表現の一部について、図11(a)、図11(b)に関連して、前述したMVCパラダイムを用いて更に説明する。図11(a)は、文書1001のXHTMLコンポーネントにおけるMVの関係を簡略化して示す。モデルは、Document1001のXHTMLコンポーネントのためのXHTMLZone1103である。XHTMLZoneのツリーには、いくつかのNode及びそれらに対応するFacetが含まれる。対応するXHTMLZone及びPaneは、MVCパラダイムのモデル(M)部分の一部である。MVCパラダイムのビュー(V)部分は、Document1001のHTMLコンポーネントの、対応するXHTMLCanvas1102及びBoxTreeである。文書のXHTML部分は、Canvasと、それに含まれるCommandを使用して画面に描写される。キーボードやマウス入力などのイベントは、図示されるように、逆方向へ進む。
【0142】
SourcePaneは、更なる機能、すなわち、DOMの保有者としての役割を有する。図11(b)は、図11(a)に示したDocument1001のコンポーネントに対するボキャブラリコネクションを提供する。DOMホルダーとして機能するSourcePane1103は、文書のソースDOMツリーを含む。ConnectorTreeは、ConnectorFactoryにより生成され、デスティネーションDOMの保有者としても機能するDestinationPane1105を生成する。DestinationPane1105は、XHTMLDestinationCanvas1106としてボックスツリーの形式でレイアウトされる。
【0143】
L.プラグインサブシステム、ボキャブラリコネクション、及びコネクタの関係
図12(a)−(c)は、それぞれ、プラグインサブシステム、ボキャブラリコネクション、及びConnectorに関連する更なる詳細を示す。プラグインサブシステムは、文書処理システムに機能を追加又は交換するために用いられる。プラグインサブシステムは、ServiceBroker1041を含む。図12(a)で示すように、「My Own XML vocabulary」はVcBasePlugInとして提供され、そのプラグインには、My Own XML ConnectorFactoryTree及びボキャブラリ(ZoneFactoryBuilder)を含む。ServiceBroker1041にアタッチされるZoneFactoryService1201は、文書の一部に対するZoneを生成する。EditletService1202も、ServiceBrokerにアタッチされる。EditletService1202は、Zone中のNodeに対応するCanvasを生成する。
【0144】
ZoneFactoryの例は、XHTMLZone及びSVGZoneをそれぞれ生成するXHTMLZoneFactory1211及びSVGZoneFactory1212である。文書例に関連して前述したように、文書のテキストコンポーネントは、XHTMLZoneを生成することにより表現されてもよいし、画像はSVGZoneを用いて表現されてもよい。EditletServiceの例は、XHTMLEditlet1221及びSVGEditlet1222を含む。
【0145】
図12(b)は、ボキャブラリコネクションに関連する更なる詳細を示す。ボキャブラリコネクションは、前述したように、文書処理システムの重要な特徴であり、2つの異なる方法で文書の整合のとれた表現及び表示を可能とする。ConnectorFactory303を保持するVCManager302は、ボキャブラリコネクションサブシステムの一部である。図12(c)で示すように、ConnectorFactory303は、文書のConnector304を生成する。前述したように、Connectorは、ソースDOM中のノードを監視し、2つの表現の間の整合性を維持するために、デスティネーションDOM中のノードを修正する。
【0146】
Template317は、いくつかのノードの変換ルールを表す。ボキャブラリコネクション記述子(VCD)ファイルは、特定のパス又はルールを満たす要素又は要素の集合を他の要素に変換するいくつかのルールを表すTemplateのリストである。Template317及びCommandTemplate3131は、全てVCManager302にアタッチされる。VCManagerは、VCDファイル中の全てのセクションを管理するオブジェクトである。1つのVCDファイルに対して、1つのVCManagerオブジェクトが生成される。
【0147】
図12(c)は、Connectorに関連する更なる詳細を提供する。ConnectorFactory303は、ソース文書からConnectorを生成する。ConnectorFactory303は、Vocabulary、Template、及びElementTemplateにアタッチされ、それぞれ、VocabularyConnector、TemplateConnector、ElementConnectorを生成ずる。
【0148】
VCManager302は、ConnectorFactory303を保持する。Vocabularyを生成するために、対応するVCDファイルが読み込まれる。こうして、ConnectorFactory303が生成される。このConnectorFactory303は、Zoneを生成するZoneFactory及びCanvasを生成するEditletに関連する。
【0149】
つづいて、ターゲットボキャブラリのEditletServiceが、VCCanvasを生成する。VCCanvasも、ソースDOMツリー又はZoneにおけるApexNodeのConnectorを生成する。必要に応じて、子のConnectorが再帰的に生成される。ConnectorTreeは、VCDファイル中のテンプレートの集合により生成される。
【0150】
テンプレートは、マークアップ言語の要素を他の要素に変換するためのルールの集合である。例えば、各テンプレートは、ソースDOMツリー又はZoneにマッチされる。適切にマッチした場合には、頂点Connectorが生成される。例えば、テンプレート「A/*/D」は、間にどんなノードがあるかに関係なく、ノードAで始まりノードDで終わる全ての枝に合致する。同様に、「//B」は、ルートからの全ての「B」ノードに一致する。
【0151】
M.ConnectorTreeに関係するVCDファイルの例
特定の文書と関係する処理を説明する例を続ける。ドキュメントタイトルのある「MySampleXML」というタイトルの文書が文書処理システムにロードされる。図13は、「MySampleXML」ファイルのための、VCManager及びConnectorFactoryTreeを用いたVCDスクリプトの例を示す。スクリプトファイル中のボキャブラリセクション、テンプレートセクションと、VCManagerにおける対応するコンポーネントが示される。タグ「vcd:vocabulary」において、属性「match」は「sample:root」、「label」は「MySampleXML」、「call−template」は「sample template」となっている。
【0152】
この例では、Vocabularyは、「MySampleXML」のVCManagerにおいて「sample:root」として頂点要素を含む。対応するUIラベルは、「MySampleXML」である。テンプレートセクションにおいて、タグは「vcd:template」であり、名前は「sample:template」である。
【0153】
N.ファイルがシステムにロードされる方法の詳細な例
図14−18は、文書「MySampleXML」のロードについての詳細な記述を示す。図14(a)に示されるステップ1では、文書がストレージ1405からロードされる。DOMServiceは、DocumentContainer1401と対応するDOMツリー及びDocumentManager1406を生成する。DocumentContainer1401は、DocumentManager1406にアタッチされる。文書は、XHTML及びMySampleXMLのサブツリーを含む。XHTMLのApexNode1403は、タグ「xhtml:html」が付されたXHTMLの最上のノードである。「MySampleXML」のApexNode1404は、タグ「sample:root」が付された「MySampleXML」の最上ノードである。
【0154】
図14(b)に示されるステップ2では、RootPaneが文書のXHTMLZone、Facet、及びCanvasを生成する。Pane1407、XHTMLZone1408、XHTMLCanvas1409、及びBoxTree1410が、ApexNode1403に対応して生成される。
【0155】
図14(c)に示されるステップ3では、XHTMLZoneが知らないタグ「sample:root」を発見し、HTMLCanvasの領域からSubPaneを生成する。
【0156】
図15に示されるステップ4では、SubPaneが「sample:root」を扱うことができ、適切なZoneを生成可能なZoneFactoryを得る。このZoneFactoryは、ZoneFactoryを実行可能なVocabulary内にある。それは、「MySampleXML」のVocabularySectionの内容を含む。
【0157】
図16に示されるステップ5では、「MySampleXML」に対応するVocabularyがDefaultZone1601を生成する。対応するEditletが生成され、対応するCanvasを生成するためにSubPane1501が提供される。Editletは、VCCanvasを生成する。そして、それはTemplateSectionを呼ぶ。ConnectorFactoryTreeも含まれている。ConnectorFactoryTreeは、ConnectorTreeとなる全てのConnectorを生成する。文書のXHTMLコンテンツに関係するApexNodeに対するBoxTreeとXHTMLCanvas同様に、RootPaneとXHTMLZoneとの関係も前述の内容からすぐに理解されよう。
【0158】
図17(a)に示されるステップ6では、ソースDOMツリー間の対応をもとに、各ConnectorがデスティネーションDOMオブジェクトを生成する。コネクタのうちのいくつかはxpath情報を含んでいる。xpath情報は、変更/修正を監視する必要のあるソースDOMツリーの部分集合を決定するために使用される1以上のxpath表現を含む。
【0159】
図17(b)に示されるステップ7では、ソース・VC・ディスティネーションの関係に従って、ボキャブラリは、ソースDOMのペインからデスティネーションDOMツリーのDestinationPaneを作成する。これは、SourcePaneに基づいてなされる。デスティネーションツリーのApexNodeは、DestinationPane及び対応するZoneにアタッチされる。DestinationPaneは、DestinationCanvasを生成し、文書をデスティネーションのフォーマットでレンダリングするためのデータ構造及びコマンドを構築する、自身のEditletを提供される。
【0160】
図18(a)は、対応するソースノードを持たず、デスティネーションツリーにのみ存在するノード上でイベントが発生したときのフローを示す。マウスイベント、キーボードイベントなど、Canvasが取得したイベントは、デスティネーションツリーを通過して、ElementTemplateConnectorに伝達される。ElementTemplateConnectorは対応するソースノードを持たないので、伝達されたイベントはソースノードに対する編集操作ではない。ElementTemplateConnectorは、伝達されたイベントがCommandTemplateに記述されたコマンドに合致すれば、それに対応するActionを実行する。合致するコマンドがなければ、ElementTemplateConnectorは、伝達されたイベントを無視する。
【0161】
図18(b)は、TextOfConnectorによりソースノードに対応づけられているデスティネーションツリーのノード上でイベントが発生したときのフローを示す。TextOfConnectorは、ソースDOMツリーのXPathで指定されたノードからテキストノードを取得して、デスティネーションDOMツリーのノードにマッピングする。マウスイベント、キーボードイベントなど、Canvasが取得したイベントは、デスティネーションツリーを通過して、TextOfConnectorに伝達される。TextOfConnectorは、伝達されたイベントを、対応するソースノードの編集コマンドにマッピングし、Queue1053に積む。編集コマンドは、Facetを介して実行されるDOMのAPIコールの集合である。キューに積まれたコマンドが実行されると、ソースノードが編集される。ソースノードが編集されると、ミューテーションイベントが発行され、リスナーとして登録されたTextOfConnectorにソースノードの変更が通知される。TextOfConnectorは、ソースノードの変更を、対応するデスティネーションノードに反映させるように、デスティネーションツリーを再構築する。このとき、TextOfConnectorを含むテンプレートに、「for each」や「for loop」などの制御文が含まれている場合、ConnectorFactoryがこの制御文を再評価し、TextOfConnectorを再構築した後、デスティネーションツリーが再構築される。
【0162】
(取消操作の詳細)
本発明は、XMLなどのマークアップ言語を用いて用意された文書における変更を、プログラマがコマンドを直接取り消す操作を実装したり、DOM構造を自身で編集し全ての変更を監視可能に設けたりするよりも、効率的な方式で取り消す機能に関する。
【0163】
開示された文書処理/管理システムにおいて取消機能を提供するための効率的な方法及び構成の必要性により、図8(a)及び図8(b)に関連して既に説明した第1の方法が導かれた。ユーザにより発行されたコマンドに対応する文書705の編集は、ミューテーションイベント及びDOMに対する変更として監視され、取消可能な編集として識別されて、後のアクセスのためにアンドゥ管理部706に格納される。別の方法も、DOMツリーを監視し、DOMツリー自身を、取消可能なコマンドにより受信される取消可能な編集を発行し、蓄積及び後のアクセスのためにアンドゥ管理部に送信するオブジェクトとして用いることにより実現される。いずれの場合も、DOMツリーとして文書を表現することに関連して2つの方法を説明したが、開示された技術はツリー又はグラフとして表現可能な任意の情報に適用可能であるから、本発明はDOMツリー構造の使用に限られない。
【0164】
取消操作を実現するための最初の方法に関連して、図7(a)、8(a)、8(b)、及び11(b)に関連して既に説明したように、図3に示したconnectXpathの機能であるXpathを用いて、コネクタがソースノードを監視する。Xpathは、テンプレートマッチングプロセスにおいてテンプレートを用いてソースノードを監視する。任意の種類のテンプレートマッチングがソースDOMツリーのノードの部分集合を監視するための用いられてもよい。実際の例において、DOMツリーの部分集合は、DOMツリーの部分集合を監視し、部分集合がテンプレートにマッチするか否かを判定する基本的なテンプレート方式を用いて監視されてもよい。監視されたDOMツリーの部分集合における任意の変更が検出されると、監視された部分集合における変更を反映するために、DOMツリーの表現が自動的に更新される。例えば、DOMに対する変更を監視することに関連して既に説明したように、テンプレート「A/*/D」は、間のノードが何であるかに関わらず、ノード「A」で始まり、ノード「D」で終わるツリーの全ての枝を監視する。同様に、「//B」は、ルートからの全てのノード「B」に対応する。
【0165】
connectXpathにより監視されたノードの集合内のノードに変更が生じたとき、DOM構造内の変更イベントのリスナーがこれを受信する。ミューテーションイベントリスナーは、変更イベントを識別すると、「ミューテーションイベント」通知を送信する。connectXpat(図17参照)hは、このミューテーションイベントを取得する。connectXpathは、ミューテーションイベントを評価する。監視されたノードに変更が生じると、値の変更を受信する1以上の機能が通知される。監視されたノードに影響を与える他のノードが存在する場合、これらのノードもリスナーに提供される。
【0166】
図19(a)は、connectXpathがVCとともに用いられた、変更ベースの取消操作の実装例を示す。編集される文書は、DOM1910により表現される。DOM1910は、ノードAを頂点ノードとする複数のリンクされたノードA、B、C、D、及びEを有する。編集の結果、波線により示されるように、別のノードBがノードAに追加される。VCDはルートからそれぞれの元の「B」ノードの表現を生成するように記述されている。この場合、この場合、connectXpathは、テンプレート「//B」のパスを充足する全てのノードを監視する。図から分かるように、実際のDOMには、2つの「B」ノード1901、1902がある。第3の「B」ノード1903が編集されたDOMに追加される。connectXpath1905はDOMに対するこの変更1904をピックアップし、新規に生成された「B」ノードにマップする。ミューテーションイベント1904も、取消編集オブジェクトを生成し登録するために、アンドゥ管理部1940に提供される。
【0167】
必要であれば、適切なミューテーションイベントのみが実行されるように、文書の特定の部分が監視され、抽出される。
【0168】
図19(b)は、DOMの変更が取消可能な編集の生成及び保存をもたらす別の方式の概略的表現である。図1(b)において、コマンドシステム105に関連して既に説明したように、本発明によれば、DOMに対する操作は、ユーザが定義可能なDOM操作である「コマンド」にカプセル化される。コマンドが実行されると、DOMはなされた変更のそれぞれについて「取消可能な編集」を発行し、UndoableCommandサービスは「取消可能な編集」を検出して、対応する取消操作を生成する。実行が終わると、まとめられた取消可能な編集が取消のためにアンドゥ管理部に登録される。
【0169】
再び図19(b)を参照して、ノードAを頂点ノードとする複数のリンクされたノードA、B、C、D、及びEを有するDOM1910のツリー状の表現が設けられる。ノードAにつながる波線により示されるようにノードBを変更する編集の結果、変更を指示した複数のUndoableCommand1920のうちの1つが変更の実行を検知し、UndoableEdit1930を生成させる。UndoableEdit1930は、与えられた変更を取り消す必要が生じたときのアクセスのために、アンドゥ管理部1930(図2のUndoManager2121に対応する)に格納される。編集は、文書のテキスト、図、チャート、画像、又は音楽及び映像要素のいずれであってもよい。
【0170】
図20及び21は、複合取消編集操作の図解及びチャート形式の流れをそれぞれ提供する。アンドゥプロセス2000、2100によれば、第1のフローステップ2110において、1以上のインスタンス2011、2012において発行された種々のコマンドのいすれかによるDOM2005の操作又は変更DOM2005の変更のトリガとなる。DOMの操作は、このようなコマンド、例えば、図7(a)、8(a)、及び8(b)におけるUndoableEditAcceptor708に対応するUndoableCommand2030を介して発行されなければならない。このような変更は、ステップ2120において、DOM2005による1以上のUndoableEdit2025、2026などの生成をもたらす。それぞれのUndoableEdit2025、2026などは、UndoableCommandプロセス2030によりピックアップされる1以上の取消可能な編集オブジェクトに関連付けられ、ステップ2130において、発行されたコマンドの実行が終了するまで収集される。編集は細かい粒度で発行され、DOMに対する意味のある操作の集合を形成するように収集されなければならないので、複数の取消可能な編集オブジェクトの収集が必要である。図7(a)に関連して、この収集操作はUndoWrapper707により実行される。収集された又はラップされた取消可能な編集オブジェクトは、ステップ2140に示されるように、アンドゥ管理部2040(図7(a)では706)に登録される。
【0171】
複数のUndoableEditCommandが存在するとき、与えられた文書のために集められた「複合編集」2050がある。この場合、実行が完了すると、UndoableCommand2030の1以上のUndoableEditの集合がアンドゥ管理部560に登録される。
【0172】
UndoableCommandプロセスの実施例は、図22−32に示される複合文書の複合編集に関連した一連のスクリーンショットの形式で提供される。スクリーンショットは、複合文書に対するいくつかの編集を通じて、本発明の実施の形態に係る取消操作の流れを示す。文書自体は、画面上に表示されるXHTML部分とSVG部分の組合せである。画面は、既知のJava(登録商標)−Eclipseプラットフォームに基づく。
【0173】
図22に示した取消操作は、XHTML部分2210、SVG部分2220、及び別のXHTML部分2230を有する複合文書2200の編集を含む。前述の説明に基づいて、編集操作は文書を表現するモデルであるDOMの操作により実現されることが理解されよう。DOMに対する変更はDOMにより発行され、アンドゥ管理部2040に収集され格納される変更及び/又は取消可能な編集を検知することにより監視される。ユーザにより入力される一連の編集コマンドとして、DOMが変更され、アンドゥ管理部のエントリが蓄積される。以前のエントリは上書き又は破壊されない。さらに、DOMが操作されると、文書のモデルとしてのDOMの現バージョンが、文書の現在編集されたバージョンの表示を画面に描画するために用いられる。前述したように、ボックス方式を用いることにより、レンダリングのスピードを向上させることができる。同じ又はリンクされた文書の複数のXMLコンテンツの間のリンクに基づいて、リンクされた全ての表示要素に編集が反映される。同様に、編集が逆戻り又は取り消されると、取消可能な編集オブジェクトを取得するためにアンドゥ管理部2040にアクセスし、DOMの変更により編集が逆戻りされる。後述するように、DOMの描画により編集の逆戻りが示される。
【0174】
図23に関連して、「第1の編集」2310がXHTML部分2110において文書2200になされ、「第2の編集」2220がSVG部分2220になされる。その後、「第3の編集」2330がXHTML部分2210になされる。本発明は、取消機能を確立し、処理する機能を有し、図23の例に示したように、「第3の編集」2330、「第2の編集」2320、及び「第1の編集」2310に対するシームレスな取消操作を実現する。
【0175】
図24は、ユーザの画面に表示された第1の編集2310、第2の編集2320、及び第3の編集2330と、ソースコーリスト2400の対応するエントリ2410、2420、及び2430を並列して示す。
【0176】
上述したように、取消操作は、それぞれの取消編集をアンドゥオブジェクトとして格納又は登録したアンドゥ管理部2040にアクセスすることにより実行される。アンドゥオブジェクトの取得により、文書のモデルとしてのDOMに更なる操作が行われ、実行された編集を逆に勧めることによりDOMが元に戻される。後述するように、編集が元に戻されたことが、画面上にDOMをレンダリングすることにより示される。こうして、図25に示すように、入力時において最後の編集であった「第3の編集」から「取消」が開始され、追加されたXHTMLの編集の最後の文字から取り消しが始まる。図示するように、最後の編集の最後の文字は「t」であり、図の2510に文字「t」が取り消された状態が示される。取消操作は、XHTMLアプリケーションに対して、編集が完了するまで文字毎に続行される。つづいて、取消操作は、用いられたアプリケーション(XHTML、SVG、MATHMLなど)にかかわらず、最後から2番目に入力された編集へ続く。
【0177】
例によれば、最後から2番目の編集は「第2の編集」2320であったので、取消処理により「第3の編集」が削除されると、次の取消操作は第2の編集にうつり、図26に示すように、その全体が削除されるまで続けられる。第2の編集は1つの操作により追加されたので、1つの取消操作で削除可能である。第1の編集2310はまだ残っている。
【0178】
図27に示すように、更なる取消操作は「第1の編集」2310にうつり、本発明の一形態によれば、XHTMLによる入力は文字毎に扱われるので、2710で示される文字「t」の削除から開始される。文書のXHTML部分において、取消操作を目的とした文字毎の取扱が望ましいが、単語毎、文毎など、必要であれば他のルールに変更可能であることは明らかである。
【0179】
取消操作が完了し、第1、第2、及び第3の編集の全てが取り消されると、図28に示した画面となる。
【0180】
図29は、コマンドベースの取消操作を示す。この「daily−report2.vcd」において、コマンド「add−report」が定義される。このコマンドを実行すると、レポートが追加される。その他のコマンド、例えば、「レポートの削除」、「画像の削除」、「新規SVG」、「テーブル挿入」などが定義されてもよい。コマンドの実行は、編集の準備、実行(図10に関連して説明した方式で図2の「Facet」2022サービスを用いて)、登録を含む。コマンドが実行され登録されると、取消操作が可能となる。取消操作は、コマンド全体を取り消す効果を有する。ユーザに提示されるコマンド自体を図30に示す。
【0181】
タグ「diary:report」及びその子が図31において追加される。この画面から取消操作を実行すると、図32にようになる。1つの取消操作でコマンド自体を取り消すことができる。
【0182】
上記の説明から、DOMの監視が変更の監視によるものであっても、取消編集コマンドの識別によるものであっても、後続の逆戻りのために取消イベントオブジェクトの収集及び登録をもたらす。検知、識別、及び登録は、イベントベースで行われてもよいし、ボックスツリー方式を用いてイベントを収集することにより行われてもよい。後者の場合、複数のイベントが単一のボックスに発生するので、変更されたがまだ描画されていないボックスの内容を識別する「ダーティーフラグ」技術が用いられてもよい。こうして、描画は、異なるスレッドを用いた並列的な実行により、文書に対する関連した複数の変更が完了するまで、適切な期間延期される。
【0183】
さらに、開示された取消技術により、プログラマは、コマンドを用いる所定のテンプレートを参照するだけで取消操作のためのコマンドを用意することができる。この方式では、Java(登録商標)言語の抽象クラスとして編集操作を実装可能である。
【0184】
本発明の他の改良や変更は、上記の開示及び教示から当業者には明らかである。したがって、本発明の特定の実施例のみをとくに例示したが、本発明の趣旨及び範囲から逸脱することなく、それらに種々の変更が可能であることは明らかである。
【図面の簡単な説明】
【0185】
【図1(a)】開示した文書処理システムの典型的な実装の基本となるコンポーネントの標準的な配置を示す図である。
【図1(b)】典型的な文書処理システムの全体的なブロック図である。
【図1(c)】典型的な文書処理システムの全体的なブロック図である。
【図2】「Document Manager」の典型的な実装について詳細を示す図である。
【図3】「Vocabulary Connection」サブシステム300の典型的な実装について詳細を示す図である。
【図4】図4(a)は、「Program Invoker」及びそれに関連する他のコンポーネントの典型的な実装について詳細を示す図であり、図4(b)は、「Service Broker」及びそれに関連する他のコンポーネントの典型的な実装について詳細を示す図であり、図4(c)は、「Service」の典型的な実装について詳細を示す図であり、図4(d)は、「Service」の例を示す図であり、図4(e)は、「Program Invoker」103と「User Application」106との関係について詳細を示す図である。
【図5】図5(a)は、「Program Invoker」上に展開される「Application Service」の構造について詳細を示す図であり、図5(b)は、「Frame」、「MenuBar」、「StatusBar」の関係の例を示す図であり、
【図6】図6(a)は、「Application Core」の典型的な実装について詳細を示す図であり、図6(b)は、「Snap Shot」の典型的な実装について詳細を示す図である。
【図7】図7(a)は、「Application Core」の典型的な実装について詳細を示す図であり、図7(b)は、AからEの「Document」の組がどのように階層化されるのかの例を示す図であり、図7(c)は、図7(b)で示した「Document」の階層がスクリーン上でどのように見えるのかの例を示す図である。
【図8】「Undo Framework」及び「Undo Command」の典型的な実装の詳細を示す図である。
【図9】図9(a)は、図1(b)、図1(c)で示す文書処理システム内に「Document」がどのように展開されるかの全体像を示す図であり、図9(b)は、MVCパラダイムを使って、「Zone」の構造の概要を示す図である。
【図10】本発明に従って、「Document」とその様々な表現の例を示す図である。
【図11】図11(a)は、図10で示す「Document」のXHTMLコンポーネントに対する「MV」関係の概要を示す図であり、図11(b)は、図11(a)で示す「Document」に対するボキャブラリコネクションを示す図である。
【図12】プラグインサブシステム、ボキャブラリコネクション、コネクタそれぞれの典型的な実装について詳細を示す図である。
【図13】MySampleXMLに対して、ボキャブラリコネクションマネージャとコネクタファクトリーツリーを使用するVCDスクリプトの例を示す図である。
【図14】図1(b)の典型的な文書処理システムの中に、文書例MYSampleXMLが展開されるステップ0から3を示した図である。
【図15】図1(b)の典型的な文書処理システムの中に、文書例MySampleXMLが展開されるステップ4を示した図である。
【図16】図1(b)の典型的な文書処理システムの中に、文書例MySampleXMLが展開されるステップ5を示した図である。
【図17(a)】図1(b)の典型的な文書処理システムの中に、文書例MySampleXMLが展開されるステップ6を示した図である。
【図17(b)】図1(b)の典型的な文書処理システムの中に、文書例MySampleXMLが展開されるステップ7を示した図である。
【図18】図18(a)は、対応するソースノードを持たず、ディスティネーションツリーのみに依存するノードで発生するイベントのフローを示す図であり、図18(b)は、「TextOfConnector」によりソースノードと連動するディスティネーションツリーのノードで発生するイベントのフローを示す図である。
【図19(a)】DOMの変更が取消可能コマンドの生成及び保存をもたらす様子を概略的に示す図である。
【図19(b)】DOMの変更が取消可能コマンドの生成及び保存をもたらす様子を概略的に示す図である。
【図20】DOMの変更が複合的な編集をもたらす様子を概略的に示す図である。
【図21】図20でなされた変更により表現される手順を示すフローチャートである。
【図22】XHTML及びSVGコンテンツを有する複合文書を処理における取消操作の流れの第1のスクリーンショットを示す図である。
【図23】第1から第3の編集を行った図22の文書のスクリーンショットを示す図である。
【図24】ソースコードを付した図22の文書のスクリーンショットを示す図である。
【図25】XHTMLの第3の編集を文字ごとに取り消す操作のスクリーンショットを示す図である。
【図26】第3(XHTML)及び第2(SVG)の編集の取消操作のスクリーンショットを示す図である。
【図27】残りの第1の編集の取消操作のスクリーンショットを示す図である。
【図28】全ての編集が実行されていない状態のスクリーンショットを示す図である。
【図29】コマンドベースの取消操作のスクリーンショットを示す図である。
【図30】図29のコマンド自体のスクリーンショットを示す図である。
【図31】「diary:report」要素が追加された状態のスクリーンショットを示す図である。
【図32】取消操作の結果のスクリーンショットを示す図である。
【符号の説明】
【0186】
【特許請求の範囲】
【請求項1】
DOMにより表現されたXML文書の取消を提供する方法であって、
前記DOMの変更を検知する工程と、
前記DOMにおける検知された変更に対応する編集命令を生成する工程と、
コマンドにより前記編集命令を検知する工程と、
複数の検知された前記編集命令を収集する工程と、
収集された前記編集命令を登録する工程と、
を備えることを特徴とする方法。
【請求項2】
前記検知する工程は、前記DOMにおける複数の変更を検知する工程を含み、
前記生成する工程は、前記DOMにおけるそれぞれの変更に対する編集命令を生成する工程を含み、
前記検知する工程は、コマンドが複数の編集命令を検知する工程を含み、
前記登録する工程は、前記複数の編集命令を前記コマンドとともに登録する工程を含むことを特徴とする請求項1に記載の方法。
【請求項3】
前記DOMに対する前記複数の変更の少なくとも2つは、異なるアプリケーションによることを特徴とする請求項2に記載の方法。
【請求項4】
前記アプリケーションの少なくとも1つは、XHTML及びSVGの少なくとも1つであることを特徴とする請求項3に記載の方法。
【請求項5】
登録された前記命令の少なくとも1つを取得する工程と、
前記DOMの対応する部分を再構築するために前記取得した編集命令を適用する工程と、
を更に備えることを特徴とする請求項1に記載の方法。
【請求項6】
前記取得する工程は、複数の登録された命令を取得する工程を含み、
前記適用する工程は、前記DOMの対応する部分を再構築するために前記複数の命令を適用する工程を含むことを特徴とする請求項5に記載の方法。
【請求項7】
前記複数の登録された命令は、単一のコマンドに関することを特徴とする請求項6に記載の方法。
【請求項8】
前記複数の登録された命令は、複数のコマンドに関することを特徴とする請求項6に記載の方法。
【請求項9】
前記複数の登録された命令は、それらが生成された順序とは逆に適用されることを特徴とする請求項6に記載の方法。
【請求項10】
前記アプリケーションの少なくとも1つはXHTMLアプリケーションであり、
前記複数の登録された命令は、前記XHTMLアプリケーションにおける個々の文字に関することを特徴とする請求項4に記載の方法。
【請求項11】
前記登録された編集命令の少なくとも1つにアクセスする工程と、
前記登録された編集命令を用いて編集の取消を指示する工程と、
を更に備えることを特徴とする請求項1に記載の方法。
【請求項12】
DOMにより表現されたXML文書の取消を提供する方法であって、
前記DOMの変更を検知する工程と、
前記DOMにおける検知された変更に対応する変更イベントを生成する工程と、
検知された前記変更イベントを収集し、対応する編集命令を生成する工程と、
生成された編集命令を登録する工程と、
を備えることを特徴とする方法。
【請求項13】
前記登録された編集命令の少なくとも1つにアクセスする工程と、
前記登録された編集命令を用いて編集の取消を指示する工程と、
を更に備えることを特徴とする請求項12に記載の方法。
【請求項14】
DOMにより表現されたXML文書の取消を提供する機能を有する文書管理システムであって、
前記DOMの変更を検知する手段と、
前記DOMにおける検知された変更に対応する編集命令を生成する手段と、
コマンドにより前記編集命令を検知する手段と、
複数の検知された前記編集命令を収集する手段と、
前記コマンド及び収集された前記編集命令を登録する手段と、
を備えることを特徴とする文書管理システム。
【請求項15】
前記検知する手段は、前記DOMにおける複数の変更を検知する機能を含み、
前記生成する手段は、前記DOMにおけるそれぞれの変更に対する編集命令を生成する機能を含み、
前記検知する手段は、複数の編集命令を検知する機能を含むコマンドを有し、
前記登録する手段は、前記複数の編集命令を前記コマンドとともに登録する機能を含むことを特徴とする請求項14に記載の文書管理システム。
【請求項16】
前記DOMに対する前記複数の変更の少なくとも2つは、異なるアプリケーションによることを特徴とする請求項15に記載の文書管理システム。
【請求項17】
前記アプリケーションの少なくとも1つは、XHTML及びSVGの少なくとも1つであることを特徴とする請求項16に記載の文書管理システム。
【請求項18】
登録された前記命令の少なくとも1つを取得する手段と、
前記DOMの対応する部分を再構築するために前記取得した編集命令を適用する手段と、
を更に備えることを特徴とする請求項14に記載の文書管理システム。
【請求項19】
前記取得する手段は、複数の登録された命令を取得する機能を含み、
前記適用する手段は、前記DOMの対応する部分を再構築するために前記複数の命令を適用する機能を含むことを特徴とする請求項18に記載の文書管理システム。
【請求項20】
前記複数の登録された命令は、単一のコマンドに関することを特徴とする請求項19に記載の文書管理システム。
【請求項21】
前記複数の登録された命令は、複数のコマンドに関することを特徴とする請求項19に記載の文書管理システム。
【請求項22】
前記複数の登録された命令は、それらが生成された順序とは逆に適用されることを特徴とする請求項19に記載の文書管理システム。
【請求項23】
前記アプリケーションの少なくとも1つはXHTMLアプリケーションであり、
前記複数の登録された命令は、前記XHTMLアプリケーションにおける個々の文字に関することを特徴とする請求項17に記載の文書管理システム。
【請求項24】
DOMにより表現されたXML文書の取消を提供する機能を有する文書管理システムであって、
前記DOMの変更を検知する手段と、
前記DOMにおける検知された変更に対応する変更イベントを生成する手段と、
前記変更イベントに基づいて編集命令を生成する手段と、
前記コマンド及び複数の検知された編集命令を登録する手段と、
を備えることを特徴とする文書管理システム。
【請求項25】
DOMにより表現されたXML文書の取消を提供する機能を有し、プロセッサと、メモリと、ディスプレーと、操作入力手段と、を有する装置であって、
前記DOMの変更を検知する手段と、
前記DOMにおける検知された変更に対応する編集命令を生成する手段と、
コマンドにより前記編集命令を検知する手段と、
前記コマンド及び検知された前記編集命令を登録する手段と、
を備えることを特徴とする装置。
【請求項26】
前記検知する手段は、前記DOMにおける複数の変更を検知する機能を含み、
前記生成する手段は、前記DOMにおけるそれぞれの変更に対する編集命令を生成する機能を含み、
前記検知する手段は、複数の編集命令を検知する機能を含むコマンドを有し、
前記登録する手段は、前記複数の編集命令を前記コマンドとともに登録する機能を含むことを特徴とする請求項25に記載の装置。
【請求項27】
前記DOMに対する前記複数の変更の少なくとも2つは、異なるアプリケーションによることを特徴とする請求項26に記載の装置。
【請求項28】
前記アプリケーションの少なくとも1つは、XHTML及びSVGの少なくとも1つであることを特徴とする請求項27に記載の装置。
【請求項29】
登録された前記命令の少なくとも1つを取得する手段と、
前記DOMの対応する部分を再構築するために前記取得した編集命令を適用する手段と、
を更に備えることを特徴とする請求項25に記載の装置。
【請求項30】
前記取得する手段は、複数の登録された命令を取得する機能を含み、
前記適用する手段は、前記DOMの対応する部分を再構築するために前記複数の命令を適用する機能を含むことを特徴とする請求項29に記載の装置。
【請求項31】
前記複数の登録された命令は、単一のコマンドに関することを特徴とする請求項30に記載の装置。
【請求項32】
前記複数の登録された命令は、複数のコマンドに関することを特徴とする請求項30に記載の装置。
【請求項33】
前記複数の登録された命令は、それらが生成された順序とは逆に適用されることを特徴とする請求項30に記載の装置。
【請求項34】
前記アプリケーションの少なくとも1つはXHTMLアプリケーションであり、
前記複数の登録された命令は、前記XHTMLアプリケーションにおける個々の文字に関することを特徴とする請求項28に記載の装置。
【請求項35】
DOMにより表現されたXML文書の取消を提供する機能を有し、プロセッサと、メモリと、ディスプレーと、操作入力手段と、を有する装置であって、
前記DOMの変更を検知する手段と、
前記DOMにおける検知された変更に対応する変更イベントを生成する手段と、
前記変更イベントに基づいて編集命令を生成する手段と、
前記コマンド及び複数の検知された編集命令を登録する手段と、
を備えることを特徴とする装置。
【請求項36】
XML文書を編集し、前記文書の編集を取り消す機能を有するプログラムを提供するためのユーザインタフェースであって、
少なくとも1つの編集可能部分を備える編集可能なXML文書の表示と、
DOMの変更を生成し、表示されたXML文書を編集し、コマンド及び編集命令を格納させる、前記編集可能なXML文書に対するユーザ入力と、
前記コマンド及び編集命令を取得するために取消コマンドを選択するための前記ユーザ入力と、
を備えることを特徴とするユーザインタフェース。
【請求項37】
前記ユーザ入力は、表示された編集中のXML文書の取消を制御する機能を有することを特徴とする請求項36に記載のユーザインタフェース。
【請求項38】
ユーザに、マークアップ言語文書を編集し、前記文書の編集を取り消す機能を有するプログラムを提供するためのプログラマインタフェースであって、
所定のコマンドのための複数の所定のテンプレートを有するストレージと、
DOMに対する変更を監視し、複数のマークアップ言語アプリケーションに反映させるためのテンプレートをプログラムが定義することを可能とするためにコードを表示するための表示と、
ユーザが、前記複数のテンプレートにアクセスし、取消操作を実装することを可能とするためのユーザインタフェースと、
を備えることを特徴とするプログラマインタフェース。
【請求項39】
DOMにより表現されたXML文書の取消を提供する方法をコンピュータに実現させるためのプログラムが記録された記録媒体であって、
前記DOMにおける検知された変更に対応する編集命令を生成する工程と、
コマンドにより前記編集命令を検知する工程と、
複数の検知された前記編集命令を収集する工程と、
収集された前記編集命令を登録する工程と、
を備えることを特徴とする記録媒体。
【請求項40】
前記検知する工程は、前記DOMにおける複数の変更を検知する工程を含み、
前記生成する工程は、前記DOMにおけるそれぞれの変更に対する編集命令を生成する工程を含み、
前記検知する工程は、コマンドが複数の編集命令を検知する工程を含み、
前記登録する工程は、前記複数の編集命令を前記コマンドとともに登録する工程を含むことを特徴とする請求項39に記載の記録媒体。
【請求項41】
前記DOMに対する前記複数の変更の少なくとも2つは、異なるアプリケーションによることを特徴とする請求項40に記載の記録媒体。
【請求項42】
前記アプリケーションの少なくとも1つは、XHTML及びSVGの少なくとも1つであることを特徴とする請求項41に記載の記録媒体。
【請求項43】
登録された前記命令の少なくとも1つを取得する工程と、
前記DOMの対応する部分を再構築するために前記取得した編集命令を適用する工程と、
を更に備えることを特徴とする請求項39に記載の記録媒体。
【請求項44】
前記取得する工程は、複数の登録された命令を取得する工程を含み、
前記適用する工程は、前記DOMの対応する部分を再構築するために前記複数の命令を適用する工程を含むことを特徴とする請求項43に記載の記録媒体。
【請求項45】
前記複数の登録された命令は、単一のコマンドに関することを特徴とする請求項44に記載の記録媒体。
【請求項46】
前記複数の登録された命令は、それらが生成された順序とは逆に適用されることを特徴とする請求項44に記載の記録媒体。
【請求項47】
前記アプリケーションの少なくとも1つはXHTMLアプリケーションであり、
前記複数の登録された命令は、前記XHTMLアプリケーションにおける個々の文字に関することを特徴とする請求項46に記載の記録媒体。
【請求項48】
前記登録された編集命令の少なくとも1つにアクセスする工程と、
前記登録された編集命令を用いて編集の取消を指示する工程と、
を更に備えることを特徴とする請求項39に記載の記録媒体。
【請求項49】
DOMにより表現されたXML文書の取消を提供する方法をコンピュータに実現させるためのプログラムが記録された記録媒体であって、
前記DOMにおける変更を検知する工程と、
前記DOMにおける検知された変更に対応する変更イベントを生成する工程と、
検知された前記変更イベントを収集し、対応する編集命令を生成する工程と、
生成された編集命令を登録する工程と、
を備えることを特徴とする記録媒体。
【請求項50】
前記登録された編集命令の少なくとも1つにアクセスする工程と、
前記登録された編集命令を用いて編集の取消を指示する工程と、
を更に備えることを特徴とする請求項49に記載の記録媒体。
【請求項1】
DOMにより表現されたXML文書の取消を提供する方法であって、
前記DOMの変更を検知する工程と、
前記DOMにおける検知された変更に対応する編集命令を生成する工程と、
コマンドにより前記編集命令を検知する工程と、
複数の検知された前記編集命令を収集する工程と、
収集された前記編集命令を登録する工程と、
を備えることを特徴とする方法。
【請求項2】
前記検知する工程は、前記DOMにおける複数の変更を検知する工程を含み、
前記生成する工程は、前記DOMにおけるそれぞれの変更に対する編集命令を生成する工程を含み、
前記検知する工程は、コマンドが複数の編集命令を検知する工程を含み、
前記登録する工程は、前記複数の編集命令を前記コマンドとともに登録する工程を含むことを特徴とする請求項1に記載の方法。
【請求項3】
前記DOMに対する前記複数の変更の少なくとも2つは、異なるアプリケーションによることを特徴とする請求項2に記載の方法。
【請求項4】
前記アプリケーションの少なくとも1つは、XHTML及びSVGの少なくとも1つであることを特徴とする請求項3に記載の方法。
【請求項5】
登録された前記命令の少なくとも1つを取得する工程と、
前記DOMの対応する部分を再構築するために前記取得した編集命令を適用する工程と、
を更に備えることを特徴とする請求項1に記載の方法。
【請求項6】
前記取得する工程は、複数の登録された命令を取得する工程を含み、
前記適用する工程は、前記DOMの対応する部分を再構築するために前記複数の命令を適用する工程を含むことを特徴とする請求項5に記載の方法。
【請求項7】
前記複数の登録された命令は、単一のコマンドに関することを特徴とする請求項6に記載の方法。
【請求項8】
前記複数の登録された命令は、複数のコマンドに関することを特徴とする請求項6に記載の方法。
【請求項9】
前記複数の登録された命令は、それらが生成された順序とは逆に適用されることを特徴とする請求項6に記載の方法。
【請求項10】
前記アプリケーションの少なくとも1つはXHTMLアプリケーションであり、
前記複数の登録された命令は、前記XHTMLアプリケーションにおける個々の文字に関することを特徴とする請求項4に記載の方法。
【請求項11】
前記登録された編集命令の少なくとも1つにアクセスする工程と、
前記登録された編集命令を用いて編集の取消を指示する工程と、
を更に備えることを特徴とする請求項1に記載の方法。
【請求項12】
DOMにより表現されたXML文書の取消を提供する方法であって、
前記DOMの変更を検知する工程と、
前記DOMにおける検知された変更に対応する変更イベントを生成する工程と、
検知された前記変更イベントを収集し、対応する編集命令を生成する工程と、
生成された編集命令を登録する工程と、
を備えることを特徴とする方法。
【請求項13】
前記登録された編集命令の少なくとも1つにアクセスする工程と、
前記登録された編集命令を用いて編集の取消を指示する工程と、
を更に備えることを特徴とする請求項12に記載の方法。
【請求項14】
DOMにより表現されたXML文書の取消を提供する機能を有する文書管理システムであって、
前記DOMの変更を検知する手段と、
前記DOMにおける検知された変更に対応する編集命令を生成する手段と、
コマンドにより前記編集命令を検知する手段と、
複数の検知された前記編集命令を収集する手段と、
前記コマンド及び収集された前記編集命令を登録する手段と、
を備えることを特徴とする文書管理システム。
【請求項15】
前記検知する手段は、前記DOMにおける複数の変更を検知する機能を含み、
前記生成する手段は、前記DOMにおけるそれぞれの変更に対する編集命令を生成する機能を含み、
前記検知する手段は、複数の編集命令を検知する機能を含むコマンドを有し、
前記登録する手段は、前記複数の編集命令を前記コマンドとともに登録する機能を含むことを特徴とする請求項14に記載の文書管理システム。
【請求項16】
前記DOMに対する前記複数の変更の少なくとも2つは、異なるアプリケーションによることを特徴とする請求項15に記載の文書管理システム。
【請求項17】
前記アプリケーションの少なくとも1つは、XHTML及びSVGの少なくとも1つであることを特徴とする請求項16に記載の文書管理システム。
【請求項18】
登録された前記命令の少なくとも1つを取得する手段と、
前記DOMの対応する部分を再構築するために前記取得した編集命令を適用する手段と、
を更に備えることを特徴とする請求項14に記載の文書管理システム。
【請求項19】
前記取得する手段は、複数の登録された命令を取得する機能を含み、
前記適用する手段は、前記DOMの対応する部分を再構築するために前記複数の命令を適用する機能を含むことを特徴とする請求項18に記載の文書管理システム。
【請求項20】
前記複数の登録された命令は、単一のコマンドに関することを特徴とする請求項19に記載の文書管理システム。
【請求項21】
前記複数の登録された命令は、複数のコマンドに関することを特徴とする請求項19に記載の文書管理システム。
【請求項22】
前記複数の登録された命令は、それらが生成された順序とは逆に適用されることを特徴とする請求項19に記載の文書管理システム。
【請求項23】
前記アプリケーションの少なくとも1つはXHTMLアプリケーションであり、
前記複数の登録された命令は、前記XHTMLアプリケーションにおける個々の文字に関することを特徴とする請求項17に記載の文書管理システム。
【請求項24】
DOMにより表現されたXML文書の取消を提供する機能を有する文書管理システムであって、
前記DOMの変更を検知する手段と、
前記DOMにおける検知された変更に対応する変更イベントを生成する手段と、
前記変更イベントに基づいて編集命令を生成する手段と、
前記コマンド及び複数の検知された編集命令を登録する手段と、
を備えることを特徴とする文書管理システム。
【請求項25】
DOMにより表現されたXML文書の取消を提供する機能を有し、プロセッサと、メモリと、ディスプレーと、操作入力手段と、を有する装置であって、
前記DOMの変更を検知する手段と、
前記DOMにおける検知された変更に対応する編集命令を生成する手段と、
コマンドにより前記編集命令を検知する手段と、
前記コマンド及び検知された前記編集命令を登録する手段と、
を備えることを特徴とする装置。
【請求項26】
前記検知する手段は、前記DOMにおける複数の変更を検知する機能を含み、
前記生成する手段は、前記DOMにおけるそれぞれの変更に対する編集命令を生成する機能を含み、
前記検知する手段は、複数の編集命令を検知する機能を含むコマンドを有し、
前記登録する手段は、前記複数の編集命令を前記コマンドとともに登録する機能を含むことを特徴とする請求項25に記載の装置。
【請求項27】
前記DOMに対する前記複数の変更の少なくとも2つは、異なるアプリケーションによることを特徴とする請求項26に記載の装置。
【請求項28】
前記アプリケーションの少なくとも1つは、XHTML及びSVGの少なくとも1つであることを特徴とする請求項27に記載の装置。
【請求項29】
登録された前記命令の少なくとも1つを取得する手段と、
前記DOMの対応する部分を再構築するために前記取得した編集命令を適用する手段と、
を更に備えることを特徴とする請求項25に記載の装置。
【請求項30】
前記取得する手段は、複数の登録された命令を取得する機能を含み、
前記適用する手段は、前記DOMの対応する部分を再構築するために前記複数の命令を適用する機能を含むことを特徴とする請求項29に記載の装置。
【請求項31】
前記複数の登録された命令は、単一のコマンドに関することを特徴とする請求項30に記載の装置。
【請求項32】
前記複数の登録された命令は、複数のコマンドに関することを特徴とする請求項30に記載の装置。
【請求項33】
前記複数の登録された命令は、それらが生成された順序とは逆に適用されることを特徴とする請求項30に記載の装置。
【請求項34】
前記アプリケーションの少なくとも1つはXHTMLアプリケーションであり、
前記複数の登録された命令は、前記XHTMLアプリケーションにおける個々の文字に関することを特徴とする請求項28に記載の装置。
【請求項35】
DOMにより表現されたXML文書の取消を提供する機能を有し、プロセッサと、メモリと、ディスプレーと、操作入力手段と、を有する装置であって、
前記DOMの変更を検知する手段と、
前記DOMにおける検知された変更に対応する変更イベントを生成する手段と、
前記変更イベントに基づいて編集命令を生成する手段と、
前記コマンド及び複数の検知された編集命令を登録する手段と、
を備えることを特徴とする装置。
【請求項36】
XML文書を編集し、前記文書の編集を取り消す機能を有するプログラムを提供するためのユーザインタフェースであって、
少なくとも1つの編集可能部分を備える編集可能なXML文書の表示と、
DOMの変更を生成し、表示されたXML文書を編集し、コマンド及び編集命令を格納させる、前記編集可能なXML文書に対するユーザ入力と、
前記コマンド及び編集命令を取得するために取消コマンドを選択するための前記ユーザ入力と、
を備えることを特徴とするユーザインタフェース。
【請求項37】
前記ユーザ入力は、表示された編集中のXML文書の取消を制御する機能を有することを特徴とする請求項36に記載のユーザインタフェース。
【請求項38】
ユーザに、マークアップ言語文書を編集し、前記文書の編集を取り消す機能を有するプログラムを提供するためのプログラマインタフェースであって、
所定のコマンドのための複数の所定のテンプレートを有するストレージと、
DOMに対する変更を監視し、複数のマークアップ言語アプリケーションに反映させるためのテンプレートをプログラムが定義することを可能とするためにコードを表示するための表示と、
ユーザが、前記複数のテンプレートにアクセスし、取消操作を実装することを可能とするためのユーザインタフェースと、
を備えることを特徴とするプログラマインタフェース。
【請求項39】
DOMにより表現されたXML文書の取消を提供する方法をコンピュータに実現させるためのプログラムが記録された記録媒体であって、
前記DOMにおける検知された変更に対応する編集命令を生成する工程と、
コマンドにより前記編集命令を検知する工程と、
複数の検知された前記編集命令を収集する工程と、
収集された前記編集命令を登録する工程と、
を備えることを特徴とする記録媒体。
【請求項40】
前記検知する工程は、前記DOMにおける複数の変更を検知する工程を含み、
前記生成する工程は、前記DOMにおけるそれぞれの変更に対する編集命令を生成する工程を含み、
前記検知する工程は、コマンドが複数の編集命令を検知する工程を含み、
前記登録する工程は、前記複数の編集命令を前記コマンドとともに登録する工程を含むことを特徴とする請求項39に記載の記録媒体。
【請求項41】
前記DOMに対する前記複数の変更の少なくとも2つは、異なるアプリケーションによることを特徴とする請求項40に記載の記録媒体。
【請求項42】
前記アプリケーションの少なくとも1つは、XHTML及びSVGの少なくとも1つであることを特徴とする請求項41に記載の記録媒体。
【請求項43】
登録された前記命令の少なくとも1つを取得する工程と、
前記DOMの対応する部分を再構築するために前記取得した編集命令を適用する工程と、
を更に備えることを特徴とする請求項39に記載の記録媒体。
【請求項44】
前記取得する工程は、複数の登録された命令を取得する工程を含み、
前記適用する工程は、前記DOMの対応する部分を再構築するために前記複数の命令を適用する工程を含むことを特徴とする請求項43に記載の記録媒体。
【請求項45】
前記複数の登録された命令は、単一のコマンドに関することを特徴とする請求項44に記載の記録媒体。
【請求項46】
前記複数の登録された命令は、それらが生成された順序とは逆に適用されることを特徴とする請求項44に記載の記録媒体。
【請求項47】
前記アプリケーションの少なくとも1つはXHTMLアプリケーションであり、
前記複数の登録された命令は、前記XHTMLアプリケーションにおける個々の文字に関することを特徴とする請求項46に記載の記録媒体。
【請求項48】
前記登録された編集命令の少なくとも1つにアクセスする工程と、
前記登録された編集命令を用いて編集の取消を指示する工程と、
を更に備えることを特徴とする請求項39に記載の記録媒体。
【請求項49】
DOMにより表現されたXML文書の取消を提供する方法をコンピュータに実現させるためのプログラムが記録された記録媒体であって、
前記DOMにおける変更を検知する工程と、
前記DOMにおける検知された変更に対応する変更イベントを生成する工程と、
検知された前記変更イベントを収集し、対応する編集命令を生成する工程と、
生成された編集命令を登録する工程と、
を備えることを特徴とする記録媒体。
【請求項50】
前記登録された編集命令の少なくとも1つにアクセスする工程と、
前記登録された編集命令を用いて編集の取消を指示する工程と、
を更に備えることを特徴とする請求項49に記載の記録媒体。
【図1(a)】
【図1(b)】
【図1(c)】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17(a)】
【図17(b)】
【図18】
【図19(a)】
【図19(b)】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図1(b)】
【図1(c)】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17(a)】
【図17(b)】
【図18】
【図19(a)】
【図19(b)】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【公表番号】特表2008−509477(P2008−509477A)
【公表日】平成20年3月27日(2008.3.27)
【国際特許分類】
【出願番号】特願2007−524936(P2007−524936)
【出願日】平成17年8月2日(2005.8.2)
【国際出願番号】PCT/US2005/027528
【国際公開番号】WO2006/041554
【国際公開日】平成18年4月20日(2006.4.20)
【出願人】(390024350)株式会社ジャストシステム (123)
【Fターム(参考)】
【公表日】平成20年3月27日(2008.3.27)
【国際特許分類】
【出願日】平成17年8月2日(2005.8.2)
【国際出願番号】PCT/US2005/027528
【国際公開番号】WO2006/041554
【国際公開日】平成18年4月20日(2006.4.20)
【出願人】(390024350)株式会社ジャストシステム (123)
【Fターム(参考)】
[ Back to top ]