(57)【要約】【課題】ＸＭＬ文書が圧縮されている場合に、ＸＭＬ文書における検証の時間を高速化する。【解決手段】情報処理装置１は、複数のタグそれぞれのタグ名および定義値と、複数のタグそれぞれのタグ名および定義値に対応する符号とを対応づけた圧縮用辞書３１により符号化された符号化データを受け付け、符号化データを復号化する際に、圧縮用辞書３１に対応して生成されたチェック関数テーブル３２の各符号にそれぞれ対応づけられた処理関数により、復号化された復号化データの検証処理を実行する。【選択図】図３
2018063560.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
複数のタグそれぞれのタグ名および定義値と、前記複数のタグそれぞれのタグ名および定義値に対応する符号とを対応づけた符号化辞書により符号化された符号化データを受け付け、
前記符号化データを復号化する際に、前記符号化辞書に登録された符号のうち処理関数が対応づけられた符号を復号化する場合、前記処理関数を用いて、復号化された復号化データの検証処理を実行する
処理を実行させることを特徴とする検証プログラム。
【請求項２】
前記処理関数は、前記符号化辞書に対応して生成されたオートマトンの各符号にそれぞれ対応づけられていることを特徴とする検証プログラム。
【請求項３】
前記検証処理を実行する処理は、前記符号化データの先頭から順番に符号を選択し、選択した符号が開始のタグのタグ名に対応する符号である場合には、前記オートマトンから当該選択した符号に対応づけられた処理関数を取得し、取得した処理関数により、次に選択される符号を前記符号化辞書により復号化した復号化データの検証処理を実行する
ことを特徴とする請求項１に記載の検証プログラム。
【請求項４】
複数のタグそれぞれのタグ名および定義値と、前記複数のタグそれぞれのタグ名および定義値に対応する符号とを対応づけた符号化辞書により符号化された符号化データを受け付ける受付部と、
前記符号化データを復号化する際に、前記符号化辞書に登録された符号のうち処理関数が対応づけられた符号を復号化する場合、前記処理関数を用いて、復号化された復号化データの検証処理を実行する検証部と、
を有することを特徴とする検証装置。
【請求項５】
コンピュータが、
複数のタグそれぞれのタグ名および定義値と、前記複数のタグそれぞれのタグ名および定義値に対応する符号とを対応づけた符号化辞書により符号化された符号化データを受け付け、
前記符号化データを復号化する際に、前記符号化辞書に登録された符号のうち処理関数が対応づけられた符号を復号化する場合、前記処理関数を用いて、復号化された復号化データの検証処理を実行する
各処理を実行することを特徴とする検証方法。
【請求項６】
コンピュータに、
複数のタグそれぞれのタグ名および定義値と、前記複数のタグそれぞれのタグ名および定義値に対応する符号とを対応づけた符号化辞書により、複数のタグを含む符号化対象のデータを符号化し、
前記符号化辞書に含まれる複数の符号ごとに、符号と処理関数とを対応づけたオートマトンを生成する
処理を実行させることを特徴とする符号化プログラム。
【請求項７】
複数のタグそれぞれのタグ名および定義値と、前記複数のタグそれぞれのタグ名および定義値に対応する符号とを対応づけた符号化辞書により、複数のタグを含む符号化対象のデータを符号化する符号化部と、
前記符号化辞書に含まれる複数の符号ごとに、符号と処理関数とを対応づけたオートマトンを生成する生成部と、
を有することを特徴とする符号化装置。
【請求項８】
コンピュータが、
複数のタグそれぞれのタグ名および定義値と、前記複数のタグそれぞれのタグ名および定義値に対応する符号とを対応づけた符号化辞書により、複数のタグを含む符号化対象のデータを符号化し、
前記符号化辞書に含まれる複数の符号ごとに、符号と処理関数とを対応づけたオートマトンを生成する
各処理を実行することを特徴とする符号化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、検証プログラムなどに関する。
【背景技術】
【０００２】
ＸＭＬ（Extensible  Markup  Language）文書においては、文書の送受信のたびに、スキーマを用いた検証、および文書中の各タグに対応したチェック項目に関する検証が行われる。
【０００３】
従来では、ＸＭＬ文書における検証は、以下のように行われる。例えば、検証処理は、ファイルサイズを小さくするためにＺＩＰ圧縮されたＸＭＬファイルの圧縮データを伸長し、伸長された文書データに対して字句解析とスキーマを用いた検証を行う。検証処理は、字句解析によりタグの判別が文書データ全体について完了した後に、文書データ中の各タグに対応する検証を行う。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００３−８４９８７号公報
【特許文献２】特開２０１３−１０１５６５号公報
【特許文献３】特開２０１４−２３８８６３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来の技術では、ＸＭＬ文書が圧縮されている場合に、ＸＭＬ文書における検証に時間がかかるという問題がある。例えば、従来の技術では、ＸＭＬ文書の圧縮データを伸長し、伸長された文書データに対して字句解析した後、文書データ中の各タグに対応する検証を行うので、検証に時間がかかる。
【０００６】
ここで、ＸＭＬ文書が圧縮されている場合に、ＸＭＬ文書における検証に時間がかかるという問題について、図１を参照して説明する。図１は、ＸＭＬ文書における検証処理の一例を示す図である。図１に示すように、ＸＭＬ文書が圧縮されている場合に、検証処理は、圧縮データを伸長し（ａ１）、伸長した文書データを字句（タグ）解析する（ａ２）。検証処理は、字句（タグ）解析によりタグの判別が完了した後に、文書データ中の各タグに対応する妥当性検証を行う（ａ３）。妥当性検証を行うタグの種類の数がｎであるとすると、妥当性検証は、文書データを先頭からｎ回走査して行う。さらに、ｍ個のＸＭＬ文書が有る場合には、妥当性検証は、ＸＭＬ文書ごとに、伸長から妥当性検証までの検証処理をｍ回行う。すなわち、検証処理は、ＸＭＬ文書が圧縮されている場合に、ＸＭＬ文書における妥当性検証に時間がかかる。
【０００７】
１つの側面では、ＸＭＬ文書が圧縮されている場合に、ＸＭＬ文書における検証の時間を高速化することを目的とする。
【課題を解決するための手段】
【０００８】
第１の案では、検証プログラムは、コンピュータに、複数のタグそれぞれのタグ名および定義値と、前記複数のタグそれぞれのタグ名および定義値に対応する符号とを対応づけた符号化辞書により符号化された符号化データを受け付け、前記符号化データを復号化する際に、前記符号化辞書に登録された符号のうち処理関数が対応づけられた符号を復号化する場合、前記処理関数を用いて、復号化された復号化データの検証処理を実行する、処理を実行させる。
【発明の効果】
【０００９】
本発明の１実施態様によれば、ＸＭＬ文書が圧縮されている場合に、ＸＭＬ文書における検証の時間を高速化できる。
【図面の簡単な説明】
【００１０】
【図１】図１は、ＸＭＬ文書における検証処理の一例を示す図である。
【図２】図２は、実施例に係るＸＭＬ文書における検証処理の一例を示す図である。
【図３】図３は、実施例に係る情報処理装置の構成を示す機能ブロック図である。
【図４】図４は、実施例に係る圧縮用辞書を説明する図である。
【図５】図５は、実施例に係るチェック関数テーブルのデータ構造の一例を示す図である。
【図６】図６は、ＸＭＬデータの一例を示す図である。
【図７】図７は、実施例に係る妥当性検証処理の流れの一例を示す図である。
【図８】図８は、実施例に係る妥当性検証処理の具体例を示す図である。
【図９】図９は、実施例に係る字句解析処理のフローチャートの一例を示す図である。
【図１０】図１０は、実施例に係るスキーマ検証処理のフローチャートの一例を示す図である。
【図１１】図１１は、実施例に係る圧縮処理のフローチャートの一例を示す図である。
【図１２】図１２は、実施例に係るチェック関数テーブル初期化処理のフローチャートの一例を示す図である。
【図１３】図１３は、実施例に係る妥当性検証処理のフローチャートの一例を示す図である。
【図１４】図１４は、情報処理装置のハードウェアの構成の一例を示す図である。
【発明を実施するための形態】
【００１１】
以下に、本願の開示する検証プログラム、検証装置、検証方法、符号化プログラム、符号化装置および符号化方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例】
【００１２】
［実施例に係る検証処理の流れの一例］
図２は、実施例に係るＸＭＬ文書における検証処理の一例を示す図である。
【００１３】
図２に示すように、検証処理は、複数のタグそれぞれのタグ名および定義値と、複数のタグそれぞれのタグ名および定義値に対応する符号とを対応づけた圧縮用辞書により圧縮されたＸＭＬ文書の圧縮データを受け付けると、以下の処理を行う。検証処理は、圧縮データを復号化する際に、圧縮用辞書に対応して生成されたオートマトンの各要素（符号）にそれぞれ対応づけられた妥当性のチェック関数により、復号化された復号化データにおけるＸＭＬ文書の妥当性の検証処理を実行する（ｂ１）。妥当性検証を行うタグの種類の数がＸＭＬ文書にｎ個あるとすると、検証処理は、圧縮データを先頭から１回走査するだけで妥当性検証を完了する。さらに、ｍ個の圧縮データが有る場合には、圧縮データごとに、検証処理がｍ回行われる。なお、「圧縮」を「符号化」としても良い。
【００１４】
これにより、検証処理は、タグの復号化、データの認識およびデータの妥当性の検証を一括して行うことができる。すなわち、検証処理は、圧縮データを復号化し、字句解析してからＸＭＬ文書の妥当性を検証する場合と比較して、検証の時間を高速化することができる。
【００１５】
なお、ＸＭＬ文書とは、タグとタグの内容（定義値）が混在した文書である。タグとは、開始記号‘＜’から始まり、終了記号‘＞’で終わる文字列を指し、開始タグおよび終了タグを含む。例えば、ＸＭＬ文書が「＜ＲｅｔｒｙＣｏｕｎｔ＞５＜／ＲｅｔｒｙＣｏｕｎｔ＞」である。このデータの中で、＜ＲｅｔｒｙＣｏｕｎｔ＞が開始タグであり、＜／ＲｅｔｒｙＣｏｕｎｔ＞が終了タグである。このデータの中で、「５」がタグの内容（定義値）の文字列に対応する。
【００１６】
［実施例に係る情報処理装置の構成］
図３は、実施例に係る情報処理装置の構成を示す機能ブロック図である。図３に示すように、情報処理装置１は、圧縮部１０、検証部２０および記憶部３０を有する。
【００１７】
記憶部３０は、例えばフラッシュメモリ（Flash  Memory）やＦＲＡＭ（登録商標）（Ferroelectric  Random  Access  Memory）などの不揮発性の半導体メモリ素子などの記憶装置に対応する。記憶部３０は、圧縮用辞書３１およびチェック関数テーブル３２を有する。
【００１８】
圧縮用辞書３１は、ＸＭＬ文書を圧縮する際に用いられる辞書である。圧縮用辞書３１は、一般的なＸＭＬ文書などを基にして、ＸＭＬ文書中に出現するキーワードや定義値の出現頻度を特定し、出現頻度のより高いキーワードや定義値に対して、より短い符号を割り当てた辞書である。ここでいうキーワードとは、タグのタグ名のことをいう。ここでいう定義値とは、タグの内容のことをいう。
【００１９】
ここで、圧縮用辞書３１を、図４を参照して説明する。図４は、実施例に係る圧縮用辞書を説明する図である。図４には、圧縮用辞書３１の一例として、分類ごとに、バイト数、符号化範囲、詳細分類およびＸＭＬデータの具体例が記載されている。
【００２０】
分類には、高頻度キーワード、低頻度キーワードおよびユーザ定義値が示されている。１つの分類としての高頻度キーワードは、出現頻度の高いキーワードのことをいい、詳細分類で表わされる開始タグや終了タグが一例として挙げられる。１つの分類としての低頻度キーワードは、出現頻度の低いキーワードのことをいい、詳細分類で表わされる選択式の定義値や定義値の省略が一例として挙げられる。１つの分類としてのユーザ定義値は、出現頻度の低いキーワードのことをいい、詳細分類で表わされる任意入力の定義値が一例として挙げられる。
【００２１】
バイト数は、圧縮符号である符号コードのバイト数である。高頻度キーワードに対応するバイト数は、「１」である。低頻度キーワードに対応するバイト数は、「２」である。ユーザ定義値に対応するバイト数は、「２」または「３」である。
【００２２】
符号化範囲は、符号化可能な範囲である。高頻度キーワードに対応する符号化範囲は、「００ｈ〜７Ｆｈ」である。低頻度キーワードに対応する符号化範囲は、「８０００ｈ〜８ＦＦＦｈ」である。ユーザ定義値に対応する符号化範囲は、バイト数が「２」である場合には、「９０００ｈ〜ＥＦＦＦｈ」であり、バイト数が「３」である場合には、「Ｆ０００００ｈ〜ＦＦＦＦＦＦｈ」である。
【００２３】
ＸＭＬデータの具体例には、分類ごとのキーワードや定義値の具体例が表わされる。高頻度キーワードに対応するＸＭＬデータの具体例として、＜Ｓｅｑｕｅｎｃｅ＞、＜／Ｓｅｑｕｅｎｃｅ＞、＜Ｅｎｄｐｏｉｎｔ＞、＜／Ｅｎｄｐｏｉｎｔ＞が挙げられる。低頻度キーワードに対応するＸＭＬデータの具体例として、「ＳｙｎｃＳｅｒｖｉｃｅＣａｌｌ」や省略が挙げられる。ユーザ定義値に対応するＸＭＬデータの具体例として、「ｃａｌｃｔｅｓｔ」や「ｓｏａｐ＿ｓｙｎｃ」が挙げられる。なお、高頻度キーワードおよび低頻度キーワードでは、それぞれの符号化範囲の符号コードがキーワードに予め割り当てられ、登録されている。ユーザ定義値では、符号化範囲の符号コードが定義値に予め割り当てられていない。圧縮の際に、定義値が出現されたとき、符号コードが割り当てられ、登録される。
【００２４】
一例として、「＜Ｓｅｑｕｅｎｃｅ＞」は、「０１ｈ」に割り当てられ、「＜／Ｓｅｑｕｅｎｃｅ＞」は、「０２ｈ」に割り当てられる。また、「＜Ｅｎｄｐｏｉｎｔ＞」は、「３Ｂｈ」に割り当てられ、「＜／Ｅｎｄｐｏｉｎｔ＞」は、「７Ｂｈ」に割り当てられる。また、「ＳｙｎｃＳｅｒｖｉｃｅＣａｌｌ」は、「８１００ｈ」に割り当てられる。
【００２５】
図３に戻って、チェック関数テーブル３２は、符号と妥当性のチェック関数とを対応づけたテーブルである。
【００２６】
ここで、チェック関数テーブル３２のデータ構造の一例を、図５を参照して説明する。図５は、実施例に係るチェック関数テーブルのデータ構造の一例を示す図である。図５に示すように、チェック関数テーブル３２は、１バイトコード用のテーブルと、２バイトコード用のテーブルと、３バイトコード用のテーブルとを含む。１バイトコード用のテーブルには、１バイトの符号コードと妥当性のチェック関数のアドレスとが対応づけられる。２バイトコード用のテーブルには、２バイトの符号コードと妥当性のチェック関数のアドレスとが対応づけられる。３バイトコード用のテーブルには、３バイトの符号コードと妥当性のチェック関数のアドレスとが対応づけられる。符号コードに対応づけられるアドレスがない場合には、チェック関数のアドレスに「０」が設定される。かかる場合は、符号コードに対応する文字列の妥当性のチェック（検証）が不要であることを意味する。なお、チェック関数テーブル３２は、圧縮用辞書３１に対応して生成されるため、チェック関数テーブル３２および圧縮用辞書３１の同じ符号コードは、同じ意味を持つ。
【００２７】
図３に戻って、圧縮部１０は、字句解析部１１、スキーマ検証部１２および圧縮部１３を有する。検証部２０は、チェック関数テーブル初期化部２１および妥当性検証部２２を有する。なお、圧縮部１３は、符号化部の一例である。チェック関数テーブル初期化部２１は、生成部の一例である。妥当性検証部２２は、受付部および検証部の一例である。
【００２８】
字句解析部１１は、圧縮対象のＸＭＬデータを字句解析する。例えば、字句解析部１１は、開始記号‘＜’と終了記号‘＞’を区切り文字として字句解析を行う。一例として、字句解析部１１は、圧縮対象のＸＭＬデータについて、開始記号‘＜’を検出すると、開始記号‘＜’から終了記号‘＞’までの文字列を抽出する。また、字句解析部１１は、圧縮対象のＸＭＬデータについて、終了記号‘＞’を検出すると、終了記号‘＞’から開始記号‘＜’までの間の文字列を抽出する。字句解析部１１は、抽出した文字列を、解析結果としてＸＭＬ解析内容に格納する。そして、字句解析部１１は、ＸＭＬデータの終端まで字句解析を行う。
【００２９】
スキーマ検証部１２は、ＸＭＬデータが字句解析された結果を示すＸＭＬ解析内容について、ＸＭＬスキーマを用いて、ＸＭＬ文書の妥当性を検証する。ここでいうＸＭＬスキーマとは、ＸＭＬ文書の論理的構造を定義したファイルのことをいう。例えば、スキーマ検証部１２は、ＸＭＬスキーマを用いて、ＸＭＬ解析内容の全ての解析結果が妥当であるか否かを判定する。スキーマ検証部１２は、全ての解析結果が妥当である場合には、ＸＭＬ解析内容を圧縮部１３に出力する。スキーマ検証部１２は、全ての解析内容が妥当でない場合には、スキーマの検証が妥当でない旨を出力する。
【００３０】
圧縮部１３は、圧縮用辞書３１を用いて、ＸＭＬデータを圧縮する。例えば、圧縮部１３は、ＸＭＬ解析内容の全ての解析結果の文字列について、以下の処理を行う。圧縮部１３は、ＸＭＬ解析内容を参照し、解析結果の文字列がタグであるか否かを判定する。タグであるか否かは、開始文字が‘＜’であるか否かによって判定されれば良い。圧縮部１３は、解析結果の文字列がタグである場合には、圧縮用辞書３１から当該タグに対応する符号コードを取得する。ここでいうタグは、例えば高頻度キーワードに対応する。そして、圧縮部１３は、取得した符号コードを圧縮データに追加する。圧縮部１３は、解析結果の文字列がタグでない場合には、解析結果の文字列が圧縮用辞書３１に含まれているか否かを判定する。圧縮部１３は、解析結果の文字列が圧縮用辞書３１に含まれている場合には、圧縮用辞書３１から当該文字列に対応する符号コードを取得する。タグでないが圧縮用辞書３１に含まれている文字列は、例えば低頻度キーワードに対応する。そして、圧縮部１３は、取得した符号コードを圧縮データに追加する。圧縮部１３は、解析結果の文字列が圧縮用辞書３１に含まれていない場合には、解析結果の文字列を圧縮用辞書３１の符号コードに割り当て、解析結果の文字列を割り当てられた符号コードに対応づけて圧縮用辞書３１に登録する。圧縮用辞書３１に含まれていない文字列は、例えば、ユーザ定義値に対応する。そして、圧縮部１３は、割り当てられた符号コードを圧縮データに追加する。
【００３１】
チェック関数テーブル初期化部２１は、圧縮用辞書３１に対応させて、チェック関数テーブル３２を初期化する。例えば、チェック関数テーブル初期化部２１は、圧縮用辞書３１の高頻度キーワードのそれぞれの符号コードについて、１バイトコード用の同一の符号コードに対応づけてそれぞれのチェック関数のアドレスを登録する。チェック関数テーブル初期化部２１は、圧縮用辞書３１の低頻度キーワードおよびユーザ定義値のそれぞれの符号コードについて、２バイトコード用の同一の符号コードに対応づけてそれぞれのチェック関数のアドレスを登録する。チェック関数テーブル初期化部２１は、圧縮用辞書３１のユーザ定義値のそれぞれの符号コードについて、３バイトコード用の同一の符号コードに対応づけてそれぞれのチェック関数のアドレスを登録する。
【００３２】
妥当性検証部２２は、圧縮データを復号化する際に、チェック関数テーブル３２の各符号コードにそれぞれ対応づけられたチェック関数により、復号化された復号化データの妥当性を検証する。例えば、妥当性検証部２２は、圧縮データの先頭の符号コードから最後尾の符号コードまでの全ての符号コードについて、以下の処理を行う。妥当性検証部２２は、圧縮データから符号コードの第１バイトを取得する。妥当性検証部２２は、取得した第１バイトを用いて、符号コードが何バイトコードであるかを判別する。妥当性検証部２２は、符号コードが１バイトコードである場合には、１バイトコード用のチェック関数テーブル３２を参照し、符号コードに対応するチェック関数のアドレスを取得する。妥当性検証部２２は、符号コードが２バイトコードである場合には、２バイトコード用のチェック関数テーブル３２を参照し、符号コードに対応するチェック関数のアドレスを取得する。妥当性検証部２２は、符号コードが３バイトコードである場合には、３バイトコード用のチェック関数テーブル３２を参照し、符号コードに対応するチェック関数のアドレスを取得する。妥当性検証部２２は、符号コードが開始タグに対応するコードである場合には、符号コードに対するチェック関数のアドレスをチェック関数テーブル３２からレジスタへ格納する。妥当性検証部２２は、符号コードが終了タグに対応するコードである場合には、何もしない。妥当性検証部２２は、符号コードがタグに対応するコードでない場合には、圧縮用辞書３１から符号コードに対応した文字列を取得する。そして、妥当性検証部２２は、レジスタに格納されたアドレスのチェック関数を、取得した文字列に対して実行する。すなわち、妥当性検証部２２は、開始タグの次に続く文字列に対して、開始タグに対応づけられたチェック関数を実行する。
【００３３】
図６は、ＸＭＬデータの一例を示す図である。図６に示すように、ＸＭＬデータは、タグとタグの内容（定義値）によって表されている。一例として、符号ｔ１で示される＜Ｅｎｄｐｏｉｎｔ＞が開始タグであり、符号ｔ２で示される＜／ＥｎｄＰｏｉｎｔ＞が終了タグである。そして、符号ｃ１で示される文字列「ｓｏａｐ＿ｓｙｎｃ」がこのタグの内容（定義値）である。そして、妥当性検証部２２は、このタグについて、例えば、内容（定義値）が省略されていないことをチェックする。
【００３４】
別の一例として、符号ｔ３で示される＜ＲｅｔｒｙＣｏｕｎｔ＞が開始タグであり、符号ｔ４で示される＜／ＲｅｔｒｙＣｏｕｎｔ＞が終了タグである。そして、符号ｃ２で示される文字「５」がこのタグの内容（定義値）である。そして、妥当性検証部２２は、このタグについて、例えば、内容（定義値）が０〜１００の値であることをチェックする。
【００３５】
図７は、実施例に係る妥当性検証処理の流れの一例を示す図である。図７に示すように、妥当性検証部２２は、圧縮データの符号コードの第１バイトを参照し、対象のチェック関数テーブル３２に遷移する。第１バイトが００ｈ〜７Ｆｈの第１分類である場合には、１バイトコード用のテーブルに遷移する。第１バイトが８０ｈ〜ＥＦｈの第２分類である場合には、２バイトコード用のテーブルに遷移する。第１バイトがＦ０ｈ〜ＦＦｈの第３分類である場合には、３バイトコード用のテーブルに遷移する。妥当性検証部２２は、対象のテーブルを参照し、符号コードに対応するチェック関数のアドレスまたは０を取得する。そして、妥当性検証部２２は、符号コードに対応するチェック関数のアドレスを取得した場合には、次に続く符号コードを復号化した文字列に対してチェック関数を実行する。
【００３６】
図８は、実施例に係る妥当性検証処理の具体例を示す図である。なお、図８では、圧縮データが「・・・３Ｂｈ９４Ｄ３ｈ７Ｂｈ・・・」であるとする。「３Ｂｈ」は、開始タグ「＜Ｅｎｄｐｏｉｎｔ＞」の符号コードである。「９４Ｄ３ｈ」は、定義値「ｏｕｔ＿ｓｏａｐ＿ｓｙｎｃ」の符号コードである。「７Ｂｈ」は、終了タグ「＜／Ｅｎｄｐｏｉｎｔ＞」の符号コードである。
【００３７】
図８に示すように、妥当性検証部２２は、圧縮データの符号コードの第１バイトを参照し、対象のチェック関数テーブル３２に遷移する。ここでは、符号コードの第１バイトが「３Ｂｈ」である。「３Ｂｈ」は、００ｈ〜７Ｆｈに含まれるので、妥当性検証部２２は、１バイトコード用であると判別し、１バイトコード用のチェック関数テーブル３２に遷移する。
【００３８】
そして、妥当性検証部２２は、１バイトコード用のチェック関数テーブル３２を参照し、符号コードに対応するチェック関数のアドレスまたは０を取得する。ここでは、符号コード「３Ｂｈ」に対応するチェック関数のアドレスとして「省略されていないことのチェック関数のアドレス」が取得される。
【００３９】
そして、妥当性検証部２２は、符号コードが開始タグに対応するコードである場合には、取得したチェック関数のアドレスをレジスタへ格納する。ここでは、符号コード「３Ｂｈ」は、開始タグであるので、チェック関数のアドレスとして取得された「省略されていないことのチェック関数のアドレス」がレジスタへ格納される。
【００４０】
続いて、妥当性検証部２２は、次の符号コードの第１バイトを参照し、対象のチェック関数テーブル３２に遷移する。ここでは、符号コードの第１バイトが「９４ｈ」である。「９４ｈ」は、８０００ｈ〜ＥＦＦＦｈに含まれるので、妥当性検証部２２は、２バイト用コードであると判別し、２バイトコード用のチェック関数テーブル３２に遷移する。
【００４１】
そして、妥当性検証部２２は、２バイトコード用のチェック関数テーブル３２を参照し、符号コードに対応するチェック関数のアドレスまたは０を取得する。ここでは、符号コード「９４Ｄ３ｈ」に対応するチェック関数のアドレスとして「０」が取得される。
【００４２】
そして、妥当性検証部２２は、符号コードがタグに対応するコードでない場合には、圧縮用辞書３１から符号コードに対応した文字列を取得する。そして、妥当性検証部２２は、レジスタに格納されたアドレスのチェック関数をこの文字列に対して実行する。すなわち、妥当性検証部２２は、開始タグの次に続く文字列に対してチェック関数を実行する。ここでは、符号コード「９４Ｄ３ｈ」は、タグに対応するコードでないので、妥当性検証部２２は、圧縮用辞書３１から符号コード「９４Ｄ３ｈ」に対応した文字列「ｏｕｔ＿ｓｏａｐ＿ｓｙｎｃ」を取得する。そして、妥当性検証部２２は、レジスタに格納されたアドレスのチェック関数をこの文字列に対して実行する。すなわち、妥当性検証部２２は、符号コード「３Ｂｈ」が示す開始タグの次に続く文字列「ｏｕｔ＿ｓｏａｐ＿ｓｙｎｃ」に対して省略されていないことのチェック関数を実行する。
【００４３】
[字句解析処理のフローチャート]
図９は、実施例に係る字句解析処理のフローチャートの一例を示す図である。図９に示すように、字句解析部１１は、ＸＭＬデータを受け付ける（ステップＳ１１）。
【００４４】
字句解析部１１は、開始記号‘＜’と終了記号‘＞’を区切り文字として字句解析を行う（ステップＳ１２）。例えば、字句解析部１１は、ＸＭＬデータについて、開始記号‘＜’を検出すると、開始記号‘＜’から終了記号‘＞’までの文字列を解析結果として抽出する。また、字句解析部１１は、ＸＭＬデータについて、終了記号‘＞’を検出すると、終了記号‘＞’から開始記号‘＜’までの間の文字列を解析結果として抽出する。
【００４５】
そして、字句解析部１１は、解析結果をＸＭＬ解析内容に格納する（ステップＳ１３）。
【００４６】
そして、字句解析部１１は、ＸＭＬデータの終端であるか否かを判定する（ステップＳ１４）。ＸＭＬデータの終端でないと判定した場合には（ステップＳ１４；Ｎｏ）、字句解析部１１は、次の文字列を解析すべく、ステップＳ１２に移行する。一方、ＸＭＬデータの終端であると判定した場合には（ステップＳ１４；Ｙｅｓ）、字句解析部１１は、受け付けたＸＭＬデータの字句解析処理を終了する。
【００４７】
[スキーマ検証処理のフローチャート]
図１０は、実施例に係るスキーマ検証処理のフローチャートの一例を示す図である。図１０に示すように、スキーマ検証部１２は、ＸＭＬ解析内容を受け取る（ステップＳ２１）。スキーマ検証部１２は、ＸＭＬスキーマを用いて、ＸＭＬ解析内容を検証する（ステップＳ２２）。
【００４８】
そして、スキーマ検証部１２は、ＸＭＬ解析内容の終端であるか否かを判定する（ステップＳ２３）。ＸＭＬ解析内容の終端でないと判定した場合には（ステップＳ２３；Ｎｏ）、スキーマ検証部１２は、ステップＳ２２に移行する。一方、ＸＭＬ解析内容の終端であると判定した場合には（ステップＳ２３；Ｙｅｓ）、スキーマ検証部１２は、受け付けたＸＭＬ解析内容のスキーマ検証処理を終了する。
【００４９】
[圧縮処理のフローチャート]
図１１は、実施例に係る圧縮処理のフローチャートの一例を示す図である。図１１に示すように、圧縮部１３は、ＸＭＬ解析内容を受け取る（ステップＳ３１）。圧縮部１３は、ＸＭＬ解析内容を参照し（ステップＳ３２）、解析結果の文字列がタグであるか否かを判定する（ステップＳ３３）。
【００５０】
解析結果の文字列がタグであると判定した場合には（ステップＳ３３；Ｙｅｓ）、圧縮部１３は、圧縮用辞書３１から当該文字列に対応する符号コードを取得する（ステップＳ３４）。そして、圧縮部１３は、ステップＳ３７に移行する。
【００５１】
一方、解析結果の文字列がタグでないと判定した場合には（ステップＳ３３；Ｎｏ）、圧縮部１３は、当該文字列が圧縮用辞書３１に含まれているか否かを判定する（ステップＳ３５）。当該文字列が圧縮用辞書３１に含まれていると判定した場合には(ステップＳ３５；Ｙｅｓ)、圧縮部１３は、当該文字列の符号化を行うべく、ステップＳ３４に移行する。
【００５２】
一方、当該文字列が圧縮用辞書３１に含まれていないと判定した場合には(ステップＳ３５；Ｎｏ)、圧縮部１３は、当該文字列を圧縮用辞書３１の符号コードに割り当てる（ステップＳ３６）。例えば、圧縮部１３は、解析結果の文字列を圧縮用辞書３１の符号コードに割り当て、当該文字列を、割り当てられた符号コードに対応づけて圧縮用辞書３１に登録する。そして、圧縮部１３は、ステップＳ３７に移行する。
【００５３】
ステップＳ３７において、圧縮部１３は、符号コードを圧縮データに追加する（ステップＳ３７）。
【００５４】
そして、圧縮部１３は、ＸＭＬ解析内容の終端であるか否かを判定する（ステップＳ３８）。ＸＭＬ解析内容の終端でないと判定した場合には（ステップＳ３８；Ｎｏ）、圧縮部１３は、次の解析結果の文字列を処理すべく、ステップＳ３２に移行する。一方、ＸＭＬ解析内容の終端であると判定した場合には（ステップＳ３８；Ｙｅｓ）、圧縮部１３は、受け付けたＸＭＬ解析内容の圧縮処理を終了する。
【００５５】
[チェック関数テーブル初期化処理のフローチャート]
図１２は、実施例に係るチェック関数テーブル初期化処理のフローチャートの一例を示す図である。図１２に示すように、チェック関数テーブル初期化部２１は、圧縮用辞書３１から符号コードを選択する（ステップＳ４１）。
【００５６】
そして、チェック関数テーブル初期化部２１は、選択した符号コードに対応するチェック関数のアドレスを、当該符号コードに対応づけてチェック関数テーブル３２に登録する（ステップＳ４２）。例えば、チェック関数テーブル初期化部２１は、選択した符号コードが高頻度キーワードに対応する場合には、１バイトコード用の同一の符号コードに対応づけて当該符号コードに対応するチェック関数のアドレスを登録する。また、チェック関数テーブル初期化部２１は、選択した符号コードが低頻度キーワードまたはユーザ定義値に対応する場合には、２バイトコード用の同一の符号コードに対応づけて当該符号コードに対応するチェック関数のアドレスを登録する。また、チェック関数テーブル初期化部２１は、選択した符号コードがユーザ定義値に対応する場合には、３バイトコード用の同一の符号コードに対応づけて当該符号コードに対応するチェック関数のアドレスを登録する。
【００５７】
そして、チェック関数テーブル初期化部２１は、最後の符号コードであるか否かを判定する（ステップＳ４３）。最後の符号コードでないと判定した場合には（ステップＳ４３；Ｎｏ）、チェック関数テーブル初期化部２１は、圧縮用辞書３１から次の符号コードを選択する（ステップＳ４４）。そして、チェック関数テーブル初期化部２１は、ステップＳ４２に移行する。
【００５８】
一方、最後の符号コードであると判定した場合には（ステップＳ４３；Ｙｅｓ）、チェック関数テーブル初期化部２１は、チェック関数テーブル初期化処理を終了する。
【００５９】
[妥当性検証処理のフローチャート]
図１３は、実施例に係る妥当性検証処理のフローチャートの一例を示す図である。なお、図１３では、符号コードを圧縮符号と記載する。符号図１３に示すように、妥当性検証部２２は、圧縮データを受け付ける（ステップＳ５１）。妥当性検証部２２は、圧縮データの先頭から圧縮符号の第１バイトを取得する（ステップＳ５２）。
【００６０】
妥当性検証部２２は、圧縮符号の第１バイトは何バイトコード用であるかを判定する（ステップＳ５３）。例えば、妥当性検証部２２は、圧縮符号の第１バイトが００ｈ〜７Ｆｈである場合には、１バイトコード用であると判定する。妥当性検証部２２は、圧縮符号の第１バイトが８０ｈ〜８Ｆｈである場合には、２バイトコード用であると判定する。妥当性検証部２２は、圧縮符号の第１バイトが９０ｈ〜ＥＦｈである場合には、２バイトコード用であると判定する。妥当性検証部２２は、圧縮符号の第１バイトがＦ０ｈ〜ＦＦｈである場合には、３バイトコード用であると判定する。
【００６１】
圧縮符号の第１バイトが１バイトコード用であると判定した場合には（ステップＳ５３；１バイトコード用）、妥当性検証部２２は、１バイトコード用のチェック関数テーブル３２を参照する（ステップＳ５４）。そして、妥当性検証部２２は、ステップＳ５９に移行する。
【００６２】
圧縮符号の第１バイトが２バイトコード用であると判定した場合には（ステップＳ５３；２バイトコード用）、妥当性検証部２２は、圧縮データから後続する圧縮符号１バイトを取得する（ステップＳ５５）。そして、妥当性検証部２２は、２バイトコード用のチェック関数テーブル３２を参照する（ステップＳ５６）。そして、妥当性検証部２２は、ステップＳ５９に移行する。
【００６３】
圧縮符号の第１バイトが３バイトコード用であると判定した場合には（ステップＳ５３；３バイトコード用）、妥当性検証部２２は、圧縮データから後続する圧縮符号２バイトを取得する（ステップＳ５７）。そして、妥当性検証部２２は、３バイトコード用のチェック関数テーブル３２を参照する（ステップＳ５８）。そして、妥当性検証部２２は、ステップＳ５９に移行する。
【００６４】
ステップＳ５９において、妥当性検証部２２は、圧縮符号がタグの符号であるか否かを判定する（ステップＳ５９）。圧縮符号が開始タグの符号であると判定した場合には（ステップＳ５９；開始タグ）、妥当性検証部２２は、当該圧縮符号に対応するチェック関数のアドレスを該当するチェック関数テーブル３２からレジスタへ格納する（ステップＳ６０）。すなわち、妥当性検証部２２は、該当するチェック関数テーブル３２から当該圧縮符号に対応するチェック関数のアドレスを取得し、取得したチェック関数のアドレスをレジスタへ格納する。そして、妥当性検証部２２は、ステップＳ６３に移行する。
【００６５】
圧縮符号が終了タグの符号であると判定した場合には（ステップＳ５９；終了タグ）、妥当性検証部２２は、何もしない。そして、妥当性検証部２２は、ステップＳ６３に移行する。
【００６６】
圧縮符号が内容の符号であると判定した場合には（ステップＳ５９；内容）、妥当性検証部２２は、圧縮用辞書３１から圧縮符号に対応した文字列を取得する（ステップＳ６１）。そして、妥当性検証部２２は、レジスタに格納されたアドレスのチェック関数を、取得した文字列に対して実行する（ステップＳ６２）。そして、妥当性検証部２２は、ステップＳ６３に移行する。
【００６７】
ステップＳ６３において、妥当性検証部２２は、圧縮データの終端であるか否かを判定する（ステップＳ６３）。圧縮データの終端でないと判定した場合には（ステップＳ６３；Ｎｏ）、妥当性検証部２２は、次の圧縮符号の第１バイトを取得する（ステップＳ６４）。そして、妥当性検証部２２は、取得した次の圧縮符号の処理をすべく、ステップＳ５３に移行する。
【００６８】
一方、圧縮データの終端であると判定した場合には（ステップＳ６３；Ｙｅｓ）、妥当性検証部２２は、受け付けた圧縮データの妥当性検証処理を終了する。
【００６９】
［実施例の効果］
上記実施例によれば、情報処理装置１は、複数のタグそれぞれのタグ名および定義値と、複数のタグそれぞれのタグ名および定義値に対応する符号とを対応づけた圧縮用辞書３１により符号化された符号化データを受け付ける。情報処理装置１は、符号化データを復号化する際に、圧縮用辞書３１に登録された符号のうち処理関数が対応づけられた符号を復号化する場合、当該処理関数を用いて、復号化された復号化データの検証処理を実行する。かかる構成によれば、情報処理装置１は、タグの復号化と、タグの認識と、タグの検証処理とを一括して行うことができる。
【００７０】
また、上記実施例によれば、情報処理装置１は、符号化データの先頭から順番に符号を選択し、選択した符号が開始のタグのタグ名に対応する符号である場合には、チェック関数テーブル３２から当該選択した符号に対応づけられた処理関数を取得する。情報処理装置１は、取得した処理関数により、次に選択される符号を圧縮用辞書３１により復号化した復号化データの検証処理を実行する。かかる構成によれば、情報処理装置１は、ＸＭＬデータが符号化されている場合に、ＸＭＬデータにおける妥当性の検証の時間を高速化できる。
【００７１】
また、上記実施例によれば、情報処理装置１は、複数のタグそれぞれのタグ名および定義値と、複数のタグそれぞれのタグ名および定義値に対応する符号とを対応づけた圧縮用辞書３１により、複数のタグを含む符号化対象のデータを符号化する。情報処理装置１は、圧縮用辞書３１に含まれる複数の符号ごとに、符号と処理関数とを対応づけたチェック関数テーブル３２を生成する。かかる構成によれば、情報処理装置１は、圧縮用辞書３１およびチェック関数テーブル３２を用いて、符号化データを復号化する際に、タグの復号化と、タグの認識と、タグの検証処理とを一括して行うことが可能となる。
【００７２】
［その他］
なお、実施例では、字句解析部１１は、開始記号‘＜’と終了記号‘＞’を区切り文字として字句解析を行うと説明した。しかしながら、字句解析部１１は、これに限定されず、圧縮用辞書３１を字句解析用の辞書として共用し、字句解析を行っても良い。
【００７３】
また、図示した装置の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、装置の分散・統合の具体的態様は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、字句解析部１１およびスキーマ検証部１２を併合しても良い。妥当性検証部２２は、符号コードが１バイトコードである場合の第１の検証部と、符号コードが２バイトコードである場合の第２の検証部と、符号コードが３バイトコードである場合の第３の検証部とに分離しても良い。また、記憶部３０を情報処理装置１の外部装置としてネットワーク経由で接続するようにしても良い。
【００７４】
図１４は、情報処理装置のハードウェア構成の一例を示す図である。図１４に示すように、コンピュータ５００は、各種演算処理を実行するＣＰＵ５０１と、ユーザからのデータ入力を受け付ける入力装置５０２と、モニタ５０３とを有する。また、コンピュータ５００は、記憶媒体からプログラムなどを読み取る媒体読取装置５０４と、他の装置と接続するためのインターフェース装置５０５と、他の装置と無線により接続するための無線通信装置５０６とを有する。また、コンピュータ５００は、各種情報を一時記憶するＲＡＭ（Random  Access  Memory）５０７と、ハードディスク装置５０８とを有する。また、各装置５０１〜５０８は、バス５０９に接続される。
【００７５】
ハードディスク装置５０８には、図３に示した検証部２０と同様の機能を有する検証プログラムが記憶される。また、圧縮部１０と同様の機能を有する符号化プログラムが記憶される。また、ハードディスク装置５０８には、検証プログラムおよび符号化プログラムを実現するための各種データが記憶される。各種データには、図３に示した記憶部３０内のデータが含まれる。
【００７６】
ＣＰＵ５０１は、ハードディスク装置５０８に記憶された各プログラムを読み出して、ＲＡＭ５０７に展開して実行することで、各種の処理を行う。これらのプログラムは、コンピュータ５００を図４に示した各機能部として機能させることができる。
【００７７】
なお、上記の検証プログラムおよび符号化プログラムは、必ずしもハードディスク装置５０８に記憶されている必要はない。例えば、コンピュータ５００が読み取り可能な記憶媒体に記憶されたプログラムを、コンピュータ５００が読み出して実行するようにしてもよい。コンピュータ５００が読み取り可能な記憶媒体は、例えば、ＣＤ−ＲＯＭやＤＶＤディスク、ＵＳＢ（Universal  Serial  Bus）メモリなどの可搬型記録媒体、フラッシュメモリなどの半導体メモリ、ハードディスクドライブなどが対応する。また、公衆回線、インターネット、ＬＡＮ（Local  Area  Network）などに接続された装置にこれらのプログラムを記憶させておき、コンピュータ５００がこれらからこれらのプログラムを読み出して実行するようにしても良い。
【符号の説明】
【００７８】
１  情報処理装置
１０  圧縮部
１１  字句解析部
１２  スキーマ検証部
１３  圧縮部
２０  検証部
２１  チェック関数テーブル初期化部
２２  妥当性検証部
３０  記憶部
３１  圧縮用辞書
３２  チェック関数テーブル
【図１】
2018063560.tif 000003
【図２】
2018063560.tif 000004
【図３】
2018063560.tif 000005
【図４】
2018063560.tif 000006
【図５】
2018063560.tif 000007
【図６】
2018063560.tif 000008
【図７】
2018063560.tif 000009
【図８】
2018063560.tif 000010
【図９】
2018063560.tif 000011
【図１０】
2018063560.tif 000012
【図１１】
2018063560.tif 000013
【図１２】
2018063560.tif 000014
【図１３】
2018063560.tif 000015
【図１４】
2018063560.tif 000016