JP2012128853A - Xmlドキュメントを処理するためのシステム及び方法 - Google Patents
Xmlドキュメントを処理するためのシステム及び方法 Download PDFInfo
- Publication number
- JP2012128853A JP2012128853A JP2011267706A JP2011267706A JP2012128853A JP 2012128853 A JP2012128853 A JP 2012128853A JP 2011267706 A JP2011267706 A JP 2011267706A JP 2011267706 A JP2011267706 A JP 2011267706A JP 2012128853 A JP2012128853 A JP 2012128853A
- Authority
- JP
- Japan
- Prior art keywords
- xml
- segment
- data
- processor
- xml document
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/205—Parsing
- G06F40/221—Parsing markup language streams
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/4493—Object persistence
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Document Processing Apparatus (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
【課題】XMLドキュメントを処理するための改善されたシステム及び方法を提供する。
【解決手段】StAXのようなプルベースのストリーミング・パーサ104を、XMLBeans105のようなXMLオブジェクト・バインディング・フレームワークと組み合わせることにより、メモリ制限を被ることなく任意のサイズのXMLドキュメント107を処理することができる。加えて、StAX及びXMLBeansからアプリケーション・コードを隔離するフレームワーク102を提供し、アプリケーション・データ・オブジェクトは、StAX及びXMLBeansを意識する必要はない。コードは、これにより、より容易に維持することができ、且つアプリケーション101の動作に悪影響を及ぼすことなくスワップし、強化し、又は他の方法で修正することができる。
【選択図】図1
【解決手段】StAXのようなプルベースのストリーミング・パーサ104を、XMLBeans105のようなXMLオブジェクト・バインディング・フレームワークと組み合わせることにより、メモリ制限を被ることなく任意のサイズのXMLドキュメント107を処理することができる。加えて、StAX及びXMLBeansからアプリケーション・コードを隔離するフレームワーク102を提供し、アプリケーション・データ・オブジェクトは、StAX及びXMLBeansを意識する必要はない。コードは、これにより、より容易に維持することができ、且つアプリケーション101の動作に悪影響を及ぼすことなくスワップし、強化し、又は他の方法で修正することができる。
【選択図】図1
Description
本発明は、拡張マークアップ言語(Extended Markup Language)(XML)ドキュメントを処理するためのシステム及び方法に関し、より詳細には、メモリ制限に関わることなく任意のサイズのこうしたドキュメントを生成し、パーシングし、且つ処理することを可能にするためのフレームワークに関する。
XML(Extensible Markup Language)は、ドキュメントを電子的にエンコードするために広く用いられているルールのセットである。XMLデータにアクセスするために多くのプログラミング・インターフェースが利用可能であり、ソフトウェアのデプロイメント及び使用のための多くのXMLベースのフォーマットが存在する。XML仕様が存在するが、XMLドキュメントを、それらが異なるソフトウェア・アプリケーションによって理解されるように、1つのフォーマットから別のフォーマットに変換することがしばしば必要である。こうした変換は、例えば、XML仕様の異なるバージョンを有する異種のシステムを統合するときに必要とされる場合がある。
XMLパーサは、XMLドキュメントを種々の方法で処理する。一般に、こうしたパーサは、XMLにアクセスするために、アプリケーション・プログラミング・インターフェース(API)を採用する。
XML処理のための既存のAPIは、以下のカテゴリのうちの1つに入る傾向がある。
●シリアル(すなわちストリーム指向)API(例えば、Simple API for XML(SAX)
●ドキュメント・オブジェクト・モデル(DOM)のようなプログラミング言語からアクセス可能なツリー・トラバーサルAPI
●XMLドキュメントとプログラミング言語オブジェクトとの間の自動トランスレーションを提供する、XMLデータ・バインディング
●XSLT及びXQueryのような宣言型変換言語
●シリアル(すなわちストリーム指向)API(例えば、Simple API for XML(SAX)
●ドキュメント・オブジェクト・モデル(DOM)のようなプログラミング言語からアクセス可能なツリー・トラバーサルAPI
●XMLドキュメントとプログラミング言語オブジェクトとの間の自動トランスレーションを提供する、XMLデータ・バインディング
●XSLT及びXQueryのような宣言型変換言語
SAXのようなシリアルAPIにおいて、データは、イベント駆動型プッシュモデルを用いてシリアル方式で処理される。XMLドキュメントのメモリ内表現は構築されない。XMLドキュメントは、あらゆる所与の時点で一部のみがメモリの中にロードされる状態で、直線的にトラバースされる。パーサがXMLステートメントに遭遇する際に、パーサは、ソフトウェア・アプリケーションによって取り込まれるイベントを生成する。したがって、パーサは、同時にXMLドキュメント全体へのアクセスを有さない。
こうしたシリアルAPIを用いるアプリケーションは、XMLドキュメントのパーシングの間にイベントが発火されるときに、パーサによってコールされる多数のコールバックメソッドを定義する。
あらゆる所与の時点でXMLドキュメント全体をメモリ内に保持する必要性を回避するために、シリアルAPIは、比較的経済的なメモリ・フットプリントを維持しながら、任意に大きいXMLドキュメントを処理することを可能にする。シリアルAPIのメモリ・フットプリントは、XMLファイルの最大深さ(XMLツリーの最大深さ)と、XMLドキュメント全体を保持するのに要求されるメモリよりもしばしば小さい、単一のXML要素上のXML属性に格納された最大データとに基づいている。
しかしながら、或るタイプのデータ変換に対しては、特に、こうした変換が、XMLドキュメント全体が同時に利用可能となることを要求する場合には、シリアル手法は効果的ではない場合がある(言い換えれば、パーサは、シリアル方式で変換を行うことができない)。加えて、パーサは、一般に、XMLドキュメント要素の間の親/子関係を維持することができない。シリアルAPIを用いるアプリケーションは、すべての発火したイベントを取り扱うためにハンドラ(コールバック)を提供する必要がある。シリアルAPIは、したがって、アプリケーションがこうした親/子関係を維持すること、及びXMLドキュメント全体が利用可能となることを要求する変換を行うことに対して、より大きな負担をかける。このアプリケーションに対するより大きな負担は、シリアルAPIをそれらの有用性に限りのあるものにする。
ツリー・トラバーサル及びデータ・バインディングAPIは、こうした問題を回避する可能性がある。例えば、ドキュメント・オブジェクト・モデル(DOM)は、XMLをノード・オブジェクトのツリー階層として表し、ノードと下位階層にアクセスするためにインターフェースの標準化されたセットを提供する。XMLパーシングは、ツリーをトラバースすることによって行うことができる。DOMによって提供されるインターフェースは、より容易に用いることができるが、それらは一般に、ツリー全体がメモリ内に残ることを要求する。メモリ内ツリーは、それが表すXMLドキュメントよりもかなり大きいスペースを必要とし、したがって、非常に大きいXMLドキュメントに対しては実用的ではない場合がある。
同様に、XMLBeans、Castor、及びJava(登録商標) Architecture for XML Binding(JAXB)のようなXMLオブジェクト・バインディング・ツールは、XMLドキュメントを表わすオブジェクトモデル全体をメモリ内に保つ。
例えば、XMLBeansは、Java(登録商標)とXMLとをバインディングするフレームワークであり、Java(登録商標)開発者がXML又はXML処理を知る必要なしにXMLデータにアクセスし且つ処理することを可能にする。XMLBeansは、XMLドキュメントをJava(登録商標)オブジェクトの形態でアプリケーションに提示することによって、Java(登録商標)アプリケーションからXMLドキュメントにアクセスするのを簡単にする。逆に言えば、これは、これらのJava(登録商標)オブジェクトをXMLドキュメントに戻るように変換するために必要なツールを提供する。
XMLBeansは、全XMLスキーマのサポートを有し、且つ等価なJava(登録商標)クラスへのスキーマ・マッピング及びタイピング構築(typing constructs)をできるだけ自然に提供する。XMLBeansは、XMLスキーマを用いて、XMLインスタンス・データにアクセスし及びXMLインスタンス・データを修正するために用いることができるJava(登録商標)インターフェース及びクラスをコンパイルする。
XMLBeansは、したがって、オリジナルの本来のXML構造を保つXMLデータのJava(登録商標)オブジェクトベースのビューを提供する。これはまた、XMLドキュメントの一体性を保つ。XMLインスタンス・ドキュメント全体が総括して取り扱われる。XMLデータは、XMLとしてメモリ内に格納される。これは、ドキュメントの順番が保たれること、並びに、オリジナルの要素が余白を満たすことを意味する。
XMLBeansは、ドキュメントがメモリ内で利用可能である、XMLプログラミング状況のための、非常に有用なツールとすることができる。しかしながら、こうしたメモリ内モデルは、DOM又は他のツリー・トラバーサル技術に関して上記で説明されたものと同じ制限に悩まされ、アプリケーションは、大きいXMLドキュメントを処理しながらメモリ不足で走る可能性がある。
したがって、上記で説明されたツリー・トラバーサル手法又はデータ・バインディング手法のいずれかにおいて、処理することができるXMLドキュメントのサイズは、利用可能なメモリの量によって制限される。加えて、こうした実装において、アプリケーション・コードには、しばしば必然的にXMLオブジェクト・バインディング・ツール・コードが散りばめられる。ビジネス論理コードとXMLツール・コードとの間の分離の欠如は、こうしたシステムを使用する又は維持するのを難しいものにする及び/又は混乱させることがある。
XSLT(XSL変換)及びXQueryのような宣言型変換言語もまた、XMLドキュメントを変換することができる。しかしながら、こうした言語は、能力に限りがある。例えば、こうしたシステムにおいて、XMLドキュメントは、普通は、DOMによって表され、したがってDOMの制限を受け継ぐ。そのうえ、XMLデータのオブジェクト表現は存在せず、XSLTは、データを1つのフォーマットから別のフォーマットに変換するためにのみ用いられる。
別の手法は、Streaming API for XML(StAX)を用いるものである。StAXは、それぞれシリアルAPI及びDOMによって与えられるイベントベースのモデルとツリーベースのモデルとの間の妥協策として動作する。StAXメタファにおいて、プログラムの入口点は、ドキュメント内の点を表すカーソルである。アプリケーションは、パーサを駆動して、これがそれを必要とする場合に情報をプルするようにドキュメントを通してカーソルを本質的に動かす。これは、ドキュメント内のロケーションのトラックを保つのに必要な場合にアプリケーションがイベント間で状態を維持することを要求する、データをアプリケーションにプッシュするイベントベースのAPI(SAXのような)とは対照的なものである。
SAXと同様に、StAXは、任意に大きいサイズのXMLドキュメントを処理することができながら、なお制御はパーサではなくアプリケーションと共に依然として残る。パーサがデータの次のチャンクの準備ができたときにアプリケーションに伝えるのではなく、アプリケーションがパーサに該アプリケーションが受信することを望むときにデータの次のチャンクを入手するように伝える。そのうえ、StAXは、既存のXMLドキュメントを読み出すことができ、且つまた、如何なるサイズ制限もなしに新しいXMLドキュメントを作成することができる。SAXは、一方向のパーサであり、新しいXMLドキュメントを生成するために用いることはできず、一方、StAXは、双方向のAPIである。
StAXは、したがって、大きいドキュメントを一度に一つのセクションずつ処理するために良好に働き、ドキュメントの最初から最後まで順次の方式で本質的に動く。しかしながら、StAXは、アプリケーションがドキュメントの広く分離された部分に同時に且つ潜在的に予測できない順序でアクセスする必要があるときには、良いソリューションではない。
必要とされるのは、したがって、アプリケーションがパーシングの低レベルの詳細に関与することを要求することなく、ドキュメントの異なる部分へのランダムアクセスを許可しながら、シリアルAPIの利点を提供する、XML処理システム及び方法である。さらに必要とされるのは、DOMのような上記で説明されたツリー・トラバーサル方法において見出されるように厳しいメモリ制限を被らない技術である。さらに必要とされるのは、従来技術の方法の制限及び欠点を回避するXMLパーシング・スキームである。
種々の実施形態において、本発明は、StAXのようなプルベースのストリーミング・パーサをXMLBeansのようなXMLオブジェクト・バインディング・フレームワークと組み合わせることによって、XMLドキュメントを処理するための改善されたシステム及び方法を提供する。このように、本発明は、メモリ制限を被ることなく任意のサイズのXMLドキュメントを処理することができる。
加えて、本発明の種々の実施形態は、StAX及びXMLBeansからアプリケーション・コードを隔離するフレームワークを提供する。アプリケーション・データ・オブジェクトは、StAX及びXMLBeansを意識する必要はない。コードは、これにより、より容易に維持することができ、XMLオブジェクト・バインディング・フレームワーク(XMLBeans)と組み合わせたXMLパーサ(StAX)の使用は、コードがアプリケーションの動作に悪影響を及ぼすことなくスワップされ、強化され、又は他の方法で修正されることを可能にする。
種々の実施形態において、本発明のシステム及び方法はまた、以下の特色及び利点を提供する。
●それらを特定用途向けハンドラによって取り扱うことができるように、アプリケーションへの確認エラーメッセージのハンドリングの構成可能な(Configurable)スキーマ確認及びデリゲーション
●XMLスキーマ定義(XML Schema Definition)(XSD)確認に失敗したセグメントの構成可能なスキップ/包含
●XSD確認に失敗したレコードを識別する一助とするためのXSDエラーメッセージの構成可能なカスタマイゼーション
●XMLファイルのXPathを介したフラットファイルへの構成可能な変換
●アプリケーション・データ・オブジェクトからのXMLの増分的生成(incremental generation)
●対応するアプリケーション・データ・オブジェクトを提供しながらXMLセグメントをシリアルに抽出し且つ処理すること
●それらを特定用途向けハンドラによって取り扱うことができるように、アプリケーションへの確認エラーメッセージのハンドリングの構成可能な(Configurable)スキーマ確認及びデリゲーション
●XMLスキーマ定義(XML Schema Definition)(XSD)確認に失敗したセグメントの構成可能なスキップ/包含
●XSD確認に失敗したレコードを識別する一助とするためのXSDエラーメッセージの構成可能なカスタマイゼーション
●XMLファイルのXPathを介したフラットファイルへの構成可能な変換
●アプリケーション・データ・オブジェクトからのXMLの増分的生成(incremental generation)
●対応するアプリケーション・データ・オブジェクトを提供しながらXMLセグメントをシリアルに抽出し且つ処理すること
StAXのようなプルベースのストリーミング・パーサとXMLBeansのようなXMLオブジェクト・バインディング・フレームワークとの組合せは、プログラマが低レベルのXML処理ではなくJava(登録商標)オブジェクトに対処することができるように、等価なJava(登録商標)インターフェース/クラスへのスキーマ・マッピングを容易にしながら、本発明のXMLパーサがあらゆるサイズのXMLドキュメント上で動作することを可能にする。XMLドキュメントは、これにより、アプリケーションによって必要とされる場合にセグメントで処理することができる。XMLドキュメントから一度に一つのセグメントが抽出され、XMLBeansは、抽出されたセグメントをオブジェクトにロードするのに用いられる。逆に言えば、XMLドキュメントは、XMLBeansオブジェクトからXMLセグメントを生成し、生成されたXMLを、StAXを用いてストリームすることによって作成することができる。このように、あらゆるサイズのXMLドキュメントを増加的に生成することができる。
一実施形態において、アプリケーション・データ・オブジェクトは、XMLBeansオブジェクトとアプリケーション・データ・オブジェクトとの間のマッピングを提供するために別個のトランスレーション層を提供することによって、StAX及びXMLBeansコードから隔離される。XMLBeans関連のコードは、したがって、これがトランスレーション層内にのみ収容されることになるため、アプリケーションの他の部分に増殖しない。ゆえに、XMLBeansに精通する開発者は、トランスレーション層に集中することができ、一方、アプリケーション開発者は、StAX又はXMLBeansを絶えず理解する必要なしに、ビジネス論理部の実装に集中することができる。
付属の図面は、本発明の幾つかの実施形態を例証し、且つ、説明と共に、本発明の原理を解説するのに役立つ。図面に示された特定の実施形態は単なる例示的なものであって、本発明の範囲を限定することを意図されるものではないことを当業者は認識するであろう。
システム・アーキテクチャ
ここで図1を参照すると、一実施形態に係る本発明を実施するためのアーキテクチャの例を描いたブロック図が示されている。XMLパーシング・システム100は、フレームワーク102、コンフィギュレータ103、StAXパーサ104、XMLBeans105、及びトランスレーション層106を含む。XMLドキュメント107は、例えば、本発明の他のコンポーネントに対してローカルであってもよいし又はリモートであってもよいデータストア108のようなあらゆるソースから来ることができる。アプリケーション101は、XMLドキュメント107からのデータを要求するあらゆるソフトウェア・アプリケーションである。フレームワーク102は、XMLドキュメント107の生成並びに既存のXMLドキュメント107からのデータの抽出及びパーシングを制御するための機能性モジュールである。フレームワークは、XMLドキュメント107のストリームされたパーシングのためのStAXパーサ104と、アプリケーション・コードを生XMLから隔離するオブジェクト・バインディング・フレームワークを実装するためのXMLBeans105とを含む本発明の技術を実装するために、他のコンポーネントを採用し、且つこれと対話する。トランスレーション層106は、XMLBeansオブジェクトとアプリケーション・データ・オブジェクトとの間のマッピングを提供するように、XMLBeansオブジェクトからドメイン・オブジェクトを生成する。コンフィギュレータ103は、XMLの構造、トランスレータ・クラス、無効なレコードの包含/排除、XSD確認を行うかどうか、XMLとフラットファイルとの変換構成などについての情報をフレームワーク103に提供する。
ここで図1を参照すると、一実施形態に係る本発明を実施するためのアーキテクチャの例を描いたブロック図が示されている。XMLパーシング・システム100は、フレームワーク102、コンフィギュレータ103、StAXパーサ104、XMLBeans105、及びトランスレーション層106を含む。XMLドキュメント107は、例えば、本発明の他のコンポーネントに対してローカルであってもよいし又はリモートであってもよいデータストア108のようなあらゆるソースから来ることができる。アプリケーション101は、XMLドキュメント107からのデータを要求するあらゆるソフトウェア・アプリケーションである。フレームワーク102は、XMLドキュメント107の生成並びに既存のXMLドキュメント107からのデータの抽出及びパーシングを制御するための機能性モジュールである。フレームワークは、XMLドキュメント107のストリームされたパーシングのためのStAXパーサ104と、アプリケーション・コードを生XMLから隔離するオブジェクト・バインディング・フレームワークを実装するためのXMLBeans105とを含む本発明の技術を実装するために、他のコンポーネントを採用し、且つこれと対話する。トランスレーション層106は、XMLBeansオブジェクトとアプリケーション・データ・オブジェクトとの間のマッピングを提供するように、XMLBeansオブジェクトからドメイン・オブジェクトを生成する。コンフィギュレータ103は、XMLの構造、トランスレータ・クラス、無効なレコードの包含/排除、XSD確認を行うかどうか、XMLとフラットファイルとの変換構成などについての情報をフレームワーク103に提供する。
図1に示された種々の機能性モジュールは、別個のコンピューティング・エンティティ上で走るソフトウェアとして実装することができ、又はそれらは、あらゆる所望の構成で組み合わされてもよい。それらは、あらゆる数のハードウェアデバイスにわたって分散された様式で実装されてもよい。機能性モジュールの間での通信は、TCP/IP及びHTTPのような公知のネットワーク・プロトコルを用いて、あらゆる公知のデジタル通信媒体上で行われてもよい。図1における及び別途本明細書に記載された機能性モジュールの特定の配置は、本発明の一実施形態の例証となることを意図され、本発明の範囲をいかなる方法によっても制限すると考えられるべきではない。
本発明の技術によれば、XMLパーシング・システム100は、メモリ制限を被ることなく、任意のサイズのXMLドキュメントの処理を容易にし、アプリケーション・データ・オブジェクトは、XMLBeansオブジェクトとアプリケーション・データ・オブジェクトとの間のマッピングを提供するために別個のトランスレーション層106を提供することによって、StAX及びXMLBeansコードから隔離される。
一実施形態において、システム100は、アプリケーション101がフレームワーク102からのデータを必要とされるときにプルベースのパラダイムで要求するように、アプリケーション101をそれによって制御下におくことができる、機構を提供する。加えて、一実施形態において、システム100は、プログラマが低レベルのXML処理ではなくJava(登録商標)オブジェクトに対処することができるように、等価なJava(登録商標)インターフェース/クラスへのスキーマ・マッピングを容易にしながら、システム100があらゆるサイズのXMLドキュメント上で動作することを可能にするために、オブジェクト・バインディング・フレームワーク(XMLBeans105のような)を採用する。
一実施形態において、アプリケーション101からの要求に応答して、フレームワーク102は、要求を満たすのに必要とされる場合にXMLドキュメント107の一部を抽出する。抽出されたXML部分は、XMLBeans105に渡され、XMLBeans105は、該部分のメモリ内モデルを生成し、且つこれをアプリケーション101に提示するためにフレームワーク102に戻す。このように、メモリ内でXMLドキュメント全体107を表わす必要性が回避される。
一実施形態において、トランスレーション層106は、XMLBeans105によって生成されたメモリ内モデルを、これがアプリケーション101によって理解されることが可能なドメイン・オブジェクトの形態であるようにトランスレートする。例えば、アプリケーションが、ファーストネーム、ラストネーム、アドレスなどを含むがそのデータを表わすXMLが異なるフォーマットを有する、employeeオブジェクトを要求する場合、トランスレーション層106は、必要とされるトランスレーションを行う。
動作方法
本発明の技術によれば、少なくとも3種類の動作、すなわち、XMLセグメント及びサブセグメントに対応しているアプリケーション・データ・オブジェクトを得るためにXMLドキュメントを処理すること、アプリケーション・データからXMLドキュメントを生成すること、及びXMLドキュメントをフラットファイルに変換すること、が利用可能である。
本発明の技術によれば、少なくとも3種類の動作、すなわち、XMLセグメント及びサブセグメントに対応しているアプリケーション・データ・オブジェクトを得るためにXMLドキュメントを処理すること、アプリケーション・データからXMLドキュメントを生成すること、及びXMLドキュメントをフラットファイルに変換すること、が利用可能である。
ここで図5を参照すると、一実施形態に係るXMLドキュメントを処理するための方法の概要を描いた流れ図が示されている。アプリケーション101は、データ・オブジェクトを要求する502。フレームワーク102は、StAXパーサ104からデータ・チャンクを要求し且つ受信する503。例えば、アプリケーション101がemployeeを表わす要求されたデータを有する場合、StAXパーサ104からのデータ・チャンクは、employeeを表わすデータの次のチャンクであってもよい。フレームワーク102は、次いで、データ・チャンクをトランスレーション層106に渡し504、トランスレーション層106が変換を行い、且つXMLBeansフォーマットで等価なオブジェクトツリーを戻す505。フレームワーク102がオブジェクトツリーを受信すると、フレームワーク102は、トランスレーション層106をコールして、オブジェクトをアプリケーション101が理解できるフォーマットに変換する506。トランスレーション層106は、結果が、XML低レベルAPI、XMLBeansオブジェクト、及びアプリケーションが関係しない他のアーチファクトのないものであるように、オブジェクトツリーをこうしたフォーマットにトランスレートする。
ここで図6を参照すると、一実施形態に係るXMLドキュメントを生成するための方法の概要を描いた流れ図が示されている。アプリケーション101は、データ・オブジェクトをフレームワーク102に渡す。フレームワーク102は、トランスレーション層106をコールして、XMLBeansオブジェクトへのトランスレーションを行う。トランスレーションが行われると、フレームワーク102は、XMLBeansオブジェクトを用いて、等価なXMLを抽出する603。フレームワーク102は、次いで、XMLをデータストア108に書き込む605。一実施形態において、ステップ605は、新しいXMLドキュメントの作成の開始、又は以前に開始された既存のXMLドキュメントへのXMLの追記を含む。この様式、個別的な(piecemeal)様式、又はストリーミングの様式で、XMLドキュメントの作成が容易にされる。
一実施形態において、フレームワーク102は、指定されたメモリ限界に達するとすぐにXMLの書き込みを行う。StAXパーサ104は、すべてのサブセグメントが書き込まれるときにXMLのどの部分が書き込まれるべきか及びどの部分が書き込まれることになるメモリ内に保たれるべきかを判定するのに用いられる。例えば、以下のXMLが生成されることになると想定する。
これは、「employees」セグメント内で各「employee」セグメントを増加的に生成することによって達成される。一実施形態において、XMLを生成するために以下のステップが行われる。
●1)最初に「employees」セグメントを生成するが、そのエンドタグ(</employees>)は書き込まない。生成されたセグメントをメモリ内に保持する。フレームワーク102は、XMLをStAXパーサ104に渡し、且つStAXパーサ104にXMLをオープニング・タグ及びエンディング・タグのような個々のタグに分割するように頼む。フレームワーク102は、次いで、エンディング・タグ以外のすべてのタグを書き込む。ここで、フレームワーク102は、XMLセグメント内の個々のタグを識別するためにStAXパーサ104を利用している。
●2)「employee」要素の付加を続ける。フレームワーク102は、employeeデータに対応しているXMLの追記を続ける。
●3)アプリケーション101がすべての「employee」要素が付加されていることを示すと、エンドタグ</employees>を書き込む。
●1)最初に「employees」セグメントを生成するが、そのエンドタグ(</employees>)は書き込まない。生成されたセグメントをメモリ内に保持する。フレームワーク102は、XMLをStAXパーサ104に渡し、且つStAXパーサ104にXMLをオープニング・タグ及びエンディング・タグのような個々のタグに分割するように頼む。フレームワーク102は、次いで、エンディング・タグ以外のすべてのタグを書き込む。ここで、フレームワーク102は、XMLセグメント内の個々のタグを識別するためにStAXパーサ104を利用している。
●2)「employee」要素の付加を続ける。フレームワーク102は、employeeデータに対応しているXMLの追記を続ける。
●3)アプリケーション101がすべての「employee」要素が付加されていることを示すと、エンドタグ</employees>を書き込む。
一実施形態において、本発明のシステムはまた、種々のタイプのドキュメント変換を行うことができる。例えば、XMLドキュメントをフラットファイルに変換することは時々有用であり、こうした変換は、XMLをアップロードすることができない場合があるコンポーネント(SQL*Loaderのような)との関連において動作するときの、データファイルの大量アップロードのために用いられてもよい。ドキュメント変換を行うときに、フラットファイルを生成するときにオリジナルのXMLドキュメントの異なる部分からのデータを得ることが時々必要な場合がある。各データ・チャンクは、一般に、結果として得られるフラットファイルにおけるライン(又はラインの数)に対応する。しかしながら、ラインをポピュレートするためのデータは、別のチャンク、例えば異なるソース(又はソースの組合せ)から得る必要がある場合があるチャンクから来る場合がある。一実施形態において、コンフィギュレータ103は、フラットファイルのラインを生成するのに必要とされるこれらのデータ片を取り出し、且つフラットファイルのラインを生成するのに必要とされる限りにわたってメモリ内に保持することができるように、他のデータ・チャンクの送信元を識別する最初のデータ・チャンクを解釈する。処理されているデータ・チャンクによってクロスリファレンスされるデータ要素は、これにより必要とされる場合に取り出すことができる。このように、コンフィギュレータ103は、メモリ使用量を管理可能な量に依然として保ちながら、必要なデータ要素が取り出され且つ提示されることを保証する。一実施形態において、フラットファイルにおけるラインは、データのソースを指定する。
例えば、フラットファイルを生成する際に該当する情報を得るためにパートナーの(すなわちデータの補助ソース)情報が必要とされると想定する。XMLドキュメントからの最初のデータ・チャンクは、パートナーを指定してもよい。パートナーの識別は、他のデータ・チャンクを処理するための付加的な情報を得ることに該当する。したがって、フレームワークは、フラットファイルの生成を容易にするように、他のデータ・チャンクを処理しながらパートナー名をメモリ内に維持する。コンフィギュレータ103は、どのデータ要素がメモリ内に維持されるべきか及びそれらが処理された後でどれを廃棄することができるかを判定するのに必要とされる情報をフレームワーク102に提供する。
一実施形態において、コンフィギュレータ103は、XPathドキュメントを用いてこうした情報を指定する。XPathドキュメントは、どのデータ項目がクロスリファレンスであるかを示し、且つどのデータ・チャンクが提示されることになるどのデータを要求するかをさらに示す。XPath、XMLPath言語は、XMLドキュメントからノードを選択するための周知のクエリ言語である。この情報が与えられると、フレームワーク102は、クロスリファレンスを必要とされる限りにわたってメモリ内に保持し、且つもはや必要とされないこれらのアイテムを廃棄することができる。XPathドキュメントは、1つのXMLタイプから別のXMLタイプへと変化してもよい。
一実施形態において、クロスリファレンスがもはや必要とされなくなると、例えばメモリを解放する必要がある場合に、ドキュメント変換がまだ完了していない場合であっても、それらは廃棄されてもよい。別の実施形態において、クロスリファレンスは、ドキュメント変換が完了するまで保持される。さらに別の実施形態において、もはや必要とされないクロスリファレンスは、それらが後で利用可能にされてもよいように、ディスク又は他の記憶装置にスワップ・アウトされる。
XMLドキュメントの処理
一実施形態において、本発明のシステムは、或る動作(クライアント要求をサービスすることのような)を行う際にアプリケーション101によって使用可能なアプリケーション・ドメイン・オブジェクトを生成するために、XMLドキュメント107を処理することができる。XMLドキュメント107は、例えば、どこにドキュメントが行くべきか及びどこからドキュメントが来るべきかを示す「to」タグ及び「from」タグを含む、多くの異なる種類の情報を収容することができる。employee情報を収容するXMLドキュメントの例は以下の通りである。
一実施形態において、本発明のシステムは、或る動作(クライアント要求をサービスすることのような)を行う際にアプリケーション101によって使用可能なアプリケーション・ドメイン・オブジェクトを生成するために、XMLドキュメント107を処理することができる。XMLドキュメント107は、例えば、どこにドキュメントが行くべきか及びどこからドキュメントが来るべきかを示す「to」タグ及び「from」タグを含む、多くの異なる種類の情報を収容することができる。employee情報を収容するXMLドキュメントの例は以下の通りである。
一実施形態において、アプリケーション・ドメイン・オブジェクトは、アプリケーション100(上記の例に示された<employee>キーのような)によって渡されるキーに基づいて生成される。キーは、コンフィギュレータ103によって用いられる構成ファイルを介して対応するXMLセグメントにマップすることができる。
StAXパーサ104は、アプリケーション101によってパスインされる各セグメント名に対応しているセグメントを抽出する。XMLBeans105は、抽出されたXMLセグメントを用いて、対応するXMLBeansオブジェクトを生成する。フレームワーク102は、生成されたXMLBeansオブジェクト上でXSD確認を行い、確認エラーは、さらなる処理のために特定用途向けエラー・ハンドラにデリゲートされる。
一実施形態において、XSD確認に失敗する事例では、(無効なXMLセグメントを含むようにフレームワーク102が構成されない限り)同じキーをもつ次のセグメントがフレームワーク102によってフェッチされる。このプロセスは、有効なセグメントが見つけ出されるまで、又は次のセグメントの始まりが検出されるまで、若しくはXMLドキュメント全体107が尽くされる(exhausted)まで繰り返される。
一実施形態において、フレームワーク102は、アプリケーション・データ・オブジェクトの作成をXMLBeansオブジェクトからトランスレーション層106にデリゲートする。結果として得られたアプリケーション・データ・オブジェクトがアプリケーション101に戻される。
一実施形態において、本発明のシステムは、メモリ制限に直面することなく任意のサイズのXMLドキュメント107を処理することができる。アプリケーション101は、アプリケーション101が、増分的なシリアルな様式で各サブセグメントに対するデータを得ることができるように、そのサブセグメントのいずれの包含もなしにセグメントに収容されたデータに対応しているアプリケーション・データ・オブジェクトを得ることができる。一実施形態において、これは、SegmentCursorクラスのインスタンスを戻すopenSegment()メソッドをコールすることによって達成される。アプリケーション101は、メソッドgetDataObject()を用いることによって、そのサブセグメントからの如何なるデータの包含もなしに、特定のセグメントに対応しているデータ・オブジェクトを得ることができる。メソッドは、employeeサブセグメントに対応しているデータ・オブジェクトをシリアルに得るために、次の()を再帰的に用いることができる。
ここで図2Aを参照すると、一実施形態に係るXMLドキュメントの処理を描いたイベント・トレース・ダイヤグラムが示されている。図2Aに描かれた特定のステップは、本発明の一実施形態の単に例示的なものに過ぎない。アプリケーション101は、XMLドキュメントのロケーション及び構成キーをフレームワーク102に送信する。フレームワークは、アプリケーション101によって提供されたキーに基づいて、コンフィギュレータ103からの構成情報(XMLドキュメントの構造のような)を要求する202。
この情報を取り出すために、フレームワーク102は、コンフィギュレータ103から、上記の例となるXMLドキュメントに示されるように、「to」及び「from」情報を収容しているXMLセグメント「header」のロケーションを要求する。コンフィギュレータ103は、XMLドキュメント107の該当する部分を見つけ出すことができる場所を示すマッピングを収容し、したがって、コンフィギュレータ103は、例えば、セグメント、サブセグメント、X−Pathクエリ、トランスレータ・クラスなどを含むXML構造についての構成情報を送信すること203によって、要求202に応答する。上記の例では、XMLドキュメント107のヘッダにおいてこうした情報が見つけ出される。
アプリケーション101は、XMLセグメントの名前を提供することによって、アプリケーション・ドメイン・オブジェクトを要求する。フレームワーク102は、XMLセグメントを抽出するためにStAXパーサ104に要求を送信する205。StAXパーサ104は、識別された情報に遭遇するまでXMLドキュメント107をパースし、上記の例では、これは、「<header>」タグが見つけ出されるまでXMLドキュメント107をパースし、且つタグが見つけ出されるときにフレームワーク102に通知する。フレームワークは、エンドタグ「</header>」が見つけ出されるまでStAXを介してXMLの取り出しを続ける。
一実施形態において、こうしたパーシングは、データストア108からのデータの、繰返される取り出しを含んでもよい。識別された情報に遭遇すると、StAXパーサ104は、XMLセグメントを戻す206。
フレームワーク102は、次いで、例えば、抽出されたXMLセグメントとアプリケーションによって提供されたセグメント名とを渡すことによって、XMLBeansオブジェクトへの変換を要求するためにトランスレーション層106に要求を送信する207。一実施形態において、トランスレーション層106は、周知の技術に従ってXMLセグメントをXMLBeansオブジェクトに変換するためのXMLBeansモジュール105を含む。トランスレーション層106及び/又はXMLBeansモジュール105は、フレームワーク102に対して及びシステム100の他のコンポーネントに対してローカルに位置づけられてもよいし又はリモートに位置づけられてもよい。トランスレーション層106は、XMLセグメント及びセグメント名を用いて生成された対応するXMLBeansオブジェクトを戻す208。
フレームワーク102は、次いで、オブジェクトをアプリケーション101によって理解されることが可能なフォーマットに変換するために、XMLBeansオブジェクトをトランスレーション層106に送信209し、トランスレーション層106にXMLBeansオブジェクトとセグメント・キーを渡す。トランスレーション層106がこのアプリケーション・ドメイン・オブジェクトを生成すると、トランスレーション層106は、アプリケーション・ドメイン・オブジェクトを戻し210、次いで、これをフレームワーク102がさらなる処理のためにアプリケーション101に戻す211。
一実施形態において、コンフィギュレータ103は、例外ハンドリングを制御する。例えば、無効なXMLに遭遇する場合に、コンフィギュレータ103は、無効なXMLがスキップされるべきかどうか又は無効なXMLの取り出し可能などんな部分をも取り出す試みがなされるべきかどうかを示すことができる。
ここで図2B及び図2Cを参照すると、付加的な詳細とエラー・ハンドリングとを含む別の実施形態に係るXMLドキュメントの処理を描いたイベント・トレース・ダイヤグラムが示されている。
アプリケーション101は、例えばopenDataObject(segmentName)コールを発行することによりXMLセグメントの名前を提供することによって、セグメントに対するアプリケーション・ドメイン・オブジェクトが開かれることを要求する241。フレームワーク102は、コールを受信し、且つ例えばextractStartElementAndItsAttributes(segmentName)をコールすることによって、セグメントに対するスタート要素及び属性を抽出する242ために、StAXパーサ104への要求をサブミットする。StAXパーサ104は、セグメントXMLを戻す257。フレームワーク102は、次いで、例えばappendEndTagInExtractedXml()をコールすることによって、抽出されたXMLにエンドタグを追記する243。抽出されたXMLセグメントは、エンドタグが追記された後で整形式のXMLに変化する。
フレームワーク102は、例えば、getXmlObject(extractedXml、segmentName)コールを介して、抽出されたXML及びセグメント名をトランスレーション層106に渡すことによって、トランスレーション層106からのXMLBeansオブジェクトを要求する244。トランスレーション層106は、createCorrespondingXmlObject()をコールすることによって、対応するXMLBeansオブジェクトを生成し245、且つ生成したXMLBeansオブジェクトを戻す246。フレームワーク102は、例えばgenerateDataObject(xmlObject)メソッドをコールすることによって、アプリケーション・ドメイン・オブジェクトを要求する247。トランスレーション層106は、アプリケーション・ドメイン・オブジェクトを戻すこと248によって応答する。
フレームワーク102は、次いで、例えばinstantiateSegmentCursor(Object)メソッドをコールすることによって、セグメント内のロケーションのトラックを保つために、アプリケーション・ドメイン・オブジェクトを要約するセグメント・カーソルをインスタンス化する249。このセグメント・カーソルは、アプリケーション101に戻される250。アプリケーション101は、このとき、アプリケーション101がデータフローの制御下にあるように、データ・オブジェクトをプル型配置で要求することができる。
アプリケーション101は、例えばgetDataObject()をコールすることによって、セグメント・カーソル231によって要約されたアプリケーション・ドメイン・オブジェクトを要求する251。セグメント・カーソル231は、要求されたアプリケーション・ドメイン・オブジェクトを戻す252。必要とされる場合に、アプリケーション101は、次いで、例えばnext(subSegmentName)コールを発行することによりサブセグメント名を渡すことによって、アプリケーション・ドメイン・オブジェクトを要求する253。セグメント・カーソル231は、現在開かれているセグメント及びそのサブセグメントの名前を提供するフレームワーク102に要求を転送する254。フレームワーク102は、図2Aとの関連において上記で説明された技術に従うアプリケーション・ドメイン・オブジェクトを生成する257。しかしながら、一実施形態において、XMLは、現在の開かれたセグメント内からのみ抽出される。フレームワーク102は、次いで、アプリケーション・ドメイン・オブジェクトを戻し255、セグメント・カーソル231は、オブジェクトをアプリケーション101に戻す256。
図2Cに続くと、アプリケーション101は、例えば、getDataObject(segmentName)コールを介してXMLセグメントの名前を提供することによって、XMLセグメントに対するアプリケーション・ドメイン・オブジェクトを要求する261。フレームワーク102は、例えば、extractXmlSegment(segmentName)をコールすることによって、識別されたセグメント名に対するXMLセグメントを抽出するために、StAXパーサ104をコールする262。StAXパーサ104は、セグメントXMLを戻す274。フレームワーク102は、次いで、例えば、getXmlObject(extractedXml,segmentName)コールを介して、抽出されたXML及びセグメント名をトランスレーション層106に渡すことによって、XMLBeansオブジェクトを要求する263。トランスレーション層106は、例えばcreateCorrespondingXmlObject()をコールすることによって、抽出されたXMLに対応しているXMLBeansオブジェクトを生成する264。トランスレーション層106は、XMLBeansオブジェクトをフレームワーク102に戻す265。
一実施形態において、フレームワーク102は、例えばvalidateAgainstXsd()をコールすることによって、XMLBeansオブジェクトをXSDに対して確認する266。メソッドコールは、XMLBeansオブジェクトにそれ自身をXSDに対して確認するように依頼する。何らかの確認エラーが存在する場合、フレームワーク102は、XMLBeans105からそれらを得る267。フレームワーク102は、エラーを有するこれらのオブジェクトに対するレコード識別子を抽出するためにレコード識別子XPathクエリ(コンフィギュレータを介して構成される)を走らせ268(runXPathQueriesToExtractRecordIdentifiers(xmlObject))、XMLBeans105は、レコード識別子(単数又は複数)を戻す275。フレームワーク102は、エラーのソースを識別することができるように、エラーメッセージに識別子文字列を追記する269(appendIdentifierStringToErrorMessages())。フレームワーク102は、次いで、エラー・ハンドラ233でのハンドリングをそれに引き起こさせるエラー及びオブジェクトの識別を含む各エラーメッセージをエラー・ハンドラ233に送信する270(handleValidationErrors(code,message))。
フレームワーク102は、次いで、例えばgenerateDataObject(xmlObject)コールを発行することによって、アプリケーション・ドメイン・オブジェクトに変換するために、XMLBeansオブジェクト及びセグメント名をトランスレーション層106に伝送する271。トランスレーション層106は、XMLBeansオブジェクトに対応しているアプリケーション・ドメイン・オブジェクトを生成すること272によってトランスレーションを行い、且つアプリケーション・ドメイン・オブジェクトをフレームワーク102に戻し273、フレームワーク102が、次いで、アプリケーション・ドメイン・オブジェクトをアプリケーション101に転送する276。
XMLドキュメントの生成
本明細書で説明されるように、XMLドキュメント107の生成は、個別的な様式で行うことができ、この場合、アプリケーション101は、各セグメントに対する情報を順に提供し、且つセグメントがフルセグメントであるか又は囲み(enclosing)セグメントであるかを示す。或るセグメントは、XMLドキュメント107が生成されている状態でメモリ内に保たれてもよく、一方、他のセグメントは、個々の要素(レコードのような)が1つずつ生成され且つ追記されてもよいようにメモリ内に保つには大きすぎる場合がある。
本明細書で説明されるように、XMLドキュメント107の生成は、個別的な様式で行うことができ、この場合、アプリケーション101は、各セグメントに対する情報を順に提供し、且つセグメントがフルセグメントであるか又は囲み(enclosing)セグメントであるかを示す。或るセグメントは、XMLドキュメント107が生成されている状態でメモリ内に保たれてもよく、一方、他のセグメントは、個々の要素(レコードのような)が1つずつ生成され且つ追記されてもよいようにメモリ内に保つには大きすぎる場合がある。
アプリケーション101は、あらゆる数のデータソースからのデータ並びにアプリケーション・ビジネス論理に基づいて、XMLドキュメント107を生成する必要がある場合がある。アプリケーション101は、したがって、アプリケーション・データ・オブジェクトに要約されるデータを有し、本明細書で説明されるように、これらのアプリケーション・データ・オブジェクトは、XMLセグメントを生成するために用いられる。本発明のシステムは、アプリケーション101にStAXパーサ104又はXMLBeans105のあらゆる知識又は意識を有することを要求することなく、こうした変換が行われることを可能にする。データ・オブジェクトは、対応するXMLセグメントを生成し且つ生成されているXMLドキュメント107に追記することができるように、フレームワーク102に増加的に渡される。
フレームワーク102は、アプリケーション101によって提供されたデータ・オブジェクトに基づいて、そのメモリバッファにおけるXMLコードの生産を開始する。プロセスは、メモリバッファが満杯であるときに、バッファに入れられたデータがデータストア108に書き込まれている状態で続行する。
上記で説明されたように、トランスレーション層106は、アプリケーション・データ・オブジェクトと対応するXMLBeansオブジェクトとの間のマッピングを提供する。フレームワーク102は、XMLBeansオブジェクトを生成するタスクをトランスレーション層106にデリゲートする。フレームワーク102は、トランスレーション層106によって生成されたXMLBeansオブジェクトの、XMLスキーマ定義(XSD)に対する確認を行い、且つ確認エラーメッセージのハンドリングをアプリケーション・エラー・ハンドラにデリゲートする。フレームワーク102は、XMLBeansオブジェクトを用いて対応するXMLセグメントを生成し、且つセグメントをそのバッファに書き込む。一実施形態において、このバッファは、より永続的なデータ記憶デバイスにバックアップされてもよい。アプリケーション101がXML生成プロセスの終了を示すと、バッファがフラッシュされ、ファイルが閉じられる。
多くの状況において、多数のレコードが書き込まれることになる。セグメントXML及び対応するXMLBeansオブジェクトがメモリ内に生成されるので、フレームワーク102がすべてのレコードをメモリ内に同時に保持することを試みた場合に、リソース制限が存在する場合がある。したがって、本発明の技術は、それによってセグメントにおける要素を増加的に付加することができる、機構を提供する。アプリケーション101は、その子セグメント(サブセグメント)が増加的に付加されることになるセグメントを付加するようにフレームワーク102に依頼する。フレームワーク102は、生成されたXMLからセグメント・エンドタグ(例えば</employees>)を除去し、且つこれをスタックにプッシュする。アプリケーション101は、次いで、employeeサブセグメントを増加的に付加し続けることができる。アプリケーション101がすべてのサブセグメントの付加を終えると、スタックからの最後のタグがポップされ、且つ生成されたXMLコードに戻って追記される。XMLのこの増分的な生成は、メモリ制限に直面することなく任意のサイズのXMLドキュメントが生成されることを可能にする。
サブセグメントは、所望の場合に互いにネストすることができる。フレームワーク102は、階層の深さに対して如何なる制約をも課さない。一実施形態において、いつセグメントを開くか及びいつセグメントを閉じるかをフレームワーク102に通知することはアプリケーション101の担当である。
例えば、上記に示されたXMLコードを生成する際に、<header>セグメントは、<employees>セグメント及び関連するデータ、並びに囲み<wmi>タグと共に生成される。<header>セグメントを生成し且つ書き込むために、システムは、囲み<wmi>タグを開き、且つ<header>セグメントを書き込む。エンディング</wmi>タグは、付加的なデータ(<employees>セグメント)が最初に書き込まれる必要が依然としてあるので、まだ書き込まれなくてもよい。したがって、XMLドキュメント107は、エンディング</wmi>タグが欠けることになるため、一時的に非整形式となるであろう。このエンディング・タグは、これが適切な時点で書き込まれることが可能となるように保持することができる。
一実施形態において、アプリケーション101がドキュメント107全体を書き込むことなくXMLドキュメント107のセグメントを書き込むことを試みる場合に、これは、セグメントが開かれるべきであるがまだ閉じられるべきではないこと、及びデータの一部のみが送られており、さらに後に続くことをフレームワーク102に通知するように、openSegment()コールを渡すことができる。これは、データ要素の増分的な書き込み(レコードのような)を可能にする。エンディング・タグは、データ要素がすべて書き込まれた後でこれが書き込まれることが可能となるように、StAXパーサ104から得られ且つメモリ内に保持されてもよい。
ここで図3A及び図3Bを参照すると、一実施形態に係るXMLドキュメント107の生成を描いたイベント・トレース・ダイヤグラムが示されている。アプリケーション101は、構成キーをフレームワーク102に送信321し、コンフィギュレータ103から、提供されたキーに対する構成を要求する322。コンフィギュレータ103は、トランスレータ・クラスが無効なXMLセグメントを無視するか又は含むかなどについてのデータを含む、要求された構成情報を戻す323。
アプリケーション101は、オブジェクトがXMLに変換されることを要求するアプリケーション・ドメイン・オブジェクトをフレームワーク102に渡す301。フレームワーク102は、例えばgenerateXmlObject()コールを発行することによって、オブジェクトをトランスレーション層106に送信する302。トランスレーション層(later)106は、createCorrespondingXmlObject()のようなメソッドを走らせ、且つ対応するXMLBeansオブジェクトを戻す303。フレームワーク102は、次いで、例えばXSDを用いて生成されたXMLオブジェクト・クラスを用いて、XMLBeansオブジェクトからXMLセグメントを生成する304。フレームワーク102は、以下のようにXMLをデータストア108に書き込む309。
ここで図3Bを参照すると、アプリケーション101は、openSegment(object)コールをフレームワーク102に送信する306。このコールは、書き込まれることになるデータに対する新しいセグメントを開くように、しかしエンディング・タグを書き込まないようにフレームワーク102に伝える。フレームワーク102は、例えばgenerateXmlObject()コールを発行することによって、アプリケーション・ドメイン・オブジェクトをトランスレーション層106に送信する324。トランスレーション層(later)106は、対応するXMLBeansオブジェクトを戻す325。フレームワーク102は、次いで、例えばXSDを用いて生成されるXMLオブジェクト・クラスを用いて、XMLBeansオブジェクトから対応するXMLセグメントを生成する326。
フレームワーク102は、エンディング・タグを得るようにパーシングするためにXMLをStAXパーサ104に送信する307。StAXパーサ104は、エンディング・タグを識別するためにXMLをパースし、且つエンディング・タグをフレームワーク102に送信する308。一実施形態において、ステップ307は、removeSegmentEndTagAndPushItInStack()コールを用いて実装され、これがエンディング・タグの除去を引き起こす。フレームワーク102は、例えば、エンドタグをスタックに保存することによって、エンディング・タグを後で用いるためにメモリ内FIFOスタックに保持する。幾つかの事例において、多数のエンディング・タグがこの方法で保存されてもよい。エンドタグなしのXMLコードは、データストア108におけるデータに追記される311。この技術を用いて、フレームワーク102は、メモリ制限にぶつかることなくあらゆる任意の長さのXMLコードが書き込まれることを可能にする個別的な様式でXMLコードを書き込むことができる。一実施形態において、これは、writeXmlToBufferBackedByFile()コールを用いて実装され、これは、永続的記憶装置にもバックアップされる、XMLコードのバッファへの書き込みを引き起こす。
付加されることになる各セグメントに対して、アプリケーション101は、addSegment()コールをフレームワーク102に送信する310。これは、現在開かれているセグメントへの任意の数のサブセグメントの付加を可能にする。フレームワーク102は、例えば、generateXmlObject()コールを発行することによって、アプリケーション・ドメイン・オブジェクトをトランスレーション層106に送信し329、これがcreateCorrespondingXmlObject()メソッドを呼び出し、且つ対応するXMLBeansオブジェクトを戻す330。
随意的に、フレームワーク102は、戻されたXMLBeansオブジェクトをXSDに対して確認してもよい。もしあれば、エラーメッセージが戻され、フレームワーク102は、例えばgetRecordIdentifiers()コールを発行することによって、トランスレーション層106からのレコード識別子を要求する。トランスレーション層106は、アプリケーション・データ・オブジェクトから抽出された識別子文字列を戻す。トランスレーション層106は、有意味なレコード識別子を抽出し及び生成することを担当する。フレームワーク102は、エラーを引き起こした適切なレコードを識別することができるようにエラーメッセージに識別子文字列を追記し、こうした動作は、例えば、appendIdentifierStringToErrorMessages()コールによって行うことができる。必要であれば、handleValidationErrors()コールを介してエラー・ハンドラを呼び出すことができる。
フレームワーク102は、XMLBeansオブジェクト330を用いて、例えばXSDを用いて生成されるXMLオブジェクト・クラスを用いて、対応するXMLセグメントを生成する331。
フレームワーク102は、アプリケーション101から受信した命令に従ってXMLセグメントを追記する333。
ステップ310及び329〜333は、付加されているすべてのセグメントに対して繰り返される。
すべてのデータがXMLドキュメント107に付加されると、フレームワーク102は、開かれている囲みセグメント(もし存在すれば)を閉じ、且つドキュメントの書き込みを適正に終えるのに必要とされる場合にあらゆる他のエンディング・タグを追記する準備ができた状態となる。アプリケーション101は、closeSegment()コールを送信315し、これは、フレームワーク102に、そのサブセグメントが増加的に書き込まれていたセグメントに対するメモリ内スタックからエンディング・タグをポップさせ、且つエンディング・タグをデータストア108で書き込まれているデータに追記させる312。一実施形態において、ステップ312は、popStackAndWritePoppedEndTagToBufferBackedByFile()メソッドをコールすることによって行われてもよい。
アプリケーション101は、次いで、closeAll()コールを送信313し、これは、フレームワーク102に、スタックからすべての残りのクロージング・タグを取り出させ且つそれらをXMLドキュメント107に追記させる。例えば、タグがスタックに保存されていた場合、フレームワーク102は、スタックからタグをポップし、且つそれらをデータストア108で書き込まれているデータに追記する314。このように、タグが適正な順番で書き込まれる。結果は、データストア108での整形式のXMLドキュメント107である。一実施形態において、ステップ313及び314は、popStackUntilEmptyAndWritePoppedEndTagsToBufferBackedByFile()メソッド、続いてflushBuffer()メソッド、及びcloseFile()メソッドをコールすることによって行われてもよい。
XMLドキュメントのフラットファイルへの変換
前述のように、一実施形態において、本発明のシステムはまた、種々のタイプのドキュメント変換を行うことができる。例えば、XMLドキュメントをフラットファイルに変換することが時々有用である。フラットファイルは、構造化された関係性をもたないレコードを収容するデータファイルである。それらは、例えば、XMLをアップロードすることができない場合があるコンポーネント(SQL*Loaderのような)との関連において動作するときに、データファイルの大量アップロードのために用いられてもよい。バルク・ローダは、普通はフラットファイルからの入力をとり、それらを解釈するために或る付加的な知識を用いる。例えば、Oracle SQL*Loaderは、ファイル・フォーマット特性についての付加的な情報を提供するために制御ファイルを用いる。
前述のように、一実施形態において、本発明のシステムはまた、種々のタイプのドキュメント変換を行うことができる。例えば、XMLドキュメントをフラットファイルに変換することが時々有用である。フラットファイルは、構造化された関係性をもたないレコードを収容するデータファイルである。それらは、例えば、XMLをアップロードすることができない場合があるコンポーネント(SQL*Loaderのような)との関連において動作するときに、データファイルの大量アップロードのために用いられてもよい。バルク・ローダは、普通はフラットファイルからの入力をとり、それらを解釈するために或る付加的な知識を用いる。例えば、Oracle SQL*Loaderは、ファイル・フォーマット特性についての付加的な情報を提供するために制御ファイルを用いる。
一般に、フラットファイルは、あらゆる形態をとることができる。フラットファイルに対する1つの典型的な配置は、以下のセクションを含む。
●ヘッダ・データ:例えば、送信元識別子、トランザクション識別子、受信日付などを含んでいるメタデータを含む。一般に、ボディ・レコード毎に繰り返される必要のない情報を含む。
●ボディ・データ:employeeレコードのような個々のレコードを含む。
●フッタ・データ:レコードの総数などのようなデータをファイルにまとめるためのアイテムを保持する。
●ヘッダ・データ:例えば、送信元識別子、トランザクション識別子、受信日付などを含んでいるメタデータを含む。一般に、ボディ・レコード毎に繰り返される必要のない情報を含む。
●ボディ・データ:employeeレコードのような個々のレコードを含む。
●フッタ・データ:レコードの総数などのようなデータをファイルにまとめるためのアイテムを保持する。
一実施形態において、本発明のシステムは、XMLドキュメント107をフラットファイルに変換するための機構を提供する。StaxBeanMapping.propertiesと呼ばれる構成ファイルは、フラットファイル内のどこに種々のデータ項目が置かれるべきかについての情報を提供する。このように、ヘッダセクション、ボディセクション及び/又はフッタセクションにおいてポピュレートされることになるデータを、例えばXpathクエリ言語を介して指定することができる。XPathは、セグメント、サブセグメント、及び/又は開かれたセグメントに対応しているXMLオブジェクトを参照することができる。このように、あらゆる所与の時点でメモリ内に必要とされるのはXMLの対応するセグメント及び/又はXMLBeansオブジェクトのみであるため、メモリ使用量が最適化される。XMLドキュメント全体をメモリ内に保持する必要はない。データを1つのセグメントから別のセグメントにクロスリファレンスする必要がある場合、フレームワーク102は、変換の間にメモリ内に適切なデータを保持することができるように、XPathリファレンスとして指定される、こうしたクロスリファレンスの構成を提供する。
フィールドを互いから分離するために及びレコードを互いから分離するために、あらゆる種類のフィールド区切り文字及びレコード区切り文字を用いることができる。例えば、フィールド区切り文字としてタブ又はコンマを用いることができ、フラットファイルの各ラインがレコードに対応するように、レコード区切り文字として改行(キャリッジリターン)を用いることができる。
一実施形態において、フラットファイルは、ファイルに対するシンタックスを指定する構成によって定義される。例えば、構成は、ボディ・データが現れるべき順番と、含まれるべきあらゆる付加的なメタデータ(例えばレコードの総数のような)とを指定してもよい。
幾つかの状況において、XMLドキュメント107の一部ではなかった特定用途向けデータをフラットファイルにエンリッチすることが有用な場合がある。一実施形態において、フレームワーク102は、こうしたデータを変換されたフラットファイルに付加するためのサポートを提供する。こうしたデータは、構成によって指定されてもよく、且つ、例えば、XMLから抽出する、導出する、又は計算することができるデータを含んでもよい。こうしたデータは、例えば以下のものを含むことができる。
●現在処理されているセグメントからのデータ項目。これらは、例えば、セグメントXPathを用いて指定されてもよい。
●必要とされる場合があるが、現在処理されているセグメントから入手可能ではない、データ項目。これらは、例えば、クロスリファレンスXPathを用いて指定されてもよい。
○一実施形態において、XPathクロスリファレンス・タイプは、XPathクエリによって表される値がメモリに保存されるべきである及びエイリアスに割り当てられるべきであるフレームワークを示す構成ファイルにおいて指定される。XPathに対応しているデータは、対応するエイリアスを参照することによって後でアクセスすることができる。例えば、XPathクエリヘッダ/@senderID(ヘッダ・セグメントから抽出される)の値には、XPathヘッダ/@senderIDに対応している値を含めるために他のセグメントによって用いられることが可能なクロスリファレンス・エイリアス「senderID」を割り当てることができる。一実施形態において、すべてのクロスリファレンスされたエイリアスは、それらが属するセグメントが処理されるとすぐにメモリ内に保存される。
○一実施形態において、クロスリファレンス・データは、経時的に蓄積される幾つかの式に基づくグローバル・データを含んでもよく、且つ幾つかのセグメントに対するデータの組合せを表してもよい。
○一実施形態において、クロスリファレンス・データは、或る期間にわたって維持され、次いで、用いられたときに廃棄される、レコード別のデータを含んでもよい。
●導出されるデータ項目:これらは、1つ又は複数のセグメントから導出される何かを含んでもよい。例は、幾つのレコードが処理されているかのトラックを保つ、レコード・カウントである。例えば、フレームワーク102は、各employeeレコードを抽出し且つこれをフラットファイルに書き込みながら、開かれた各セグメントにおけるemployeeレコード(サブセグメント)のカウントを保つことができる。カウントは、employeeレコードの一部としてファイルに書き込むことができる。また、これは、ファイルのフッタセクションに書き込むことができる。
●セッション・データ項目:これらは、アプリケーション101が追記することを望むがXMLで利用可能ではない、あらゆるデータを含んでもよい。例えば、パートナー・ソースがinventoryファイルを供給する場合、システムにファイル名を渡すことができ、且つファイル識別子を戻すことができる。このファイル識別子は、XMLから導出可能ではない場合があるが、これはフラットファイルに付加されることになるデータの有用な断片である場合がある。したがって、こうしたデータは、このカテゴリに含めることができる。他の例は、登録ID、処理時間などを含む。
●アプリケーション・データ:アプリケーション101は、ランタイムの間にあらゆる数の名前値のペアを付加することができる。これらの値は、それらの名前によって参照されることが可能であり、且つ所望の場合に、変換されたファイルのあらゆるセクション(単数又は複数)に付加することができる。
●現在処理されているセグメントからのデータ項目。これらは、例えば、セグメントXPathを用いて指定されてもよい。
●必要とされる場合があるが、現在処理されているセグメントから入手可能ではない、データ項目。これらは、例えば、クロスリファレンスXPathを用いて指定されてもよい。
○一実施形態において、XPathクロスリファレンス・タイプは、XPathクエリによって表される値がメモリに保存されるべきである及びエイリアスに割り当てられるべきであるフレームワークを示す構成ファイルにおいて指定される。XPathに対応しているデータは、対応するエイリアスを参照することによって後でアクセスすることができる。例えば、XPathクエリヘッダ/@senderID(ヘッダ・セグメントから抽出される)の値には、XPathヘッダ/@senderIDに対応している値を含めるために他のセグメントによって用いられることが可能なクロスリファレンス・エイリアス「senderID」を割り当てることができる。一実施形態において、すべてのクロスリファレンスされたエイリアスは、それらが属するセグメントが処理されるとすぐにメモリ内に保存される。
○一実施形態において、クロスリファレンス・データは、経時的に蓄積される幾つかの式に基づくグローバル・データを含んでもよく、且つ幾つかのセグメントに対するデータの組合せを表してもよい。
○一実施形態において、クロスリファレンス・データは、或る期間にわたって維持され、次いで、用いられたときに廃棄される、レコード別のデータを含んでもよい。
●導出されるデータ項目:これらは、1つ又は複数のセグメントから導出される何かを含んでもよい。例は、幾つのレコードが処理されているかのトラックを保つ、レコード・カウントである。例えば、フレームワーク102は、各employeeレコードを抽出し且つこれをフラットファイルに書き込みながら、開かれた各セグメントにおけるemployeeレコード(サブセグメント)のカウントを保つことができる。カウントは、employeeレコードの一部としてファイルに書き込むことができる。また、これは、ファイルのフッタセクションに書き込むことができる。
●セッション・データ項目:これらは、アプリケーション101が追記することを望むがXMLで利用可能ではない、あらゆるデータを含んでもよい。例えば、パートナー・ソースがinventoryファイルを供給する場合、システムにファイル名を渡すことができ、且つファイル識別子を戻すことができる。このファイル識別子は、XMLから導出可能ではない場合があるが、これはフラットファイルに付加されることになるデータの有用な断片である場合がある。したがって、こうしたデータは、このカテゴリに含めることができる。他の例は、登録ID、処理時間などを含む。
●アプリケーション・データ:アプリケーション101は、ランタイムの間にあらゆる数の名前値のペアを付加することができる。これらの値は、それらの名前によって参照されることが可能であり、且つ所望の場合に、変換されたファイルのあらゆるセクション(単数又は複数)に付加することができる。
ここで図4A及び図4Bを参照すると、一実施形態に係るXMLドキュメント107をフラットファイルに変換するための方法を描いたイベント・トレース・ダイヤグラムが示されている。
アプリケーション101は、フレームワーク102をコールしてXMLとフラットファイルとの変換を開始し、フレームワーク102にファイル・ロケーション及び構成キーを送信する402。一実施形態において、これは、createInstance(String key,File inputFile)コールをフレームワーク102に送信するアプリケーション101によって達成される。
フレームワーク102は、コンフィギュレータ103から、キーと関連する構成を要求する403。これに応答して、コンフィギュレータ103は、構成をフレームワーク102に送信する404。構成を受信すると、フレームワーク102は、XMLファイルのどんな要素を、ヘッダ、ボディ、フッタ、区切り文字などを含むフラットファイルの種々の部分に対して用いるかをこのとき知る。
アプリケーション101によって送信されるキーは、したがって、一実施形態において、処理されているXMLのタイプに固有の構成を識別する。構成ファイルに収容され且つキーを介して識別される情報は、以下のような情報を収容する。
●トランスレータ・クラス
●セグメント及びサブセグメントのようなXMLの構造
●無効なレコードをスキップするか又は含むかどうか
●XSD確認を行うかどうか
●トランスレータ・クラス
●セグメント及びサブセグメントのようなXMLの構造
●無効なレコードをスキップするか又は含むかどうか
●XSD確認を行うかどうか
一実施形態において、構成は、ボディ・データが現れるべき順番と、含まれるべきあらゆる付加的なメタデータのような情報を含むフラットファイルの構造を指定する。一実施形態において、構成は、Java(登録商標)クラスとして指定することができるが、あらゆる所望のフォーマットを用いることができる。
アプリケーション101は、次いで、指定されたXMLドキュメント上で変換が行われることを要求する431。
フレームワーク102は、StAXパーサ104がセグメントXMLを抽出するべくファイルのパーシングを始めることができるように、フレームワーク102にファイル・ロケーションを提供することをStAXパーサ104にコールする。フレームワーク102は、StAXパーサ104から、ヘッダに対するXMLセグメント及び/又は他のXMLセグメントのような固有のデータを要求する。これに応答して、StAXパーサ104は、XMLセグメントを得る及びこのXMLをフレームワーク102に戻すために、XMLドキュメント107の該当する部分をパースする。例えば、ヘッダ・セグメントに対して、フレームワーク102は、extractXmlSegment(headerSegment)をコールすることによってこれらのステップを行うことができる。
一実施形態において、フラットファイルに対するヘッダ・レコードは、XMLデータから,構成ファイルにおいて構成される対応するセグメントを抽出することによって生成される。セグメントにおいて見つけ出される場合に、あらゆる構成されたグローバル・クロスリファレンス・エイリアスもまた抽出される。
フレームワーク102は、StAXパーサ104に、フラットファイルのヘッダ・レコードを生成するのに必要とされるセグメントを抽出することをコールする411。フレームワーク102は、コンフィギュレータ103からセグメントの名前を入手し、且つこれをStAXパーサ104に渡して、対応するXMLセグメントを入手する。StAXパーサ104は、ヘッダ・レコードに対して要求されるXMLセグメントを戻す411A。
フレームワーク102は、抽出されたXMLセグメント及びセグメント名をトランスレーション層106に渡す411B。トランスレーション層は、対応するXMLBeansオブジェクトを生成し411C、且つこれをフレームワーク102に戻す411D。
フレームワーク102は、構成されたXpathクエリをXMLBeansオブジェクト上で走らせる411E。これはまた、構成されクロスリファレンスされたエイリアスに対してXpathクエリを走らせ、且つこれらを後で用いるためにメモリ内に格納する。
フレームワーク102は、ヘッダ・レコードをアセンブルし、且つこれをデータストア108で生成されているフラットファイルに書き込む412。
あらゆるグローバル・データ、クロスリファレンス・データ、又はそれに類似のものを、これを他のレコードと共に用いるために利用することができるように(例えばエイリアスに)格納することができる。
フレームワーク102は、そのサブセグメントが変換されたフラットファイルのボディにおけるレコードを表す、セグメントを処理する。図4Bは、フラットファイルに書き込むことに関与する固有のステップに関する付加的な詳細を描く。図4Bに示された方法によれば、フレームワーク102は、こうしたデータがレコードをフラットファイルに書き込むために必要とされる可能性があるときに、メモリ内にデータを維持することができる。
フレームワーク102は、各セグメント名に対応しているXMLセグメントを提供するようにStAXパーサ104に依頼する。一実施形態において、フレームワーク102は、スタート要素及び関連する属性を表わすXMLセグメントのみを入手する。したがって、フレームワーク102は、StAXパーサ104から、書き込まれることになるフラットファイルのボディに対して構成されたXMLセグメント、スタート要素、及びその属性を要求する421。StAXパーサ104は、要求されたXMLを戻す422。フレームワーク102は、整形式のXMLを生成するために、抽出されたXMLにエンドタグを追記する422A。
フレームワーク102は、次いで、XMLドキュメント107におけるセグメント及びサブセグメントを抽出し且つ対応するレコードをフラットファイルに書き込むプロセスを通してループする。各セグメント及びサブセグメントに対して、フレームワーク102は、StAXパーサ104によってサブセグメントの抽出を要求し、StAXパーサ104は、指定されたセグメント又はサブセグメントに対するXMLセグメントを戻す。各サブセグメントは、employee又はそれに類似のもののような特定のエンティティと関係付けられてもよい。
付加的な詳細は図4Bに示される。フレームワーク102は、例えば、抽出されたXML及びセグメント名をトランスレーション層106に渡すことによって、XMLBeansオブジェクトを要求する422B。トランスレーション層106は、対応するXMLBeansオブジェクトを生成し422C、XMLBeansオブジェクトをフレームワーク102に戻す422D。フレームワーク102は、例えばセグメント・レベルで構成されるXpathクエリを走らせることによって、フラットファイルの生成のためにXMLBeansオブジェクトからデータを抽出する422E。
フレームワーク102は、各サブセグメントの名前をStAXパーサ104に1つずつ渡すことによって現在のセグメントのXMLサブセグメントを抽出する。各サブセグメントに対して、フレームワーク102は、StAXパーサ104によるサブセグメントの抽出を要求し424、StAXパーサ104は、指定されたサブセグメントに対するXMLセグメントを戻す425。フレームワーク102は、例えば抽出されたXML及びサブセグメント名をトランスレーション層106に渡すことによって、XMLBeansオブジェクトを要求する425A。トランスレーション層106は、対応するXMLBeansオブジェクトを生成し425B、XMLBeansオブジェクトをフレームワーク102に戻す425C。フレームワーク102は、例えばサブセグメント・レベルで構成されるXpathクエリを走らせることによって、フラットファイルの生成のためにXMLBeansオブジェクトからデータを抽出する425D。フレームワーク102はまた、前に抽出されたグローバル・データ及び/又はアプリケーションにより提供されたデータを用いてレコードをアセンブルすることができる。
フレームワーク102は、次いで、複数のソースから収集したデータを用いてボディ・レコードをアセンブルし425E、且つレコードをフラットファイルとしてデータストア108に書き込む429。
ステップ421〜429は、すべてのレコードが書き込まれるまで必要に応じて何度でも繰り返すことができる。一実施形態において、フレームワーク102は、ファイルにおける種々のボディ・セグメントを通してループする。各ボディ・セグメントは、あらゆる数のサブセグメントを収容してもよく、フレームワーク102は、これらを通して同様にループする。
すべてのセグメントが完了すると、フレームワーク102は、フッタ・レコードをアセンブルし429A、且つフッタ・レコードをデータストア108に書き込んで429B、これをフラットファイルに追記する。フレームワーク102は、次いで、ファイルを閉じる429C。
したがって、各ボディ・セグメントに対して、フレームワーク102は、以下のステップを行うことができる。
●ボディのスタート要素及びその属性を抽出する(extractStartElementAndItsAttributes(segmentName)。
●エンドタグ(appendEndTagInExtractedXml())を追記する。
●XMLBeansオブジェクトへの変換を要求する(getXmlObject(extractedXml,segmentName)をトランスレーション層106に送信し、トランスレーション層106がcreateCorrespondingXmlObject()を実行し、且つXMLBeansオブジェクトを戻すことによる)。
●XMLBeansオブジェクトからデータを抽出する(runXPathQueriesOnXmlObject())。
●ボディのスタート要素及びその属性を抽出する(extractStartElementAndItsAttributes(segmentName)。
●エンドタグ(appendEndTagInExtractedXml())を追記する。
●XMLBeansオブジェクトへの変換を要求する(getXmlObject(extractedXml,segmentName)をトランスレーション層106に送信し、トランスレーション層106がcreateCorrespondingXmlObject()を実行し、且つXMLBeansオブジェクトを戻すことによる)。
●XMLBeansオブジェクトからデータを抽出する(runXPathQueriesOnXmlObject())。
次いで、ボディ・セグメントにおける各サブセグメントに対して、フレームワーク102は、以下のステップを行うことができる。
●サブセグメントに対応しているXMLを抽出する。
●XMLBeansオブジェクトへの変換を要求する(getXmlObject(extractedXml,subSegmentName)をトランスレーション層106に送信し、トランスレーション層106がcreateCorrespondingXmlObject()を走らせ、且つXMLBeansオブジェクトを戻すことによる。
●XMLBeansオブジェクトからデータを抽出する(runXPathQueriesOnXmlObject())。
●抽出されたデータをフラットファイルに書き込む(writeExtractedDataInFile())。
●サブセグメントに対応しているXMLを抽出する。
●XMLBeansオブジェクトへの変換を要求する(getXmlObject(extractedXml,subSegmentName)をトランスレーション層106に送信し、トランスレーション層106がcreateCorrespondingXmlObject()を走らせ、且つXMLBeansオブジェクトを戻すことによる。
●XMLBeansオブジェクトからデータを抽出する(runXPathQueriesOnXmlObject())。
●抽出されたデータをフラットファイルに書き込む(writeExtractedDataInFile())。
すべてのボディ・セグメントにおけるすべてのサブセグメントが処理されると、フレームワーク102は、フッタを書き込み(writeFooterDataInFile())、且つファイルを閉じる(closeFile())。
一実施形態において、フレームワーク102が、処理されるレコードの総数のようなグローバル・データのトラックを保つことが、有用な場合がある。こうした情報は、例えば、書き込まれているフラットファイルのフッタ又は他のデータ要素における包含のために用いられてもよい。こうした状況において、アプリケーション101は、addSessionData(key,data)のようなコールをフレームワーク102に発行することができる。コールに含まれるデータを、次いで、格納することができ、且つフレームワーク102によって適宜用いることが可能である。こうしたコールの例は、以下のものを含む。
●addSessionData(「regID」、36590);
●addSessionData(「timeProcessed」、「July25,2009」)
●addSessionData(「regID」、36590);
●addSessionData(「timeProcessed」、「July25,2009」)
フレームワーク102は、次いで、レコードをフラットファイルに書き込みながら、アプリケーションにより供給されるセッション・データを用いることができる。一実施形態において、セッション・データは、フレームワーク102がそれを行うように構成される場合に、レコード(ボディ、ヘッダ、及び/又はフッタ)にのみ書き込まれるであろう。
フレームワーク・アーキテクチャ
上記で説明された技術は、ソフトウェア・モジュールの種々の配置を用いて実装することができる。以下は、多様な構成オプションを提供するフレームワーク102に対するアーキテクチャの例である。一実施形態において、プロデューサ・クラス及びトランスレータ・クラスのセットは、コンフィギュレータ103にアクセス可能な構成ファイルで構成される。上記で説明されたように、アプリケーション101は、用いられることになるトランスレータ・クラスのキーの名前を渡す。フレームワーク102は、次いで、トランスレーション層106と指定された構成ファイルとを用いて必要なタスクを行う。一実施形態において、少なくとも3つのクラス、すなわち、XMLドキュメント107を生成するためのプロデューサ・クラス、アプリケーション101によって使用可能なアプリケーション・ドメイン・オブジェクトを生成するべくXMLドキュメント107を処理するための消費者クラス、及びXMLドキュメント107をフラットファイル・フォーマットのような別のフォーマットに変換するためのトランスフォーマ・クラスが提供される。以下は、これらのクラスの詳細の幾つかの例である。
上記で説明された技術は、ソフトウェア・モジュールの種々の配置を用いて実装することができる。以下は、多様な構成オプションを提供するフレームワーク102に対するアーキテクチャの例である。一実施形態において、プロデューサ・クラス及びトランスレータ・クラスのセットは、コンフィギュレータ103にアクセス可能な構成ファイルで構成される。上記で説明されたように、アプリケーション101は、用いられることになるトランスレータ・クラスのキーの名前を渡す。フレームワーク102は、次いで、トランスレーション層106と指定された構成ファイルとを用いて必要なタスクを行う。一実施形態において、少なくとも3つのクラス、すなわち、XMLドキュメント107を生成するためのプロデューサ・クラス、アプリケーション101によって使用可能なアプリケーション・ドメイン・オブジェクトを生成するべくXMLドキュメント107を処理するための消費者クラス、及びXMLドキュメント107をフラットファイル・フォーマットのような別のフォーマットに変換するためのトランスフォーマ・クラスが提供される。以下は、これらのクラスの詳細の幾つかの例である。
プロデューサ・クラス
ここで図7を参照すると、一実施形態に係るプロデューサ・クラス700のためのクラス・ダイアグラムが示されている。このアーキテクチャにおいて、エラー・ハンドラ701、XmlProducer703、XmlProducerFactory704、及びXmlException708がアプリケーション101に露出される。
ここで図7を参照すると、一実施形態に係るプロデューサ・クラス700のためのクラス・ダイアグラムが示されている。このアーキテクチャにおいて、エラー・ハンドラ701、XmlProducer703、XmlProducerFactory704、及びXmlException708がアプリケーション101に露出される。
Configuratorクラス709は、構成ファイルで提供される構成をロードすること、パーシングすること、確認すること、及びキャッシュに入れることを担当するコンフィギュレータ103を実装する。コンフィギュレータ103は、XmlProducerImplのインスタンスをインスタンス化し、構成パラメータを設定し、且つトランスレータ・クラスのインスタンス(構成される場合に)を導入(inject)する。XmlProducerFactory704は、XmlProducerImplの作成をConfiguratorクラス709にデリゲートする。一実施形態において、フレームワーク102は、XMLを生成するために以下の構成を用いる。
●classes.keysエントリは、構成ファイルで用いられているすべてのキーの名前を指定するのに用いられる。これらは、生産する、消費する、及び/又は変換するのに必要とされるトランスレータ・クラス及びすべての他のクラスに対するキー及びフラットファイルへのXMLファイルである。一実施形態において、各XMLタイプ(XSDによって駆動される)は、独自のキーと独自の構成を有する。同じキーは、XmlProducer703のインスタンスを入手するためにアプリケーション101によって用いられる。
●<translator−key>.classエントリは、ProducerTranslator702インターフェースを実装するトランスレータ・クラスの完全修飾(パッケージ名を伴う)名を指定する。アプリケーション101は、XmlProducer703インスタンスへの参照を入手するためにキー名を渡す。
●<translator−key>.includeInvalidエントリは、XSD確認に失敗したXMLセグメントが結果セットに含まれるべきか否かを決定するためにフレームワーク102によって用いられる。これは真のデフォルト値をもつ随意的なエントリである。
●<translator−key>.logInvalidエントリは、XSD確認に失敗したXMLセグメントがログされる及び/又はエラー・ハンドラに渡されるべきか否かを決定するためにフレームワーク102によって用いられる。これは真のデフォルト値をもつ随意的なエントリである。
●<translator−key>.classエントリは、ProducerTranslator702インターフェースを実装するトランスレータ・クラスの完全修飾(パッケージ名を伴う)名を指定する。アプリケーション101は、XmlProducer703インスタンスへの参照を入手するためにキー名を渡す。
●<translator−key>.includeInvalidエントリは、XSD確認に失敗したXMLセグメントが結果セットに含まれるべきか否かを決定するためにフレームワーク102によって用いられる。これは真のデフォルト値をもつ随意的なエントリである。
●<translator−key>.logInvalidエントリは、XSD確認に失敗したXMLセグメントがログされる及び/又はエラー・ハンドラに渡されるべきか否かを決定するためにフレームワーク102によって用いられる。これは真のデフォルト値をもつ随意的なエントリである。
XmlProducerインターフェース703は、XMLドキュメント107を生産するために要求される動作を含む。アプリケーション101は、XmlProducerインターフェース703を用いてXMLセグメントを増加的に生成する。アプリケーション101は、アプリケーション・データ・オブジェクトを渡し、XmlProducerインターフェース703は、トランスレータ・クラス及びXMLオブジェクト・クラスの助けによりXMLを生産する。一実施形態において、XmlProducerインターフェース703は、以下のメソッドを含む。
●void openSegment(Object object):アプリケーション101は、その子を増加的に付加することができるように、このメソッドを用いてXML要素を開く。ProducerTranslatorインターフェース702は、パスインされたアプリケーション・データ・オブジェクトを用いて等価なXMLBeansオブジェクトを作成する、トランスレーション層106によって実装される。
●boolean addSegment(Object object):アプリケーション101は、このメソッドを用いて、生産されているXMLにXMLセグメントを付加する。ProducerTranslator702は、パスインされたオブジェクトを用いて、等価なXMLBeansオブジェクトを作成する。一実施形態において、XMLセグメントは、もしあれば最後の開かれたセグメントの子要素として追記されるであろう。他の場合には、これはドキュメント・ルートの子として付加されるであろう。セグメントがXSD確認を渡す場合、戻り値は真であり、他の場合にはこれは偽である。一実施形態において、XSD確認は、フレームワーク102が無効なセグメントを除外するように構成されるか又は無効なセグメントをログするように構成されるかのいずれかの場合にのみ行われる。
●void setErrorHandler(ErrorHandler handler):アプリケーション101は、随意的に、ErrorHandlerインターフェースを実装するエラー・ハンドラを設定することができる。XSD確認エラーは、ハンドラにデリゲートされ、アプリケーション101は、それらを多少なりとも用いることができる。確認エラーは、エラー・ハンドラが設定されない場合にJava(登録商標)ロガーを用いてログされる。
●void closeSegment():アプリケーション101は、このメソッドを用いて、現在開かれているセグメントのすべての子の増分的な付加が過度であることをフレームワーク102に通知する。フレームワーク102は、最後の開かれたセグメントのエンディング・タグを挿入する。
●void closeAll():アプリケーション101は、このメソッドを用いて、これが如何なるさらなるデータをも有さず且つXML生成が完了することをフレームワーク102に通知する。アプリケーション101は、XMLを適正に生成することができるように、このメソッドをコールする。フレームワーク102は、このコールの結果として以下の動作を行う。
○対応するエンディング要素をXMLに挿入することによって、すべての開かれたセグメントを閉じる。この機能(feature)は、アプリケーション101が複数の入れ子にされたセグメントを開き、且つそれらのすべてを閉じることを望むときに有用である。
○バッファをフラッシュし、出力ファイルを閉じる。
●void openSegment(Object object):アプリケーション101は、その子を増加的に付加することができるように、このメソッドを用いてXML要素を開く。ProducerTranslatorインターフェース702は、パスインされたアプリケーション・データ・オブジェクトを用いて等価なXMLBeansオブジェクトを作成する、トランスレーション層106によって実装される。
●boolean addSegment(Object object):アプリケーション101は、このメソッドを用いて、生産されているXMLにXMLセグメントを付加する。ProducerTranslator702は、パスインされたオブジェクトを用いて、等価なXMLBeansオブジェクトを作成する。一実施形態において、XMLセグメントは、もしあれば最後の開かれたセグメントの子要素として追記されるであろう。他の場合には、これはドキュメント・ルートの子として付加されるであろう。セグメントがXSD確認を渡す場合、戻り値は真であり、他の場合にはこれは偽である。一実施形態において、XSD確認は、フレームワーク102が無効なセグメントを除外するように構成されるか又は無効なセグメントをログするように構成されるかのいずれかの場合にのみ行われる。
●void setErrorHandler(ErrorHandler handler):アプリケーション101は、随意的に、ErrorHandlerインターフェースを実装するエラー・ハンドラを設定することができる。XSD確認エラーは、ハンドラにデリゲートされ、アプリケーション101は、それらを多少なりとも用いることができる。確認エラーは、エラー・ハンドラが設定されない場合にJava(登録商標)ロガーを用いてログされる。
●void closeSegment():アプリケーション101は、このメソッドを用いて、現在開かれているセグメントのすべての子の増分的な付加が過度であることをフレームワーク102に通知する。フレームワーク102は、最後の開かれたセグメントのエンディング・タグを挿入する。
●void closeAll():アプリケーション101は、このメソッドを用いて、これが如何なるさらなるデータをも有さず且つXML生成が完了することをフレームワーク102に通知する。アプリケーション101は、XMLを適正に生成することができるように、このメソッドをコールする。フレームワーク102は、このコールの結果として以下の動作を行う。
○対応するエンディング要素をXMLに挿入することによって、すべての開かれたセグメントを閉じる。この機能(feature)は、アプリケーション101が複数の入れ子にされたセグメントを開き、且つそれらのすべてを閉じることを望むときに有用である。
○バッファをフラッシュし、出力ファイルを閉じる。
XmlProducerFactory class704は、XmlProducerインターフェースを実装するオブジェクトの作成を要約する。一実施形態において、このクラスは、オブジェクトを作成するための、一方はファイル・オブジェクトを伴い、他方は生成されたXMLを書き込むためのファイル名を伴う、2つのオーバーロードされるメソッドを含む。
XmlException class708は、例外のために用いられる。フレームワーク102は、XmlException class708のインスタンスで遭遇した例外を変換する。この例外は、オリジナルの例外における情報が失われないようにオリジナルの例外をラップする。
ProducerTranslatorインターフェース702は、トランスレーション層106におけるフレームワーク102とProducerTranslatorクラスとの間の規約を定義する。トランスレータ・クラスは、等価なXMLBeansオブジェクトへのアプリケーション・データ・オブジェクトのマッピングを提供する。一実施形態において、ProducerTranslatorインターフェース702は、以下のメソッドを含む。
●XmlObject getRootObject():トランスレータ・クラスは、フレームワーク102がすべての適用可能なネーム空間と一緒にルート・ドキュメントの生成を開始できるように、ルート・ドキュメントXmlObjectインスタンスを戻すべきである。
●XmlObject getXmlObject(Object dataObject):トランスレータ・クラスは、渡されたアプリケーション・データ・オブジェクトに基づいて対応するXMLBeansインスタンスを生成するべきである。生成されたXMLBeansオブジェクト(XmlObject)は、XMLの対応するセグメントを生成するためにフレームワークによって用いられる。
●XmlObject getInnerXmlObject(Object dataObject,XMLObject object):トランスレータ・クラスは、アプリケーション・データ・オブジェクト並びに対応するXMLObjectの知識を有する。データタイプがXSDで定義される方法に応じて、データ・オブジェクトからXMLBeansオブジェクトを生成しながら、XMLオブジェクト・グラフにおいて親XMLBeansオブジェクトが生成されてもよい。例えば、単一のemployeeレコードのXMLBeansオブジェクトを生成するために、Employees XmlObjectが最初にインスタンス化され、その後、1つのEmployee XmlObjectを収容するサイズのアレイがインスタンス化される。このアレイは、ラッパー・オブジェクトに付加される。本質的に、Employee XmlObjectをラップするのはEmployees XmlObjectである。employee XmlObjectに対してXSD確認を行うために、フレームワーク102は、ラッパーXMLObject Employeesからemployee XmlObjectを抽出する。トランスレータ・クラスは、アプリケーション・データ・オブジェクトに対応する内側XmlObjectを戻す。戻されたXmlObjectは、XSD確認を行うためにフレームワークによって用いられる。
●String getObjectIdentifiers(Object dataObject):XSD確認エラーメッセージは、パーサからパーサへと変化することがある。技術者でない人々にとってそれらを理解するのは非常に難しいことがある。これらのエラーメッセージは、XSD確認に失敗したレコードを識別するのに十分な情報を提供しない場合がある。一実施形態において、フレームワーク102は、getObjectIdentifiersを用いて、付加的な情報をXSDエラーメッセージに追記する。一実施形態において、追記されることになる情報を判定するのはトランスレータ・クラスである。アプリケーション・データ・オブジェクトは、これが適切な情報を抽出することができるように、トランスレーション・クラスに渡され戻される。抽出された情報は、XSD確認エラーメッセージに追記される。アプリケーション・データ・オブジェクトは、これが対応するXMLセグメントを生成するための情報のソースであるので、トランスレータ・クラスに渡される。フレームワーク102は、XSD確認エラーをログするように構成されるときに、この関数を利用する。
●XmlObject getRootObject():トランスレータ・クラスは、フレームワーク102がすべての適用可能なネーム空間と一緒にルート・ドキュメントの生成を開始できるように、ルート・ドキュメントXmlObjectインスタンスを戻すべきである。
●XmlObject getXmlObject(Object dataObject):トランスレータ・クラスは、渡されたアプリケーション・データ・オブジェクトに基づいて対応するXMLBeansインスタンスを生成するべきである。生成されたXMLBeansオブジェクト(XmlObject)は、XMLの対応するセグメントを生成するためにフレームワークによって用いられる。
●XmlObject getInnerXmlObject(Object dataObject,XMLObject object):トランスレータ・クラスは、アプリケーション・データ・オブジェクト並びに対応するXMLObjectの知識を有する。データタイプがXSDで定義される方法に応じて、データ・オブジェクトからXMLBeansオブジェクトを生成しながら、XMLオブジェクト・グラフにおいて親XMLBeansオブジェクトが生成されてもよい。例えば、単一のemployeeレコードのXMLBeansオブジェクトを生成するために、Employees XmlObjectが最初にインスタンス化され、その後、1つのEmployee XmlObjectを収容するサイズのアレイがインスタンス化される。このアレイは、ラッパー・オブジェクトに付加される。本質的に、Employee XmlObjectをラップするのはEmployees XmlObjectである。employee XmlObjectに対してXSD確認を行うために、フレームワーク102は、ラッパーXMLObject Employeesからemployee XmlObjectを抽出する。トランスレータ・クラスは、アプリケーション・データ・オブジェクトに対応する内側XmlObjectを戻す。戻されたXmlObjectは、XSD確認を行うためにフレームワークによって用いられる。
●String getObjectIdentifiers(Object dataObject):XSD確認エラーメッセージは、パーサからパーサへと変化することがある。技術者でない人々にとってそれらを理解するのは非常に難しいことがある。これらのエラーメッセージは、XSD確認に失敗したレコードを識別するのに十分な情報を提供しない場合がある。一実施形態において、フレームワーク102は、getObjectIdentifiersを用いて、付加的な情報をXSDエラーメッセージに追記する。一実施形態において、追記されることになる情報を判定するのはトランスレータ・クラスである。アプリケーション・データ・オブジェクトは、これが適切な情報を抽出することができるように、トランスレーション・クラスに渡され戻される。抽出された情報は、XSD確認エラーメッセージに追記される。アプリケーション・データ・オブジェクトは、これが対応するXMLセグメントを生成するための情報のソースであるので、トランスレータ・クラスに渡される。フレームワーク102は、XSD確認エラーをログするように構成されるときに、この関数を利用する。
XmlProducerImplクラス707は、インターフェースXmlProducerを実装する。このクラスの新しいインスタンスが、XmlProducerFactoryを介してアプリケーション101に戻される。アプリケーション101は、XmlProducerインターフェース規約において提供されるメソッドを呼び出すことによってXMLを増加的に生産するためにXmlProducerインスタンス上で動作する。一実施形態において、StAXパーサ104、生成されたXMLBeansオブジェクト、トランスレーション層106、及び確認メッセージ・ハンドリングの間でのすべての協調が、XmlProducerImplクラス707によって制御される。これは、XMLを増加的に生産するのに必要とされる以下のようなすべての機能性を収容する。
●提供されたアプリケーション・データ・オブジェクトに対応しているXMLセグメント及び開かれたセグメントを生産すること。
●XMLセグメントをファイルに書き込むこと。
●すべての開かれたセグメントのトラックとそれらの順番を保つこと。
●XMLセグメント上でXSD確認を走らせ、且つ確認エラーメッセージを特定用途向けエラー・ハンドラにデリゲートすること。
●提供されたアプリケーション・データ・オブジェクトに対応しているXMLセグメント及び開かれたセグメントを生産すること。
●XMLセグメントをファイルに書き込むこと。
●すべての開かれたセグメントのトラックとそれらの順番を保つこと。
●XMLセグメント上でXSD確認を走らせ、且つ確認エラーメッセージを特定用途向けエラー・ハンドラにデリゲートすること。
インターフェース・メソッドを実装することに加えて、XmlProducerImplクラス707はまた、以下のような内部メソッドを含むことができる。
●protected void setup保護されたボイド・セットアップ(File xmlOutFile,ProducerTranslator producerTranslator,boolean includeInvalid,boolean logInvalid):コンフィギュレータ・クラス709は、アプリケーション101がXmlProducerFactoryを介してXmlProducerのインスタンスを要求するときに、このクラスの新しいインスタンスを作成する。コンフィギュレータ103は、次いで、構成される場合にトランスレータ・クラスのインスタンスを作成し、且つこのメソッドを呼び出して、構成情報(例えば、XSD確認が行われる必要があるかどうか、XSD確認エラーをログするかどうか、及びトランスレータ・クラス・インスタンス)を渡す。
●private void startDocument():このメソッドは、トランスレータ・メソッドgetRootObject()によって戻される対応するXmlObjectに基づいてルート・ドキュメント・ノードを生成することを担当する。XMLは、XmlObjectから抽出され、且つStAXパーサ104に渡される。ルート・ドキュメント・エンド要素は、FIFO(First−In−First−Out)キューにプッシュされる。アプリケーション101がすべてのセグメント及び開かれたセグメントの付加を完了すると、要素がポップされ、且つ生成されたXMLに追記される。
●private boolean analyzeプライベート・ブール解析(Object dataObject,XmlObject xmlObject):フレームワーク102は、このメソッドを用いてXSD確認を行い、且つそれを行うように構成される場合にあらゆるXSDエラーをログする。これは、最初に、トランスレータ・クラスに、内側XmlObjectを提供し、且つ戻された内側オブジェクト上でXSD確認を行うように依頼する。これは次いで、XSD確認エラーメッセージに追記されることになる付加的な情報を入手するために、トランスレータ・クラスに対してgetObjectIdentifiers(dataObject)メソッドをコールする。最後に、エラーメッセージは、さらなる処理のためにErrorHandlerのアプリケーションにより提供される実装に引き渡される。
●protected void setup保護されたボイド・セットアップ(File xmlOutFile,ProducerTranslator producerTranslator,boolean includeInvalid,boolean logInvalid):コンフィギュレータ・クラス709は、アプリケーション101がXmlProducerFactoryを介してXmlProducerのインスタンスを要求するときに、このクラスの新しいインスタンスを作成する。コンフィギュレータ103は、次いで、構成される場合にトランスレータ・クラスのインスタンスを作成し、且つこのメソッドを呼び出して、構成情報(例えば、XSD確認が行われる必要があるかどうか、XSD確認エラーをログするかどうか、及びトランスレータ・クラス・インスタンス)を渡す。
●private void startDocument():このメソッドは、トランスレータ・メソッドgetRootObject()によって戻される対応するXmlObjectに基づいてルート・ドキュメント・ノードを生成することを担当する。XMLは、XmlObjectから抽出され、且つStAXパーサ104に渡される。ルート・ドキュメント・エンド要素は、FIFO(First−In−First−Out)キューにプッシュされる。アプリケーション101がすべてのセグメント及び開かれたセグメントの付加を完了すると、要素がポップされ、且つ生成されたXMLに追記される。
●private boolean analyzeプライベート・ブール解析(Object dataObject,XmlObject xmlObject):フレームワーク102は、このメソッドを用いてXSD確認を行い、且つそれを行うように構成される場合にあらゆるXSDエラーをログする。これは、最初に、トランスレータ・クラスに、内側XmlObjectを提供し、且つ戻された内側オブジェクト上でXSD確認を行うように依頼する。これは次いで、XSD確認エラーメッセージに追記されることになる付加的な情報を入手するために、トランスレータ・クラスに対してgetObjectIdentifiers(dataObject)メソッドをコールする。最後に、エラーメッセージは、さらなる処理のためにErrorHandlerのアプリケーションにより提供される実装に引き渡される。
SegmentFilterクラス705は、非ルートXmlObjectから生成されたXMLセグメントから開始及び終了ドキュメント要素をフィルタで除去するために、javax.xml.stream.events.EventFilterインターフェースを実装する。これは、StAXパーサ104を用いてXMLをパーシングしながらこれらの要素をフィルタするために、XmlProducerImpl707によって用いられる。
消費者クラス
ここで図8を参照すると、一実施形態に係る消費者クラス800のためのクラス・ダイアグラムが示されている。このアーキテクチャにおいて、XmlConsumer812、XmlConsumerFactory811、及びSegmentCursor806がアプリケーション101に露出される。
ここで図8を参照すると、一実施形態に係る消費者クラス800のためのクラス・ダイアグラムが示されている。このアーキテクチャにおいて、XmlConsumer812、XmlConsumerFactory811、及びSegmentCursor806がアプリケーション101に露出される。
一実施形態において、消費者クラス800は、2つのタスク、すなわち、アプリケーション・データ・オブジェクトの生成と、XMLとフラットファイルとの変換を取り扱う。構成パラメータは、XMLからフラットファイルへの融通性のある変換を提供するために用いることができる。一実施形態において、コンフィギュレータ103及びXmlExceptionクラス708は、フレームワーク102の消費者クラス800とプロデューサ・クラス700との両方に共通である。しかしながら、コンフィギュレータ103は、消費者クラス800に対する付加的な構成パラメータを提供することができる。プロデューサ・クラス700との関連において上記で説明された構成に加えて、消費者クラス800に対する以下の付加的な構成パラメータを構成することができる。
●セグメント及びサブセグメント構成
XMLにおけるすべてのセグメントを、それらがXMLドキュメントにおいて現れる順番にリストする。それらは本質的に、ドキュメント・ルート要素の即時の別個の子を表す。
一実施形態において、このエントリは、構成されたセグメント(サブセグメント)の子が順次に処理される必要があるときにのみ要求される。それらは、そのサブセグメントが抽出され且つ順次に処理される必要があるセグメントの一意の子を表す。言い換えれば、アプリケーション101は、それらを順次に抽出してもよい。
●クロスリファレンス構成:一実施形態において、消費者クラス800は、一度に一つだけのセグメント/サブセグメントに対するデータをメモリ内に保つ。幾つかの事例において、他のセグメント(単数又は複数)からのデータが必要とされる場合がある。フレームワーク102は、処理されているXMLドキュメントのライフサイクル全体にわたるセグメント/サブセグメントに収容される或るデータを格納する方法を提供する。こうしたデータは、クロスリファレンス・データと呼ばれる。クロスリファレンス・データは、セグメント及びサブセグメント上のXPathを用いて構成することができる。このデータは、識別子を介してアイデンティティを与えられる。XML処理のライフサイクルの全体を通して抽出されたデータを参照するために同じ識別子を用いることができる。以下は、クロスリファレンスを構成するために用いることができる構成の例である。
●XSD確認エラー・カスタマイゼーション構成:以下の構成は、特定のセグメントに対するXSD確認エラーメッセージに追記されることになる付加的な情報を抽出するために用いることができる。
●セグメント及びサブセグメント構成
一実施形態において、あらゆる数のレコード識別子をセグメントと関連付けることができる。構成される識別子の値は、関連するタイプフィールドに基づいて評価される。それらのすべては、識別子フィールドに基づいて評価される。displayNameエントリにおいて指定される、評価される値及び名前は、XSD確認エラーメッセージに追記されることになる名前と値とのペアを生成するのに用いられる。例えば、employee IDに、EMPLOYEEのような表示名をもつすべての無効なemployeeセグメントを追記するために、構成は、以下のように現れる場合がある。
この付加的な情報は、失敗したXSD確認に対するemployeeレコードを識別する一助となる。
一実施形態において、レコード識別子構成に対して以下のタイプがサポートされる。
●SEGMENT_XPATH:このタイプに対応しているrefフィールドは、XPathとなるべきである。Xpathクエリは、セグメントをルート・ドキュメントとして対処することによって評価される。
●OPEN_SEGMENT_XPATH:このタイプに対応しているrefフィールドは、XPathとなるべきである。Xpathクエリは、その子要素のいずれもなしに開かれたセグメントをルート・ドキュメントとして対処することによって評価される。
●X_REF:このタイプに対応しているrefフィールドは、クロスリファレンス識別子となるべきである。
●VALUE:このタイプに対するrefフィールド値は、如何なる評価をも行うことなく値として用いられる。
●COUNT:指定されたセグメント・レコードの現在のカウントは、refフィールドの値として評価される。
●SESSION_DATA:refフィールドにおいて指定されるキーをもつマッチング・セッション・データが用いられる。
●SEGMENT_XPATH:このタイプに対応しているrefフィールドは、XPathとなるべきである。Xpathクエリは、セグメントをルート・ドキュメントとして対処することによって評価される。
●OPEN_SEGMENT_XPATH:このタイプに対応しているrefフィールドは、XPathとなるべきである。Xpathクエリは、その子要素のいずれもなしに開かれたセグメントをルート・ドキュメントとして対処することによって評価される。
●X_REF:このタイプに対応しているrefフィールドは、クロスリファレンス識別子となるべきである。
●VALUE:このタイプに対するrefフィールド値は、如何なる評価をも行うことなく値として用いられる。
●COUNT:指定されたセグメント・レコードの現在のカウントは、refフィールドの値として評価される。
●SESSION_DATA:refフィールドにおいて指定されるキーをもつマッチング・セッション・データが用いられる。
以下は、図8に描かれた種々のクラスの記述である。
XmlConsumerクラス812は、XMLドキュメント107を処理するのに要求される動作を抽象化するために用いられる。アプリケーション101は、これを用いてXMLセグメント/サブセグメントを順次に処理する。アプリケーション101は、セグメント/サブセグメントの名前を渡し、フレームワーク102は、StAXパーサ104、トランスレーション層106、及びXMLBeansオブジェクトによって抽出された対応するXMLセグメントを用いて、対応するアプリケーション・データ・オブジェクトを生成する。一実施形態において、XmlConsumerクラス812は、以下のメソッドを含む。
●SegmentCursor openDataObject(String segmentName):アプリケーション101は、このメソッドを用いて、指定されたセグメントのサブセグメントへのカーソルを得る。SegmentCursorインターフェースは、セグメント及びそのサブセグメントのすべてに対応しているアプリケーション・データ・オブジェクトを取り出すためにメソッドを提供する。
●Object getDataObject(String segmentName):アプリケーション101は、このメソッドを用いて、指定されたセグメントに対応しているアプリケーション・データ・オブジェクトを取り出す。フレームワーク102は、StAXパーサ104を用いて指定されたXMLセグメントを抽出する。抽出されたXML及びセグメント名は、トランスレータ・クラスに渡される。トランスレータ・クラスは、セグメント名と抽出されたXMLセグメントとを用いて、対応するXMLObjectインスタンスをインスタンス化する。フレームワーク102は、トランスレータ・クラス(構成される場合)によって生成されたXmlObject上でXSD確認を行う。レコード識別子は、構成される場合にXmlObjectから抽出され、且つXSD確認エラーに追記される。確認エラーは、さらなる処理のために(提供される場合)特定用途向けエラー・ハンドラに引き渡される。最後に、フレームワーク102は、XmlObject及びセグメント名をトランスレータ・クラスに渡す。トランスレータ・クラスは、アプリケーション101に戻される対応するアプリケーション・データ・オブジェクトを生成する。
●void setErrorHandler(ErrorHandler handler):アプリケーション101は、随意的に、ErrorHandlerインターフェースを実装するエラー・ハンドラを設定することができる。XSD確認エラーは、さらなる処理のためにアプリケーション固有のエラー・ハンドラにデリゲートされる。
●void doTransform(File transformedFile):アプリケーション101は、このメソッドを用いて、XMLファイルをフラットファイルに変換する。変換は、構成ファイルにおいて指定される構成によって駆動される。
●void addSessionData(String key,Object value):アプリケーション101は、このメソッドを用いて、変換されたファイルをエンリッチするか又はXSD確認エラーにおける付加的な情報を付加するかのいずれかのために、フレームワークによって用いられる特定用途向けデータを付加する。
●SegmentCursor openDataObject(String segmentName):アプリケーション101は、このメソッドを用いて、指定されたセグメントのサブセグメントへのカーソルを得る。SegmentCursorインターフェースは、セグメント及びそのサブセグメントのすべてに対応しているアプリケーション・データ・オブジェクトを取り出すためにメソッドを提供する。
●Object getDataObject(String segmentName):アプリケーション101は、このメソッドを用いて、指定されたセグメントに対応しているアプリケーション・データ・オブジェクトを取り出す。フレームワーク102は、StAXパーサ104を用いて指定されたXMLセグメントを抽出する。抽出されたXML及びセグメント名は、トランスレータ・クラスに渡される。トランスレータ・クラスは、セグメント名と抽出されたXMLセグメントとを用いて、対応するXMLObjectインスタンスをインスタンス化する。フレームワーク102は、トランスレータ・クラス(構成される場合)によって生成されたXmlObject上でXSD確認を行う。レコード識別子は、構成される場合にXmlObjectから抽出され、且つXSD確認エラーに追記される。確認エラーは、さらなる処理のために(提供される場合)特定用途向けエラー・ハンドラに引き渡される。最後に、フレームワーク102は、XmlObject及びセグメント名をトランスレータ・クラスに渡す。トランスレータ・クラスは、アプリケーション101に戻される対応するアプリケーション・データ・オブジェクトを生成する。
●void setErrorHandler(ErrorHandler handler):アプリケーション101は、随意的に、ErrorHandlerインターフェースを実装するエラー・ハンドラを設定することができる。XSD確認エラーは、さらなる処理のためにアプリケーション固有のエラー・ハンドラにデリゲートされる。
●void doTransform(File transformedFile):アプリケーション101は、このメソッドを用いて、XMLファイルをフラットファイルに変換する。変換は、構成ファイルにおいて指定される構成によって駆動される。
●void addSessionData(String key,Object value):アプリケーション101は、このメソッドを用いて、変換されたファイルをエンリッチするか又はXSD確認エラーにおける付加的な情報を付加するかのいずれかのために、フレームワークによって用いられる特定用途向けデータを付加する。
XmlConsumerFactoryクラス811は、XmlConsumerインターフェースを実装する、オブジェクトの作成を要約するファクトリ・クラスである。一実施形態において、このクラスは、オブジェクトを作成するための、一方はファイル・オブジェクトを伴い、他方は処理されることになるXMLドキュメントのファイル名を伴う、2つのオーバーロードされるメソッドを含む。
ConsumerTranslatorインターフェース809は、消費者トランスレータ・クラスによって提供される動作を抽象化する。実装クラスは、抽出されたXMLセグメントから適切なXMLObjectインスタンスをインスタンス化するのに十分な知識を有する。プロセスの後の方で、対応するアプリケーション・データ・オブジェクトがXmlObjectインスタンスからインスタンス化される。一実施形態において、ConsumerTranslatorインターフェース809は、以下のメソッドを含む。
●XmlObject getRooNodeName():トランスレータ・クラスは、ルート・ドキュメント・ノードの名前を戻す。フレームワーク102は、これを用いて、処理されているXMLにおけるルートノードを識別する。
●XmlObject getXmlObject(String segmentName、String segmentXml、String namespaceStartWrapper、boolean isSubSegment):トランスレータ・クラスは、渡されたセグメント名及びセグメントXMLに基づいて、対応するXMLObjectインスタンス生成する。トランスレータ・クラスは、それらが必要とされる場合に他の2つのパラメータを利用することができる。生成されたXmlObjectは、XSD確認及びXPathクエリを用いるデータの抽出を行うためにフレームワークによって用いられる。
●XmlObject getInnerXmlObject(String segmentName、XmlObject object):トランスレータ・クラスは、セグメント及びそのXMLBeansオブジェクト(XmlObject)の知識を有する。生XMLデータからXMLBeansを生成しながら、XMLBeansオブジェクト・グラフにおいて親XMLBeansオブジェクトが生成される。戻されたXMLBeansオブジェクトは、XSD確認を行うためにフレームワーク102によって用いられる。
●Object generateDataObject(XmlObject xmlObject):トランスレータ・クラスは、パスインされたXMLBeansオブジェクト(XmlObject)を用いて、対応するアプリケーション・データ・オブジェクトを生成する。具体的なタイプのパスインされるxmlObjectインスタンスは、生成されることになるアプリケーション・データ・オブジェクト・タイプを判定するのに用いられる。
●XmlObject getRooNodeName():トランスレータ・クラスは、ルート・ドキュメント・ノードの名前を戻す。フレームワーク102は、これを用いて、処理されているXMLにおけるルートノードを識別する。
●XmlObject getXmlObject(String segmentName、String segmentXml、String namespaceStartWrapper、boolean isSubSegment):トランスレータ・クラスは、渡されたセグメント名及びセグメントXMLに基づいて、対応するXMLObjectインスタンス生成する。トランスレータ・クラスは、それらが必要とされる場合に他の2つのパラメータを利用することができる。生成されたXmlObjectは、XSD確認及びXPathクエリを用いるデータの抽出を行うためにフレームワークによって用いられる。
●XmlObject getInnerXmlObject(String segmentName、XmlObject object):トランスレータ・クラスは、セグメント及びそのXMLBeansオブジェクト(XmlObject)の知識を有する。生XMLデータからXMLBeansを生成しながら、XMLBeansオブジェクト・グラフにおいて親XMLBeansオブジェクトが生成される。戻されたXMLBeansオブジェクトは、XSD確認を行うためにフレームワーク102によって用いられる。
●Object generateDataObject(XmlObject xmlObject):トランスレータ・クラスは、パスインされたXMLBeansオブジェクト(XmlObject)を用いて、対応するアプリケーション・データ・オブジェクトを生成する。具体的なタイプのパスインされるxmlObjectインスタンスは、生成されることになるアプリケーション・データ・オブジェクト・タイプを判定するのに用いられる。
XmlConsumerImplクラス805は、XmlConsumerインターフェース812を実装する。このクラスの新しいインスタンスは、XmlConsumerFactory811を介してアプリケーション101に戻される。アプリケーション101は、XMLセグメントを順次に処理するためにXmlConsumer812インスタンス上で動作し、XmlConsumer812及びSegmentCursor806インターフェース規約において提供されるメソッドを呼び出す。一実施形態において、StAXパーサ104、生成されたXMLBeansオブジェクト、トランスレーション層106、及び確認メッセージ・ハンドリングの間でのすべての協調が、XmlConsumerImplクラス805によって制御される。これは、XMLを順次に処理するのに必要とされる以下のようなすべての機能性を収容する。
●XMLセグメント/サブセグメント及び開かれたセグメントを処理することによってアプリケーション・データ・オブジェクト(単数又は複数)を生成すること。
●開かれたセグメント(単数又は複数)のトラックを保つこと。
●XMLセグメント上でXSD確認を走らせ、且つエラーをエラー・ハンドラにデリゲートすること。
●XmlObjectインスタンス上でXpathクエリを走らせることによって構成されたデータを抽出すること。
●クロスリファレンス・データを抽出すること。
●構成される場合にXMLからフラットファイルへの変換を行うこと。
●XMLセグメント/サブセグメント及び開かれたセグメントを処理することによってアプリケーション・データ・オブジェクト(単数又は複数)を生成すること。
●開かれたセグメント(単数又は複数)のトラックを保つこと。
●XMLセグメント上でXSD確認を走らせ、且つエラーをエラー・ハンドラにデリゲートすること。
●XmlObjectインスタンス上でXpathクエリを走らせることによって構成されたデータを抽出すること。
●クロスリファレンス・データを抽出すること。
●構成される場合にXMLからフラットファイルへの変換を行うこと。
一実施形態において、XmlConsumerImplクラス805は、2つの異なる規約、すなわち、以下で説明されるように、アプリケーション・データ・オブジェクトを提供すること及びXMLをフラットファイルに変換することを実装する。
データ・オブジェクトの抽出。アプリケーション・データ・オブジェクトは、要求されたセグメントの抽出されたXMLセグメントから作成される。一実施形態において、このタスクを達成するために以下のステップに従う。
1.アプリケーション101によって渡されるセグメント/サブセグメント名に基づいてセグメント/サブセグメントを抽出する。
2.トランスレータ・クラスは、抽出されたXMLセグメントに対応している指定されたXmlObjectインスタンスを生成する。
3.戻されたXmlObject上でXpathクエリを走らせることによって、構成されたXPathクロスリファレンス・データを抽出する。
4.戻されたXmlObject上で確認を行い、確認エラーをカスタマイズし(構成される場合)、次いで、さらなる処理のためにエラーを特定用途向けErrorHandler808に引き渡す。抽出されたデータ値をエラーメッセージに付加するために、XmlObject上のXpathクエリを用いて付加的なデータ(ログエントリにおいて構成される場合)が抽出される。
5.セグメントがXSD確認をパスせず、skip invalid optionが真である場合に、現在のセグメントを無視する。次のセグメントを取り出し、且つこれをステップ(2)を通じて渡す。
6.トランスレータ・クラスは、XmlObjectを用いて、対応するアプリケーション・データ・オブジェクトを生成する。
7.生成された特定用途向けデータ・オブジェクトがアプリケーション101に戻される。
1.アプリケーション101によって渡されるセグメント/サブセグメント名に基づいてセグメント/サブセグメントを抽出する。
2.トランスレータ・クラスは、抽出されたXMLセグメントに対応している指定されたXmlObjectインスタンスを生成する。
3.戻されたXmlObject上でXpathクエリを走らせることによって、構成されたXPathクロスリファレンス・データを抽出する。
4.戻されたXmlObject上で確認を行い、確認エラーをカスタマイズし(構成される場合)、次いで、さらなる処理のためにエラーを特定用途向けErrorHandler808に引き渡す。抽出されたデータ値をエラーメッセージに付加するために、XmlObject上のXpathクエリを用いて付加的なデータ(ログエントリにおいて構成される場合)が抽出される。
5.セグメントがXSD確認をパスせず、skip invalid optionが真である場合に、現在のセグメントを無視する。次のセグメントを取り出し、且つこれをステップ(2)を通じて渡す。
6.トランスレータ・クラスは、XmlObjectを用いて、対応するアプリケーション・データ・オブジェクトを生成する。
7.生成された特定用途向けデータ・オブジェクトがアプリケーション101に戻される。
XMLからフラットファイルへの変換。一実施形態において、XMLをフラットファイルに変換するために以下のステップが行われる。
1.フラットファイルのヘッダを生成するために、要求されたセグメント(構成される場合)を抽出する。
2.トランスレータ・クラスが、抽出されたXMLセグメントに対応している指定されたXmlObjectインスタンスを生成する。
3.戻されたXmlObject上でXpathクエリを走らせることによって、構成されたXPathクロスリファレンス・データを抽出する。
4.戻されたXmlObject上で確認を行い、確認エラーをカスタマイズし(構成される場合)、次いで、さらなる処理のためにエラーをErrorHandler808に引き渡す。抽出されたデータ値を確認エラーメッセージに付加するために、XmlObject上のXpathクエリを用いて付加的なデータ(ログエントリにおいて構成される場合)を抽出する。
5.戻されたXmlObjectからデータを抽出し、且つXpathクエリを走らせて、データを取り出し、且つこれをフラットファイルにポピュレートする。
6.すべてのボディ・セグメント及びサブセグメントに対してステップ(1)〜(5)を繰り返す。
7.フッタをフラットファイル(構成される場合)に追記する。
1.フラットファイルのヘッダを生成するために、要求されたセグメント(構成される場合)を抽出する。
2.トランスレータ・クラスが、抽出されたXMLセグメントに対応している指定されたXmlObjectインスタンスを生成する。
3.戻されたXmlObject上でXpathクエリを走らせることによって、構成されたXPathクロスリファレンス・データを抽出する。
4.戻されたXmlObject上で確認を行い、確認エラーをカスタマイズし(構成される場合)、次いで、さらなる処理のためにエラーをErrorHandler808に引き渡す。抽出されたデータ値を確認エラーメッセージに付加するために、XmlObject上のXpathクエリを用いて付加的なデータ(ログエントリにおいて構成される場合)を抽出する。
5.戻されたXmlObjectからデータを抽出し、且つXpathクエリを走らせて、データを取り出し、且つこれをフラットファイルにポピュレートする。
6.すべてのボディ・セグメント及びサブセグメントに対してステップ(1)〜(5)を繰り返す。
7.フッタをフラットファイル(構成される場合)に追記する。
インターフェース・メソッドを実装することに加えて、XmlConsumerImplクラス805はまた、以下のような内部メソッドを含むことができる。
●protected void setup保護されたボイド・セットアップ(File xmlOutFile,ConsumerTranslator trans,Segment[ ]segments,XPathCrossReference[ ]xPathCrossRef,boolean includeInvalid,boolean logInvalid):コンフィギュレータ・クラス709は、アプリケーション101がXmlConsumerFactoryを介してXmlConsumerのインスタンスを要求するときに、このクラスの新しいインスタンスを作成する。次いで、トランスレータ・クラスのインスタンスが作成され、構成情報(例えば、XSD確認が行われる必要があるかどうか、XSD確認エラーをログするかどうか、並びにセグメント及びそれらのサブセグメントのリスト)を渡すために、このメソッドが呼び出される。
●private XmlObject getSegmentXmlObject(String segmentName):このメソッドは、パスインされたセグメント名に対応しているXMLセグメントを抽出することを担当する。StAXパーサ104は、XMLセグメントを抽出するのに用いられる。トランスレータ・クラスは、抽出されたXMLから対応するXMLBeansオブジェクトを作成する。
●private XmlObject openSegment(String segmentName):このメソッドは、パスインされたセグメント名に対応しているXMLセグメント(その子要素のいずれもなしに)を抽出することを担当する。パーシングは、名付けられたセグメントの子が検出されるとすぐに停止される。整形式のXMLは、クロージング・タグを追記することによって生成される。抽出されたXML(追記されるクロージング・タグを伴う)は、トランスレータ・クラスに渡される。トランスレータ・クラスは、抽出されたXMLから対応するXMLBeansオブジェクトを作成する。
●private boolean analyzeプライベート・ブール解析(String segmentName,XmlObject xmlObject):フレームワーク102は、このメソッドを用いてXSD確認を行い、且つそれを行うように構成される場合にあらゆるXSDエラーをログする。トランスレータ・クラスは、XSD定義に応じて内側XMLBeansオブジェクト又は同じオブジェクトを提供する。戻されたXMLBeansオブジェクト上でXSD確認が行われる。エラーメッセージ(もしあれば)は、提供された構成に基づいてカスタマイズされる。最後に、エラーメッセージは、さらなる処理のためにErrorHandler808に引き渡される。
●protected void setup保護されたボイド・セットアップ(File xmlOutFile,ConsumerTranslator trans,Segment[ ]segments,XPathCrossReference[ ]xPathCrossRef,boolean includeInvalid,boolean logInvalid):コンフィギュレータ・クラス709は、アプリケーション101がXmlConsumerFactoryを介してXmlConsumerのインスタンスを要求するときに、このクラスの新しいインスタンスを作成する。次いで、トランスレータ・クラスのインスタンスが作成され、構成情報(例えば、XSD確認が行われる必要があるかどうか、XSD確認エラーをログするかどうか、並びにセグメント及びそれらのサブセグメントのリスト)を渡すために、このメソッドが呼び出される。
●private XmlObject getSegmentXmlObject(String segmentName):このメソッドは、パスインされたセグメント名に対応しているXMLセグメントを抽出することを担当する。StAXパーサ104は、XMLセグメントを抽出するのに用いられる。トランスレータ・クラスは、抽出されたXMLから対応するXMLBeansオブジェクトを作成する。
●private XmlObject openSegment(String segmentName):このメソッドは、パスインされたセグメント名に対応しているXMLセグメント(その子要素のいずれもなしに)を抽出することを担当する。パーシングは、名付けられたセグメントの子が検出されるとすぐに停止される。整形式のXMLは、クロージング・タグを追記することによって生成される。抽出されたXML(追記されるクロージング・タグを伴う)は、トランスレータ・クラスに渡される。トランスレータ・クラスは、抽出されたXMLから対応するXMLBeansオブジェクトを作成する。
●private boolean analyzeプライベート・ブール解析(String segmentName,XmlObject xmlObject):フレームワーク102は、このメソッドを用いてXSD確認を行い、且つそれを行うように構成される場合にあらゆるXSDエラーをログする。トランスレータ・クラスは、XSD定義に応じて内側XMLBeansオブジェクト又は同じオブジェクトを提供する。戻されたXMLBeansオブジェクト上でXSD確認が行われる。エラーメッセージ(もしあれば)は、提供された構成に基づいてカスタマイズされる。最後に、エラーメッセージは、さらなる処理のためにErrorHandler808に引き渡される。
SegmentCursorImplクラス807は、開かれたセグメントのサブセグメントにわたって反復するためにSegmentCursor806インターフェースの実装を提供する。
XPathCrossReferenceクラス810は、XPathクロスリファレンスと関係付けられた構成データを要約し、且つこのデータをセットし且つ入手するためにセッター/ゲッター・メソッドを提供する。
Fieldクラス801は、識別子の構成された名前及びタイプを要約し、例は、SEGMENT_XPATH、OPEN_SEGMENT_XPATH、X_REF、VALUE、COUNT、SESSION_DATA、及びUSER_DEFINEDを含む。Fieldクラス801は、名前及びタイプに対するセッター/ゲッター・メソッドを提供する。
LogFieldクラス802は、Fieldクラス801を拡張し、且つ表示名及び関係するセッター/ゲッター・メソッドを保持するために付加的な変数を付加する。
Separatorクラス813は、XMLとフラットファイルとの変換を行いながら、必要とされるレコード及びフィールド・セパレータに関係する構成データを要約する。
TransformConfigクラス804は、XMLをフラットファイルに変換するのに必要とされるすべての構成データ(ヘッダ、ボディ、フッタなどのような)を要約する。
Segmentクラス803は、その名前、親セグメント(もしあれば)、及びサブセグメント(もしあれば)のようなセグメントについての構成情報を要約する。
XMLとフラットファイルとの変換構成
上記で解説されたように、一実施形態において、フレームワーク102によって生成されるフラットファイルは、3つのセクション、すなわち、ヘッダ、ボディ、及びフッタを有する。一実施形態において、フレームワーク102は、以下のように、これらのセクションの各々に対する複数の構成オプションを提供する。
上記で解説されたように、一実施形態において、フレームワーク102によって生成されるフラットファイルは、3つのセクション、すなわち、ヘッダ、ボディ、及びフッタを有する。一実施形態において、フレームワーク102は、以下のように、これらのセクションの各々に対する複数の構成オプションを提供する。
ヘッダ
ヘッダは、送信元情報、トランザクションID、レコードの数などのようなメタデータを収容する。データは、ヘッダに書き込まれることになるあらゆるXMLセグメントから抽出することができる。構成に対するシンタックスの例は以下の通りである。
ヘッダは、送信元情報、トランザクションID、レコードの数などのようなメタデータを収容する。データは、ヘッダに書き込まれることになるあらゆるXMLセグメントから抽出することができる。構成に対するシンタックスの例は以下の通りである。
セグメント名は、XMLセグメントの名前であり、この場合、データは、フィールド構成で指定されたようにXpathクエリを走らせることによって抽出される必要がある。一実施形態において、フィールド構成は、XSD確認エラー・カスタマイゼーション構成と同一である。しかしながら、ref及びtypeは、コロンで区切られ、各ペアをコンマで区切ることによって構成することができる。ref部は、構成されるtypeに基づいて評価される。このセクションで構成されるXPathは、一般に、シンプル・テキスト又は単一の属性値を評価する。評価された値は、ここで構成されたのと同じ順番でフラットファイル・ヘッダにポピュレートされる。変換されたファイルにポピュレートされた値は、区切り文字によって分離される。区切り文字の値は、以下で解説するように構成することができる。
ボディ
ヘッダ部に対して上記に示されたものと類似したフォーマットを用いて、あらゆる数のセグメントを構成することができる。一般に、構成されるセグメントのすべてのサブセグメントは、指定されたサブセグメントに遭遇する度に、再帰的に取り出され、1つのレコードが作成され、且つ変換されたファイルに追記される。前に述べたように、セグメント及びそれらのサブセグメントのリストは、それらがXMLドキュメントにおいて現れる順番に構成される。
ヘッダ部に対して上記に示されたものと類似したフォーマットを用いて、あらゆる数のセグメントを構成することができる。一般に、構成されるセグメントのすべてのサブセグメントは、指定されたサブセグメントに遭遇する度に、再帰的に取り出され、1つのレコードが作成され、且つ変換されたファイルに追記される。前に述べたように、セグメント及びそれらのサブセグメントのリストは、それらがXMLドキュメントにおいて現れる順番に構成される。
以下の例は、上記のXSD及びサンプルXMLに対するプロデューサ動作、消費者動作、及びファイル変換動作を実証する。
このコマンドは、XMLBeansを拡張するJava(登録商標)インターフェース・クラスを生成する。以下は、このプロセスによって生成されるサンプル・インターフェースJava(登録商標)クラスのリストである。
トランスレーション層106は、動作するのにアプリケーション・データ・オブジェクトを必要とする。それらは、プロデューサ・トランスレータによってXMLを生成するのに用いられる。消費者トランスレータは、抽出されたXMLからそれらのインスタンスを作成する。データ・オブジェクトは、如何なるXMLイベント又はXMLBeansオブジェクトをも意識しない。しかしながら、それらは、プロデューサ・トランスレータによって用いられるときにそれらからデータを抽出する方法を提供し、且つ消費者トランスレータによって用いられるときにデータをポピュレートする方法を提供する必要がある。例証する目的で、我々は、アプリケーション101が、サンプルXMLにおいて表されるデータを要約するために以下の3つのクラスを有すると仮定する。
●トランザクションID(transaction ID)、トランザクション日付(transaction date)、及びXMLドキュメントの送信元(sender)についての情報のようなヘッダ・レベル・データを要約する、HeaderDto。
●itemのinventory情報を要約する、InventoryDto。
●promotionデータを要約する、PromotionDto。
●トランザクションID(transaction ID)、トランザクション日付(transaction date)、及びXMLドキュメントの送信元(sender)についての情報のようなヘッダ・レベル・データを要約する、HeaderDto。
●itemのinventory情報を要約する、InventoryDto。
●promotionデータを要約する、PromotionDto。
前に述べたように、プロデューサ・トランスレータ・クラスは、ProducerTranslatorインターフェースを実装し、消費者トランスレータ・クラスは、ConsumerTranslatorインターフェースを実装する。
ProducerTranslator(プロデューサ・トランスレータ)
一実施形態において、フレームワーク102は、3つの異なる方法のいずれかでXMLドキュメント107を生成することができる。
●XMLドキュメント全体107を同時に生成する。この手法は、inventory及びpromotion要素が過多に存在しないときに実行可能である。アプリケーション101は、XMLドキュメント全体107を生産するのに必要とされるすべてのデータを有するアプリケーション・データ・オブジェクトを提供する。しかしながら、一実施形態において、XmlConsumerインターフェース規約は、単一のオブジェクトのみを渡すことを可能にする。この事例において、データは、複数のデータ・オブジェクト、すなわちHeaderDtoインスタンス、InventoryDto[]インスタンス、及びPromotionDto[]インスタンスに要約される。これは、2つの方法のうちの1つ、すなわち、すべてのオブジェクトを別のオブジェクトの中にラップすること、又はそれらのすべてをHashMapに入れることのいずれかで行うことができる。例証する目的で、この例ではHashMap手法が用いられるであろう。
●セグメントtransactionInfo、inventory、及びpromotionsを所与の順番で付加することによって、XMLドキュメント107を増加的に生成する。アプリケーション101は、各セグメントをXMLに追記することができるように、Headerインスタンス、Inventory[]インスタンス、及びPromotion[]インスタンスを順次にフレームワーク102に渡す。
●XMLセグメントtransactionInfoを生成し、次いで、セグメントinventoryを開き、そのサブセグメントitemを順次に付加する。同様に、開かれたセグメントpromotionsを生成し、且つサブセグメントpromotionを順次に付加する。アプリケーション101は、transactionInfo XMLセグメントを生成することができるように、HeaderDtoインスタンスを渡す。開かれたセグメントinventoryは、transactionInfoセグメントに追従し、InventoryDtoオブジェクトのインスタンスは、フレームワーク102に順次に渡される。promotionsに対して同じプロセス(inventoryの事例のように)が繰り返される。
一実施形態において、フレームワーク102は、3つの異なる方法のいずれかでXMLドキュメント107を生成することができる。
●XMLドキュメント全体107を同時に生成する。この手法は、inventory及びpromotion要素が過多に存在しないときに実行可能である。アプリケーション101は、XMLドキュメント全体107を生産するのに必要とされるすべてのデータを有するアプリケーション・データ・オブジェクトを提供する。しかしながら、一実施形態において、XmlConsumerインターフェース規約は、単一のオブジェクトのみを渡すことを可能にする。この事例において、データは、複数のデータ・オブジェクト、すなわちHeaderDtoインスタンス、InventoryDto[]インスタンス、及びPromotionDto[]インスタンスに要約される。これは、2つの方法のうちの1つ、すなわち、すべてのオブジェクトを別のオブジェクトの中にラップすること、又はそれらのすべてをHashMapに入れることのいずれかで行うことができる。例証する目的で、この例ではHashMap手法が用いられるであろう。
●セグメントtransactionInfo、inventory、及びpromotionsを所与の順番で付加することによって、XMLドキュメント107を増加的に生成する。アプリケーション101は、各セグメントをXMLに追記することができるように、Headerインスタンス、Inventory[]インスタンス、及びPromotion[]インスタンスを順次にフレームワーク102に渡す。
●XMLセグメントtransactionInfoを生成し、次いで、セグメントinventoryを開き、そのサブセグメントitemを順次に付加する。同様に、開かれたセグメントpromotionsを生成し、且つサブセグメントpromotionを順次に付加する。アプリケーション101は、transactionInfo XMLセグメントを生成することができるように、HeaderDtoインスタンスを渡す。開かれたセグメントinventoryは、transactionInfoセグメントに追従し、InventoryDtoオブジェクトのインスタンスは、フレームワーク102に順次に渡される。promotionsに対して同じプロセス(inventoryの事例のように)が繰り返される。
プロデューサ・トランスレータ・クラスは、これらの事例の各々を取り扱うことができ、したがって、これは、すべての3つの事例において対応するXMLObjectをインスタンス化することができる。
XMLドキュメント全体107を同時に生成するために、アプリケーション101は、XMLドキュメント107を生成するのに必要とされるデータを(DTOの形態で)提供する。トランスレータ・クラスは、アプリケーション101が達成しようとしていることを理解することができるような方法で実装される。例えば、アプリケーション101は、アプリケーション・データ・オブジェクトのインスタンス、すなわち、キーヘッダ、inventory、及びpromotionsをそれぞれ伴うHeaderDto、InventoryDto[]アレイ、及びPromotion[]アレイを収容するHashMapを渡してもよい。このパラメータを受信すると、フレームワーク102は、XMLドキュメント107全体を生成することができる。この手法によって生成されたXMLドキュメント107の例は以下の通りである。
XMLドキュメント107を増加的に生成するために、transactionInfoセグメント、inventoryセグメント、及びpromotionsセグメントが順次に付加される。例えば、フレームワーク102は、HeaderDtoからtransactionInfo XMLセグメントを生成し、InventoryDto[]アレイ・インスタンスからinventoryセグメントを生成し、及びPromotionDto[]アレイ・インスタンスからpromotionsを生成する。
セグメント及びサブセグメントを順次に付加することによってXMLドキュメント107を生成するために、transactionInfoセグメントが最初に付加され、その後、inventoryサブセグメントitem、及びpromotionsサブセグメントpromotionが順次に付加される。フレームワーク102は、最初にHeaderDtoインスタンスからtransactionInfo XMLセグメントを生成する。次に、これは、inventoryに対する開かれたセグメントを付加し、且つすべてのそのサブセグメントを順次に付加する。inventoryセグメントを閉じた後で、開かれたセグメントpromotionsが付加される。そのサブセグメントのすべては、後で順次に付加される。closeAll()へのコールは、それらが開かれた順番にすべての開かれたセグメントを閉じる。
消費者トランスレータ
一実施形態において、フレームワーク102は、3つの異なる方法のいずれかでXMLドキュメント107を処理することができる。
●(transactionInfo、inventory、及びpromotionsのような)セグメントを順次に抽出する。アプリケーション101は、これらを順次に取り出すことができる。これらのセグメントのうちのすべてのサブセグメントは、それぞれのセグメントと一緒に取り出されるであろう。
●セグメントtransactionInfoを抽出し、次いで、セグメントinventoryを開き、その後、そのサブセグメント(item)を順次に抽出する。最後に、セグメントpromotionsを開き、その後、そのサブセグメント(promotion)を順次に抽出する。
●構成ファイルで指定された場合にXMLドキュメント107をフラットファイルに変換する。
一実施形態において、フレームワーク102は、3つの異なる方法のいずれかでXMLドキュメント107を処理することができる。
●(transactionInfo、inventory、及びpromotionsのような)セグメントを順次に抽出する。アプリケーション101は、これらを順次に取り出すことができる。これらのセグメントのうちのすべてのサブセグメントは、それぞれのセグメントと一緒に取り出されるであろう。
●セグメントtransactionInfoを抽出し、次いで、セグメントinventoryを開き、その後、そのサブセグメント(item)を順次に抽出する。最後に、セグメントpromotionsを開き、その後、そのサブセグメント(promotion)を順次に抽出する。
●構成ファイルで指定された場合にXMLドキュメント107をフラットファイルに変換する。
消費者トランスレータ・クラスは、これらの事例のいずれかを取り扱うために用いられる。
これらのエントリは、フレームワーク102に以下のように指示する。
●トランスレーションのためにInventoryConsumerTranslatorクラスを用いる。
●XSD確認に失敗するセグメント/サブセグメントを含まないこと。
●XSD確認エラーをログすること。
●ルートノードの3つの子、すなわち、transactionInfo、inventory、及びpromotionsが存在し、これらはセグメントと呼ばれる。
●itemは、inventoryセグメントの唯一のサブセグメント(子ノード)である。
●promotionは、promotionsセグメントの唯一のサブセグメント(子ノード)である。
●トランスレーションのためにInventoryConsumerTranslatorクラスを用いる。
●XSD確認に失敗するセグメント/サブセグメントを含まないこと。
●XSD確認エラーをログすること。
●ルートノードの3つの子、すなわち、transactionInfo、inventory、及びpromotionsが存在し、これらはセグメントと呼ばれる。
●itemは、inventoryセグメントの唯一のサブセグメント(子ノード)である。
●promotionは、promotionsセグメントの唯一のサブセグメント(子ノード)である。
上記で解説されたように、フレームワーク102は、所望の場合にセグメント(transactionInfo、inventory、及びpromotions)を順次に抽出することによって、XMLドキュメント107を処理することができる。こうした処理によって生成される出力の例は、以下の通りである。
promotion及びitemサブセグメントは、順次に処理することができる。サブセグメントを順次に処理することは、多数のサブセグメントが期待されるときに有用なことがあり、それらのすべてを一緒に抽出することは、アプリケーション101にメモリを使い果たさせる場合がある。
最初に、フレームワーク102は、固定されたサイズのセグメントtransactionInfoを処理する。transactionInfoセグメントを処理した後で、アプリケーション101は、フレームワーク102に、inventoryセグメントを開き、且つitemサブセグメントを順次に処理するように依頼する。最後に、アプリケーション101は、フレームワーク102に、セグメントpromotionsを開き、且つサブセグメントpromotionを順次に処理するように依頼する。
XMLドキュメント107をフラットファイルにトランスレートするときに、変換されたデータは、XMLにより指定されたものとアプリケーションにより指定されたものとの2つの異なるソースを有する。抽出されることになるXMLデータは、XPathsを用いて表され、アプリケーションにより指定されたデータは、session dataとして表される。一実施形態において、データは、書き込まれることになるフラットファイルの各セクション、すなわち、ヘッダ、ボディ、及びフッタに対して適切に構成される。例えば、ヘッダは、すべてがtransactionInfoセグメントから来る以下のフィールドを含むものと想定する。
●transactionId
●sender Id
●sender Name
●transactionId
●sender Id
●sender Name
フラットファイルのボディは、inventoryセグメント及びpromotionsセグメントからのフィールドを含むものと想定する。サブセグメントに対応しているフィールドは、変換されたファイルにおけるボディ・レコードを構成するであろう。transactionInfoセグメントからのSender Id及びtransaction Idは、クロスリファレンスを介して含まれるであろう。また、各inventoryレコードは、ワードINVENTORYで始まり、promotionレコードは、ワードPROMOTIONで始まるべきである。そのうえ、累積レコード・カウント及びアプリケーションにより指定されたフィールド、すなわち処理日付もまた付加されることになると想定する。以下のフィールドは、フラットファイルにおけるinventory/promotion及びフッタ・レコードを構成する。
●Inventoryセグメント
○INVENTORYというそのままのワード
○transactionInfoセグメントからのsender Id
○item id
○availability code(利用可能コード)
○availability quantity(利用可能量)
○アプリケーション・データ−processing date(処理日付)
○transactionInfoセグメントからのtransaction id
○inventoryセグメント内の累積itemレコード・カウント
●Promotionsセグメント
○PROMOTIONというそのままのワード
○transactionInfoセグメントからのsender Id
○promotionコード
○transactionInfoセグメントからのtransaction id
○promotionsセグメント内の累積promotionレコード・カウント
●Footer(フッタ)
○transactionInfoセグメントからのtransaction id
○itemレコードの数
○promotionレコードの数
○promotionレコードとitemレコードの総数。
●Inventoryセグメント
○INVENTORYというそのままのワード
○transactionInfoセグメントからのsender Id
○item id
○availability code(利用可能コード)
○availability quantity(利用可能量)
○アプリケーション・データ−processing date(処理日付)
○transactionInfoセグメントからのtransaction id
○inventoryセグメント内の累積itemレコード・カウント
●Promotionsセグメント
○PROMOTIONというそのままのワード
○transactionInfoセグメントからのsender Id
○promotionコード
○transactionInfoセグメントからのtransaction id
○promotionsセグメント内の累積promotionレコード・カウント
●Footer(フッタ)
○transactionInfoセグメントからのtransaction id
○itemレコードの数
○promotionレコードの数
○promotionレコードとitemレコードの総数。
1つのセグメントから別のセグメントにクロスリファレンスされているフィールドは、クロスリファレンスconfigのリストに含まれる。
この例において、フレームワーク102は、すべてのアプリケーションにより付加されたデータのtoString()関数の出力を用いる。デフォルト・レコード・セパレータ(新しいライン)及びデフォルト・フィールド・セパレータ(|)は、それらが指定されていなかった場合に用いられる。
一実施形態において、XSD確認エラーメッセージは、それらに付加的な情報を追記することによってカスタマイズすることができる。例えば、itemサブセグメントがXSD確認に失敗するときにはいつも、transactionId(クロスリファレンスを介して)及びitemIdを付加することを我々が望むと想定する。transactionIdに対する表示名は、TRANSACTION IDとなるべきであり、itemIdに対する表示名は、Item #となるべきである。このカスタマイゼーションに対する構成エントリは、以下のようになる可能性がある。
角括弧内の情報は、無効なitemセグメントに遭遇するときの包含のためにフレームワーク102(構成される場合に)によって付加されている。
結論
上記の説明に基づいて、種々の実施形態において、本発明のシステムは、従来技術のスキームを上回る幾つかの利点を提供することが分かる。本発明のシステムは、任意のサイズのXMLドキュメントをシリアルに処理し及び/又は生成することができるように、StAXパーサのストリーミング及び融通性をXMLBeansのパワー及び使いやすさと組み合わせる。加えて、アプリケーション・コードは、XMLドキュメントのパーシング及び処理の詳細から隔離することができ、アプリケーション・コードを維持しやすいものにし、且つアプリケーションに影響を及ぼすことなく他のXML技術でのスワップ・アウトを容易にする。
上記の説明に基づいて、種々の実施形態において、本発明のシステムは、従来技術のスキームを上回る幾つかの利点を提供することが分かる。本発明のシステムは、任意のサイズのXMLドキュメントをシリアルに処理し及び/又は生成することができるように、StAXパーサのストリーミング及び融通性をXMLBeansのパワー及び使いやすさと組み合わせる。加えて、アプリケーション・コードは、XMLドキュメントのパーシング及び処理の詳細から隔離することができ、アプリケーション・コードを維持しやすいものにし、且つアプリケーションに影響を及ぼすことなく他のXML技術でのスワップ・アウトを容易にする。
種々の実施形態において、本発明は、上記で説明された技術を単独で又はあらゆる組合せでのいずれかで行うためのシステム又は方法として実装することができる。別の実施形態において、本発明は、コンピューティング・デバイス又は他の電子装置におけるプロセッサに上記で説明された技術を行わせるための、一時的なものではないコンピュータ可読記憶媒体と、該媒体上でエンコードされるコンピュータ・プログラム・コードとを備えるコンピュータ・プログラム製品として実装することができる。
本明細書における「一実施形態」又は「実施形態」への言及は、実施形態との関連において説明された特定の機能feature、構造、又は特徴が、本発明の少なくとも1つの実施形態に含まれることを意味する。本明細書の種々の場所での「一実施形態において」という語句の出現は、必ずしもすべてが同じ実施形態を言及するわけではない。
上記の幾つかの部分は、コンピュータ・メモリ内のデータ・ビット上の動作のアルゴリズム及び象徴的表現の観点で提示される。これらのアルゴリズム記述及び表現は、それらの研究の実体を他の当業者に最も効果的に伝えるためにデータ処理分野の当業者によって用いられる手段である。アルゴリズムは、ここでは及び一般に、所望の結果につながる、つじつまの合う一連のステップ(命令)となると考えられる。ステップは、物理的量の物理的操作を要求するものである。普通は、必ずしもそうであるわけではないが、これらの量は、格納する、伝送する、組み合わせる、比較する、変換する、及び他の方法で操作することができる電気信号、磁気信号、又は光信号の形態をとる。時には、主として恒例(common usage)の理由で、これらの信号を、ビット、値、要素、記号(symbol)、文字(character)、用語(term)、数、又はそれに類似のものとして言及するのが便利である。そのうえ、時には、一般性を失わずに、物理的量の物理的操作を要求するステップの或る配置を、モジュール又はコード・デバイスとして言及するのも便利である。
しかしながら、これらの及び類似した用語のすべては、適切な物理的量と関連付けられるものであって、これらの量に貼られる単なる便利なラベルであることに留意されたい。特にそれ以外の指定のない限り、以下の解説から明らかなように、説明の全体を通して、「処理する」又は「コンピューティング」又は「計算する」又は「判定する」又は「表示する」又はそれに類似のもののような用語を用いる解説は、コンピュータ・システム・メモリ又はレジスタ若しくは他のこうした情報記憶装置、伝送デバイス、又はディスプレイ・デバイス内の物理的(電子)量として表されるデータを操作し及び変換するコンピュータ・システム又は類似した電子コンピューティング・デバイスのアクション及びプロセスを言及することが分かる。
本発明の或る態様は、アルゴリズムの形態の本明細書に記載のプロセス・ステップ及び命令を含む。本発明のプロセス・ステップ及び命令は、ソフトウェア、ファームウェア、又はハードウェアにおいて具体化することができ、ソフトウェアにおいて具体化されるときに、種々のオペレーティング・システムによって用いられる異なるプラットフォーム上に常駐するようにダウンロードし及びそこから動作することができることに注意されたい。
本発明はまた、本明細書の動作を行うための装置に関する。この装置は、要求された目的のために特別に構築されてもよく、又は、これは、コンピュータに格納されたコンピュータ・プログラムによって選択的にアクティブ化され又は再構成される1つ又は複数の汎用コンピュータ(単数又は複数)を備えてもよい。こうしたコンピュータ・プログラムは、限定はされないが、電子命令を格納するのに適しており、且つ各々がコンピュータ・システム・バスに結合される、フロッピー(登録商標)・ディスク、光ディスク、CD−ROM、磁気−光ディスク、読出し専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、EPROM、EEPROM、磁気又は光学カード、特定用途向け集積回路(ASIC)、又はあらゆるタイプの媒体を含むあらゆるタイプのディスクのようなコンピュータ可読記憶媒体に格納されてもよい。そのうえ、本明細書において言及されるコンピュータ及び/又は他の電子装置は、単一のプロセッサを含んでもよく、又は、増加したコンピューティング能力のための多数のプロセッサ設計を採用するアーキテクチャであってもよい。一実施形態において、上記で説明された幾つかの又はすべての機能性コンポーネントは、ソフトウェアの制御の下で上記で説明されたステップを行うプロセッサを含むコンピュータ・ハードウェアとして実装される。
本明細書で提示されるアルゴリズム及び表示は、如何なる特定のコンピュータ又は他の装置とも本質的に関係付けられない。種々の汎用システムもまた本明細書の教示に係るプログラムと共に用いられる可能性があり、又は要求される方法ステップを行うためにより特化された装置を構築することが便利であることを証明する可能性がある。種々のこれらのシステムに対して要求される構造は、以下の説明から明らかとなるであろう。加えて、本発明は、如何なる特定のプログラミング言語にも関連して説明されない。種々のプログラミング言語は、本明細書で説明される場合の本発明の教示を実装するのに用いられてもよく、固有の言語への以下のあらゆる言及は、本発明の実施可能モード及び最良モードを開示するために提供されることが理解されるであろう。
したがって、種々の実施形態において、本発明は、コンピュータ・システム、コンピューティング・デバイス、又は他の電子装置、又はクライアント/サーバアーキテクチャ、又はそのあらゆる組合せ又は複数を制御するためのソフトウェア、ハードウェア、又は他の要素として実装することができる。本発明のシステムを実装するためのハードウェアは、例えば、当該技術分野では周知の技術に係るプロセッサ、入力デバイス(キーボード、マウス、タッチパッド、トラックパッド、ジョイスティック、トラックボール、マイクロフォン、及び/又はその任意の組合せのような)、出力デバイス(スクリーン、スピーカ、及び/又はそれに類似のもののような)、メモリ、長期記憶装置(磁気記憶装置、光学記憶装置、及び/又はそれに類似のもののような)、及び/又はネットワーク接続性を含むことができる。こうした電子装置は、ポータブルのものであってもよいし、又はポータブルのものでなくてもよい。本発明を実装するために用いられてもよい電子装置(又は本発明のコンポーネント)の例は、移動電話、パーソナル・デジタル・アシスタント、スマートフォン、公衆電話ボックス(kiosk)、デスクトップ・コンピュータ、ラップトップ・コンピュータ、消費者向け電子装置、テレビ、セットトップ・ボックス、又はそれに類似のものを含む。本発明を実装するための電子装置は、例えば、Redmond、WashingtonのMicrosoft Corporationから入手可能なMicrosoft Windows(登録商標) 7のようなオペレーティング・システム、又はデバイス上で用いるために適合されるあらゆる他のオペレーティング・システムを用いてもよい。
最後に、本明細書で用いられる言語は、主として、読みやすさ及び教育上の目的のために選択されており、発明的な主題を描写する又は局限するように選択されているわけではないことに注意されたい。したがって、本発明の開示は、以下の請求項に記載される本発明の範囲を限定するのではなく、例証となることを意図される。
本発明は、好ましい実施形態及び幾つかの代替的実施形態を参照して具体的に示され説明されているが、本発明の精神及び範囲から逸脱することなく形態及び詳細における種々の変化をそこに加えることができることが当業者には理解されるであろう。
Claims (32)
- XMLドキュメントを処理するためのコンピュータで実行される方法であって、
プロセッサにおいて、XMLドキュメントからのデータを要求するメッセージをアプリケーションから受信すること、
プロセッサにおいて、前記メッセージを受信することに応答して、
前記XMLドキュメントから、要求された前記データを表わす少なくとも1つのセグメントを取り出すこと、
取り出された前記少なくとも1つのセグメントをオブジェクトベースのXML表現に変換すること、
前記オブジェクトベースのXML表現を少なくとも1つのアプリケーション・データ・オブジェクトに変換すること、
プロセッサにおいて、前記少なくとも1つのアプリケーション・データ・オブジェクトを前記アプリケーションに伝送すること、
を含む方法。 - 前記オブジェクトベースのXML表現を少なくとも1つのアプリケーション・データ・オブジェクトに変換することが、少なくとも1つのXMLデータ・オブジェクトを少なくとも1つのアプリケーション−ドメイン・オブジェクトにトランスレートすることを含み、
抽出された前記少なくとも1つのアプリケーション・データ・オブジェクトを前記アプリケーションに伝送することが、トランスレートされた前記アプリケーション−ドメイン・オブジェクトを前記アプリケーションに伝送することを含む、
請求項1に記載の方法。 - 前記オブジェクトベースの表現が、XML−バインディング・フレームワークにおけるオブジェクトを含む、請求項1に記載の方法。
- 前記オブジェクトベースの表現が、XMLBeansオブジェクトを含む、請求項1に記載の方法。
- 要求された前記データを表わす少なくとも1つのセグメントを取り出すことが、
前記少なくとも1つのセグメントを取り出すためにパーサに要求を送信すること、及び、
前記パーサから前記セグメントを受信すること、
を含む、請求項1に記載の方法。 - 前記パーサがStAXパーサを含む、請求項5に記載の方法。
- プロセッサにおいて、前記オブジェクトベースの表現を確認することをさらに含む、請求項1に記載の方法。
- 前記オブジェクトベースの表現を確認することが、
プロセッサにおいて、前記オブジェクトベースの表現の、XMLスキーマ定義に対する確認を行うことを含む、請求項7に記載の方法。 - 前記XMLドキュメントから、要求された前記データを表わす少なくとも1つのセグメントを取り出すことが、
プロセッサにおいて、少なくとも1つのセグメントを取り出すこと、及び、
プロセッサにおいて、取り出された前記セグメントの少なくとも1つのサブセグメントを再帰的に取り出すこと、
を含む、請求項1に記載の方法。 - 前記XMLドキュメントから、要求された前記データを表わす少なくとも1つのセグメントを取り出すことが、
プロセッサにおいて、構成から前記XMLドキュメントの前記少なくとも1つのセグメントのロケーションを要求すること、
プロセッサにおいて、要求された前記ロケーションを受信すること、及び、
プロセッサにおいて、要求された前記ロケーションからデータを取り出すこと、
を含む、請求項1に記載の方法。 - 要求された前記ロケーションからデータを取り出すことが、
プロセッサにおいて、前記データを取り出すためにパーサに前記XMLドキュメントをパースするようにコールすることを含む、請求項10に記載の方法。 - 前記XMLドキュメントから、要求された前記データを表わす少なくとも1つのセグメントを取り出すことが、
プロセッサにおいて、前記XMLドキュメント内のロケーションのトラックを保つためにセグメント・カーソルをインスタンス化すること、
プロセッサにおいて、前記セグメント・カーソルに対応しているロケーションでデータを取り出すこと、
を含む、請求項1に記載の方法。 - XMLドキュメントを生成するためのコンピュータで実行される方法であって、
プロセッサにおいて、アプリケーションからデータ・オブジェクトを受信すること、
プロセッサにおいて、前記データ・オブジェクトをXML−バインディング・フレームワークにおけるオブジェクトにトランスレートすること、
プロセッサにおいて、前記XML−バインディング・フレームワークにおける前記オブジェクトをXMLセグメントに変換すること、及び、
前記XMLセグメントをデータストアに書き込むこと、
を含む、方法。 - 前記XML−バインディング・フレームワークにおける前記オブジェクトが、XMLBeansオブジェクトを含む、請求項13に記載の方法。
- 前記XMLセグメントをデータストアに書き込むことが、新しいXMLドキュメントを作成することを含む、請求項13に記載の方法。
- 前記XMLセグメントをデータストアに書き込むことが、前記XMLセグメントを既存のXMLドキュメントに追記することを含む、請求項13に記載の方法。
- 前記XMLセグメントが複数のデータ要素を含み、前記XMLセグメントをデータストアに書き込むことが、
プロセッサにおいて、前記データ要素を増加的に書き込むことを含む、請求項13に記載の方法。 - 前記XMLセグメントの少なくとも1つのデータ要素がエンドタグを含み、前記データ要素を増加的に書き込むことが、
プロセッサにおいて、前記XMLセグメントの要素に対する少なくとも1つのエンドタグを除去すること、
プロセッサにおいて、除去された前記エンドタグをスタック上にプッシュすること、
プロセッサにおいて、子データ要素を増加的に前記データストアに書き込むこと
プロセッサにおいて、前記スタックから前記XMLセグメントに対する前記少なくとも1つのエンドタグをポップすること、
プロセッサにおいて、ポップされた前記エンドタグを前記データストアに書き込むこと、
を含む、請求項13に記載の方法。 - XMLドキュメントをフラットファイルに変換するためのコンピュータで実行される方法であって、少なくとも1つのプロセッサを含むコンピューティング・システムにおいて、
プロセッサにおいて、XMLドキュメントをフラットファイルに変換するために要求を受信すること、
プロセッサにおいて、前記フラットファイルに対する構成を得ること、
プロセッサにおいて、前記XMLドキュメントの少なくとも1つのセグメントを取り出すこと、
プロセッサにおいて、取り出された前記少なくとも1つのセグメントをオブジェクトベースの表現に変換すること、
プロセッサにおいて、前記オブジェクトベースの表現から少なくとも1つのオブジェクトを抽出すること、
プロセッサにおいて、抽出された前記少なくとも1つのオブジェクトを表わすデータを、前記得られた構成によって指定されるフォーマットで、前記フラットファイルに書き込むこと、
を含む、方法。 - プロセッサにおいて、得られた前記構成によって指定される前記フォーマットに応答して、前記XMLドキュメントの少なくとも1つのセグメントから少なくとも1つのデータ項目を導出すること、
プロセッサにおいて、導出された前記データを前記フラットファイルに書き込むこと、
をさらに含む、請求項19に記載の方法。 - XMLドキュメントをフラットファイルに変換するためのコンピュータで実行される方法であって、少なくとも1つのプロセッサを含むコンピューティング・システムにおいて、
プロセッサにおいて、XMLドキュメントをフラットファイルに変換するために要求を受信すること、
プロセッサにおいて、前記フラットファイルに対する構成を得ること、
プロセッサにおいて、前記XMLドキュメントの第1のセグメントを取り出すこと、
プロセッサにおいて、前記第1のセグメントをオブジェクトベースの表現に変換すること、
プロセッサにおいて、前記XMLドキュメントの第1のセグメントと前記XMLドキュメントの第2のセグメントとの間の少なくとも1つのクロスリファレンスの指示を受信すること、
プロセッサにおいて、少なくとも1つのクロスリファレンスの前記指示に基づいて、前記XMLドキュメントの前記第1の部分のオブジェクトベースの表現から抽出される少なくとも1つのクロスリファレンスされる値をメモリ内に維持すること、
プロセッサにおいて、前記XMLドキュメントの前記第2のセグメントを取り出すこと、
プロセッサにおいて、前記第2のセグメントをオブジェクトベースの表現に変換すること、
プロセッサにおいて、前記XMLドキュメントの前記第1の部分の前記オブジェクトベースの表現から少なくとも1つのオブジェクトを抽出すること、
プロセッサにおいて、前記XMLドキュメントの前記第2の部分の前記オブジェクトベースの表現から少なくとも1つのオブジェクトを抽出すること、
プロセッサにおいて、前記XMLドキュメントの前記第1の部分及び前記第2の部分の前記オブジェクトベースの表現から抽出されるオブジェクトを表わすデータを、得られた前記構成によって指定されるフラットファイル・フォーマットで書き込むこと、
を含む、方法。 - 前記XMLドキュメントの前記第1の部分及び前記第2の部分の前記オブジェクトベースの表現から抽出されるオブジェクトを表わすデータを書き込むことが、
前記フラットファイルに対する前記構成によって指定される様式で前記XMLドキュメントの前記第1の部分及び前記第2の部分からのデータを組み合わせること、
を含む、請求項21に記載の方法。 - 前記XMLドキュメントの前記第1の部分の前記オブジェクトベースの表現から抽出される前記少なくとも1つのクロスリファレンスされる値をメモリ内に維持することが、
前記XMLドキュメントの前記第1の部分の前記オブジェクトベースの表現から抽出される各クロスリファレンスされる値をメモリ・ロケーション内に格納し、且つ前記値をエイリアスによって識別すること、
を含む、請求項21に記載の方法。 - 前記少なくとも1つのクロスリファレンスされる値を格納した後で、メモリから前記第1の部分の前記オブジェクトベースの表現を廃棄すること、
をさらに含む、請求項21に記載の方法。 - プロセッサにおいて、得られた前記構成によって指定される前記フォーマットに応答して、前記XMLドキュメントの前記第1の部分及び前記第2の部分のうちの少なくとも1つから少なくとも1つのデータ項目を導出すること、
プロセッサにおいて、前記導出されたデータを前記フラットファイルに書き込むこと、をさらに含む、請求項21に記載の方法。 - XMLドキュメントを処理するためのコンピュータ・プログラム製品であって、
一時的なものでないコンピュータ可読記憶媒体と、
コンピュータ・プログラム・コードであって、少なくとも1つのプロセッサに、
XMLドキュメントからのデータを要求するメッセージをアプリケーションから受信するステップと、
前記メッセージを受信するステップに応答して、
前記XMLドキュメントから、要求された前記データを表わす少なくとも1つのセグメントを取り出し、
取り出された前記少なくとも1つのセグメントをオブジェクトベースのXML表現に変換し、及び、
前記オブジェクトベースのXML表現を少なくとも1つのアプリケーション・データ・オブジェクトに変換し、
前記少なくとも1つのアプリケーション・データ・オブジェクトを前記アプリケーションに伝送するステップと、
を行わせるための、媒体上でエンコードされるコンピュータ・プログラム・コードと、
を備えるコンピュータ・プログラム製品。 - XMLドキュメントを生成するためのコンピュータ・プログラム製品であって、
一時的なものでないコンピュータ可読記憶媒体と、
コンピュータ・プログラム・コードであって、少なくとも1つのプロセッサに、
アプリケーションからデータ・オブジェクトを受信するステップと、
前記データ・オブジェクトをXML−バインディング・フレームワークにおけるオブジェクトにトランスレートするステップと、
前記XML−バインディング・フレームワークにおける前記オブジェクトをXMLセグメントに変換するステップと、
前記XMLセグメントをデータストアに書き込むステップと、
を行わせるための、媒体上でエンコードされるコンピュータ・プログラム・コードと、
を備えるコンピュータ・プログラム製品。 - XMLドキュメントをフラットファイルに変換するためのコンピュータ・プログラム製品であって、
一時的なものでないコンピュータ可読記憶媒体と、
コンピュータ・プログラム・コードであって、少なくとも1つのプロセッサに、
XMLドキュメントをフラットファイルに変換する要求を受信するステップと、
前記フラットファイルに対する構成を得るステップと、
前記XMLドキュメントの少なくとも1つのセグメントを取り出すステップと、
取り出された前記少なくとも1つのセグメントをオブジェクトベースの表現に変換するステップと、
前記オブジェクトベースの表現から少なくとも1つのオブジェクトを抽出するステップと、
抽出された前記少なくとも1つのオブジェクトを表わすデータを、得られた前記構成によって指定されるフォーマットで前記フラットファイルに書き込むステップと、
を行わせるための、媒体上でエンコードされるコンピュータ・プログラム・コードと、
を備えるコンピュータ・プログラム製品。 - XMLドキュメントをフラットファイルに変換するためのコンピュータ・プログラム製品であって、
一時的なものでないコンピュータ可読記憶媒体と、
コンピュータ・プログラム・コードであって、少なくとも1つのプロセッサに、
XMLドキュメントをフラットファイルに変換する要求を受信するステップと、
前記フラットファイルに対する構成を得るステップと、
前記XMLドキュメントの第1のセグメントを取り出すステップと、
前記第1のセグメントをオブジェクトベースの表現に変換するステップと、
前記XMLドキュメントの第1のセグメントと前記XMLドキュメントの第2のセグメントとの間の少なくとも1つのクロスリファレンスの指示を受信するステップと、
少なくとも1つのクロスリファレンスの前記指示に基づいて、前記XMLドキュメントの前記第1の部分の前記オブジェクトベースの表現から抽出される少なくとも1つのクロスリファレンスされる値をメモリ内に維持するステップと、
前記XMLドキュメントの前記第2のセグメントを取り出すステップと、
前記第2のセグメントをオブジェクトベースの表現に変換するステップと、
前記XMLドキュメントの前記第1の部分の前記オブジェクトベースの表現から少なくとも1つの値を抽出するステップと、
前記XMLドキュメントの前記第2の部分の前記オブジェクトベースの表現から少なくとも1つのオブジェクトを抽出するステップと、
前記XMLドキュメントの前記第1の部分及び前記第2の部分の前記オブジェクトベースの表現から抽出されるオブジェクトを表わすデータを、得られた前記構成によって指定されるフラットファイル・フォーマットで書き込むステップと、
を行わせるための、媒体上でエンコードされるコンピュータ・プログラム・コードと、
を備えるコンピュータ・プログラム製品。 - XMLドキュメントを処理するためのシステムであって、
プロセッサを有するコンピューティング・システムにおいて、XMLドキュメントからのデータを要求するメッセージをアプリケーションから受信し、且つXMLセグメントの抽出を要求するためのフレームワークと、
要求された前記データを表わす少なくとも1つのセグメントを前記フレームワークに提供するための、前記フレームワークに通信可能に結合される、パーサと、
前記取り出された少なくとも1つのセグメントをオブジェクトベースのXML表現に変換し、且つ前記オブジェクトベースのXML表現を少なくとも1つのアプリケーション・データ・オブジェクトに変換するための、前記フレームワークに通信可能に結合される、トランスレーション層と、
を備え、前記フレームワークが、前記少なくとも1つのアプリケーション・データ・オブジェクトを前記アプリケーションに伝送する、システム。 - XMLドキュメントを生成するためのシステムであって、
プロセッサを有するコンピューティング・システムにおいて、アプリケーションからデータ・オブジェクトを受信するためのフレームワークと、
前記データ・オブジェクトをXML−バインディング・フレームワークにおけるオブジェクトにトランスレートし、且つ前記XML−バインディング・フレームワークにおける前記オブジェクトをXMLセグメントに変換するための、前記フレームワークに通信可能に結合される、トランスレーション層と、
前記XMLセグメントを格納するための、前記フレームワークに通信可能に結合される、データストアと、
を備えるシステム。 - XMLドキュメントをフラットファイルに変換するためのシステムであって、
プロセッサを有するコンピューティング・システムにおいて、XMLドキュメントをフラットファイルに変換する要求を受信するためのフレームワークと、
前記フラットファイルに対する構成を前記フレームワークに伝送するための、前記フレームワークに通信可能に結合される、コンフィギュレータと、
前記構成に基づいて、前記XMLドキュメントの少なくとも1つのセグメントを取り出すための、前記フレームワークに通信可能に結合される、パーサと、
取り出された前記少なくとも1つのセグメントをオブジェクトベースの表現に変換するための、前記フレームワークに通信可能に結合される、トランスレーション層と、
前記フレームワークは、前記オブジェクトベースの表現から少なくとも1つのオブジェクトを抽出し、
抽出された前記少なくとも1つのオブジェクトを、得られた前記構成によって指定されるフォーマットでフラットファイルに格納するための、前記フレームワークに通信可能に結合される、データストアと、
を備えるシステム。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/969573 | 2010-12-15 | ||
US12/969,573 US20120159306A1 (en) | 2010-12-15 | 2010-12-15 | System And Method For Processing XML Documents |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2012128853A true JP2012128853A (ja) | 2012-07-05 |
Family
ID=46232330
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2011267706A Pending JP2012128853A (ja) | 2010-12-15 | 2011-12-07 | Xmlドキュメントを処理するためのシステム及び方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20120159306A1 (ja) |
JP (1) | JP2012128853A (ja) |
BR (1) | BRPI1105718A2 (ja) |
CA (1) | CA2759618A1 (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2015521809A (ja) * | 2012-06-11 | 2015-07-30 | クゥアルコム・インコーポレイテッドQualcomm Incorporated | 利用可能なデバイスリソースに基づいてデバイスタスクを適応させるための技法 |
WO2022092332A1 (ko) * | 2020-10-26 | 2022-05-05 | 주식회사 유니크유엑스 | 시간 속성 마크업 언어를 이용한 마이크로 러닝 시스템 및 이를 이용한 학습 컨텐츠 관리 방법 |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9043447B2 (en) * | 2011-05-31 | 2015-05-26 | Oracle International Corporation | Simplifying setup of management servers controlling access to voluminous configuration data required for applications |
US8739026B2 (en) * | 2011-09-06 | 2014-05-27 | Hewlett-Packard Development Company, L.P. | Markup language schema error correction |
US9009472B2 (en) * | 2011-10-13 | 2015-04-14 | International Business Machines Corporation | Providing consistent cryptographic operations |
US9128912B2 (en) * | 2012-07-20 | 2015-09-08 | Fujitsu Limited | Efficient XML interchange schema document encoding |
US9053085B2 (en) * | 2012-12-10 | 2015-06-09 | International Business Machines Corporation | Electronic document source ingestion for natural language processing systems |
US20150261739A1 (en) * | 2014-03-13 | 2015-09-17 | Microsoft Corporation | Multi-Function Parser |
US20160299928A1 (en) * | 2015-04-10 | 2016-10-13 | Infotrax Systems | Variable record size within a hierarchically organized data structure |
US11003835B2 (en) * | 2018-10-16 | 2021-05-11 | Atos Syntel, Inc. | System and method to convert a webpage built on a legacy framework to a webpage compatible with a target framework |
CN111176640B (zh) * | 2018-11-13 | 2022-05-13 | 武汉斗鱼网络科技有限公司 | Android工程中布局层级展现方法、存储介质、设备及系统 |
US11909707B2 (en) * | 2022-04-15 | 2024-02-20 | Red Hat, Inc. | Message schema migration in messaging systems |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040015840A1 (en) * | 2001-04-19 | 2004-01-22 | Avaya, Inc. | Mechanism for converting between JAVA classes and XML |
US7065561B2 (en) * | 2002-03-08 | 2006-06-20 | Bea Systems, Inc. | Selective parsing of an XML document |
US7650591B2 (en) * | 2003-01-24 | 2010-01-19 | Bea Systems, Inc. | Marshaling and un-marshaling data types in XML and Java |
CA2419311A1 (en) * | 2003-02-20 | 2004-08-20 | Ibm Canada Limited - Ibm Canada Limitee | Mapping between native data type instances |
US8145608B2 (en) * | 2008-04-28 | 2012-03-27 | Infosys Technologies Limited | Method and system for rapidly processing and transporting large XML files |
US20110314043A1 (en) * | 2010-06-17 | 2011-12-22 | Microsoft Corporation | Full-fidelity representation of xml-represented objects |
-
2010
- 2010-12-15 US US12/969,573 patent/US20120159306A1/en not_active Abandoned
-
2011
- 2011-11-23 CA CA2759618A patent/CA2759618A1/en not_active Abandoned
- 2011-12-07 JP JP2011267706A patent/JP2012128853A/ja active Pending
- 2011-12-09 BR BRPI1105718A patent/BRPI1105718A2/pt not_active IP Right Cessation
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2015521809A (ja) * | 2012-06-11 | 2015-07-30 | クゥアルコム・インコーポレイテッドQualcomm Incorporated | 利用可能なデバイスリソースに基づいてデバイスタスクを適応させるための技法 |
WO2022092332A1 (ko) * | 2020-10-26 | 2022-05-05 | 주식회사 유니크유엑스 | 시간 속성 마크업 언어를 이용한 마이크로 러닝 시스템 및 이를 이용한 학습 컨텐츠 관리 방법 |
Also Published As
Publication number | Publication date |
---|---|
CA2759618A1 (en) | 2012-06-15 |
BRPI1105718A2 (pt) | 2016-05-24 |
US20120159306A1 (en) | 2012-06-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2012128853A (ja) | Xmlドキュメントを処理するためのシステム及び方法 | |
US11556697B2 (en) | Intelligent text annotation | |
US7210097B1 (en) | Method for loading large XML documents on demand | |
US20030018661A1 (en) | XML smart mapping system and method | |
US7877366B2 (en) | Streaming XML data retrieval using XPath | |
US9032002B2 (en) | Single file serialization for physical and logical meta-model information | |
KR100974146B1 (ko) | Html 도큐먼트에 액세스 가능한 역할 및 상태 정보를 포함시키는 방법, 시스템 및 컴퓨터 판독가능 저장 매체 | |
US20080208830A1 (en) | Automated transformation of structured and unstructured content | |
US9424003B1 (en) | Schema-less system output object parser and code generator | |
CN107391153B (zh) | 一种基于Spring与MyBatis框架整合的代码生成方法及装置 | |
US20070083538A1 (en) | Generating XML instances from flat files | |
US20040015889A1 (en) | Translator-compiler for converting legacy management software | |
JP2007519078A (ja) | オブジェクトとしてカプセル化されたxmlデータをデータベースストアに格納し検索するシステムおよび方法 | |
US20120310868A1 (en) | Method and system for extracting and managing information contained in electronic documents | |
CA2438176A1 (en) | Xml-based multi-format business services design pattern | |
US8930888B2 (en) | Modelling serialized object streams | |
US20080184103A1 (en) | Generation of Application Specific XML Parsers Using Jar Files with Package Paths that Match the SML XPaths | |
US8914482B2 (en) | Translation of technology-agnostic management commands into multiple management protocols | |
US11138206B2 (en) | Unified metadata model translation framework | |
US8397158B1 (en) | System and method for partial parsing of XML documents and modification thereof | |
US20110314043A1 (en) | Full-fidelity representation of xml-represented objects | |
US9129035B2 (en) | Systems, methods, and apparatus for accessing object representations of data sets | |
US20070050705A1 (en) | Method of xml element level comparison and assertion utilizing an application-specific parser | |
US20090199089A1 (en) | Converting a Heterogeneous Document | |
Talbott et al. | Mapping physical formats to logical models to extract data and metadata: The defuddle parsing engine |