(57)【要約】【課題】W3CのXSLT言語による変換命令記述であるスタイルシートに応じてXML構造化文書を変換する際に、該スタイルシート内におけるテンプレート定義の選択を効率化して、高速処理を実現する。【解決手段】まず、スタイルシートを解析して取得したテンプレート定義毎に、XML文書における適用先ノードを示す識別キーを生成し、該識別キーとテンプレート定義との対応を示すテーブルを作成する(S202)。さらに、XML文書を解析してノード木を生成する(S203)。そして、XML文書に対しスタイルシートを実行する際に、以下の処理を再帰的に実行する。まず、変換対象であるノードを示す選択キーを作成し、該選択キーに識別キーが一致するテンプレート定義をテーブルから選択する(S206)。そして、該選択されたテンプレート定義の適用先ノードをノード木から選択し、該選択されたノードに対して該選択されたテンプレート定義を適用する(S208)。【選択図】  図2
2014016961.tif 000002
【特許請求の範囲】
【請求項１】
構造化文書と、該構造化文書に対する変換命令記述を入力する入力手段と、
前記変換命令記述を解析して一連の変換命令の集合である変換命令群を複数取得する命令解析手段と、
該取得した変換命令群毎に、前記構造化文書において該変換命令群の適用先となるノードを示す識別キーを生成し、該識別キーと変換命令群との対応を示すテーブルを作成するテーブル作成手段と、
前記構造化文書を解析してノードの構造情報を生成する文書解析手段と、
前記構造化文書に対し前記変換命令記述を実行して前記構造化文書を変換する変換手段と、を有し、
前記変換手段は、
変換対象であるノードを示す選択キーを作成し、該選択キーに前記識別キーが一致する変換命令群を前記テーブルから選択する選択手段と、
該選択された変換命令群の適用先であるノードを前記ノードの構造情報から選択し、該選択されたノードに対して該選択された変換命令群を適用する適用手段と、
を有することを特徴とする構造化文書変換装置。
【請求項２】
選択されている変換命令群がさらに他の変換命令群の呼び出し命令を含む場合、前記選択手段は該他の変換命令群における適用先のノードの記述に応じて該他の変換命令群の選択を行い、前記適用手段は該他の変換命令群の適用を再帰的に実行することを特徴とする請求項1に記載の構造化文書変換装置。
【請求項３】
前記識別キーおよび前記選択キーは、対応する変換命令群に対し、前記構造化文書において該変換命令群が適用されるノードを示す情報と、該変換命令群が呼び出される際の呼び出し条件を示す情報から生成されることを特徴とする請求項1または2に記載の構造化文書変換装置。
【請求項４】
前記テーブル作成手段は、変換命令群の選択優先度の高い順に、前記識別キーとの対応を前記テーブルに登録することを特徴とする請求項1乃至3のいずれか1項に記載の構造化文書変換装置。
【請求項５】
前記選択手段は、前記選択キーと、前記テーブルにおける複数の識別キーとの比較を並列に行うことを特徴とする請求項1乃至4のいずれか1項に記載の構造化文書変換装置。
【請求項６】
前記選択手段は、前記選択キーと前記複数の識別キーとの比較を、プロセッサにおける単一命令多数データ処理(SIMD)命令によって並列に行うことを特徴とする請求項5に記載の構造化文書変換装置。
【請求項７】
前記構造化文書はXML言語で記述された文書であり、前記変換命令記述はXSLT言語で記述されたスタイルシートであり、前記変換命令群は前記スタイルシートにおけるテンプレート定義であることを特徴とする請求項1乃至6のいずれか1項に記載の構造化文書変換装置。
【請求項８】
前記識別キーおよび前記選択キーは、対応するテンプレート定義における適用パターン内のノード名の識別番号と、該テンプレート定義における適用モードの識別番号から生成されることを特徴とする請求項7に記載の構造化文書変換装置。
【請求項９】
入力手段、命令解析手段、テーブル作成手段、文書解析手段、変換手段を有し、前記変換手段はさらに選択手段および適用手段を有する構造化文書変換装置における構造化文書変換方法であって、
前記入力手段が、構造化文書と、該構造化文書に対する変換命令記述を入力し、
前記命令解析手段が、前記変換命令記述を解析して一連の変換命令の集合である変換命令群を複数取得し、
前記テーブル作成手段が、該取得した変換命令群毎に、前記構造化文書において該変換命令群の適用先となるノードを示す識別キーを生成し、該識別キーと変換命令群との対応を示すテーブルを作成し、
前記文書解析手段が、前記構造化文書を解析してノードの構造情報を生成し、
前記変換手段が、前記構造化文書に対し前記変換命令記述を実行して前記構造化文書を変換する際に、
前記選択手段が、変換対象であるノードを示す選択キーを作成し、該選択キーに前記識別キーが一致する変換命令群を前記テーブルから選択し、
前記適用手段が、該選択された変換命令群の適用先であるノードを前記ノードの構造情報から選択し、該選択されたノードに対して該選択された変換命令群を適用する、
ことを特徴とする構造化文書変換方法。
【請求項１０】
コンピュータ装置で実行されることにより、該コンピュータ装置を請求項1乃至8のいずれか1項に記載の構造化文書変換装置の各手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、変換命令記述に沿って構造化文書を変換する構造化文書変換装置および方法に関する。
【背景技術】
【０００２】
従来、構造化文書を記述する言語として、Webの標準化団体であるW3Cが仕様を策定しているXML言語が知られている。XML言語により、要素、属性、名前空間等の文書の構成要素(ノード)を使って構造化された文書を記述することができる。
【０００３】
構造化文書は、所定の形式の変換命令記述に沿って他形式に変換することが可能であり、XML言語で記述された文書であれば、W3Cが仕様を策定しているXSLT言語で記述されたスタイルシートを使って他形式に変換可能である。例えば、複数のXSLT処理装置を使用して、XML文書に対する変換処理を効率良く行う技術が提案されている(特許文献1参照)。
【０００４】
XSLT言語で記述されたスタイルシートには、テンプレートと呼ばれる変換命令群の定義が含まれており、テンプレートごとに構造化文書のどの部分に適用するのかを指示するための適用パターンを記述することができる。またスタイルシートでは、適用先が同じであっても、処理状況に応じて使用するテンプレートを選択できるよう、テンプレート毎にさらに適用モードを記述することができる。また、適用パターンおよび適用モードによる選択の結果、適用するテンプレートの候補が複数残ってしまった場合、どのテンプレートを適用するのかを指定するためにテンプレートごとに優先度を記述することができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開2003−330903号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
XSLT言語で記述されたスタイルシートによってXML文書を変換する場合、XSLT処理装置は、XML文書を解析し、取得した文書の一部(ノード)と、テンプレートの適用モードに応じて使用するテンプレートを選択する。取得したノードに対してどのテンプレートを選択するのかは、該ノードがテンプレートの定義に記述されている適用パターンに一致するか否かに応じて判断される。
【０００７】
XSLT言語では、テンプレートの適用パターンは、W3CのXPath言語のサブセットによって記述されるが、ノードがXPathで記述されたパターンに一致するか否かの判断には時間がかかる場合が多い。したがって、スタイルシート内に多数のテンプレートが定義されていた場合、ノードとテンプレートのパターン記述の比較が多くなり、変換処理全体の時間が長くなってしまう。また、各テンプレートに適用モードが設定されていた場合、パターン記述の比較だけではなく適用モードとの比較処理も行う必要があり、変換処理時間がさらに長くなるという問題があった。
【０００８】
本発明は上記問題に鑑み、複数の変化命令群を含む変換命令記述に応じて構造化文書を変換する際に、構造化文書のノードに対する変換命令群の選択を効率化して、高速処理を実現することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するための一手段として、本発明の構造化文書変換装置は以下の構成を備える。
【００１０】
すなわち、構造化文書と、該構造化文書に対する変換命令記述を入力する入力手段と、前記変換命令記述を解析して一連の変換命令の集合である変換命令群を複数取得する命令解析手段と、該取得した変換命令群毎に、前記構造化文書において該変換命令群の適用先となるノードを示す識別キーを生成し、該識別キーと変換命令群との対応を示すテーブルを作成するテーブル作成手段と、前記構造化文書を解析してノードの構造情報を生成する文書解析手段と、前記構造化文書に対し前記変換命令記述を実行して前記構造化文書を変換する変換手段と、を有し、前記変換手段は、変換対象であるノードを示す選択キーを作成し、該選択キーに前記識別キーが一致する変換命令群を前記テーブルから選択する選択手段と、該選択された変換命令群の適用先であるノードを前記ノードの構造情報から選択し、該選択されたノードに対して該選択された変換命令群を適用する適用手段と、を有することを特徴とする。
【発明の効果】
【００１１】
本発明によれば、変換命令記述に応じて構造化文書を変換する際に、該変換命令記述内における変換命令群の選択が効率化され、高速処理が実現する。
【図面の簡単な説明】
【００１２】
【図１】第1実施形態における構造化文書変換装置の機能構成を示すブロック図、
【図２】第1実施形態における構造化文書変換処理を示すフローチャート、
【図３】スタイルシート解析処理を示すフローチャート、
【図４】テンプレート選択処理を示すフローチャート、
【図５】テンプレート適用処理を示すフローチャート、
【図６】構造化文書とその入力ノード木を例示する図、
【図７】スタイルシートを例示する図、
【図８】スタイルシート解析木を例示する図、
【図９】変換後の出力データを例示する図、
【図１０】テンプレート一覧を例示する図、
【図１１】ノード名一覧を例示する図、
【図１２】モード一覧を例示する図、
【図１３】第2実施形態におけるSIMDレジスタを例示する図、である。
【発明を実施するための形態】
【００１３】
以下、本発明の実施形態について、図面を参照して説明する。なお、以下の実施の形態は特許請求の範囲に関わる本発明を限定するものではなく、また、本実施の形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。
【００１４】
＜第1実施形態＞
本実施形態では、構造化文書に対し変換命令記述を実行して前記構造化文書を変換する際に、以下の処理を行う。まず、変換命令記述を解析して一連の変換命令の集合である変換命令群を複数取得する(命令解析処理)。そして、該取得した変換命令群毎に、構造化文書において該変換命令群の適用先となるノードを示す識別キーを生成し、該識別キーと変換命令群との対応を示すテーブルを作成する(テーブル作成処理)。そして、構造化文書を解析してノードの構造情報を生成する(文書解析処理)。そして変換の際に、変換対象であるノードを示す選択キーを作成し、該選択キーに前記識別キーが一致する変換命令群をテーブルから選択する(選択処理)。そして、該選択された変換命令群の適用先であるノードを前記ノードの構造情報から選択し、該選択されたノードに対して該選択された変換命令群を適用する(適用処理)。これにより、構造化文書のノードに対する変換命令群をフィルタリングして選択することができ、高速処理が実現される。
【００１５】
●装置構成
図1は、本実施形態における構造化文書変換装置の機能構成を示すブロック図である。同図において、100は構造化文書変換装置であり、メモリ110とCPU130を備える。140は、構造化文書の変換方法を定義したスタイルシート141と、変換対象の構造化文書142を格納した記憶装置であり、ケーブルを介して構造化文書変換装置100と接続されている。
【００１６】
以下、メモリ110に格納される各構成について説明する。
【００１７】
変換要求受付部111は、装置利用者からの文書変換の要求を受け付ける。スタイルシート解析部112は、記憶装置140から読み込まれたスタイルシート141を解析してスタイルシート解析木121を生成する。ここでスタイルシート解析木121は、スタイルシート141を装置の内部形式で表現することで、装置内で処理可能としたものである。
【００１８】
テンプレート登録部113は、スタイルシート141内で定義されたテンプレートを、表形式で管理するテンプレート一覧124に登録する。フィルタリングキー生成部114は、テンプレート一覧124から、テンプレートを選択する際に使用するキーを生成する。
【００１９】
構造化文書解析部115は例えば、一般にXMLパーサと呼ばれるソフトウェアとして実現され、記憶装置140から読み込まれた構造化文書142を解析して入力ノード木122に変換する。ここで入力ノード木122は、構造化文書142を装置の内部形式で表現することで、装置内で処理可能としたものである。
【００２０】
構造情報取得部116は、構造化文書142の構造情報を入力ノード木122から取得する。命令実行部117は、スタイルシート141に記述された命令をスタイルシート解析木121から取得して実行する。テンプレート選択部118は、変換対象である文書の内容に沿って、使用するテンプレートを選択する。パターン解析部119は、テンプレートを構造化文書142のどの部分に適用するのかを示す適用パターンを解析する。変換結果出力部120は、構造化文書142をスタイルシート141を用いて変換した結果である出力データ123を、装置利用者に通知する。
【００２１】
ノード名一覧125は、テンプレートの適用パターン内で使われるノード名を表形式で管理する。またモード一覧126は、テンプレートの適用モードを表形式で管理する。
【００２２】
●データ例
以下、上記メモリ110内の各部に格納されるデータについての具体例を示す。
【００２３】
図6(a)に、図1に示す構造化文書142を、W3Cが仕様を定めているXML言語で記述した例を示す。また図6(b)は、図1に示す構造化文書142の内部形式である入力ノード木122の例を示す。図6(b)において、長円はノードと呼ばれる文書の構成部品を示す。入力ノード木122の代表的な例として、W3Cが仕様を定めているDOM(Document Object Model)がある。
【００２４】
図7は、図1に示すスタイルシート141を、W3Cが仕様を定めているスタイルシートの記述言語XSLT(XSL Transformations)で記述した例である。同図において、＜xsl:template＞タグと＜/xsl:template＞タグで囲まれる部分(xsl:template要素と呼ぶ)が、テンプレートの定義である。テンプレートはすなわち変換命令記述であり、変換対象である文書の構成部品(ノードと呼ぶ)ごとに、スタイルシート内に複数定義することが可能である。xsl:templateのmatch属性の値(match=" "で記述された部分)が、このテンプレートの適用先のノードを示す適用パターンである。また、xsl:template要素の、mode属性の値(mode=" "で記述された部分)を、このテンプレートの適用モードと呼び、テンプレートが呼び出される際の呼び出し条件を示す。
【００２５】
また、スタイルシート141に記述されたテンプレートから、同じスタイルシート内の別のテンプレートを適用することができる。＜xsl:apply-templates/＞タグで記述された部分が、他テンプレートの適用を指示する命令の記述である。ここで、select属性の値(select=" "で記述された部分)は他テンプレートを適用する対象であるノードのパターン(適用パターン)を示し、mode属性の値は他テンプレートを選択する際の適用モードを示す。これら適用パターンと適用モードが、それぞれxsl:template要素におけるmatch属性の値とmode属性の値と一致したテンプレートが、適用する他テンプレートとして選択される。
【００２６】
図8は、図1に示すスタイルシート解析木121の例を示す。同図においては、図7のスタイルシートで記述されたXSLTの命令を、長円で囲まれた構成要素で表現したツリー構造を示しているが、命令実行部117での解釈が可能であればどのような形式で保存しても良い。
【００２７】
図9は、図6(a)に示すXML言語による構造化文書を、図7に示すスタイルシートを用いて変換した結果として出力される出力データ123の例を示す。同図では出力データ123がテキスト形式で示されているが、装置利用者が解釈可能ならばどのような内部形式であってもよい。
【００２８】
図10は、図1に示すテンプレート一覧124の例である。テンプレート一覧124には、テンプレートの適用パターンと適用モードから生成した値が、フィルタリングキー1001として格納される。また、スタイルシート解析木121上のテンプレート定義の位置がテンプレートアドレス1002として格納される。
【００２９】
図11は、図1に示すノード名一覧125の例である。ノード名一覧125には、テンプレートの適用パターン内のノード名(要素、属性名など)を識別するノード名識別番号1101が格納される。また、テンプレートの適用パターン内のノード名1102が格納される。図12は、図1に示すモード一覧126の例である。モード一覧126は、テンプレートの適用モードの識別番号1201が格納される。また、テンプレートの適用モードの値がモード名1202として格納される。
【００３０】
本実施形態では、処理対象となる構造化文書142について、対応するノード名一覧125およびモード一覧126を予め保持しておく。そして、後述するスタイルシート解析処理(S202)において、このノード名一覧125とモード一覧126からテンプレート一覧124が生成される。
【００３１】
●構造化文書変換処理(全体)
以下、本実施形態における構造化文書変換処理の流れについて、図2のフローチャートを用いて説明する。
【００３２】
まず変換要求受付部111が、文書の変換要求とともに、変換内容を記述したスタイルシート141と、変換対象である構造化文書142を受け付ける(S201)。次に、スタイルシート解析部112がスタイルシート141の解析処理を行い、解析結果をスタイルシート解析木121に保存する(S202)。このスタイルシート解析処理の詳細については後述する。そして構造化文書解析部115が構造化文書142を読み込み、解析した結果を、装置の内部形式である入力ノード木122として出力する(S203)。
【００３３】
そして命令実行部117が、スタイルシート解析木121を参照して、テンプレート定義以外のトップレベルの命令を実行する(S204)。ここで、トップレベルの命令とは、スタイルシート141における最上位要素の直下の子要素として記述された命令である。図7に示す例であれば、xsl:output命令(変換結果の文書形式の指示命令)がトップレベルの命令に該当する。
【００３４】
次に命令実行部117がテンプレート選択部118に対し、ノード名"/"、適用モード"なし"を指定して、スタイルシート141内から、構造化文書142において最初に処理すべきルートノード用のテンプレートを選択することを要求する(S205)。するとテンプレート選択部118が、該要求を受けてテンプレート選択処理を行う(S206)。このテンプレート選択処理の詳細については後述する。
【００３５】
テンプレート選択処理の実行後、テンプレート選択部118は命令実行部117に対し、選択されたテンプレートに対応する、スタイルシート解析木121上でのテンプレート定義の位置(テンプレートアドレス)を通知する(S207)。すると命令実行部117が、テンプレートの定義内容を参照してテンプレート適用処理を行うことで、構造化文書142に対する実質的な変換処理が行われ、該変換結果が出力データ123に出力される(S208)。このテンプレート適用処理は上記テンプレート選択処理を含み、さらに再帰処理をなすが、その詳細については後述する。そして最後に変換結果出力部120が、変換結果を示す出力データ123を装置利用者に通知する(S209)。
【００３６】
●スタイルシート解析処理(S202)
以下、上記S202におけるスタイルシート解析処理について、図3のフローチャートを用いて詳細に説明する。スタイルシート解析処理では、以下に説明する処理(S302〜S308)を、スタイルシート141に記述されている最後の命令まで繰り返す(S301,S309)。
【００３７】
まずスタイルシート解析部112が、スタイルシート141に記述されている命令を読み込む(S302)。なお、スタイルシートが図7に示すようにXSLT言語で記述されていた場合には、各要素の記述("＜","＞"で囲まれた記述)が命令に相当する。読み込んだ命令がテンプレートの定義でない場合(S303)、スタイルシート解析部112が、該命令をスタイルシート解析木121に追加する(S310)。例えば、図8に示すスタイルシート解析木の例において、図7のxsl:output要素は、図8のoutputノード(ツリー構造の節にあたる長円で囲まれた部分)として追加される。その後、スタイルシート解析部112は、S301,S309の繰り返し処理によりS302に戻る。
【００３８】
一方、S302で読み込んだ命令がテンプレートの定義であった場合(S303)、スタイルシート解析部112は、フィルタリングキー生成部114にフィルタリングキーの生成を要求する(S304)。図7のスタイルシート例では、xsl:template要素がテンプレート定義に相当する。するとフィルタリングキー生成部114では、テンプレート定義の適用パターンの記述をパターン解析部119に渡し、パターンの最右ノード名(要素、属性名)を取得する(S305)。図7のスタイルシート例では、xsl:template要素におけるmatch属性が適用パターンに相当するため、最右ノード名は、"/","persons","person","name"となる。ここで、もし適用パターンが"/a/b/c"と記述されていた場合には、"c"が最右ノード名となる。また、適用パターンが"/"である場合は、パターン解析部119は、例外的に最右ノード名として"/"を割り当てる。なお、最右ノード名を使用するのは、複数のパターン記述を比較する際に差が顕著となる部分であり、後段のテンプレート選択処理(S206)におけるフィルタリングキーの構成要素として適していると考えられるためである。
【００３９】
次に、フィルタリングキー生成部114は、テンプレート定義の適用モード名を取得し、該取得した適用モードとS305で取得したノード名から、テンプレートをフィルタリングするためのフィルタリングキーを生成する(S306)。なお、図7のスタイルシート例における適用モード名は、xsl:template要素のmode属性に相当するため、"under20","over80"となる。なお、mode属性の記述がないテンプレートについては適用モードなしとなる。
【００４０】
ここで、S306における、フィルタリングキー生成部114でのフィルタリングキー生成処理について、詳細に説明する。
【００４１】
まず、S305で取得したノード名を、ノード名一覧125を参照して対応ノード名識別番号に変換する。なお、ノード名がノード名一覧125に登録されていなかった場合には、新規にノード名識別番号を生成して登録する。次に、モード一覧126を参照し、テンプレート定義に記述された適用モードを、モード識別番号に変換する。なお、対応するモード名がモード一覧126に登録されていなかった場合には、新規にモード識別番号を生成して登録する。また、適用モードなしのテンプレートに対しては、モード識別番号として0を割り当てる。そして最後に、上位の1バイトがモード識別番号、下位の1バイトがノード名識別番号となる数値を生成し、これをフィルタリングキーとする。図7のスタイルシート例では、適用パターン名が"name"、適用モードが"under20"であるテンプレート定義のフィルタリングキーは、図11,図12により0x0103となる。
【００４２】
なお本実施形態では、ノード名識別番号およびモード識別番号を1バイト長、フィルタリングキー長を2バイトとした例を示したが、これらのバイト長は、ノード数やモード数に合わせて任意に変更しても良い。また、ノード名識別番号やモード識別番号としては必ずしも連続値である必要はなく、ノード名やモードの文字列のハッシュ値等、一意性をもつ数値であれば使用可能である。
【００４３】
以上のようにS306でフィルタリングキーが生成された後、スタイルシート解析部112は、テンプレートの定義をスタイルシート解析木121に追加する(S307)。なお、図8に示すスタイルシート解析木の例では、長円で囲まれたtemplateノードが、テンプレートの定義に対応する。
【００４４】
次にテンプレート登録部113が、テンプレート一覧124に対し、S306で生成したフィルタリングキーと、S307で追加したテンプレート定義の位置を対応付けて登録する(S308)。本実施形態では、テンプレートの定義の位置(テンプレートアドレス)としてメモリ上のアドレスを使用しているが、テンプレート定義を取得することが可能であれば、他の情報を用いても良い。図10に示すテンプレート一覧の例では、図7の適用パターン名が"name"、適用モードが"under20"のテンプレート定義が、フィルタリングキーが"0x0103"、テンプレートアドレス"tttttttt"で登録されている。
【００４５】
なお、XSLT言語では、テンプレート定義にpriority属性を記述して、複数のテンプレートが適用候補となった場合の選択優先度を定義することが可能である。この優先度に対応するため、S308におけるテンプレート一覧への登録の際に、優先度が高いテンプレートの順にエントリを登録しても良い。これにより、後段のテンプレート選択処理(S206)においてテンプレートを選択する際に、テンプレート一覧124において上位に登録されているエントリが、優先度も高いことが判断できる。
【００４６】
以上説明したS302〜S308、またはS310の処理を、スタイルシートの最後まで繰り返す(S301,S309)ことで、スタイルシート解析木およびテンプレート一覧が生成される。
【００４７】
●テンプレート適用処理(S208)
以下、上記S208におけるテンプレート適用処理について、図5のフローチャートを用いて詳細に説明する。
【００４８】
まず、構造情報取得部116が、入力ノード木122から、適用パターンに一致するノードの位置を取得する(S501)。例えば、入力ノード木122が図6(b)に示す構成であった場合に、適用パターンが"/"であれば、"/"の名前をもつ1つのノード(長円で囲まれた部分)の位置が取得される。同様に、適用パターンが"name"であれば、"name"の名前をもつ3つのノードの位置が取得される。なお、入力ノード木122がW3CによるDOM構造であれば、getElementByName()メソッドを使用してノードを取得することが可能である。
【００４９】
以降、命令実行部117が、S501で取得したノード分(S502,S511)、テンプレート定義内の命令を繰り返す(S503,S510)。
【００５０】
命令実行部117はまず、テンプレート定義内における次の命令を読み込む(S504)。そして、読み込んだ命令がテンプレート呼び出し命令であるか否かを判断する(S505)。なお、スタイルシート141が図7に示すようにXSLT言語で記述されていた場合、テンプレートの呼び出し命令はxsl:apply-templates要素に該当する。
【００５１】
S505で、読み込んだ命令がテンプレート呼び出し命令ではないと判定された場合、該命令を実行し(S512)、出力が必要ならば該実行結果を出力データ123に追加する(S513)。例えば、命令が"html"であれば、出力データ123にhtmlタグ("＜html＞")を追加する。
【００５２】
一方、S505でテンプレート呼び出し命令であると判定された場合、該呼び出し命令に記述されたノード(XSLTにおけるselectの値)、およびモード名を指定して、テンプレート選択部118にテンプレートの選択を要求する(S506)。するとテンプレート選択部118では、受け取った選択要求に応じて上記S206と同様のテンプレート選択処理を行う(S507)。そして命令実行部117に対し、スタイルシート解析木121上にある、適用すべきテンプレート定義のアドレスを通知する(S508)。すると命令実行部117は、S208のテンプレート適用処理を再帰的に呼び出し、現在処理中のノードに対して選択されたテンプレートを適用する(S509)。
【００５３】
以上説明したS504〜S509またはS512,S513の処理を、テンプレート定義内の最後の命令まで繰り返すことを、S501で取得した適用パターンに応じたノード分、実行する。これにより、構造化文書142に対し、スタイルシート141に記述されたテンプレートによる変換が施される。
【００５４】
●テンプレート選択処理(S206)
以下、上記S206およびS507における、テンプレート選択部118でのテンプレート選択処理について、図4のフローチャートを用いて詳細に説明する。
【００５５】
まず、フィルタリングキー生成部114に対し、フィルタリングキーの生成を要求する(S401)。するとフィルタリングキー生成部114は、変換対象ノードのノード名と、テンプレートが呼び出された際に指定された適用モードから、フィルタリングキーを生成する(S402)。このフィルタリングキーの生成方法は、上述した図3に示すスタイルシート解析処理(S202)おいて、テンプレート一覧へ設定するフィルタリングキーを生成した処理(S306)と同様であるため、説明を省略する。
【００５６】
次に、テンプレート一覧124に登録されている全てのテンプレートについて、S404〜S407の処理を繰り返す。
【００５７】
S404では、テンプレート一覧124から次の比較対象となるエントリを取得する。そして、S402で生成したフィルタリングキーを、S404で取得したエントリのフィルタリングキーと比較し、これらが一致しなかった場合には(S405)、次のエントリを取得する(S404)。
【００５８】
一方、フィルタリングキーが一致した場合(S405)、エントリに登録されているテンプレートアドレスから、スタイルシート解析木121上のテンプレートの定義を取得する(S406)。そして、変換対象のノードが、S406で取得したテンプレート定義における適用パターン(図8のmatchの値)を満たすか否かを判定する(S407)。これは、本実施形態におけるフィルタリングキーは、スタイルシートのテンプレート定義における適用パターンの最右ノード名から作成されているため、フィルタリングキーの一致だけでは目的のテンプレートであるか否かの判定には十分ではないためである。例えば、S406で取得したテンプレートの適用パターンが"/a/b"と記述されていた場合に、変換対象ノードがAノードの子のbノードであれば、該変換対象ノードは適用パターンにあてはまらない。なお、スタイルシート141がXSLTで記述されている場合、ノードが適用パターンを満たすか否かの判断は、W3Cで定められているXPath仕様に基づいて行われる。
【００５９】
そして、変換対象ノードが適用パターンを満たした場合(S407)には、テンプレート一覧124においてS404で取得したエントリに登録されているテンプレートアドレスを、テンプレート選択結果として設定し(S409)、処理を終了する。一方、変換対象ノードが適用パターンを満たさなかった場合(S407)には、テンプレート一覧124の次のエントリの取得を行う(S404)。
【００６０】
以上説明したように本実施形態によれば、スタイルシートを用いた構造化文書の変換処理において、構造化文書の各ノードについて適用すべきテンプレートの選択処理を、スタイルシート内のテンプレートをフィルタリングした後に行うことで高速化できる。
【００６１】
例えば、組み込み機器をWebブラウザ経由で操作するためのHTMLで記述された画面を、XML文書からスタイルシートを用いて作成するような環境において、画面生成を高速化することができる。
【００６２】
＜第2実施形態＞
以下、本発明に係る第2実施形態について説明する。上述した第1実施形態では、テンプレート選択処理において、テンプレート一覧124に登録したフィルタリングキーと、テンプレート適用対象のノードと適用時に指定されたモードから生成したフィルタリングキーの比較を行う(S405)例を示した。第2実施形態では、プロセッサにおける単一命令多数データ処理(SIMD)命令を利用して複数の比較処理を同時に実行することで、フィルタリングキーの比較をさらに高速化する例を示す。
【００６３】
図13に、第2実施形態におけるSIMDの演算処理で用いられるSIMDレジスタの例を示す。同図に示すSIMDレジスタ1301,1302,1303のレジスタ長はCPUのアーキテクチャによって異なるが、この例では128ビットとする。SIMDレジスタ1301には、テンプレート一覧124に登録された2バイト(16ビット)のフィルタリングキーが順番に8個ロードされている。SIMDレジスタ1302には、図4のS402の処理で生成された2バイト(16ビット)のフィルタリングキーが8個ロードされている。この2つのSIMDレジスタ1301,1302に対し、2バイトずつ数値比較を行うSIMD命令を行うと、CPUはその比較結果をSIMDレジスタ1303に格納する。例えば、インテルのSSE2アーキテクチャではPCMPEQW命令がこの命令に相当する。
【００６４】
そして、SIMDレジスタ1303において0xffffの値が格納されている部分を検索することで、テンプレート一覧124の何番目のエントリのフィルタリングキーが一致しているのかを判断することができる。図13の例では5番目の値が0xffffとなっているため、テンプレート一覧124における5番目のエントリが、選択対象のテンプレートと同じフィルタリングキーを持つことが分かる。
【００６５】
なお、テンプレート一覧124に登録されているフィルタリングキーが8個以上ある場合には、8個ずつに分けてSIMDレジスタ1301にロードし、複数回の比較演算を行うようにする。また、CPUのアーキテクチャによってはSIMDレジスタが128バイトより大きい場合もあるが、このような場合には、一度に実行可能な数値比較を8個よりも大きくすることができる。また、上述した第1実施形態でも説明したように、ノード名識別番号およびモード識別番号は1バイト長である必要はなく、また、フィルタリングキーも2バイト長である必要はない。この場合、数値比較に使用するSIMD命令はフィルタリングキーの長さに合わせて使用すれば良い。
【００６６】
以上説明したように第2実施形態によれば、CPUの拡張命令であるSIMDが適用可能な環境においてフィルタリング処理を並列化することで、さらなる高速化が実現できる。
【００６７】
＜他の実施形態＞
本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するコンピュータ読取り可能なソフトウェア(コンピュータプログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給する。そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。
【図１】
2014016961.tif 000003
【図２】
2014016961.tif 000004
【図３】
2014016961.tif 000005
【図４】
2014016961.tif 000006
【図５】
2014016961.tif 000007
【図６】
2014016961.tif 000008
【図７】
2014016961.tif 000009
【図８】
2014016961.tif 000010
【図９】
2014016961.tif 000011
【図１０】
2014016961.tif 000012
【図１１】
2014016961.tif 000013
【図１２】
2014016961.tif 000014
【図１３】
2014016961.tif 000015