(57)【要約】【課題】  キャッシュ対象が変更された場合でもユーザプログラムを再コンパイルすること無しにスキーマ文書のキャッシュを生成することが可能な技術を提供する。【解決手段】  所定の記述言語で記載された文書を検証する為のスキーマ文書のキャッシュを生成するキャッシュ生成方法において、キャッシュの対象となるスキーマ文書を定義した定義ファイルを記憶装置により読み込むステップと、その読み込んだ定義ファイルに定義されているスキーマ文書のキャッシュを記憶装置に格納するステップと、所定の記述言語で記載された文書を検証する際に用いられる検証用のスキーマ文書のキャッシュを記憶装置から取得するステップと、その取得したスキーマ文書のキャッシュを用いて文書の検証を行うステップとを有するものである。【選択図】図１
2006313444.tif 000002
【特許請求の範囲】
【請求項１】
所定の記述言語で記載された文書を検証する為のスキーマ文書のキャッシュを生成するキャッシュ生成方法において、
キャッシュの対象となるスキーマ文書を定義した定義ファイルを記憶装置により読み込むステップと、その読み込んだ定義ファイルに定義されているスキーマ文書のキャッシュを記憶装置に格納するステップと、
所定の記述言語で記載された文書を検証する際に用いられる検証用のスキーマ文書のキャッシュを記憶装置から取得するステップと、その取得したスキーマ文書のキャッシュを用いて文書の検証を行うステップとを有することを特徴とするキャッシュ生成方法。
【請求項２】
キャッシュの対象となるスキーマ文書及びそのキャッシュの格納先を定義した前記定義ファイルを生成して記憶装置に格納することを特徴とする請求項１に記載されたキャッシュ生成方法。
【請求項３】
キャッシュの対象となるスキーマ文書の格納位置の基準となる基底パスから前記定義ファイルを生成して記憶装置に格納することを特徴とする請求項１または請求項２のいずれかに記載されたキャッシュ生成方法。
【請求項４】
キャッシュの対象となるスキーマ文書の格納位置を示す絶対パスから前記定義ファイルを生成して記憶装置に格納することを特徴とする請求項１または請求項２のいずれかに記載されたキャッシュ生成方法。
【請求項５】
キャッシュの対象となるスキーマ文書の格納位置を示すパス情報を既存のユーザプログラムから取得し、前記定義ファイルを生成して記憶装置に格納することを特徴とする請求項１または請求項２のいずれかに記載されたキャッシュ生成方法。
【請求項６】
キャッシュの対象となるスキーマ文書のサイズによりそのキャッシュの格納先を決定し、その決定した格納先を含む定義ファイルを生成して記憶装置に格納することを特徴とする請求項１乃至請求項５のいずれか１項に記載されたキャッシュ生成方法。
【請求項７】
前記定義ファイルに定義されているスキーマ文書のキャッシュをその格納先の情報に従ってメモリまたは磁気ディスク装置のいずれかの記憶装置に格納することを特徴とする請求項１乃至請求項６のいずれか１項に記載されたキャッシュ生成方法。
【請求項８】
所定の記述言語で記載された文書の構造を検証する為のスキーマ文書のキャッシュを生成するキャッシュ生成装置において、
キャッシュの対象となるスキーマ文書を定義した定義ファイルを記憶装置により読み込んで、その読み込んだ定義ファイルに定義されているスキーマ文書のキャッシュを記憶装置に格納するキャッシュ生成部と、
所定の記述言語で記載された文書を検証する際に用いられる検証用のスキーマ文書のキャッシュを記憶装置から取得し、その取得したスキーマ文書のキャッシュを用いて文書の検証を行う検証処理部とを備えることを特徴とするキャッシュ生成装置。
【請求項９】
キャッシュの対象となるスキーマ文書及びそのキャッシュの格納先を定義した前記定義ファイルを生成して記憶装置に格納することを特徴とする請求項８に記載されたキャッシュ生成装置。
【請求項１０】
キャッシュの対象となるスキーマ文書の格納位置の基準となる基底パスから前記定義ファイルを生成して記憶装置に格納することを特徴とする請求項８または請求項９のいずれかに記載されたキャッシュ生成装置。
【請求項１１】
キャッシュの対象となるスキーマ文書の格納位置を示す絶対パスから前記定義ファイルを生成して記憶装置に格納することを特徴とする請求項８または請求項９のいずれかに記載されたキャッシュ生成装置。
【請求項１２】
キャッシュの対象となるスキーマ文書の格納位置を示すパス情報を既存のユーザプログラムから取得し、前記定義ファイルを生成して記憶装置に格納することを特徴とする請求項８または請求項９のいずれかに記載されたキャッシュ生成装置。
【請求項１３】
キャッシュの対象となるスキーマ文書のサイズによりそのキャッシュの格納先を決定し、その決定した格納先を含む定義ファイルを生成して記憶装置に格納することを特徴とする請求項８乃至請求項１２のいずれか１項に記載されたキャッシュ生成装置。
【請求項１４】
前記定義ファイルに定義されているスキーマ文書のキャッシュをその格納先の情報に従ってメモリまたは磁気ディスク装置のいずれかの記憶装置に格納することを特徴とする請求項８乃至請求項１３のいずれか１項に記載されたキャッシュ生成装置。
【請求項１５】
所定の記述言語で記載された文書を検証する為のスキーマ文書のキャッシュを生成するキャッシュ生成方法をコンピュータに実行させる為のプログラムにおいて、
キャッシュの対象となるスキーマ文書を定義した定義ファイルを記憶装置により読み込むステップと、その読み込んだ定義ファイルに定義されているスキーマ文書のキャッシュを記憶装置に格納するステップと、
所定の記述言語で記載された文書を検証する際に用いられる検証用のスキーマ文書のキャッシュを記憶装置から取得するステップと、その取得したスキーマ文書のキャッシュを用いて文書の検証を行うステップとをコンピュータに実行させることを特徴とするプログラム。
【請求項１６】
所定の記述言語で記載された文書を検証する為のスキーマ文書のキャッシュを生成するキャッシュ生成方法をコンピュータに実行させる為のプログラムを記録したコンピュータ読み取り可能な記録媒体において、
キャッシュの対象となるスキーマ文書を定義した定義ファイルを記憶装置により読み込むステップと、その読み込んだ定義ファイルに定義されているスキーマ文書のキャッシュを記憶装置に格納するステップと、
所定の記述言語で記載された文書を検証する際に用いられる検証用のスキーマ文書のキャッシュを記憶装置から取得するステップと、その取得したスキーマ文書のキャッシュを用いて文書の検証を行うステップとをコンピュータに実行させる為のプログラムを記録したことを特徴とするコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は文書の構造を規定したスキーマ文書のキャッシュを生成するキャッシュ生成技術に関し、特にXML文書の構造を規定したスキーマ文書のキャッシュを生成するキャッシュ生成技術に適用して有効な技術に関するものである。
【背景技術】
【０００２】
XML(extensible markup language)パーサとは、ユーザプログラムから呼び出され、XML文書を読み込み、XML文書中の要素の内容を取り出したり、書き換えたりする等の機能を提供するライブラリである。またXMLパーサは、XML文書が特定の構造（スキーマ）に従っているか否かを検証（スキーマ検証）する機能を持つ。この構造は、XML形式のスキーマ文書により規定する。XML文書のスキーマ検証時においては、XMLパーサはスキーマ文書の解析処理を行い、解析済みのスキーマ文書を使ってスキーマ検証を行う。
【０００３】
同一のスキーマ文書を用い、XML文書のスキーマ検証を行う場合には、解析済みのスキーマ文書を再利用すると、スキーマ文書の解析処理を繰り返し行うことが不要となって検証処理性能が向上するという利点がある。そこで、XMLパーサは、解析済みのスキーマ文書をキャッシュ化し、スキーマ文書の解析処理をスキップすることで検証処理を高速にする機能を備えている（例えば非特許文献１参照）。
【０００４】
【非特許文献１】“The Apache XML Project、Caching & Preparsing Grammars”、［online］、The Apache Software Foundation、［平成１７年１月２４日検索］、インターネット＜URL: http://xml.apache.org/xerces2-j/faq-grammars.html＞
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上記従来技術では、キャッシュ対象のスキーマ文書の名称をユーザプログラム中に直接指定する。この為、キャッシュ対象のスキーマ文書を別のスキーマ文書に変更する場合には、キャッシュ対象のスキーマ文書を示すユーザプログラム中の指定を変更した後、そのユーザプログラムを再コンパイルしなければならないという問題があった。また、上記従来技術ではキャッシュはメモリに格納することだけしか考慮されておらず、使用可能メモリ領域が少ないシステムでは、メモリ領域を圧迫させてしまう問題があった。
【０００６】
本発明の目的は上記問題を解決し、キャッシュ対象が変更された場合でもユーザプログラムを再コンパイルすること無しにスキーマ文書のキャッシュを生成することが可能な技術を提供することにある。本発明の他の目的は使用可能なメモリ領域が少ない場合でもメモリ領域を圧迫することなくスキーマ文書のキャッシュを生成してそのキャッシュを用いた文書の検証処理を運用することが可能な技術を提供することにある。
【課題を解決するための手段】
【０００７】
本発明は、所定の記述言語で記載された文書を検証する為のスキーマ文書のキャッシュを生成するキャッシュ生成装置において、キャッシュの対象となるスキーマ文書を定義した定義ファイルによりスキーマ文書のキャッシュを生成して文書の検証を行うものである。
【０００８】
本発明では、XML等の所定の記述言語で記載された文書の検証を行う前に、その検証処理で用いられるスキーマ文書の内でキャッシュの対象となるスキーマ文書を定義した定義ファイルを、キャッシュの対象となるスキーマ文書の基底パスや絶対パスまたは既存のユーザプログラムから生成して、ユーザプログラムとは異なる外部ファイルとして記憶装置に格納しておく。
【０００９】
文書の検証を開始する際には、前記格納しておいた定義ファイルを記憶装置により読み込み、その読み込んだ定義ファイルに定義されているスキーマ文書のキャッシュを生成してメモリや磁気ディスク装置等の記憶装置に格納する。そして、文書の検証を開始した後、その検証で用いられる検証用のスキーマ文書のキャッシュをメモリや磁気ディスク装置等の記憶装置から取得し、その取得したスキーマ文書のキャッシュを用いて文書の検証を行う。
【００１０】
従来の技術では、キャッシュ対象のスキーマ文書名をユーザプログラム内部に記述していた為、キャッシュ対象を変更し、以前とは別のスキーマ文書をキャッシュすることとした場合には、ユーザプログラムのキャッシュ対象のスキーマ文書名もそれに合わせて変更した後、再コンパイルする必要があったが、本発明では、キャッシュの対象となるスキーマ文書の一覧を記載した外部ファイルである定義ファイルを生成し、それによりユーザプログラムとキャッシュ対象のスキーマ文書の指定とを独立させるので、キャッシュの対象を変更し、別のスキーマ文書をキャッシュの対象とした場合でも、ユーザプログラムを再コンパイルすること無しにキャッシュを生成することができる。
【発明の効果】
【００１１】
本発明によれば、キャッシュ対象が変更された場合でもユーザプログラムを再コンパイルすること無しにスキーマ文書のキャッシュを生成することが可能である。
【発明を実施するための最良の形態】
【００１２】
以下にXMLで記載されたXML文書の構造を検証する為のスキーマ文書のキャッシュを生成する一実施形態のキャッシュ生成装置について説明する。
【００１３】
図１は本実施形態のキャッシュ生成装置のシステム構成を示す図である。１００は、XMLパーサである。１０２は、XMLパーサ１００の持つ機能を利用し、XML文書１２０を検証する為のユーザプログラムである。ユーザプログラム１０２は、キャッシュの生成１０３、パーサオブジェクトの生成１０４、XML文書の検証１０５、XML文書の操作１０６等の複数の指示命令から構成される。１０３の、キャッシュの生成の指示については、本発明で新たに追加する指示である。この指示により、XMLパーサ１００は、スキーマ文書１１７からキャッシュを生成し、メモリ或いは磁気ディスク装置に格納する。
【００１４】
XMLパーサ１００は、定義ファイル１１６を生成する定義ファイル生成部１０７、ユーザプログラム１０２のキャッシュの生成１０３から呼び出されるキャッシュ生成部１０８、ユーザプログラム１０２のパーサオブジェクトの生成１０４から呼び出されるパーサオブジェクト生成部１０９、生成されたパーサオブジェクトに対し初期設定値を設定するパーサオブジェクト初期設定部１１０、ユーザプログラム１０２のXML文書の検証１０５から呼び出されるXML文書読み込み部１１１、XML文書１２０を内部形式に変換する為の内部形式変換部１１２、XML文書１２０のスキーマ検証を行う検証処理部１１３、XML文書１２０の操作時に呼び出されるXML文書操作用API(Application Program Interface)群１１４からなる。
【００１５】
定義ファイル生成部１０７は、ユーザプログラムの起動１０１時に呼び出され、そのときの起動オプションの値を入力とし定義ファイル１１６を生成する。起動オプションの値に対しては、定義ファイル１１６を作成する為の一つの方法としての、既存のユーザプログラム１１５を与えることもできる。
【００１６】
キャッシュ生成部１０８は、定義ファイル１１６、スキーマ文書１１７を読み込み、キャッシュを生成し、メモリ或いは磁気ディスク装置にキャッシュを格納する。１１８は、メモリに格納されたキャッシュであり、１１９は磁気ディスク装置に格納されたキャッシュである。また、キャッシュ生成部１０８は、定義ファイル１１６に記載したスキーマ文書１１７が定義された通りにキャッシュされた否か、その情報をトラブルシュート時等に参照できる様にする為、キャッシュされたスキーマ文書１１７の絶対パスをログファイル１２１に書き込む。
【００１７】
XML文書読み込み部１１１は、XML文書１２０を読み込む。検証処理部１１３は、内部形式変換部１１２により変換されたXML文書に対し、スキーマ文書１１７のメモリ内のキャッシュ１１８或いはディスク内のキャッシュ１１９を使いスキーマ検証を行う。しかしこの時、メモリ或いは磁気ディスク装置共に該当するキャッシュが見つからなければ、キャッシュは使えないので検証用のスキーマ文書１１７を読み込み、そしてそのスキーマ文書１１７を解析してスキーマ検証を行う。検証処理部１１３は、定義ファイル１１６で定義された通りにキャッシュが利用され、検証が行われているか否かを、性能評価時等に参照できる様にする為、検証したXML文書１２０の絶対パス、及び検証用のスキーマ文書１１７の絶対パスをログファイル１２１に書き込む。また、検証処理部１１３は、定義ファイル１１６におけるキャッシュ対象のスキーマ文書一覧の不足分を知る為に、キャッシュ生成部１０８ではなく、検証処理部１１３にてスキーマ文書１１７のキャッシュを生成及び格納した場合には、ログファイル１２１にそれらのスキーマ文書１１７の絶対パスを書き込む。
【００１８】
XML文書操作用API群１１４は、DOM（Document Object Model）と呼ばれ、内部形式変換部１１２により変換されたXML文書１２０の内部形式（DOMツリーと呼ばれる）にアクセスし、タグの内容を取り出したりする等のインタフェースを提供する。ユーザプログラム１０２は、このXML文書操作用APIを呼び出し、XML文書１２０に対する操作を行う。
【００１９】
図１３は本実施形態のキャッシュ生成装置の概略構成を示す図である。図１３に示す様に本実施形態のキャッシュ生成装置を前記の定義ファイル生成部１０７、キャッシュ生成部１０８や検証処理部１１３等の処理部として機能させる為のプログラムは、ＣＤ−ＲＯＭ等の記録媒体に記録され磁気ディスク等に格納された後、メモリにロードされて実行されるものとする。なお前記プログラムを記録する記録媒体はＣＤ−ＲＯＭ以外の他の記録媒体でも良い。また前記プログラムを当該記録媒体から情報処理装置にインストールして使用しても良いし、ネットワークを通じて当該記録媒体にアクセスして前記プログラムを使用するものとしても良い。
【００２０】
本実施形態において、定義ファイル１１６を生成する方法に関して、キャッシュ対象のスキーマ文書１１７の与え方に応じ３種類の方法がある。この３種類の方法を図２、図３、そして図４に示す。また、定義ファイル１１６は、テキスト形式のXML文書であるので、定義ファイル１１６の形式に従えば、テキストエディタ等で生成、或いは編集が可能である。
【００２１】
図２は本実施形態のスキーマ文書１１７の格納基底パスから定義ファイル１１６を生成する処理の概要を示す図である。本実施形態において、格納基底パスとは、スキーマ文書１１７を示す際の基準となるパスの名称であり、キャッシュの対象とする全てのスキーマ文書１１７に対して上位の階層に位置するディレクトリの内で、最も下位の階層にあるディレクトリを示すパス名称のことである。
【００２２】
図２に示す様にこの処理では、ユーザプログラムの起動時に、起動オプションに指定されたスキーマ文書の格納基底パス２００の値から定義ファイル１１６を生成する。XMLパーサ１００の定義ファイル生成部１０７は、起動オプションに指定されたスキーマ文書の格納基底パス２００を読み取り、その場所を起点にそれ以下にあるファイルの情報を磁気ディスク装置から読み出してスキーマ文書１１７の一覧を取得し、定義ファイル１１６を生成する。なお、定義ファイル１１６の生成時には、その他の起動オプションの値も使用する。
【００２３】
図３は本実施形態のスキーマ文書１１７の絶対パスから定義ファイル１１６を生成する処理の概要を示す図である。図３に示す様にこの処理では、ユーザプログラムの起動時に、起動オプションに指定されたスキーマ文書の絶対パス３００の値から定義ファイル１１６を生成する。XMLパーサ１００の定義ファイル生成部１０７は、起動オプションに指定された一つ或いは複数のスキーマ文書の絶対パス３００を読み取って、スキーマ文書の一覧を取得し、定義ファイル１１６を生成する。なお、定義ファイル１１６の生成時には、その他の起動オプションの値も使用する。
【００２４】
図４は本実施形態の既存のユーザプログラム１１５から定義ファイル１１６を生成する処理の概要を示す図である。図４に示す様にこの処理では、ユーザプログラムの起動時に、起動オプションに指定された既存のユーザプログラム１１５から定義ファイル１１６を生成する。既存のユーザプログラム１１５中には、キャッシュ対象のスキーマ文書名がキャッシュする為の命令と共に直接指定されている。XMLパーサ１００の定義ファイル生成部１０７は、既存のユーザプログラム１１５を読み込み、直接指定されているスキーマ文書名を抽出して定義ファイル１１６を生成する。なお、定義ファイル１１６の生成時には、その他の起動オプションの値も使用する。
【００２５】
図５は本実施形態のテキストエディタを使い、定義ファイル１１６を生成または編集する処理の概要を示す図である。(a)には、テキストエディタを使い、定義ファイル１１６を新規に生成する方法、また、(b)には、既存の定義ファイル１１６を編集する方法を表している。定義ファイル１１６は、テキストのXML形式であるので、テキストエディタを使って作成または編集が可能である。(a)に示す様に定義ファイル１１６を新規に生成する場合、テキストエディタ５００を使い定義ファイル１１６の形式に従い、定義ファイル１１６を作成する。(b)に示す様に定義ファイル１１６を編集する場合、テキストエディタ５００で既存の定義ファイル１１６を読み込み、変更したい部分を定義ファイル１１６に反映させることで編集を行う。
【００２６】
図６は本実施形態のユーザプログラム起動時における起動オプション名及び値の表の例を示す図である。schemaDefオプション６００は、定義ファイル１１６の絶対パスを値にとる。定義ファイル１１６が既に作成済みの状態で、それをユーザプログラム起動時に指定し利用する場合にこのオプションを用いる。schemaDefオプション６００以外は、ユーザプログラム起動時に定義ファイル１１６をXMLパーサ１００により作成する為のオプションである。schemaDefオプションを使い定義ファイル１１６を指定する際、schemaDefオプション以外のオプションを指定した場合には、schemaDefオプション以外のオプションは無視されるものとする。
【００２７】
ユーザプログラム起動時に定義ファイル１１６を作成する際には、schemaPathオプション６０１、schemaFilesオプション６０２、sourceオプション６０３、diskCachePathオプション６０４、policyオプション６０５、minSizeForDiskオプション６０６、minSizeForMemオプション６０７、postCacheオプション６０８を指定する。schemaPathオプション６０１、schemaFilesオプション６０２、sourceオプション６０３は、指定が背反であり、いずれか一つを指定する必要があるものとする。
【００２８】
schemaPathオプション６０１には、キャッシュ対象のスキーマ文書１１７が格納されている格納基底パスを指定する。schemaFilesオプション６０２には、キャッシュ対象のスキーマ文書１１７の絶対パスを指定する。複数のスキーマ文書１１７を指定する場合、セミコロン(；)で区切る様にする。sourceオプション６０３には、キャッシュ対象のスキーマ文書１１７を抽出する為に既存のユーザプログラム１１５の絶対パスを指定する。
【００２９】
diskCachePathオプション６０４には、磁気ディスク装置にキャッシュを格納するときの磁気ディスク装置における絶対パスを指定する。
【００３０】
policyオプション６０５は、キャッシュをどこに格納するか指定するオプションであり、このオプションにはdisk、mem、none、customizeのいずれかの値を指定する。ここで、diskは、キャッシュを磁気ディスク装置に格納することを示し、memは、キャッシュをメモリに格納することを示しており、noneは、キャッシュはどこにも格納しないことを示している。
【００３１】
またpolicyオプション６０５にcustomizeを指定した場合には、minSizeForDiskオプション６０６、minSizeForMemオプション６０７の値を指定する必要があるものとする。minSizeForDiskオプション６０６には、磁気ディスク装置にキャッシュを格納するときのスキーマ文書サイズの最小値(KByte)を指定する。minSizeForMemオプション６０７には、メモリにキャッシュを格納するときのスキーマ文書サイズの最小値(KByte)を指定する。それらのサイズ（閾値）をこれらのオプションによって規定することで、スキーマ文書１１７のキャッシュを磁気ディスク装置或いはメモリに格納し分けることが可能となる。定義ファイル生成部１０７は、この閾値とスキーマ文書１１７のサイズからキャッシュの格納先を決定し、決定した格納先を定義ファイル１１６に反映させる。minSizeForDiskオプション６０６、minSizeForMemオプション６０７は、policyオプション６０５がcustomizeの場合に必要となるオプションであり、policyオプション６０５がcustomize以外の場合に、minSizeForDiskオプション６０６、minSizeForMemオプション６０７が指定された場合、それらのオプションは無視されるものとする。
【００３２】
postCacheオプション６０８は、検証処理部１１３における検証処理においてキャッシュを格納するか否かを決定できるオプションである。postCacheオプション６０８がONの場合、キャッシュを格納し、OFFの場合にはキャッシュを格納しない。この時、キャッシュの格納先については、policyオプション６０５の値に従うものとする。postCacheオプションをONにすることによって、定義ファイル１１６中のキャッシュ対象のスキーマ文書の一覧に指定されていないスキーマ文書に対しても、キャッシュを格納することが可能となる。定義ファイル１１６に記載されたスキーマ文書だけしかキャッシュしない場合には、当オプションの値をOFFにしておく。
【００３３】
図７は本実施形態の定義ファイル１１６の構造の一例を示す図である。図７に示す様に定義ファイル１１６は、XML形式で記述されるものとする。定義ファイル１１６は、schemaDefタグ７００をルートタグとし、その内容として、diskCachePathタグ７０１、policyタグ７０２、postCacheタグ７０３、targetSchemaタグ７０４から構成される。
【００３４】
diskCachePathタグ７０１の内容には、起動オプションのdiskCachePathオプションの値を格納し、policyタグ７０２の内容には、起動オプションのpolicyオプションの値を格納し、postCacheタグ７０３の内容には、起動オプションのpostCacheタグの値を格納する。またtargetSchemaタグ７０４の内容には、キャッシュ対象のスキーマ文書の数に応じ、その数分だけschemaタグ７０５が出現し、schemaタグ７０５の内容には、schemaPathオプション、schemaFilesオプション、sourceオプションの値により取得されたスキーマ文書の一覧における、個々のスキーマ文書の絶対パスを格納する。また、schemaタグ７０５は、属性として、cacheLocation属性７０６を持つ。
【００３５】
cacheLocation属性７０６は、schemaタグ７０５のスキーマ文書の個々に対し、キャッシュの格納先を示す属性であり、disk、mem、noneのいずれかの値をとる。diskは、キャッシュを磁気ディスク装置に格納することを示し、memは、キャッシュをメモリに格納することを示しており、noneは、キャッシュをどこにも格納しないことを示している。このcacheLocation属性７０６の値は、policyタグ７０２の内容に優先するものとし、つまり、policyタグ７０２にdiskと指定されていた場合でも、cacheLocation属性７０６がmemの場合には、そのcacheLocation属性を持つschemaタグ７０５に指定されたスキーマ文書のキャッシュを、磁気ディスク装置ではなく、メモリに格納する。policyタグ７０２の内容がcustomizeであり、cacheLocation属性７０６が無い場合には、cacheLocation属性７０６の値をnoneと同等扱いとし、キャッシュをどこにも格納しないものとする。
【００３６】
図８は本実施形態の定義ファイル生成部１０７における定義ファイル生成処理の処理手順を示すフローチャートである。本実施形態の定義ファイル生成部１０７は、ユーザプログラム起動時に起動オプションを取得して定義ファイル１１６を生成する。ユーザプログラム起動時に定義ファイル生成部１０７に対して起動オプションを与えるには、JavaVM起動コマンドを入力装置により受け付ける際に、コマンド引数"-D"指定に続き、オプション名（この場合ではシステムプロパティ名）とオプションの値（この場合ではシステムプロパティの値）を"="で結合した文字例を受け付ける。例えば、schemaDefオプションの場合、-DschemaDef=/usr/app/schemadef.xmlとなる。/usr/app/schemadef.xmlがオプションの値である。この方法により、起動されたユーザプログラム１０２は、コマンド引数として起動オプションを取得した後、ユーザプログラム１０２にライブラリとしてリンクされているXMLパーサ１００の定義ファイル生成部１０７に対して起動オプションを与えることが可能となる。
【００３７】
ステップ８００において定義ファイル生成部１０７は、ユーザプログラム１０２から渡された起動オプションを参照し、起動オプションにschemaDefオプションが指定されているか否かを判定する。schemaDefオプションが指定されている場合、定義ファイル１１６の生成は不要である為、処理を終了する。例えばschemaDefオプションとしてschemaDef=/usr/app/schemadef.xmlが指定されている場合には定義ファイル１１６の生成を行わずに処理を終了する。
【００３８】
起動オプションにschemaDefオプションが指定されていない場合には、ステップ８０１において、その起動オプション中にschemaPathオプション、schemaFilesオプション、sourceオプションのどれが指定されているかの判定を行う。起動オプションにschemaPathオプションが指定されている場合、ステップ８０２において、そのオプションの値よりスキーマ文書の一覧を取得する。schemaPathオプションの値からスキーマ文書の一覧を取得するには、java.io.FileクラスのlistFiles()メソッドを使うことで可能である。また再帰的にlistFiles()メソッドを呼び出す処理を行うことで、schemaPathオプションの値の下位のパスに存在するスキーマ文書の一覧も取得することが可能である。
【００３９】
例えばschemaPathオプションの値として/schemafilesが指定されている場合にはlistFiles()メソッドにより/schemafilesのディレクトリ情報を読み出し、そのディレクトリ中でファイル識別子xsdを持つファイルの名称をスキーマ文書の名称として取得する。またそのディレクトリ中にさらにディレクトリが存在する場合には、再帰的にlistFiles()メソッドを呼び出して、下位のディレクトリ中に存在するスキーマ文書の名称も取得する。
【００４０】
また起動オプションにschemaFilesオプションが指定されている場合、ステップ８０３において、セミコロン(；)を区切り文字とし、指定されたスキーマ文書を取得する。例えばsschemaFilesオプションの値として/schemafiles/x.xsd;/schemafiles/y.xsd;/schemafiles/z.xsd;が指定されている場合には、セミコロン(；)を区切り文字として文字列を分離し、スキーマ文書のパス名として/schemafiles/x.xsd、/schemafiles/y.xsd及び/schemafiles/z.xsdを取得する。
【００４１】
また起動オプションにsourceオプションが指定されている場合、ステップ８０４において、オプションの値に指定された既存のユーザプログラム１１５を読み込む。そしてステップ８０５において、読み込まれた既存のユーザプログラム１１５を解析し、キャッシュするスキーマ文書の一覧を取得する。既存のユーザプログラム１１５からキャッシュするスキーマ文書の一覧を取得するには、既存のユーザプログラム１１５中からキャッシュを行う処理メソッド名（preparseGrammar()）を、探索する文字列候補と設定し、文字列の探索処理により当該メソッドを特定し、そしてそのメソッド中のスキーマ文書名を取り出すことで可能となる。
【００４２】
例えばsourceオプションの値として/usr/app/validate.javaが指定されており、その内容が図４に示した様なものである場合には処理メソッド名preparseGrammar()を探索してそのメソッド中のスキーマ文書名/schemafiles/a.xsd、/schemafiles/b.xsd、/schemafiles/c.xsd、/schemafiles/d.xsd、/schemafiles/e.xsd及び/schemafiles/f.xsdを取得する。
【００４３】
キャッシュするスキーマ文書の一覧の取得後は、ステップ８０６において、diskCachePathオプション、policyオプション、postCacheオプションの値をそれぞれ取得する。ステップ８０７において、policyオプションの値がcustomizeか否かを判定する。値がcustomizeの場合、ステップ８０８において、minSizeForDiskオプションの値、minSizeForMemオプションの値、そしてスキーマ文書のサイズから、キャッシュする全てのスキーマ文書に対してキャッシュの格納先を決定する処理を行う。当処理については、図９に示す。ステップ８０７の判定について、値がcustomizeでない場合には、何も処理はせず、ステップ８０９に移る。ステップ８０９において、取得したスキーマ文書の一覧、更には起動オプションの値、そしてステップ８０８において決定したキャッシュの格納先より、定義ファイル１１６を作成する。
【００４４】
定義ファイル１１６を作成するには、XML文書操作用API群１１４を利用する。それらのAPIを利用し、必要なタグを作成し、タグの内容を定義、そしてXML文書の書き出しを行うことで定義ファイル１１６を生成することが可能である。または、上記API群は使わずに、直接、文字列出力用メソッド、及びファイル出力用メソッドを用いて作成することも可能である。
【００４５】
図９は本実施形態のスキーマ文書のサイズからキャッシュの格納先を決定する処理の処理手順を示すフローチャートである。ステップ９００において定義ファイル生成部１０７は、minSizeForDiskオプション、minSizeForMemオプションの値を取得する。ステップ９０１において、取得したスキーマ文書の一覧にあるスキーマ文書の数だけ繰り返し処理を行う。ステップ９０２において、スキーマ文書のサイズを取得する。スキーマ文書のサイズを取得するには、java.io.Fileクラスのlength()メソッドを使うことで可能である。
【００４６】
ステップ９０３において、スキーマ文書のサイズとminSizeForDiskタグの値とを比較する。スキーマ文書のサイズが、minSizeForDiskタグの値以上の場合、ステップ９０５において、キャッシュを磁気ディスク装置に格納する様に設定する。これは、定義ファイル１１６における該当するスキーマ文書に対するcacheLocation属性の値をdiskに設定することである。そうでない場合、ステップ９０４において、スキーマ文書のサイズとminSizeForMemタグの値とを比較する。スキーマ文書のサイズが、minSizeForMemの値以上の場合には、ステップ９０６においてキャッシュをメモリに格納する様に設定する。これは、定義ファイル１１６における該当するスキーマ文書に対するcacheLocation属性の値をmemに設定することである。minSizeForMemの値未満の場合には、ステップ９０７においてキャッシュをどこにも格納しない様に設定する。これは、定義ファイル１１６における該当するスキーマ文書に対するcacheLocation属性の値をnoneに設定することである。
【００４７】
図１０は本実施形態のpolicyタグの値がcustomizeの場合の定義ファイル例を示す図である。図１０の値１０００は、policyオプションの値がcustomizeであることを表している。cacheLocation属性１００１に関して、policyタグの値がcustomizeの場合、全てのschemaタグ中のcacheLocation属性は、mem、disk、或いはnoneのいずれかの値をとる。
【００４８】
図１０に示す様に図９のスキーマ文書のサイズからキャッシュの格納先を決定する処理では、例えばスキーマ文書の一覧にあるスキーマ文書が/usr/app/xmlparser/schemafiles/a.xsd、/usr/app/xmlparser/schemafiles/b.xsd、/usr/app/xmlparser/schemafiles/c.xsdや/usr/app/xmlparser/schemafiles/d.xsd等である場合、length()メソッドによりそれらのファイルのサイズを取得し、/usr/app/xmlparser/schemafiles/a.xsd及び/usr/app/xmlparser/schemafiles/b.xsdのサイズがminSizeForDiskタグの値以上である場合には、定義ファイル１１６中の当該スキーマ文書に対するcacheLocation属性の値をdiskに設定し、/usr/app/xmlparser/schemafiles/c.xsdのサイズが、minSizeForDiskタグの値未満であると共にminSizeForMemタグの値以上である場合には、定義ファイル１１６中の当該スキーマ文書に対するcacheLocation属性の値をmemに設定し、/usr/app/xmlparser/schemafiles/d.xsdのサイズがminSizeForMemの値未満である場合には、定義ファイル１１６中の当該スキーマ文書に対するcacheLocation属性の値をnoneに設定する。他のスキーマ文書e.xsd、f.xsd、g.xsdについても同様である。
【００４９】
図１１は本実施形態のキャッシュ生成部１０８の処理手順を示すフローチャートである。ステップ１１００においてキャッシュ生成部１０８は、定義ファイル１１６を読み込む。読み込んだ定義ファイル１１６に対し、ステップ１１０１においてXMLパーサ１００の機能を利用してスキーマ検証を行う。定義ファイル１１６は、定義ファイル生成部１０７により自動で生成される為、その構造に問題はないのだが、生成された定義ファイル１１６に対し、運用者(ユーザ)がキャッシュ対象のスキーマ文書を追加する、cacheLocation属性を変更する等のカスタマイズを行う為に編集することがある。その為に、定義ファイル１１６の構造の検証は必要となる。定義ファイルの構造を示すスキーマ文書を定義しておき、そのスキーマ文書による検証を行うことで、定義ファイル１１６が規定された構造に従っているか否かの確認が、自前に構造チェック用処理を作り込む必要が無い為、容易に実施できる。
【００５０】
ステップ１１０２において、定義ファイル１１６のスキーマ検証時にエラーが発生したか否かを判定する。エラーが発生した場合には、キャッシュ生成の処理を終了し、キャッシュを生成せずに処理を終了する。ステップ１１１６において、そのエラーメッセージをログファイル１２１に書き込む。
【００５１】
定義ファイル１１６のスキーマ検証時にエラーが発生しなかった場合には、ステップ１１０３において、定義ファイル１１６中のdiskCachePathタグ、policyタグ、postCacheタグの内容を読み取る。これらのタグを読み取る方法としては、XMLパーサ１００が持つXML文書操作用API群１１４を使うことで容易に実現できる。例えば図１０に示した定義ファイル１１６の場合では、diskCachePathタグから/usr/app/xmlparser/disk_cachesを、policyタグからcustomizeを、postCacheタグからONを読み取る。
【００５２】
上記のタグを読み取った後、ステップ１１０４において、スキーマ文書からキャッシュを生成する為、targetSchemaタグ内のschemaタグの数だけ繰り返し処理を行う。ステップ１１０５において、個々のschemaタグに対し、schemaタグの内容に指定されたスキーマ文書１１７を読み込む。ステップ１１０６において読み込んだスキーマ文書１１７を解析し、ステップ１１０７においてキャッシュを生成する。ステップ１１０５、ステップ１１０６、ステップ１１０７の処理は、XMLパーサ１００が内部に持つ機能を利用する。例えば図１０に示した定義ファイル１１６の場合では、schemaタグの内容に指定されたスキーマ文書/usr/app/xmlparser/schemafiles/a.xsd等を磁気ディスク装置から読み込んで解析し、そのキャッシュを生成する。
【００５３】
ステップ１１０８において、キャッシュ生成時にエラーが発生したか否かを判定する。エラーが発生した場合、エラーメッセージをステップ１１１５においてログファイル１２１に書き込み、次のschemaタグの処理に移る。
【００５４】
キャッシュ生成時にエラーが発生しなかった場合、ステップ１１０９において、cacheLocation属性の値を評価する。cacheLocation属性の値がmemの場合、ステップ１１１１においてキャッシュをメモリに格納する。キャッシュをメモリに格納する為には、メモリにおけるキャッシュを管理するテーブルをXMLパーサ１００内部で用意し、スキーマ文書の絶対パスをキーにしてキャッシュを管理することで可能である。
【００５５】
例えば図１０に示した定義ファイル１１６のスキーマ文書/usr/app/xmlparser/schemafiles/c.xsdの場合では、そのcacheLocation属性の値がmemであるので、そのスキーマ文書の絶対パス/usr/app/xmlparser/schemafiles/c.xsdと生成したキャッシュを管理テーブルに格納して管理する。
【００５６】
cacheLocation属性の値がdiskの場合、ステップ１１１３においてキャッシュを磁気ディスク装置に格納する。キャッシュを磁気ディスク装置に格納する為には、キャッシュを表すオブジェクトを磁気ディスク装置上に生成する為のシリアライズの処理を行うことで可能である。シリアライズは、java.io.ObjectOutputStreamクラスのwriteObject()メソッドで可能である。但し、シリアライズするオブジェクトのクラス、及びそのオブジェクトから参照されるオブジェクトのクラス全てが、java.io.Serializableインタフェースを実装している必要がある。
【００５７】
例えば図１０に示した定義ファイル１１６のスキーマ文書/usr/app/xmlparser/schemafiles/a.xsdの場合では、そのcacheLocation属性の値がdiskであるので、生成したキャッシュのオブジェクトを、前記diskCachePathタグから読み取った/usr/app/xmlparser/disk_cachesへwriteObject()メソッドにより格納する。
【００５８】
cacheLocation属性がnoneの場合には、キャッシュはどこにも格納せず、次のschemaタグの処理に移る。cacheLocation属性が存在しない場合には、ステップ１１１０において、policyタグの内容より、キャッシュ格納先を決定する為の判定処理を行う。policyタグの内容がmemの場合、ステップ１１１１においてキャッシュをメモリに格納する。policyタグの内容がdiskの場合、ステップ１１１３においてキャッシュを磁気ディスク装置に格納する。キャッシュを格納後、キャッシュしたスキーマ文書の絶対パスをステップ１１１２またはステップ１１１４においてログファイル１２１に書き込む。policyタグの内容がcustomizeの場合には、適切なキャッシュ格納先を判断できない為、cacheLocation属性の値がnoneと同等扱いとしキャッシュをどこにも格納せず、次のschemaタグの処理に移る。また、noneの場合も、キャッシュをどこにも格納せず、次のschemaタグの処理に移る。
【００５９】
図１２は本実施形態の検証処理部１１３におけるXML文書１２０のスキーマ検証処理の処理手順を示すフローチャートである。ステップ１２００において検証処理部１１３は、検証用のスキーマ文書名を取得する。検証用のスキーマ文書名は、ユーザプログラム１０２に指定されている場合と、検証対象となるXML文書１２０に指定されている場合がある。検証用のスキーマ文書名の取得は、XMLパーサ１００の持つ機能を利用して行うことができる。
【００６０】
ステップ１２０１において、取得したスキーマ文書名により、キャッシュがメモリに存在するか否かの判定を行う。この判定処理では、キャッシュを管理しているテーブルに、ステップ１２００で取得したスキーマ文書名のキーが存在するか否かを確かめる。存在する場合、ステップ１２０３において、メモリからキャッシュを取得し、ステップ１２１１においてXML文書１２０の検証処理を行う。メモリからキャッシュを取得するには、スキーマ文書名とキャッシュの組を管理しているテーブルから、ステップ１２００で取得したスキーマ文書名をキーに、キャッシュを取得する。
【００６１】
例えば図１０に示した定義ファイル１１６に従ってキャッシュを生成した後、スキーマ文書/usr/app/xmlparser/schemafiles/c.xsdを検証用のスキーマ文書とする場合、スキーマ文書名とキャッシュの組を管理しているテーブルから、/usr/app/xmlparser/schemafiles/c.xsdをキーとしてキャッシュを検索し、該当するキャッシュを取得し、XML文書１２０の検証処理を行う。
【００６２】
ステップ１２０１においてキャッシュがメモリに存在しない場合、ステップ１２０２において、キャッシュが磁気ディスク装置に存在するか否かの判定を行う。この判定処理では、キャッシュを格納しているディスク位置に、ステップ１２００で取得したスキーマ文書名に対応するキャッシュファイルが存在するか否かを確かめる。存在する場合、ステップ１２０４において、磁気ディスク装置からキャッシュを取得し、ステップ１２１１においてXML文書１２０の検証処理を行う。磁気ディスク装置からキャッシュを取得するには、シリアライズ処理と対になる、キャッシュを表すオブジェクトを磁気ディスク装置からメモリへ復元するデシリアライズ処理を行うことで可能である。デシリアライズは、java.io.ObjectOutputStreamクラスのreadObject()メソッドで可能である。
【００６３】
例えば図１０に示した定義ファイル１１６に従ってキャッシュを生成した後、スキーマ文書/usr/app/xmlparser/schemafiles/a.xsdを検証用のスキーマ文書とする場合、キャッシュを格納しているディスク位置/usr/app/xmlparser/disk_cachesに、スキーマ文書名/usr/app/xmlparser/schemafiles/a.xsdに対応するキャッシュファイルが存在するか否かを確かめた後、そのキャッシュを表すオブジェクトをreadObject()メソッドにより磁気ディスク装置からメモリへ復元し、XML文書１２０の検証処理を行う。
【００６４】
一方、メモリにも磁気ディスク装置にも存在しない場合、これはスキーマ文書のキャッシュが存在しないことを意味する。この場合、ステップ１２０５においてスキーマ文書１１７を読み込み、ステップ１２０６においてスキーマ文書１１７を解析する。ステップ１２０７において、postCacheタグの値を判定する。その値が、OFFの場合、ステップ１２１１においてXML文書１２０の検証処理を行う。ONの場合には、解析後のスキーマ文書のキャッシュを保存する為、ステップ１２０８においてキャッシュを生成し、ステップ１２０９において、policyタグの内容よりキャッシュの格納先を決定して格納を行う。すなわち、policyタグの内容がdiskの場合にはキャッシュを磁気ディスク装置に格納し、memの場合にはキャッシュをメモリに格納する。一方、policyタグの内容がcustomizeの場合には、メモリ或いは磁気ディスク装置のどちらにキャッシュするのかを予め設定し、それに従う様にしておく。
【００６５】
ステップ１２１１におけるXML文書１２０の検証処理の後、ステップ１２１２において検証対象となったXML文書１２０の絶対パス、及び検証で用いたスキーマ文書の絶対パスをログファイル１２１に書き込む。この際、検証時にスキーマ文書のキャッシュを利用したか、或いは、利用せずスキーマ文書を読み込み、解析し、そして検証したかについて、ログファイル１２１にはスキーマ文書の絶対パスと共にそれを示す。この情報により、定義ファイル１１６に定義した通りにキャッシュが利用されているか否かを確認することが可能となる。但し、検証毎にステップ１２１２においてログファイル１２１を更新すると、処理オーバヘッドになる可能性がある為、ステップ１２１２におけるログファイル１２１への書き込みは、実際に書き込むか否かを示す起動オプションを増やす等し、その値でもって事前判定する様にしても良い。
【００６６】
以上説明した様に本実施形態のキャッシュ生成装置によれば、キャッシュの対象となるスキーマ文書を定義した定義ファイルによりスキーマ文書のキャッシュを生成して文書の検証を行うので、キャッシュ対象が変更された場合でもユーザプログラムを再コンパイルすること無しにスキーマ文書のキャッシュを生成することが可能である。
【００６７】
また本実施形態のキャッシュ生成装置によれば、スキーマ文書のキャッシュを生成する際にキャッシュを磁気ディスク装置にも格納するので、使用可能なメモリ領域が少ない場合でもメモリ領域を圧迫することなくスキーマ文書のキャッシュを生成してそのキャッシュを用いた文書の検証処理を運用することが可能である。
【図面の簡単な説明】
【００６８】
【図１】本実施形態のキャッシュ生成装置のシステム構成を示す図である。
【図２】本実施形態のスキーマ文書１１７の格納基底パスから定義ファイル１１６を生成する処理の概要を示す図である。
【図３】本実施形態のスキーマ文書１１７の絶対パスから定義ファイル１１６を生成する処理の概要を示す図である。
【図４】本実施形態の既存のユーザプログラム１１５から定義ファイル１１６を生成する処理の概要を示す図である。
【図５】本実施形態のテキストエディタを使い、定義ファイル１１６を生成または編集する処理の概要を示す図である。
【図６】本実施形態のユーザプログラム起動時における起動オプション名及び値の表の例を示す図である。
【図７】本実施形態の定義ファイル１１６の構造の一例を示す図である。
【図８】本実施形態の定義ファイル生成部１０７における定義ファイル生成処理の処理手順を示すフローチャートである。
【図９】本実施形態のスキーマ文書のサイズからキャッシュの格納先を決定する処理の処理手順を示すフローチャートである。
【図１０】本実施形態のpolicyタグの値がcustomizeの場合の定義ファイル例を示す図である。
【図１１】本実施形態のキャッシュ生成部１０８の処理手順を示すフローチャートである。
【図１２】本実施形態の検証処理部１１３におけるXML文書１２０のスキーマ検証処理の処理手順を示すフローチャートである。
【図１３】本実施形態のキャッシュ生成装置の概略構成を示す図である。
【符号の説明】
【００６９】
１００…XMLパーサ、１０１…ユーザプログラムの起動、１０２…ユーザプログラム、１０３…キャッシュの生成、１０４…パーサオブジェクトの生成、１０５…XML文書の検証、１０６…XML文書の操作、１０７…定義ファイル生成部、１０８…キャッシュ生成部、１０９…パーサオブジェクト生成部、１１０…パーサオブジェクト初期設定部、１１１…XML文書読み込み部、１１２…内部形式変換部、１１３…検証処理部、１１４…XML文書操作用API群、１１５…既存のユーザプログラム、１１６…定義ファイル、１１７…スキーマ文書、１１８…メモリ内のキャッシュ、１１９…ディスク内のキャッシュ、１２０…XML文書、１２１…ログファイル、２００…スキーマ文書の格納基底パス、３００…スキーマ文書の絶対パス、５００…テキストエディタ、６００…schemaDefオプション、６０１…schemaPathオプション、６０２…schemaFilesオプション、６０３…sourceオプション、６０４…diskCachePathオプション、６０５…policyオプション、６０６…minSizeForDiskオプション、６０７…minSizeForMemオプション、６０８…postCacheオプション、７００…schemaDefタグ、７０１…diskCachePathタグ、７０２…policyタグ、７０３…postCacheタグ、７０４…targetSchemaタグ、７０５…schemaタグ、７０６…cacheLocation属性、１０００…値、１００１…cacheLocation属性。
【図１】
2006313444.tif 000003
【図２】
2006313444.tif 000004
【図３】
2006313444.tif 000005
【図４】
2006313444.tif 000006
【図５】
2006313444.tif 000007
【図６】
2006313444.tif 000008
【図７】
2006313444.tif 000009
【図８】
2006313444.tif 000010
【図９】
2006313444.tif 000011
【図１０】
2006313444.tif 000012
【図１１】
2006313444.tif 000013
【図１２】
2006313444.tif 000014
【図１３】
2006313444.tif 000015