(57)【要約】【課題】  電子文書内のデータを選択的にインポート及びエクスポートする方法及びコンピュータ可読媒体を提供すること。【解決手段】  インポートアプリケーションプログラムインターフェース（ＡＰＩ）を実施して、ＸＭＬファイルなどの階層構造化文書から内容をインポートすることができる。インポートＡＰＩは、パーサと共に働いて、文書をスキャンし、選択された要素、ノード、属性、及びテキストを抽出する。インポートＡＰＩでは、抽出された内容を処理するのにコールバックコンポーネントも使用される。エクスポートＡＰＩを実施して、ＸＭＬファイルなどの階層構造化文書を作成するためにデータを抽出することもできる。エクスポートＡＰＩは、ライタと共に働いて、データを受け取り、階層構造化文書内の要素、ノード、属性、及びテキストとしてデータをエクスポートする。【選択図】  図４
2004178602.tif 000002
【特許請求の範囲】
【請求項１】
電子文書から内容を選択的にインポートする方法であって、
階層ファイル構造に編成された、データ及び該データに関連する内容の項目を有する電子文書を受信することと、
電子文書内の内容の少なくとも１つの項目に関連する特定のデータを識別することと、
内容をインポートするために特定のデータに対する動作を実行することと
を含むことを特徴とするインポートする方法。
【請求項２】
前記内容をインポートするために特定のデータに対する動作を実行することは、
識別されたデータについて電子文書を解析することと、
電子文書から識別されたデータに関連する内容の最初の項目を抽出することと
を含むことを特徴とする請求項１に記載のインポートする方法。
【請求項３】
前記内容をインポートするために特定のデータに対する動作を実行することは、
電子文書から識別されたデータに関連する内容の最初の項目を抽出した後に、識別されたデータに関連する内容の追加項目があるかどうかを判定することと、
識別されたデータに関連する内容の追加項目がある場合に、電子文書から識別されたデータに関連する内容の次の項目を抽出することと
を含むことを特徴とする請求項２に記載のインポートする方法。
【請求項４】
前記階層ファイル構造は、ＸＭＬであることを特徴とする請求項１に記載のインポートする方法。
【請求項５】
前記識別された内容は、ＸＭＬ要素であることを特徴とする請求項１に記載のインポートする方法。
【請求項６】
前記識別された内容は、ＸＭＬ属性であることを特徴とする請求項１に記載のインポートする方法。
【請求項７】
前記識別された内容は、ＸＭＬノードであることを特徴とする請求項１に記載のインポートする方法。
【請求項８】
前記識別された内容は、テキストであることを特徴とする請求項１に記載のインポートする方法。
【請求項９】
前記内容が、データストリームからインポートされることを特徴とする請求項１に記載のインポートする方法。
【請求項１０】
前記内容が、メモリバッファからインポートされることを特徴とする請求項１に記載のインポートする方法。
【請求項１１】
前記内容が、ファイルからインポートされることを特徴とする請求項１に記載のインポートする方法。
【請求項１２】
コンピュータシステム内で電子文書の内容をインポートするコンピュータ実行可能なコンポーネントを有するコンピュータ可読媒体であって、コンピュータ実行可能なコンポーネントは、
コンピュータシステム内のソースから内容を含むデータを有する電子文書を受け取り、電子文書は階層ファイル構造を有し、
電子文書内の内容の少なくとも１つの項目に関連する特定のデータを識別し、
電子文書から識別されたデータに関連する内容の項目を抽出するインポートコンポーネントを含むことを特徴とするコンピュータ可読媒体。
【請求項１３】
前記識別されたデータについて電子文書を解析し、インポートコンポーネントに識別されたデータを送るパーサコンポーネントを含むさらなるコンピュータ実行可能なコンポーネントを有することを特徴とする請求項１２に記載のコンピュータ可読媒体。
【請求項１４】
前記パーサコンポーネントは、イベントベースであることを特徴とする請求項１３に記載のコンピュータ可読媒体。
【請求項１５】
電子文書からの識別されたデータに関連する内容の抽出された項目を処理するコールバックコンポーネントを含むさらなるコンピュータ実行可能なコンポーネントを有することを特徴とする請求項１２に記載のコンピュータ可読媒体。
【請求項１６】
内容の少なくとも１つの項目は、テキストストリングであることを特徴とする請求項１２に記載のコンピュータ可読媒体。
【請求項１７】
前記階層ファイル構造は、ＸＭＬであることを特徴とする請求項１２に記載のコンピュータ可読媒体。
【請求項１８】
前記識別される内容は、ＸＭＬ要素であることを特徴とする請求項１２に記載のコンピュータ可読媒体。
【請求項１９】
前記識別される内容は、ＸＭＬ属性であることを特徴とする請求項１２に記載のコンピュータ可読媒体。
【請求項２０】
前記識別される内容は、ＸＭＬノードであることを特徴とする請求項１２に記載のコンピュータ可読媒体。
【請求項２１】
前記識別される内容は、テキストであることを特徴とする請求項１２に記載のコンピュータ可読媒体。
【請求項２２】
前記ソースは、コンピュータシステム内のクライアントであることを特徴とする請求項１２に記載のコンピュータ可読媒体。
【請求項２３】
前記ソースは、コンピュータシステム内のサーバであることを特徴とする請求項１２に記載のコンピュータ可読媒体。
【請求項２４】
電子文書を作成するためにソースからデータをエクスポートする、コンピュータシステム内のエクスポートする方法であって、
ソースからデータを受け取ることと、
電子文書にエクスポートされる複数のデータを識別することと、
電子文書を作成するために識別された複数のデータをエクスポートすることと
を含むことを特徴とするエクスポートする方法。
【請求項２５】
前記作成される文書が、階層ファイル構造を有することを特徴とする請求項２４に記載のエクスポートする方法。
【請求項２６】
前記階層ファイル構造が、ＸＭＬであることを特徴とする請求項２４に記載のエクスポートする方法。
【請求項２７】
前記電子文書を作成するために識別された複数のデータをエクスポートすることは、少なくとも１つのＸＭＬ要素を作成することを含むことを特徴とする請求項２４に記載のエクスポートする方法。
【請求項２８】
前記電子文書を作成するために識別された複数のデータをエクスポートすることは、少なくとも１つのＸＭＬ属性を作成することを含むことを特徴とする請求項２４に記載のエクスポートする方法。
【請求項２９】
前記電子文書を作成するために識別された複数のデータをエクスポートすることは、少なくとも１つのＸＭＬノードを作成することを含むことを特徴とする請求項２４に記載のエクスポートする方法。
【請求項３０】
前記電子文書を作成するために識別された複数のデータをエクスポートすることは、テキストを作成することを含むことを特徴とする請求項２４に記載のエクスポートする方法。
【請求項３１】
前記識別された複数のデータが、データストリームにエクスポートされることを特徴とする請求項２４に記載のエクスポートする方法。
【請求項３２】
前記識別された複数のデータが、メモリバッファにエクスポートされることを特徴とする請求項２４に記載のエクスポートする方法。
【請求項３３】
前記識別された複数のデータが、ファイルにエクスポートされることを特徴とする請求項２４に記載のエクスポートする方法。
【請求項３４】
コンピュータシステム内で電子文書を作成するためにソースからデータをエクスポートするコンピュータ実行可能なコンポーネントを有するコンピュータ可読媒体であって、コンピュータ実行可能なコンポーネントが、
ソースからデータを受け取り、
電子文書にエクスポートされる複数のデータを識別するエクスポートコンポーネントと、
エクスポートコンポーネントから識別された複数のデータを受け取り、電子文書を作成するために識別された複数のデータをエクスポートする、ライタコンポーネントと
を含むことを特徴とするコンピュータ可読媒体。
【請求項３５】
前記作成される電子文書が、階層ファイル構造を有することを特徴とする請求項３４に記載のコンピュータ可読媒体。
【請求項３６】
前記階層ファイル構造が、ＸＭＬであることを特徴とする請求項３５に記載のコンピュータ可読媒体。
【請求項３７】
前記電子文書を作成するために識別された複数のデータをエクスポートすることは、少なくとも１つのＸＭＬ要素を作成することを含むことを特徴とする請求項３４に記載のコンピュータ可読媒体。
【請求項３８】
前記電子文書を作成するために識別された複数のデータをエクスポートすることは、少なくとも１つのＸＭＬ属性を作成することを含むことを特徴とする請求項３４に記載のコンピュータ可読媒体。
【請求項３９】
前記電子文書を作成するために識別された複数のデータをエクスポートすることは、少なくとも１つのＸＭＬノードを作成することを含むことを特徴とする請求項３４に記載のコンピュータ可読媒体。
【請求項４０】
前記電子文書を作成するために識別された複数のデータをエクスポートすることは、テキストを作成することを含むことを特徴とする請求項３４に記載のコンピュータ可読媒体。
【請求項４１】
前記ソースは、コンピュータシステム内のクライアントであることを特徴とする請求項３４に記載のコンピュータ可読媒体。
【請求項４２】
前記ソースは、コンピュータシステム内のサーバであることを特徴とする請求項３４に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、階層構造化データのインポート及びエクスポートの方法及びコンピュータ可読媒体に関する。
【背景技術】
【０００２】
コンピュータソフトウェアアプリケーションを用いると、インターネットなどのコンピュータネットワーク上で、他のユーザと交換を行うスプレッドシート、カレンダ、定期的勘定通知、製品リスト、アウトラインなどの階層構造に編成されたデータを含む文書を、ユーザが作成することができる。例えば、ユーザは、ＸＭＬプログラムを使用して文書を作成することにより、異なるフォーマットを用いているコンピュータシステム間で、階層データを交換することができる。ＸＭＬ文書は、それに含まれるデータに隣接するユーザが定義できる記述的タグを有しているので、データがさまざまなコンピュータによって理解可能になる。記述を担うタグを単純に解析することによって、ユーザが見るために文書からデータをインポートすることができる。データを見た後に、ユーザは、そのデータを、新しい又は編集された階層フォーマットの文書にエクスポートして、他のユーザに送ることができる。
【０００３】
しかし、文書の解析は、複数のステップを必要とする、遅く複雑な処理である。Ｓｉｍｐｌｅ  ＡＰＩ  ｆｏｒ  ＸＭＬ（ＳＡＸ）などの現在のパーサの一部は、イベントベースパーサであり、ＸＭＬタグが、一時にシーケンシャルに読み取られる。しかし、ユーザは、全ファイルの終わりまで状態を保ったままにして検索することにより、所望のＸＭＬタグを見つける必要がある。Ｄｏｃｕｍｅｎｔ  Ｏｂｊｅｃｔ  Ｍｏｄｅｌ（ＤＯＭ）などの他のパーサは、ツリーベースパーサであり、ＸＭＬファイル全体がメモリにロードされ、ランダムアクセスが可能にされ、所望のＸＭＬタグを見つけるのが、イベントベースパーサよりも簡単になっている。しかし、ツリーベースパーサでは、所望のＸＭＬタグを見つけるために、「ツリー」をナビゲートする必要がある。さらに、そのようなパーサは、かなりの量の時間及びメモリを必要とし、大きいＸＭＬファイルの解析には非実用的である。
【０００４】
したがって、現在、階層構造化文書からデータをインポートする簡単な手法はない。すなわち、ユーザが関心を持つ可能性があるデータを含む、特定のタグ又はセクションに関する文書を選択的に検索する簡単な手法はない。即ち、ＳＡＸなどのイベントベースパーサを用いて文書全体を終わりまで検索する必要なしに、又はＤＯＭなどのツリーベースパーサを用いて、かなりの時間及びメモリリソースを使用しながら、ツリーを終わりまでナビゲートする必要なしに検索する簡単な手法はない。
【０００５】
同様に、ＤＯＭ（文書全体をメモリに格納する）などのツリーベースパーサは、サブツリー又は他の階層データをエクスポートすることができるが、そのようなパーサは、パーサに固有の、時間及びメモリリソースの大量の使用によって制限される。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
したがって、階層構造化文書の内容を選択的にインポートし、エクスポートする方法及びシステムが当技術分野には必要である。実施化される本発明は、これら及び他の考慮すべき事項に関するものである。
【課題を解決するための手段】
【０００７】
本発明は、電子文書内のデータを選択的にインポートし、エクスポートする方法及びシステムを提供する。一実施形態では、電子文書から内容を選択的にインポートする方法が提供される。階層ファイル構造でデータを配置された電子文書を受け取る。階層ファイル構造は、ＸＭＬとすることができる。電子文書内のデータは、データに関連する内容が含まれる。データに、ＸＭＬの要素、属性、ノード、及びテキストを含めることができる。文書からの特定のデータが、インポートされるように識別され、アクションが、識別されたデータについて実行されて、関連する内容がインポートされる。アクションには、識別されたデータについて文書を解析すること、及び、識別されたデータに関連する内容の項目を抽出することが含んでいる。
【０００８】
本発明のもう１つの実施形態では、コンピュータシステム内のソースからデータをエクスポートする方法を提供して、電子文書を作成する。コンピュータシステム内のソースから受け取られたデータが、エクスポートされて、電子文書が作成される。作成される電子文書は、ＸＭＬなどの階層ファイル構造を有することができる。作成される文書に、ＸＭＬの要素、属性、及びノードを含めることができる。ソースは、コンピュータシステム内のクライアント又はサーバとすることができる。データを、データストリーム、メモリバッファ、又はファイルにエクスポートすることができる。
【０００９】
本発明の実施形態によって、電子文書内のデータを選択的にインポートし、エクスポートするコンピュータ可読媒体も提供される。本発明のさまざまな態様に関する追加の詳細は、以下の本発明の詳細な説明から明白になる。
【発明を実施するための最良の形態】
【００１０】
本発明の以下の記述は、図面に関して説明される。本発明は、電子文書内の階層構造化データをインポートしエクスポートする方法及びシステムを対象とする。
【００１１】
図１及び以下の説明は、本発明を実施することができる適当なコンピューティング環境の簡潔で一般的な記述を提供することを意図されたものである。本発明を、パーソナルコンピュータと共同してオペレーティングシステム上で実行するアプリケーションプログラムインターフェースの一般的な状況で説明するが、当業者であれば、本発明を他のプログラムモジュールと共に実施することもできることを理解するであろう。一般に、プログラムモジュールには、特定のタスクを実施するか特定の抽象データ型を実施する、ルーチン、プログラム、コンポーネント、データ構造など、が含まれる。さらに、当業者は、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベース又はプログラマブルな民生用電子機器、セル電話機、ミニコンピュータ、メインフレームコンピュータ、及び類似物を含む他のコンピュータシステム構成と共に本発明を実践できることを理解するであろう。本発明は、通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが実行される分散コンピューティング環境でも実践することができる。分散コンピューティング環境では、プログラムモジュールを、ローカルとリモートの両方のメモリストレージデバイスに配置することができる。
【００１２】
図１に関して、本発明を実施する典型的なシステムに、処理ユニット２１、システムメモリ２２、及びシステムメモリを処理ユニット２１に結合するシステムバス２３を含む普通のパーソナルコンピュータ２０が含まれる。システムメモリ２２には、読取専用メモリ（ＲＯＭ）２４及びランダムアクセスメモリ（ＲＡＭ）２５が含まれる。スタートアップ中など、パーソナルコンピュータ２０内の要素の間で情報を転送するのを助ける基本ルーチンを含む基本入出力システム２６（ＢＩＯＳ）が、ＲＯＭ２４に格納される。パーソナルコンピュータ２０には、さらに、ハードディスクドライブ２７、たとえば取外し可能ディスク２９から読み取り、これに書き込む磁気ディスクドライブ２８、たとえばＣＤ−ＲＯＭディスク３１から読み取るか、他の光学媒体から読み取るか書き込む、光学ディスクドライブ７５が含まれる。ハードディスクドライブ２７、磁気ディスクドライブ２８、及び光学ディスクドライブ７５は、それぞれハードディスクドライブインターフェース３２、磁気ディスクドライブインターフェース３３、及び光学ディスクドライブインターフェース３４によってシステムバス２３に接続される。ドライブ及びそれに関連するコンピュータ可読媒体によって、パーソナルコンピュータ２０の不揮発性ストレージが提供される。上のコンピュータ可読媒体の説明では、ハードディスク、取外し可能磁気ディスク、及びＣＤ−ＲＯＭディスクに言及したが、磁気カセット、フラッシュメモリカード、ディジタル多用途ディスク、ベルヌーイドライブ、及び類似物など、コンピュータによって可読の他のタイプの媒体も、典型的なオペレーティング環境で使用できることを、当業者は理解するであろう。
【００１３】
オペレーティングシステム３５、ワードプロセッサプログラム（又は他のタイプのプログラム）などの１つ又は複数のアプリケーションプログラム１００、インポートＡＰＩ３０、エクスポートＡＰＩ４０、及び他のプログラムモジュール（図示せず）など、複数のプログラムモジュールを、ドライブ及びＲＡＭ２５に格納することができる。
【００１４】
ユーザは、キーボード７６及び、マウス４２などのポインティングデバイスを介して、パーソナルコンピュータ２０にコマンド及び情報を入力することができる。他の入力デバイス（図示せず）に、マイクロホン、ジョイスティック、ゲームパッド、衛星放送受信用アンテナ、スキャナ、又は類似物を含めることができる。これら及び他の入力デバイスは、しばしば、システムバスに結合されたシリアルポートインターフェース４６を介して処理ユニット２１に接続されるが、ゲームポート又はｕｎｉｖｅｒｓａｌ  ｓｅｒｉａｌ  ｂｕｓ（ＵＳＢ）などの他のインターフェースによって接続することができる。モニタ４７又は他のタイプのディスプレイデバイスも、ビデオアダプタ４８などのインターフェースを介してシステムバス２３に接続される。モニタのほかに、パーソナルコンピュータには、通常、スピーカ又はプリンタなどの他の周辺出力デバイス（図示せず）が含まれる。
【００１５】
パーソナルコンピュータ２０は、リモートコンピュータ４９などの１つ又は複数のリモートコンピュータへの論理接続を使用して、ネットワーク化された環境で動作することができる。リモートコンピュータ４９は、サーバ、ルータ、ピアデバイス、又は他の一般的なネットワークノードとすることができ、図１にはメモリストレージデバイス５０だけが図示されているが、リモートコンピュータ４９には、通常は、パーソナルコンピュータ２０に関して説明された要素の多く又はすべてが含まれる。図１に示された論理接続には、ローカルエリアネットワーク（ＬＡＮ）５１及び広域ネットワーク（ＷＡＮ）５２が含まれる。そのようなネットワーキング環境は、オフィス、企業全体のコンピュータネットワーク、イントラネット、及びインターネットでありふれたものである。
【００１６】
ＬＡＮネットワーキング環境で使用される時に、パーソナルコンピュータ２０は、ネットワークインターフェース５３を介してＬＡＮ５１に接続される。ＷＡＮネットワーキング環境で使用される時に、パーソナルコンピュータ２０に、通常は、インターネットなどのＷＡＮ５２を介する通信を確立するモデム５４又は他の手段が含まれる。モデム５４は、内蔵又は外付けとすることができるが、シリアルポートインターフェース４６を介してシステムバス２３に接続される。ネットワーク化された環境では、パーソナルコンピュータ２０に関して説明したプログラムモジュール又はその一部を、リモートメモリストレージデバイスに格納することができる。図示のネットワーク接続が、典型的であり、コンピュータの間で通信リンクを確立する他の手段を使用できることを理解されたい。
【００１７】
動作
図２は、本発明の実施形態と共に使用される、典型的なソフトウェアアーキテクチャ２００を示すブロック図である。このアーキテクチャには、データを階層ファイル構図に編成された電子文書から内容をインポートするインポートアプリケーションプログラムインターフェース（ＡＰＩ）３０が含まれる。一実施形態では、電子文書が、内容のさまざまな項目に関連するタグ、属性、及びノード（サブツリー）からなるＸＭＬ文書である。本明細書に記載の発明の、制限ではなく例としてのみ、下に、ＡＰＩ３０を実践することができる典型的なＸＭＬファイルを示す。
【００１８】
<SOAP-ENV:Envelope xmlns:SOAP-
ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<CancelResponse xmlns="http://schemas.microsoft.com/billing">
<Services>
<Service Name="Some service"/>
<!-- ほかのサービスをここに記入 -->
</Services>
<Subscriptions>
<Subscription ID="Subscription ID">
<BalanceImpacts>
<BalanceImpact ImpactType="Type of impact">
<Amount>Non-zero amount of impact</Amount>
</BalanceImpact>
<!-- ほかのバランスインパクトをここに記入 -->
</BalanceImpacts>
</Subscription>
<!-- ほかのサブスクリプションをここに記入 -->
</Subscriptions>
<Currency>Account Currency type</Currency>
<Amount>Total balance impact</Amount>
</CancelResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
【００１９】
図２からわかるように、インポートＡＰＩ３０は、上で図１で説明したクライアントコンピュータ２０から電子文書を受け取る。代替実施形態では、電子文書を、リモートコンピュータサーバ４９などのサーバから受け取ることもできる。インポートＡＰＩ３０は、電子文書及び関連する内容の階層構造を定義するデータ（すなわち、要素、属性、ノード、及びテキスト）について電子文書を解析するパーサ６０と通信する。インポートＡＰＩ３０は、文書から解析される特定のデータの識別に関してパーサ６０を管理する。一実施形態では、パーサ６０を、米国ワシントン州レッドモンドのＭＩＣＲＯＳＯＦＴ  ＣＯＲＰＯＲＡＴＩＯＮ社のＯＦＦＩＣＥ  ＸＭＬ  ＰＡＲＳＥＲなどのイベントベースのパーサとすることができる。パーサ６０は、ＤＯＭパーサなどのツリーベースのパーサとすることもできる。ＡＰＩ３０は、イベントベースのパーサ及びツリーベースのパーサを直接に使用するより有利である。というのは、ユーザが、文書から抽出したい特定のデータを識別できるからである。当業者に既知の通り、イベントベースのパーサでは、一時に１行ずつ文書をスキャンし、一時に１つずつデータの項目（タグなど）を提供し、ユーザが、望みのデータを見つけるために、状態を保つことを必要とする。ツリーベースのパーサでは、文書全体がメモリにロードされるが、それでも、ユーザは、望みのデータを見つけるために、ロードされた文書をナビゲートする必要がある。前述した長所は、図４に関して以下に詳細に説明する。
【００２０】
インポートＡＰＩ３０は、コールバックコンポーネント５０とも通信する。コールバックコンポーネント５０は、インポートＡＰＩ３０と通信して、第１のデータが抽出された後に電子文書からインポートされる内容の追加項目を判定する。たとえば、電子文書の要素又はノードが、内容の複数の項目に関連する（たとえば名前のリストなど）場合に、インポートＡＰＩ３０は、最初の名前を抽出し、その後、コールバックコンポーネント５０にアクセスして、リストのすべての名前が抽出されるまで、次の名前を抽出する。項目のリストの他の単語について、インポートＡＰＩ３０は、コールバックコンポーネント５０に順番にリストの各項目を渡すことができ、ＡＰＩ３０のクライアント２０は、その項目について望んでいることを行うことができる。クライアント２０は、コールバックコンポーネント５０を使用して、インポート処理中にＡＰＩ３０に通信して、残りのデータを処理する方法を変更することもできる。さまざまな実施形態で、ＡＰＩ３０によってインポートされた内容７０は、データストリーム、メモリバッファ、又はファイルであるかもしれない。
【００２１】
図３を参照すると、本発明の実施形態と共に使用される典型的なソフトウェアアーキテクチャ３００を示すブロック図が示されている。このアーキテクチャには、電子文書９０を作成するためにソースからデータをエクスポートするエクスポートアプリケーションプログラムインターフェース（ＡＰＩ）４０が含まれる。一実施形態では、作成される文書９０が、ＸＭＬ文書などの階層ファイル構造を有する。図３からわかるように、エクスポートＡＰＩ４０は、クライアントコンピュータ２０からデータを受け取る。もう１つの実施形態では、データを、リモートコンピュータサーバ４９などのサーバから受け取ることができる。エクスポートされるデータは、他のタイプのデータの中のテキストストリング又は決まった変数リストを含めることができる。
【００２２】
エクスポートＡＰＩ４０は、エクスポートＡＰＩ４０によって識別されるエクスポートされたデータを受け取り、そのデータを使用して、作成される電子文書９０に要素、ノード、属性、又はテキストを書き込むために、ライタ８０と通信する。エクスポートＡＰＩ４０は、エクスポートされる特定のデータを識別するためにライタ８０を管理する。一実施形態では、ライタ８０を、米国ワシントン州レッドモンドのＭＩＣＲＯＳＯＦＴ  ＣＯＲＰＯＲＡＴＩＯＮ社のＯＦＦＩＣＥ  ＸＭＬ  ＥＸＰＯＲＴＥＲなどのＸＭＬエクスポータコンポーネントとすることができる。エクスポートＡＰＩ４０を用いると、複数のデータ（ＸＭＬ内容など）又はファイル全体を単一のＡＰＩ呼出しで書き込めるようになる。これは、ライタ８０にアクセスするより有利である。というのは、ライタ８０が、一時に１つのデータの書込しか許容しないからである。エクスポートＡＰＩ４０を実施する構文が、インポートＡＰＩ３０の構文に非常に似る可能性があることを理解されたい。したがって、本発明の実施形態で、ユーザは、エクスポートＡＰＩ４０及びインポートＡＰＩ３０を使用して、ユーザ自身のデータを書き込み、後に読み取ることができるが、ユーザが両方のＡＰＩを使用する必要はない。エクスポートＡＰＩ４０の前述の長所を、図５に関して以下に記述する。
【００２３】
図４は、本発明の実施形態によるコンピュータシステムで、ＸＭＬ文書などの電子文書から内容を選択的にインポートする典型的なルーチン４００を示す流れ図である。説明のために、図１及び２を参照しながら図４を説明する。
【００２４】
ルーチン４００は、ブロック４１０から始まり、ここで、インポートＡＰＩ３０によって、パーソナルコンピュータ２０又はリモートコンピュータサーバ４９から電子文書を受け取る。ブロック４１５で、インポートＡＰＩ３０によって、文書内の、インポートされるデータが識別される。ユーザは、アプリケーションプログラム１００（ワードプロセッサとすることができる）内で、インポートされる特定のデータを識別することができ、このアプリケーションプログラム１００が、この情報をインポートＡＰＩ３０に通信する。たとえば、上に示した典型的なＸＭＬ文書では、ユーザが、＜Ｓｅｒｖｉｃｅ＞要素の内容、＜Ｓｕｂｓｃｒｉｐｔｉｏｎ＞ノードの内容、＜Ｃｕｒｒｅｎｃｙ＞要素の内容（たとえば、Ａｃｃｏｕｎｔ  Ｃｕｒｒｅｎｃｙ  ｔｙｐｅ）、及び＜Ａｍｏｕｎｔ＞要素の内容（たとえば、Ｔｏｔａｌ  ｂａｌａｎｃｅ  ｉｍｐａｃｔ）に関心を持つが、＜ＳＯＡＰ−ＥＮＶ＞要素及びユーザにとって有用な情報を伝えない属性には関心を持たない場合がある。特定のノード及び要素を選択することによって、ユーザは、その中に含まれる要素のすべても選択する。たとえば、＜Ｓｕｂｓｃｒｉｐｔｉｏｎ＞ノードには、＜ＢａｌａｎｃｅＩｍｐａｃｔｓ＞ノードが含まれ、＜ＢａｌａｎｃｅＩｍｐａｃｔ＞は、要素の任意の長さのリストである。＜Ｓｅｒｖｉｃｅｓ＞要素にも、Ｓｅｒｖｉｃｅ  Ｎａｍｅの任意のリストが含まれる。
【００２５】
ルーチン４００は、ブロック４２０で継続し、ここで、パーサ６０によって、インポートＡＰＩ３０によって識別されるデータ（すなわちノード及び要素）について電子文書を検索する。ブロック４２５で、インポートＡＰＩ３０によって、解析された文書内のデータから内容が抽出される。上で簡潔に記述したように、一実施形態では、パーサ６０が、イベントベースのパーサであり、文書内の各要素が、スキャンされ、それに含まれる内容が、インポートＡＰＩ３０によって抽出される。たとえば、パーサ６０が、ユーザによって前に識別された＜Ｓｅｒｖｉｃｅｓ＞要素について文書をスキャンし、インポートＡＰＩ３０が、＜Ｓｅｒｖｉｃｅ＞要素の「Ｎａｍｅ」属性からテキストストリング「Ｓｏｍｅ  ｓｅｒｖｉｃｅ」を抽出する。類似する形で、識別された要素に関連する内容のすべてが文書から抽出されるまで、すべての要素がスキャンされる。
【００２６】
ルーチン４００は、ブロック４３０で継続し、ここで、インポートＡＰＩ３０によって、インポートを識別された要素に含まれる内容の追加項目があるかどうかが判定される。内容の追加項目がない場合には、ルーチン４００が終了する。クライアント２０は、抽出された内容を用いて新しい文書を作成することを選択することができる（たとえば、エクスポートＡＰＩ４０を使用して）。逆に、インポートを識別された要素に含まれる内容の追加項目がある場合には、このルーチンは、ブロック４２５に戻り、ＡＰＩ３０によって、内容の次の追加項目を抽出する。たとえば、インポートＡＰＩ３０が、＜Ｓｅｒｖｉｃｅ＞要素の「Ｎａｍｅ」属性から「Ｓｏｍｅ  ｓｅｒｖｉｃｅ」ストリングを抽出した後に、ＡＰＩ３０は、「Ｎａｍｅ」属性に追加の＜Ｓｅｒｖｉｃｅ＞属性があるかどうかを判定し、その内容を１つずつ抽出し、所望のストリングのプリントアウトのためにコールバックコンポーネント５０に渡す。
【００２７】
ＡＰＩ３０の使用について図４に示されたルーチンは、下の典型的なコードサンプルに示されたＸＭＬデータを処理するコンピュータコードで実施することができる。
【００２８】
インポートＡＰＩの例示的な使用：
MsoFImportXML(pistm, FMyCallback(), NULL, "o CancelResponse;o Services;(*o
Service;a0 Name;c;p1;)c;o Subscriptions;(*o Subscription;a1 ID;o
BalanceImpacts;p2;(*o BalanceImpact;a2 ImpactType;e3 Amount;c;p3;)c;c;)c;e4
Currency;e5 Amount;p4;f;", NULL, msoffixSOAP);
【００２９】
上で示したインポートＡＰＩ３０の例示的な使用では、クライアント２０が、所望の内容（たとえば、＜Ｓｅｒｖｉｃｅ＞要素の１つ又は複数の「Ｎａｍｅ」属性）を識別するアクションストリングを渡す。アクションストリングとは、検索する内容又は特定の点で期待される内容を示す個々のアクションのシーケンスである。上の例では、「ｏ  ＣａｎｃｅｌＲｅｓｐｏｎｓｅ」アクションが、ＸＭＬ文書の＜ＣａｎｃｅｌＲｅｓｐｏｎｓｅ＞の次のオープン要素に進むことを意味し、「ａ１  ＩＤ」アクションが、クライアントがそのコールバックで又はインポートＡＰＩが終了した後に見ることができる抽出されたストリングの組のエントリ＃１に現在の要素の「ＩＤ」属性をコピーすることを意味し、「ｐ２」アクションが、コールバックの第２ケースを呼び出すことを意味する。アクションストリングに、アクショングループを含めることができ、アクショングループは、ある形で扱われるアクションのシーケンスをマークする形である。上の例では、アクショングループが、括弧で囲まれた関連するアクションによって示され、アスタリスクでマークされたアクショングループは、示されたアクションの組が０回以上繰り返され、リストを形成することを意味する。アクショングループのもう１つの例（上で使用した例には示されていない）によって、ＸＭＬ文書の所与の位置に現れると期待されるアクション又は内容の組が示される。
【００３０】
例示的なコールバック関数：
BOOL FMyCallback(void *pvClient, MSOHISD *phisd, MSOXPS *rgxps, int
iState)
{
switch (iState) {
case 1: // <Services>リストの処理
printf("<Service> Name attribute = %s＼n", rgxps[0].wz);
break;
case 2: // <Subscriptions>外側リストの処理
printf("<Subscription> ID attribute = %s＼n", rgxps[1].wz);
break;
case 3: // <BalanceImpacts>内側のネストしたリストの処理
printf("<BalanceImpact> ImpactType attribute = %s＼n", rgxps[2].wz);
printf("<Amount> element text = %s＼n", rgxps[3].wz);
break;
case 4: // 上のリストの後の最後の項目の処理
printf("Final <Currency> element text = %s＼n", rgxps[4].wz);
printf("Final <Amount> element text = %s＼n", rgxps[5].wz);
break;
}
return TRUE;
}
【００３１】
文書にリスト又は繰り返される要素が含まれない時など、クライアント２０がコールバック関数を識別する必要なしに、インポートＡＰＩ３０を使用することもできることを理解されたい。たとえば、ＸＭＬファイルに１つの＜Ｓｅｒｖｉｃｅ＞要素、１つの＜ＢａｌａｎｃｅＩｍｐａｃｔ＞ノード、及び１つの＜Ｓｕｂｓｃｒｉｐｔｉｏｎ＞ノードだけが含まれる場合に、インポートＡＰＩ３０は、下に示された１行のコードでそのファイルをインポートすることができる。
【００３２】
WCHAR wzServiceName[255], wzSubscriptionID[10],
wzBalanceImpactImpactType[255], wzBalanceImpactAmount[20],
wzCurrency[20], wzTotalAmount[20];
MSOXPS rgxps[6];
MsoInitXpsBuffer(&rgxps[0], wzServiceName, 255);
MsoInitXpsBuffer(&rgxps[1], wzSubscriptionID, 10);
MsoInitXpsBuffer(&rgxps[2], wzBalanceImpactImpactType, 255);
MsoInitXpsBuffer(&rgxps[3], wzBalanceImpactAmount, 20);
MsoInitXpsBuffer(&rgxps[4], wzCurrency, 20);
MsoInitXpsBuffer(&rgxps[5], wzTotalAmount, 20);
MsoFImportXML(pistm, NULL, NULL, "o CancelResponse;o Services;o
Service;a0 Name;c;c;o Subscriptions;o Subscription;a1 ID;o BalanceImpacts;o
BalanceImpact;a2 ImpactType;e3 Amount;c;c;c;c;e4 Currency;e5 Amount;f;",
rgxps, msoffixSOAP);
printf("<Service> Name attribute = %s＼n", wzServiceName);
printf("<Subscription> ID attribute = %s＼n", wzSubscriptionID);
printf("<BalanceImpact> ImpactType attribute = %s＼n",
wzBalanceImpactImpactType);
printf("<Amount> element text = %s＼n", wzBalanceImpactAmount);
printf("Final <Currency> element text = %s＼n", wzCurrency);
printf("Final <Amount> element text = %s＼n", wzTotalAmount);
【００３３】
したがって、インポートＡＰＩ３０を用いると、有利なことに、ユーザが、単一行のコードを用いて階層構造化文書から、単一行のコード及びコールバックステートメントを用いてリストを含む階層構造化文書から、内容を選択的にインポートできるようになる。上で簡潔に記述したように、ＡＰＩ３０によって、データストリームとして、メモリバッファとして、又はファイルとして内容をインポートすることができる。
【００３４】
図５は、本発明の実施形態によるコンピュータシステムで、ＸＭＬファイルなどの電子文書を作成するために内容を選択的にエクスポートする例示的なルーチン５００を示す流れ図である。説明のために、図１及び３を参照しながら図５を説明する。
【００３５】
ルーチン５００は、ブロック５１０で開始され、ここで、エクスポートＡＰＩ４０によって、エクスポートされるデータが識別される。上で簡潔に記述したように、データに、テキストストリング又は変数の固定されたリストを含めることができる。ユーザは、アプリケーションプログラム１００（ワードプロセッサとすることができる）内で、エクスポートされる特定のデータを識別することができ、このアプリケーションプログラム１００が、この情報をエクスポートＡＰＩ４０に通信する。エクスポートされるデータを識別する際に、ユーザは、作成される文書でデータをどのように表現するかも識別する。たとえば、ユーザは、テキストストリング「Ｓｅｒｖｉｃｅｓ」を要素として表し、「Ｎａｍｅ」を「Ｓｅｒｖｉｃｅ」要素の属性として表すことを識別することができる。エクスポートＡＰＩ４０は、識別されたデータをライタ８０に送り、ライタ８０は、ブロック５１５で、識別されたデータを使用して文書を作成する。
【００３６】
図５に示されたルーチンは、下に示された例示的コードサンプルを使用して、上で示した例示的なＸＭＬファイルを作成する関数呼出しとして実施することができる。
【００３７】
エクスポートＡＰＩの例示的な使用：
MsoFExportXML(pistm, "n o;o CancelResponse;o Services;e Service ;a Name
"Some service";c;o Subscriptions;o Subscription;a ID "Subscription ID";o
BalanceImpacts;o BalanceImpact;a ImpactType "Type of impact";e Amount "Non-
zero amount of impact";c;c;c;c;e Currency "Account Currency type";e Amount
"Total balance impact";c;", msogrffexSOAP)
【００３８】
上で示したエクスポートＡＰＩの例示的な使用では、クライアント２０が、インポートＡＰＩ３０の例示的な使用でのアクションストリングと類似する形でフォーマットされたアクションストリングを渡す。ここでは、アクションストリングが、ＸＭＬ文書に書き込まれる内容を示す個々のアクションのシーケンスである。上の例では、「ｅ  Ａｍｏｕｎｔ  ‘Ｔｏｔａｌ  ｂａｌａｎｃｅ  ｉｍｐａｃｔ’」アクションが、テキスト「Ｔｏｔａｌ  ｂａｌａｎｃｅ  ｉｍｐａｃｔ」を含むＸＭＬ要素＜Ａｍｏｕｎｔ＞の書込を意味し、「ｃ」アクションが、現在のスコープに一致するクローズ要素の書込を意味する。上のコードの例示的な行を使用して、リストなしのＸＭＬ文書全体を生成することができる。生成される文書は、上の図４の説明で示された非リストインポートコードサンプル（コールバック関数なし）に対応し、それによってインポートすることができる。
【００３９】
MSOHEXS hexs;
MsoFInitExportXML(pistm, &hexs);
MsoFExportXMLContents(&hexs, "n o;o CancelResponse;o Services;");
while (FSomeItemsLeftInMyList(wzServiceName)) // 現在のサービスストリングをwzServiceNameに書き込む
MsoFExportXMLContents2(&hexs, "e Service ;a Name %0;", &wzServiceName); //
Write: <Service Name="Some service">
MsoFExportXMLContents(&hexs, "c;");
// タグの残りについても同様
MsoFFinishExportXML(&hexs);
【００４０】
上の例示的なコードの行を使用して、リストを有するＸＭＬファイルを作成することができる。作成されるファイルは、上の図４の説明で示したリストインポートコードの例（すなわち、コールバック関数あり）に対応し、それによってインポートすることができる。したがって、エクスポートＡＰＩ４０を用いると、有利なことに、ユーザが、複数の要素及び属性を含むコンテキストを一度に選択的にエクスポートして、コードの単一行を用いて階層構造化文書を、数行のコードを用いてリストを含む階層構造化文書を作成できるようになる。
【００４１】
上で説明したように、アプリケーションプログラムインターフェース（ＡＰＩ）を実施して、ＸＭＬファイルなどの階層構造化文書から内容をインポートすることができる。ＡＰＩは、パーサと共に動作して、文書をスキャンし、選択された要素、ノード、属性、及びテキストからデータを抽出する。ＡＰＩでは、抽出された（たとえばリストから）内容を処理するコールバックコンポーネントも使用される。インポートＡＰＩを用いると、文書から抽出される特定のデータを識別できるようになる。これは、文書からデータの項目を一時に１つずつ順次提供するイベントベースのパーサ、及び所望のデータを見つけるためにロードされたファイルの直接のナビゲーションを必要とするツリーベースのパーサの使用に対して有利である。
【００４２】
ＡＰＩを実施して、ＸＭＬファイルなど階層構造化文書を作成するためにデータをエクスポートすることができる。このＡＰＩは、ライタと共に働いて、データを受け取り、そのデータを、階層構造化文書内の要素、ノード、属性、及びテキストとしてエクスポートする。エクスポートＡＰＩを用いると、複数のデータ（ＸＭＬ内容など）又はファイル全体を単一のＡＰＩ呼出しで記述できるようになる。これは、一時に１つのデータしか書き込むことができないライタ（ＸＭＬライタなど）の使用より有利である。インポートＡＰＩ３０及びエクスポートＡＰＩ４０を、管理されたコード又は管理されないコードで実施できることを理解されたい。本発明の他の実施形態は、本明細書の熟考及び本明細書に開示された発明の実行から、当業者にとって自明なことである。
【図面の簡単な説明】
【００４３】
【図１】本発明の典型的なオペレーティング環境を提供するコンピュータと、関連する周辺デバイス及びネットワーク化されたデバイスを示すブロック図である。
【図２】本発明の実施形態による、電子文書をインポートする典型的なアーキテクチャを示すブロック図である。
【図３】本発明の実施形態による、電子文書を作成するためのデータのエクスポートの典型的なアーキテクチャを示すブロック図である。
【図４】本発明の実施形態による、電子文書をインポートする典型的なルーチンによって実行されるステップを示す流れ図である。
【図５】本発明の実施形態による、電子文書を作成するためにデータをエクスポートする典型的なルーチンによって実行されるステップを示す流れ図である。
【符号の説明】
【００４４】
２０  クライアント
３０  インポートＡＰＩ
４０  エクスポートＡＰＩ
５０  コールバックコンポーネント
６０  パーサ
７０  内容
８０  ライタ
９０  電子文書
２００、３００  ソフトウェアアーキテクチャ
【図１】
2004178602.tif 000003
【図２】
2004178602.tif 000004
【図３】
2004178602.tif 000005
【図４】
2004178602.tif 000006
【図５】
2004178602.tif 000007