(57)【特許請求の範囲】
【請求項１】
ＸＳＬＴ（XSL Transformations）スタイルシートを入力するＸＳＬＴスタイルシート入力手段と、
所定のＸＭＬ（Extensible Markup Language）データがしたがうべき文書スキーマを入力するスキーマ入力手段と、
前記ＸＳＬＴスタイルシート入力手段にて入力された前記ＸＳＬＴスタイルシートが、
ｅ、ｅ’：ＸＳＬＴ文の並びを表現する式構成子、である場合に、
前記文書スキーマの文法部分（Ｂ）が所定の２つの文法部分（Ｂ１）と（Ｂ２）との連結として表現できるような全ての組合せを求め、
各組の文法部分（Ｂ１）と（Ｂ２）とに対して、
・ＸＳＬＴスタイルシートｅと文法部分（Ｂ１）に対して推論操作を適用した結果（Ｃ１）
・ＸＳＬＴスタイルシートｅ’と文法部分（Ｂ２）に対して推論操作を適用した結果（Ｃ２）
を求め、
結果（Ｃ１）と結果（Ｃ２）とが未定義でなければ、さらに結果（Ｃ１）と結果（Ｃ２）とに対して、どちらの文法部分からも生成される文書のみを含むような共通部分である結果（Ｃ３）を求め、
文法部分（Ｂ）の全ての分割に対する結果（Ｃ３）のいずれかから生成される文書を全て含むような結果（Ｃ）を求めることにより、他の文書スキーマを表現する生成規則を生成し、
element(σ){e}：ＸＳＬＴのリテラル結果要素の生成、またはelement文に対応する内容、である場合に、
前記文書スキーマの文法部分（Ｂ）のうちで、σ−要素１つの文法部分であり、その子に文法部分（Ｂ１）が現れる場合を探し、
ＸＳＬＴスタイルシートｅと文法部分（Ｂ１）とに対して推論操作を適用した結果（Ｃ１）を求めることにより、他の文書スキーマを表現する生成規則を生成し、
copy{e}：ＸＳＬＴのcopy文に対応する内容、である場合に、
前記文書スキーマの文法部分（Ｂ）のうちで、σを任意の要素名として、σ−要素１つの文法部分であり、その子に文法部分（Ｂ１）が現れる場合を探し、
ＸＳＬＴスタイルシートｅと文法部分（Ｂ１）とに対して推論操作を適用した結果（Ｃ１）のうち、σ−要素１つの文法部分をもとめることにより、他の文書スキーマを表現する生成規則を生成し、
if(σ){e}：ＸＳＬＴのif文でカレントノードの要素名に対してテストした場合に対応する内容、である場合に、
・ＸＳＬＴスタイルシートｅと前記文書スキーマの文法部分（Ｂ）に対して推論操作を適用した結果（Ｃ１）
・ＸＳＬＴスタイルシートｅと空文書とを示す文法部分εに対して推論操作を適用した結果（Ｃ２）
を求め、
結果（Ｃ１）のうち、σ−要素１つの並びで表現されるような文法部分と結果（Ｃ２）との和（Ｃ）を求めることにより、他の文書スキーマを表現する生成規則を生成し、
foreach{e}：ＸＳＬＴのfor-each文で子ノード列、すなわち、./*を選択した場合に対応する内容、である場合に、
前記文書スキーマを２分木文法で表現し、当該２分木文法において、Ｘqq’,eの形で非終端記号を与え、
前記文書スキーマのｋ個の文法部分のうち所定の文法部分（Ｂｋ）が２つの非終端記号の組（ｑ’，ｑ”）で表現される場合に、
・ＸＳＬＴスタイルシートｅと文法部分（Ｂｋ）に対して推論操作を適用した結果（Ｃｋ）
を求め、任意のｑについて
・Ｘqq',e→σ（ω，Ｘqq",e）
という生成規則と、
・Ｘqq→ε
という生成規則とを追加し、
任意のσ−要素について、その子がＸqq',eを開始記号とするような文法部分を求めることにより、他の文書スキーマを表現する生成規則を生成し、
μx.{e}：call-template文に対応する再起呼び出しを表現する構成子、である場合に、
ＸＳＬＴスタイルシートｅの中に自由に出現するｘ、すなわち、他のμx.{e’}におけるｅ’の中ではないようなｘを全てμx.{e}に書き換えたものをｅ”とおき、
ｅ”と前記文書スキーマの文法部分（Ｂ）とに対して推論操作を適用した結果（Ｃ）を求めることにより、他の文書スキーマを表現する生成規則を生成し、
φ：空ＸＳＬＴ文に対応する式構成子、である場合に、
前記文書スキーマの文法部分（Ｂ）がεを含むような文法部分ならば、任意のσに対してどんな子をも持ち得るσ−要素１つの並びを生成する文法部分（Ｃ）を求めることにより、他の文書スキーマを表現する生成規則を生成する
推論実行手段と
を備えることを特徴とするスキーマ生成装置。
【請求項２】
前記スキーマ入力手段は、前記文書スキーマを所定の生成規則の集合に置き換え、
前記推論実行手段は、前記生成規則の集合に基づいて前記他の文書スキーマを表現する生成規則を生成することを特徴とする請求項１に記載のスキーマ生成装置。
【請求項３】
前記推論実行手段は、正規木言語で表現される前記生成規則を生成することを特徴とする請求項１に記載のスキーマ生成装置。
【請求項４】
前記推論実行手段にて生成された前記生成規則を、所定のスキーマ言語による具体的な文書スキーマに変換する変換手段をさらに備えることを特徴とする請求項１に記載のスキーマ生成装置。
【請求項５】
ＸＳＬＴ（XSL Transformations）スタイルシートを入力するＸＳＬＴスタイルシート入力手段と、
前記ＸＳＬＴスタイルシートによる変換結果として生成されるＸＭＬ（Extensible Markup Language）データがしたがうべき文書スキーマを入力するスキーマ入力手段と、
前記ＸＳＬＴスタイルシート入力手段にて入力された前記ＸＳＬＴスタイルシートが、
ｅ、ｅ’：ＸＳＬＴ文の並びを表現する式構成子、である場合に、
前記文書スキーマの文法部分（Ｂ）が所定の２つの文法部分（Ｂ１）と（Ｂ２）との連結として表現できるような全ての組合せを求め、
各組の文法部分（Ｂ１）と（Ｂ２）とに対して、
・ＸＳＬＴスタイルシートｅと文法部分（Ｂ１）に対して推論操作を適用した結果（Ｃ１）
・ＸＳＬＴスタイルシートｅ’と文法部分（Ｂ２）に対して推論操作を適用した結果（Ｃ２）
を求め、
結果（Ｃ１）と結果（Ｃ２）とが未定義でなければ、さらに結果（Ｃ１）と結果（Ｃ２）とに対して、どちらの文法部分からも生成される文書のみを含むような共通部分である結果（Ｃ３）を求め、
文法部分（Ｂ）の全ての分割に対する結果（Ｃ３）のいずれかから生成される文書を全て含むような結果（Ｃ）を求めることにより、他の文書スキーマを表現する生成規則を生成し、
element(σ){e}：ＸＳＬＴのリテラル結果要素の生成、またはelement文に対応する内容、である場合に、
前記文書スキーマの文法部分（Ｂ）のうちで、σ−要素１つの文法部分であり、その子に文法部分（Ｂ１）が現れる場合を探し、
ＸＳＬＴスタイルシートｅと文法部分（Ｂ１）とに対して推論操作を適用した結果（Ｃ１）を求めることにより、他の文書スキーマを表現する生成規則を生成し、
copy{e}：ＸＳＬＴのcopy文に対応する内容、である場合に、
前記文書スキーマの文法部分（Ｂ）のうちで、σを任意の要素名として、σ−要素１つの文法部分であり、その子に文法部分（Ｂ１）が現れる場合を探し、
ＸＳＬＴスタイルシートｅと文法部分（Ｂ１）とに対して推論操作を適用した結果（Ｃ１）のうち、σ−要素１つの文法部分をもとめることにより、他の文書スキーマを表現する生成規則を生成し、
if(σ){e}：ＸＳＬＴのif文でカレントノードの要素名に対してテストした場合に対応する内容、である場合に、
・ＸＳＬＴスタイルシートｅと前記文書スキーマの文法部分（Ｂ）に対して推論操作を適用した結果（Ｃ１）
・ＸＳＬＴスタイルシートｅと空文書とを示す文法部分εに対して推論操作を適用した結果（Ｃ２）
を求め、
結果（Ｃ１）のうち、σ−要素１つの並びで表現されるような文法部分と結果（Ｃ２）との和（Ｃ）を求めることにより、他の文書スキーマを表現する生成規則を生成し、
foreach{e}：ＸＳＬＴのfor-each文で子ノード列、すなわち、./*を選択した場合に対応する内容、である場合に、
前記文書スキーマを２分木文法で表現し、当該２分木文法において、Ｘqq’,eの形で非終端記号を与え、
前記文書スキーマのｋ個の文法部分のうち所定の文法部分（Ｂｋ）が２つの非終端記号の組（ｑ’，ｑ”）で表現される場合に、
・ＸＳＬＴスタイルシートｅと文法部分（Ｂｋ）に対して推論操作を適用した結果（Ｃｋ）
を求め、任意のｑについて
・Ｘqq',e→σ（ω，Ｘqq",e）
という生成規則と、
・Ｘqq→ε
という生成規則とを追加し、
任意のσ−要素について、その子がＸqq',eを開始記号とするような文法部分を求めることにより、他の文書スキーマを表現する生成規則を生成し、
μx.{e}：call-template文に対応する再起呼び出しを表現する構成子、である場合に、
ＸＳＬＴスタイルシートｅの中に自由に出現するｘ、すなわち、他のμx.{e’}におけるｅ’の中ではないようなｘを全てμx.{e}に書き換えたものをｅ”とおき、
ｅ”と前記文書スキーマの文法部分（Ｂ）とに対して推論操作を適用した結果（Ｃ）を求めることにより、他の文書スキーマを表現する生成規則を生成し、
φ：空ＸＳＬＴ文に対応する式構成子、である場合に、
前記文書スキーマの文法部分（Ｂ）がεを含むような文法部分ならば、任意のσに対してどんな子をも持ち得るσ−要素１つの並びを生成する文法部分（Ｃ）を求めることにより、他の文書スキーマを表現する生成規則を生成する
スキーマ生成手段と
を備えることを特徴とするスキーマ生成装置。
【請求項６】
前記スキーマ入力手段は、前記文書スキーマを、所定の生成規則の集合に置き換え、
前記スキーマ生成手段は、前記生成規則の集合と、前記ＸＳＬＴスタイルシートに含まれる要素生成命令とに基づいて、前記ＸＳＬＴスタイルシートへの入力として与えられるＸＭＬデータが適合すべき文書スキーマを表現する生成規則を生成することを特徴とする請求項５に記載のスキーマ生成装置。
【請求項７】
ＸＳＬＴ（XSL Transformations）スタイルシートと、当該ＸＳＬＴスタイルシートによる変換前のＸＭＬ（Extensible Markup Language）データがしたがうべき文書スキーマである入力スキーマと、当該ＸＭＬスタイルシートによる変換後のＸＭＬデータがしたがうべき文書スキーマである出力スキーマとを入力する入力手段と、
前記入力手段にて入力されたＸＳＬＴスタイルシートと入力スキーマと出力スキーマとを格納する格納手段と、
前記格納手段から読み出された前記入力スキーマまたは前記出力スキーマのいずれか一方の文書スキーマと前記ＸＳＬＴスタイルシートとに基づき、前記ＸＳＬＴスタイルシートが、
ｅ、ｅ’：ＸＳＬＴ文の並びを表現する式構成子、である場合に、
前記文書スキーマの文法部分（Ｂ）が所定の２つの文法部分（Ｂ１）と（Ｂ２）との連結として表現できるような全ての組合せを求め、
各組の文法部分（Ｂ１）と（Ｂ２）とに対して、
・ＸＳＬＴスタイルシートｅと文法部分（Ｂ１）に対して推論操作を適用した結果（Ｃ１）
・ＸＳＬＴスタイルシートｅ’と文法部分（Ｂ２）に対して推論操作を適用した結果（Ｃ２）
を求め、
結果（Ｃ１）と結果（Ｃ２）とが未定義でなければ、さらに結果（Ｃ１）と結果（Ｃ２）とに対して、どちらの文法部分からも生成される文書のみを含むような共通部分である結果（Ｃ３）を求め、
文法部分（Ｂ）の全ての分割に対する結果（Ｃ３）のいずれかから生成される文書を全て含むような結果（Ｃ）を求めることにより、他の文書スキーマを表現する生成規則を生成し、
element(σ){e}：ＸＳＬＴのリテラル結果要素の生成、またはelement文に対応する内容、である場合に、
前記文書スキーマの文法部分（Ｂ）のうちで、σ−要素１つの文法部分であり、その子に文法部分（Ｂ１）が現れる場合を探し、
ＸＳＬＴスタイルシートｅと文法部分（Ｂ１）とに対して推論操作を適用した結果（Ｃ１）を求めることにより、他の文書スキーマを表現する生成規則を生成し、
copy{e}：ＸＳＬＴのcopy文に対応する内容、である場合に、
前記文書スキーマの文法部分（Ｂ）のうちで、σを任意の要素名として、σ−要素１つの文法部分であり、その子に文法部分（Ｂ１）が現れる場合を探し、
ＸＳＬＴスタイルシートｅと文法部分（Ｂ１）とに対して推論操作を適用した結果（Ｃ１）のうち、σ−要素１つの文法部分をもとめることにより、他の文書スキーマを表現する生成規則を生成し、
if(σ){e}：ＸＳＬＴのif文でカレントノードの要素名に対してテストした場合に対応する内容、である場合に、
・ＸＳＬＴスタイルシートｅと前記文書スキーマの文法部分（Ｂ）に対して推論操作を適用した結果（Ｃ１）
・ＸＳＬＴスタイルシートｅと空文書とを示す文法部分εに対して推論操作を適用した結果（Ｃ２）
を求め、
結果（Ｃ１）のうち、σ−要素１つの並びで表現されるような文法部分と結果（Ｃ２）との和（Ｃ）を求めることにより、他の文書スキーマを表現する生成規則を生成し、
foreach{e}：ＸＳＬＴのfor-each文で子ノード列、すなわち、./*を選択した場合に対応する内容、である場合に、
前記文書スキーマを２分木文法で表現し、当該２分木文法において、Ｘqq’,eの形で非終端記号を与え、
前記文書スキーマのｋ個の文法部分のうち所定の文法部分（Ｂｋ）が２つの非終端記号の組（ｑ’，ｑ”）で表現される場合に、
・ＸＳＬＴスタイルシートｅと文法部分（Ｂｋ）に対して推論操作を適用した結果（Ｃｋ）
を求め、任意のｑについて
・Ｘqq',e→σ（ω，Ｘqq",e）
という生成規則と、
・Ｘqq→ε
という生成規則とを追加し、
任意のσ−要素について、その子がＸqq',eを開始記号とするような文法部分を求めることにより、他の文書スキーマを表現する生成規則を生成し、
μx.{e}：call-template文に対応する再起呼び出しを表現する構成子、である場合に、
ＸＳＬＴスタイルシートｅの中に自由に出現するｘ、すなわち、他のμx.{e’}におけるｅ’の中ではないようなｘを全てμx.{e}に書き換えたものをｅ”とおき、
ｅ”と前記文書スキーマの文法部分（Ｂ）とに対して推論操作を適用した結果（Ｃ）を求めることにより、他の文書スキーマを表現する生成規則を生成し、
φ：空ＸＳＬＴ文に対応する式構成子、である場合に、
前記文書スキーマの文法部分（Ｂ）がεを含むような文法部分ならば、任意のσに対してどんな子をも持ち得るσ−要素１つの並びを生成する文法部分（Ｃ）を求めることにより、他の文書スキーマを表現する生成規則を生成する
スキーマ生成手段と、
前記スキーマ生成手段にて生成された前記生成規則により表現される文書スキーマと前記格納手段から読み出された前記入力スキーマまたは前記出力スキーマの他方とを比較することにより、前記ＸＳＬＴスタイルシートと前記入力スキーマと前記出力スキーマとの整合性を判定する判定手段と
を備えることを特徴とするデータ処理装置。
【請求項８】
前記判定手段は、前記文書スキーマが、比較対象である前記入力スキーマまたは前記出力スキーマと等しいか、またはこれらを包含する場合に、前記ＸＳＬＴスタイルシートと前記入力スキーマと前記出力スキーマとは整合性を有すると判定することを特徴とする請求項７に記載のデータ処理装置。
【請求項９】
コンピュータを用いたデータ処理方法であって、
ＸＳＬＴ（XSL Transformations）スタイルシートに含まれる要素生成命令を要素生成命令記憶手段に格納するステップと、
所定のＸＭＬ（Extensible Markup Language）データがしたがうべき文書スキーマを表現する生成規則を生成規則記憶手段に格納するステップと、
前記要素生成命令記憶手段から前記要素生成命令を読み出し、前記生成規則記憶手段から前記生成規則を読み出して、当該要素生成命令及び当該生成規則に基づき、当該要素生成命令が、
ｅ、ｅ’：ＸＳＬＴ文の並びを表現する式構成子、である場合に、
前記生成規則の文法部分（Ｂ）が所定の２つの文法部分（Ｂ１）と（Ｂ２）との連結として表現できるような全ての組合せを求め、
各組の文法部分（Ｂ１）と（Ｂ２）とに対して、
・要素生成命令ｅと文法部分（Ｂ１）に対して推論操作を適用した結果（Ｃ１）
・要素生成命令ｅ’と文法部分（Ｂ２）に対して推論操作を適用した結果（Ｃ２）
を求め、
結果（Ｃ１）と結果（Ｃ２）とが未定義でなければ、さらに結果（Ｃ１）と結果（Ｃ２）とに対して、どちらの文法部分からも生成される文書のみを含むような共通部分である結果（Ｃ３）を求め、
文法部分（Ｂ）の全ての分割に対する結果（Ｃ３）のいずれかから生成される文書を全て含むような結果（Ｃ）を求めることにより、他の文書スキーマを表現する生成規則を生成し、
element(σ){e}：ＸＳＬＴのリテラル結果要素の生成、またはelement文に対応する内容、である場合に、
前記生成規則の文法部分（Ｂ）のうちで、σ−要素１つの文法部分であり、その子に文法部分（Ｂ１）が現れる場合を探し、
要素生成命令ｅと文法部分（Ｂ１）とに対して推論操作を適用した結果（Ｃ１）を求めることにより、他の文書スキーマを表現する生成規則を生成し、
copy{e}：ＸＳＬＴのcopy文に対応する内容、である場合に、
前記生成規則の文法部分（Ｂ）のうちで、σを任意の要素名として、σ−要素１つの文法部分であり、その子に文法部分（Ｂ１）が現れる場合を探し、
要素生成命令ｅと文法部分（Ｂ１）とに対して推論操作を適用した結果（Ｃ１）のうち、σ−要素１つの文法部分をもとめることにより、他の文書スキーマを表現する生成規則を生成し、
if(σ){e}：ＸＳＬＴのif文でカレントノードの要素名に対してテストした場合に対応する内容、である場合に、
・要素生成命令ｅと前記生成規則の文法部分（Ｂ）に対して推論操作を適用した結果（Ｃ１）
・要素生成命令ｅと空文書とを示す文法部分εに対して推論操作を適用した結果（Ｃ２）を求め、
結果（Ｃ１）のうち、σ−要素１つの並びで表現されるような文法部分と結果（Ｃ２）との和（Ｃ）を求めることにより、他の文書スキーマを表現する生成規則を生成し、
foreach{e}：ＸＳＬＴのfor-each文で子ノード列、すなわち、./*を選択した場合に対応する内容、である場合に、
前記生成規則を２分木文法で表現し、当該２分木文法において、Ｘqq’,eの形で非終端記号を与え、
前記生成規則のｋ個の文法部分のうち所定の文法部分（Ｂｋ）が２つの非終端記号の組（ｑ’，ｑ”）で表現される場合に、
・要素生成命令ｅと文法部分（Ｂｋ）に対して推論操作を適用した結果（Ｃｋ）
を求め、任意のｑについて
・Ｘqq',e→σ（ω，Ｘqq",e）
という生成規則と、
・Ｘqq→ε
という生成規則とを追加し、
任意のσ−要素について、その子がＸqq',eを開始記号とするような文法部分を求めることにより、他の文書スキーマを表現する生成規則を生成し、
μx.{e}：call-template文に対応する再起呼び出しを表現する構成子、である場合に、
要素生成命令ｅの中に自由に出現するｘ、すなわち、他のμx.{e’}におけるｅ’の中ではないようなｘを全てμx.{e}に書き換えたものをｅ”とおき、
ｅ”と前記生成規則の文法部分（Ｂ）とに対して推論操作を適用した結果（Ｃ）を求めることにより、他の文書スキーマを表現する生成規則を生成し、
φ：空ＸＳＬＴ文に対応する式構成子、である場合に、
前記生成規則の文法部分（Ｂ）がεを含むような文法部分ならば、任意のσに対してどんな子をも持ち得るσ−要素１つの並びを生成する文法部分（Ｃ）を求めることにより、他の文書スキーマを表現する生成規則を生成する
処理と
を含むことを特徴とするデータ処理方法。
【請求項１０】
前記生成規則を生成するステップは、正規木言語で表現される前記生成規則を生成するステップを含むことを特徴とする請求項９に記載のデータ処理方法。
【請求項１１】
前記生成規則を生成するステップにおいて生成された生成規則にて表現される文書スキーマと、所定のＸＭＬデータにおける文書スキーマとを比較することにより、当該ＸＭＬデータまたは前記ＸＳＬＴスタイルシートの正しさを判定するステップをさらに含むことを特徴とする請求項９に記載のデータ処理方法。
【請求項１２】
コンピュータを制御して、データ処理を行うプログラムにおいて、
ＸＳＬＴ（XSL Transformations）スタイルシートに含まれる要素生成命令を要素生成命令記憶手段に格納する処理と、
所定のＸＭＬ（Extensible Markup Language）データがしたがうべき文書スキーマを表現する生成規則を生成規則記憶手段に格納する処理と、
前記要素生成命令記憶手段から前記要素生成命令を読み出し、前記生成規則記憶手段から前記生成規則を読み出して、当該要素生成命令及び当該生成規則に基づき、当該要素生成命令が、
ｅ、ｅ’：ＸＳＬＴ文の並びを表現する式構成子、である場合に、
前記生成規則の文法部分（Ｂ）が所定の２つの文法部分（Ｂ１）と（Ｂ２）との連結として表現できるような全ての組合せを求め、
各組の文法部分（Ｂ１）と（Ｂ２）とに対して、
・要素生成命令ｅと文法部分（Ｂ１）に対して推論操作を適用した結果（Ｃ１）
・要素生成命令ｅ’と文法部分（Ｂ２）に対して推論操作を適用した結果（Ｃ２）
を求め、
結果（Ｃ１）と結果（Ｃ２）とが未定義でなければ、さらに結果（Ｃ１）と結果（Ｃ２）とに対して、どちらの文法部分からも生成される文書のみを含むような共通部分である結果（Ｃ３）を求め、
文法部分（Ｂ）の全ての分割に対する結果（Ｃ３）のいずれかから生成される文書を全て含むような結果（Ｃ）を求めることにより、他の文書スキーマを表現する生成規則を生成し、
element(σ){e}：ＸＳＬＴのリテラル結果要素の生成、またはelement文に対応する内容、である場合に、
前記生成規則の文法部分（Ｂ）のうちで、σ−要素１つの文法部分であり、その子に文法部分（Ｂ１）が現れる場合を探し、
要素生成命令ｅと文法部分（Ｂ１）とに対して推論操作を適用した結果（Ｃ１）を求めることにより、他の文書スキーマを表現する生成規則を生成し、
copy{e}：ＸＳＬＴのcopy文に対応する内容、である場合に、
前記生成規則の文法部分（Ｂ）のうちで、σを任意の要素名として、σ−要素１つの文法部分であり、その子に文法部分（Ｂ１）が現れる場合を探し、
要素生成命令ｅと文法部分（Ｂ１）とに対して推論操作を適用した結果（Ｃ１）のうち、σ−要素１つの文法部分をもとめることにより、他の文書スキーマを表現する生成規則を生成し、
if(σ){e}：ＸＳＬＴのif文でカレントノードの要素名に対してテストした場合に対応する内容、である場合に、
・要素生成命令ｅと前記生成規則の文法部分（Ｂ）に対して推論操作を適用した結果（Ｃ１）
・要素生成命令ｅと空文書とを示す文法部分εに対して推論操作を適用した結果（Ｃ２）を求め、
結果（Ｃ１）のうち、σ−要素１つの並びで表現されるような文法部分と結果（Ｃ２）との和（Ｃ）を求めることにより、他の文書スキーマを表現する生成規則を生成し、
foreach{e}：ＸＳＬＴのfor-each文で子ノード列、すなわち、./*を選択した場合に対応する内容、である場合に、
前記生成規則を２分木文法で表現し、当該２分木文法において、Ｘqq’,eの形で非終端記号を与え、
前記生成規則のｋ個の文法部分のうち所定の文法部分（Ｂｋ）が２つの非終端記号の組（ｑ’，ｑ”）で表現される場合に、
・要素生成命令ｅと文法部分（Ｂｋ）に対して推論操作を適用した結果（Ｃｋ）
を求め、任意のｑについて
・Ｘqq',e→σ（ω，Ｘqq",e）
という生成規則と、
・Ｘqq→ε
という生成規則とを追加し、
任意のσ−要素について、その子がＸqq',eを開始記号とするような文法部分を求めることにより、他の文書スキーマを表現する生成規則を生成し、
μx.{e}：call-template文に対応する再起呼び出しを表現する構成子、である場合に、
要素生成命令ｅの中に自由に出現するｘ、すなわち、他のμx.{e’}におけるｅ’の中ではないようなｘを全てμx.{e}に書き換えたものをｅ”とおき、
ｅ”と前記生成規則の文法部分（Ｂ）とに対して推論操作を適用した結果（Ｃ）を求めることにより、他の文書スキーマを表現する生成規則を生成し、
φ：空ＸＳＬＴ文に対応する式構成子、である場合に、
前記生成規則の文法部分（Ｂ）がεを含むような文法部分ならば、任意のσに対してどんな子をも持ち得るσ−要素１つの並びを生成する文法部分（Ｃ）を求めることにより、他の文書スキーマを表現する生成規則を生成する
処理と
を前記コンピュータに実行させることを特徴とするプログラム。
【請求項１３】
コンピュータを制御して、データ処理を行うプログラムにおいて、
ＸＳＬＴ（XSL Transformations）スタイルシートと、当該ＸＳＬＴスタイルシートによる変換前のＸＭＬ（Extensible Markup Language）データがしたがうべき文書スキーマである入力スキーマと、当該ＸＭＬスタイルシートによる変換後のＸＭＬデータがしたがうべき文書スキーマである出力スキーマとを入力し、データ記憶手段に格納する処理と、
前記データ記憶手段から前記入力スキーマまたは前記出力スキーマのいずれか一方の文書スキーマと前記ＸＳＬＴスタイルシートとを読み出し、読み出した当該文書スキーマと当該ＸＳＬＴスタイルシートとに基づき、前記ＸＳＬＴスタイルシートが、
ｅ、ｅ’：ＸＳＬＴ文の並びを表現する式構成子、である場合に、
前記文書スキーマの文法部分（Ｂ）が所定の２つの文法部分（Ｂ１）と（Ｂ２）との連結として表現できるような全ての組合せを求め、
各組の文法部分（Ｂ１）と（Ｂ２）とに対して、
・ＸＳＬＴスタイルシートｅと文法部分（Ｂ１）に対して推論操作を適用した結果（Ｃ１）
・ＸＳＬＴスタイルシートｅ’と文法部分（Ｂ２）に対して推論操作を適用した結果（Ｃ２）
を求め、
結果（Ｃ１）と結果（Ｃ２）とが未定義でなければ、さらに結果（Ｃ１）と結果（Ｃ２）とに対して、どちらの文法部分からも生成される文書のみを含むような共通部分である結果（Ｃ３）を求め、
文法部分（Ｂ）の全ての分割に対する結果（Ｃ３）のいずれかから生成される文書を全て含むような結果（Ｃ）を求めることにより、他の文書スキーマを表現する生成規則を生成し、
element(σ){e}：ＸＳＬＴのリテラル結果要素の生成、またはelement文に対応する内容、である場合に、
前記文書スキーマの文法部分（Ｂ）のうちで、σ−要素１つの文法部分であり、その子に文法部分（Ｂ１）が現れる場合を探し、
ＸＳＬＴスタイルシートｅと文法部分（Ｂ１）とに対して推論操作を適用した結果（Ｃ１）を求めることにより、他の文書スキーマを表現する生成規則を生成し、
copy{e}：ＸＳＬＴのcopy文に対応する内容、である場合に、
前記文書スキーマの文法部分（Ｂ）のうちで、σを任意の要素名として、σ−要素１つの文法部分であり、その子に文法部分（Ｂ１）が現れる場合を探し、
ＸＳＬＴスタイルシートｅと文法部分（Ｂ１）とに対して推論操作を適用した結果（Ｃ１）のうち、σ−要素１つの文法部分をもとめることにより、他の文書スキーマを表現する生成規則を生成し、
if(σ){e}：ＸＳＬＴのif文でカレントノードの要素名に対してテストした場合に対応する内容、である場合に、
・ＸＳＬＴスタイルシートｅと前記文書スキーマの文法部分（Ｂ）に対して推論操作を適用した結果（Ｃ１）
・ＸＳＬＴスタイルシートｅと空文書とを示す文法部分εに対して推論操作を適用した結果（Ｃ２）
を求め、
結果（Ｃ１）のうち、σ−要素１つの並びで表現されるような文法部分と結果（Ｃ２）との和（Ｃ）を求めることにより、他の文書スキーマを表現する生成規則を生成し、
foreach{e}：ＸＳＬＴのfor-each文で子ノード列、すなわち、./*を選択した場合に対応する内容、である場合に、
前記文書スキーマを２分木文法で表現し、当該２分木文法において、Ｘqq’,eの形で非終端記号を与え、
前記文書スキーマのｋ個の文法部分のうち所定の文法部分（Ｂｋ）が２つの非終端記号の組（ｑ’，ｑ”）で表現される場合に、
・ＸＳＬＴスタイルシートｅと文法部分（Ｂｋ）に対して推論操作を適用した結果（Ｃｋ）
を求め、任意のｑについて
・Ｘqq',e→σ（ω，Ｘqq",e）
という生成規則と、
・Ｘqq→ε
という生成規則とを追加し、
任意のσ−要素について、その子がＸqq',eを開始記号とするような文法部分を求めることにより、他の文書スキーマを表現する生成規則を生成し、
μx.{e}：call-template文に対応する再起呼び出しを表現する構成子、である場合に、
ＸＳＬＴスタイルシートｅの中に自由に出現するｘ、すなわち、他のμx.{e’}におけるｅ’の中ではないようなｘを全てμx.{e}に書き換えたものをｅ”とおき、
ｅ”と前記文書スキーマの文法部分（Ｂ）とに対して推論操作を適用した結果（Ｃ）を求めることにより、他の文書スキーマを表現する生成規則を生成し、
φ：空ＸＳＬＴ文に対応する式構成子、である場合に、
前記文書スキーマの文法部分（Ｂ）がεを含むような文法部分ならば、任意のσに対してどんな子をも持ち得るσ−要素１つの並びを生成する文法部分（Ｃ）を求めることにより、他の文書スキーマを表現する生成規則を生成する
処理と、
前記データ記憶手段から前記入力スキーマまたは前記出力スキーマの他方を読み出し、当該入力スキーマまたは当該出力スキーマと生成された前記他の文書スキーマとを比較することにより、前記ＸＳＬＴスタイルシートと前記入力スキーマと前記出力スキーマとの整合性を判定する処理と
を前記コンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ＸＳＬＴスタイルシートを用いたＸＭＬ文書の変換において、ＸＳＬＴスタイルシートと入出力文書における文書スキーマとの整合性を保証する方法に関する。
【０００２】
【従来の技術】
ＸＭＬ（Extensible Markup Language）では、どのような文書構造のＸＭＬ文書が許容されるかを、文書スキーマ（schema）を記述することにより記述することができる。例えば、ＤＴＤ（文書型定義：Document Type Definition）は、文書スキーマを記述するための代表的なスキーマ言語である。
このため、ＸＭＬ文書を用いてデータ交換を行う場合、当該ＸＭＬ文書を利用するアプリケーションや通信環境の要求に応じて、所定のＸＭＬ文書を他の形式（文書構造）のＸＭＬ文書に構造変換することが必要な場合がある。
【０００３】
ＸＭＬ文書を構造変換して他の形式のＸＭＬ文書を作成するための言語としてＸＳＬＴ（XSL Transformations）がある。ＸＳＬＴは、Ｗ３Ｃ（World Wide Web Consortium）によって制定されており、実装も数多く存在している。このＸＳＬＴで作成されたＸＳＬＴスタイルシートに任意のＸＭＬ文書を入力することにより、構造変換された他の形式のＸＭＬ文書を生成することができる。
【０００４】
ところで、ＸＳＬＴスタイルシートは、通常、入力文書がどんな文書スキーマに適合するか（以下、この場合の文書スキーマを入力スキーマという）、及び出力文書がどんな文書スキーマに適合しなければならないか（以下、この場合の文書スキーマを出力スキーマという）が想定されて書かれている。また、データベースのような大きな文書に対する検索をＸＳＬＴで書く場合や、ＸＭＬ文書をＨＴＭＬ文書やＸＨＴＭＬ文書に変換するＸＳＬＴスタイルシートなどのように、入力スキーマが予めわかっている場合や、出力スキーマが明示的に決まっている場合もある。
【０００５】
しかし、ＸＳＬＴは、このような入力スキーマや出力スキーマを一切利用しない。すなわち、ＸＳＬＴスタイルシートはＸＭＬ文書を文書スキーマとは関係なく変換するのであり、ＸＳＬＴスタイルシートの出力する文書が出力スキーマに適合しているという保証はない。この場合、出力文書が出力スキーマに適合していることを保証するには、個々の出力文書を実際に出力スキーマと照合する必要があった。例えば、入力文書が１００個あれば、１００個の出力文書を各々個別に出力スキーマと照合しなければならなかった。しかも、この場合、１０１個目の入力文書を処理して得られる出力文書が、出力スキーマに適合するという保証はなく、これも別途出力スキーマと照合する必要があった。
【０００６】
【発明が解決しようとする課題】
上記のように、ＸＳＬＴスタイルシートは、ＸＭＬ文書を文書スキーマに関わらずに構造変換する。すなわち、ＸＳＬＴスタイルシートと入力スキーマと出力スキーマとが整合していることを保証していない。したがって、出力文書が出力スキーマに適合するかどうかは、個々の出力文書ごとに個別に確認しなければならなかった。
また、誤りのあるＸＳＬＴスタイルシートの場合、期待された入力スキーマにしたがうＸＭＬ文書を入力しても、期待された出力スキーマに適合したＸＭＬ文書に変換しない場合がある。従来、ＸＳＬＴスタイルシートにおけるこのような誤りを発見するためには、プログラマが自分で実際にＸＭＬ文書を変換するテストなどを繰り返す必要があった。
【０００７】
この問題を解決するため、ＸＭＬ文書の構造変換（以下、文書変換と称す）とＸＭＬ文書におけるスキーマの変換（スキーマ推論）の両方が可能な言語を設計し、ＸＳＬＴの代わりに用いるという提案がある。
ＸＤｕｃｅやType Checking for XML transformersは、そのような変換言語である。
ＸＤｕｃｅは、順方向のスキーマ推論を行う言語である。すなわち、入力スキーマと変換プログラムを与えられて、内部的な中間スキーマを作成し、ユーザが指定した出力スキーマとこの中間スキーマとが整合しているかどうかを判定する。ＸＤｕｃｅの実装は、一般に公開されている。一方、Type Checking for XML transformersは、逆方向のスキーマ推論を行う方式の提案である。つまり、出力スキーマと変換プログラムとを与えられて入力スキーマを推論する方法の提案である。
【０００８】
このＸＤｕｃｅのような変換言語は、入力スキーマにしたがう文書を変換した結果が出力スキーマに適合することを保証することができる。しかし、専用の変換言語としたため、Ｗ３Ｃで制定されているＸＳＬＴのように広く利用されることは期待できない。また、ＸＤｕｃｅによるスキーマ推論は、健全性を保証するのみである。
Type Checking for XML transformersによる提案は、健全かつ完全なスキーマ推論を可能にするが、実現可能な方式を示したものではなく、原理的に可能であることを示したに過ぎない。
【０００９】
ここで、「健全」「完全」の文言について説明する。
ＸＤｕｃｅで用いられる順方向のスキーマ推論では、
１．与えられた入力スキーマに属する全ての文書が推論されたスキーマに属する出力文書に必ず変換されるならば「健全」。
２．推論されたスキーマの出力文書に変換されるような入力文書が必ず入力文書スキーマに属するならば「完全」。
と定義される。一方、逆方向のスキーマ推論では、
１．推論されたスキーマに属する全ての文書が与えられた出力スキーマに属する出力文書に変換されるならば「健全」。
２．与えられた出力スキーマに属する出力文書に変換されるような入力文書を全て含むようなスキーマが推論されるならば「完全」。
と定義される。
【００１０】
「健全」「完全」の別は、そのスキーマ推論を用いて実現できる「スキーマチェック（スキーマ検証）」の健全性、完全性に由来する。「スキーマチェック」では、与えられたプログラムを静的に解析して当該プログラムが「正しい」かどうか（常にスキーマを壊さずに正しく動作するどうか）をＹＥＳ／ＮＯで判定する。逆方向のスキーマ推論を用いた場合、推論されたスキーマが与えられたプログラムの入力スキーマを包含するならばＹＥＳであり、そうでないならばＮＯである。一方、順方向のスキーマ推論を用いた場合、与えられた出力スキーマが推論されたスキーマを包含するならばＹＥＳであり、そうでないならばＮＯである。どちらの場合も、結果として得られた「スキーマチェック」についての健全性、完全性が、スキーマ推論における健全性、完全性からそれぞれ導かれることとなる。ただし、「スキーマチェック」の健全性、完全性とは以下のようなものである。
１．「スキーマチェック」がＹＥＳと答えたときにプログラムが必ず正しいものならば「健全」
２．正しいプログラムの全てに「スキーマチェック」がＹＥＳと答えるならば「完全」
一般に、スキーマつきプログラミング言語のスキーマチェックは健全でなくてはならない。また、完全であることが望ましいが、通常は完全たり得ない。
【００１１】
以上のように、従来のＸＳＬＴスタイルシートは、ＸＳＬＴスタイルシートと入力スキーマと出力スキーマとが整合していることを保証しないため、出力文書が出力スキーマに適合することを機械的に保証することができない。また、ＸＳＬＴの代わりにＸＤｕｃｅなどの特別な言語を用いるとしても、実用性能が十分でないことや、特別な言語であるために広く利用することが難しいといった問題が残る。
したがって、ＸＳＬＴスタイルシートと入力スキーマと出力スキーマとが整合していることを保証する手段が望まれる。ＸＳＬＴスタイルシートを用いたＸＭＬ文書の変換における信頼性が向上し、またＸＳＬＴを用いるために広範囲な利用することが容易となる。
【００１２】
そこで、本発明は、ＸＤｕｃｅなどの特別な言語を用いることなく、所望の変換処理に用いるＸＳＬＴスタイルシートと入力スキーマと出力スキーマとが整合していることを保証できるようにすることを目的とする。
また、これにより、ＸＳＬＴスタイルシートが正しく動作することを保証できるようにすることを目的とする。
さらに、本発明は、ＸＳＬＴスタイルシートと入力スキーマと出力スキーマとが整合していることを保証することにより、入力スキーマが存在しない場合に、どのような構造範囲のＸＭＬ文書であれば要求される出力スキーマを持ったＸＭＬ文書に変換できるかを知ることができるようにすることを目的とする。
【００１３】
【課題を解決するための手段】
上記の目的を達成する本発明は、次のように構成されたことを特徴とするスキーマ生成装置を提供する。すなわち、このスキーマ生成装置は、ＸＳＬＴスタイルシートを入力するＸＳＬＴスタイルシート入力手段と、所定のＸＭＬデータがしたがうべき文書スキーマを入力するスキーマ入力手段と、入力されたＸＳＬＴスタイルシートと入力された文書スキーマとに基づき、所定の推論規則を用いて導き出される他の文書スキーマを表現する生成規則を生成する推論実行手段とを備える。
【００１４】
ここで、さらに詳しくは、このスキーマ入力手段は、入力した文書スキーマを所定の生成規則の集合に置き換え、この推論実行手段は、置き換えられた生成規則の集合に基づいて他の文書スキーマを表現する生成規則を生成する。
また、この推論実行手段にて生成される生成規則を正規木言語で表現されることが好ましい。
さらに、上記のスキーマ生成装置は、推論実行手段にて生成された生成規則を、所定のスキーマ言語による具体的な文書スキーマに変換する変換手段をさらに備える構成とすることができる。
【００１５】
また、本発明は、次のように構成されたことを特徴とするデータ処理装置を提供する。すなわち、このデータ処理装置は、ＸＳＬＴスタイルシートと、このＸＳＬＴスタイルシートによる変換前のＸＭＬデータがしたがうべき文書スキーマである入力スキーマと、このＸＭＬスタイルシートによる変換後のＸＭＬデータがしたがうべき文書スキーマである出力スキーマとを入力する入力手段と、入力されたＸＳＬＴスタイルシートと入力スキーマと出力スキーマとを格納する格納手段と、この格納手段から読み出された入力スキーマまたは出力スキーマのいずれか一方とＸＳＬＴスタイルシートとに基づいて所定の文書スキーマを生成するスキーマ生成手段と、スキーマ生成手段にて生成された文書スキーマと格納手段から読み出された入力スキーマまたは出力スキーマの他方とを比較することにより、ＸＳＬＴスタイルシートと入力スキーマと出力スキーマとの整合性を判定する判定手段とを備える。
【００１６】
ここで、さらに詳しくは、このスキーマ生成手段は、出力スキーマとＸＳＬＴスタイルシートとに基づいて、逆方向の推論により所定の文書スキーマを生成し、この判定手段は、生成された所定の文書スキーマとこの入力スキーマとを比較することによって、ＸＳＬＴスタイルシートと入力スキーマと出力スキーマとの整合性を判定する。
また、この判定手段は、生成された文書スキーマが、比較対象である入力スキーマまたは出力スキーマと等しいか、またはこれらを包含する場合に、ＸＳＬＴスタイルシートと入力スキーマと出力スキーマとは整合性を有すると判定する。
【００１７】
さらにまた、本発明は、上記のような入力手段及び格納手段を備え、この格納手段からＸＳＬＴスタイルシートと入力スキーマと出力スキーマとを読み出し、この入力スキーマに適合するＸＭＬデータをこのＸＳＬＴスタイルシートが変換することによって得られるＸＭＬデータがこの出力スキーマに適合することを保証できるかどうかを判定する判定手段とを備えるデータ処理装置として実現することができる。
【００１８】
また、本発明は、コンピュータを用いたデータ処理方法であって、ＸＳＬＴスタイルシートに含まれる要素生成命令を要素生成命令記憶手段に格納するステップと、所定のＸＭＬデータがしたがうべき文書スキーマを表現する生成規則を生成規則記憶手段に格納するステップと、要素生成命令記憶手段から要素生成命令を読み出し、生成規則記憶手段から生成規則を読み出して、この要素生成命令及び生成規則に基づき、所定の推論規則を用いて導き出される他の文書スキーマを表現する生成規則を生成するステップとを含むことを特徴とする。
【００１９】
ここで、この生成規則を生成するステップは、逆方向の推論を行うことにより、要素生成命令と、ＸＳＬＴスタイルシートによる変換結果として生成されるＸＭＬ（Extensible Markup Language）データがしたがうべき文書スキーマの生成規則とに基づいて、このＸＳＬＴスタイルシートへの入力として与えられるＸＭＬデータが適合すべき文書スキーマの生成規則を生成するステップを含む。
また、この生成規則を生成するステップは、正規木言語で表現される生成規則を生成するステップを含む。
さらにまた、上記のデータ処理方法は、生成規則を生成するステップにおいて生成された生成規則にて表現される文書スキーマと、所定のＸＭＬデータにおける文書スキーマとを比較することにより、このＸＭＬデータまたはＸＳＬＴスタイルシートの正しさを判定するステップをさらに含む。
【００２０】
また、本発明は、コンピュータを制御して上述したスキーマ生成装置やデータ処理装置を実現し、あるいは上述したデータ処理方法を実行させるプログラムとして実現することができる。このプログラムは磁気ディスクや光ディスク、半導体メモリなどの記憶媒体に格納して配布したり、ネットワークを介して配信したりすることにより提供することができる。
【００２１】
【発明の実施の形態】
以下、添付図面に示す実施の形態に基づいて、この発明を詳細に説明する。
まず、本発明の概要を説明する。本発明は、ＸＳＬＴスタイルシートを要素生成命令の集まりと解釈する。また、ＸＭＬ文書のスキーマ（入力スキーマまたは出力スキーマ）を生成規則の集まりとして表現する。そして、スキーマ推論のための推論規則群を繰り返し適用することにより、ＸＳＬＴスタイルシートの各要素生成命令及びＸＭＬ文書のスキーマ（入力スキーマまたは出力スキーマ）における各生成規則から、他のＸＭＬ文書のスキーマ（出力スキーマまたは入力スキーマ）の生成規則を推論し生成する。これにより、例えばＸＳＬＴスタイルシートと変換後のＸＭＬ文書（出力文書）の出力スキーマとに基づいて変換前のＸＭＬ文書（入力文書）の入力スキーマを推論することができ、整合することが保証されたＸＳＬＴスタイルシートと出力スキーマと入力スキーマとを得ることができる。
【００２２】
具体的には、この推論に用いられたＸＳＬＴスタイルシートに対し、この推論によって得られた入力スキーマにしたがうＸＭＬ文書を入力すれば、生成される出力文書は、この推論に用いられた出力スキーマに適合することが保証される。反対に、この推論に用いられたＸＳＬＴスタイルシートによる変換で、この推論に用いられた出力スキーマに適合する出力文書を得るには、この推論によって得られた入力スキーマに適合するＸＭＬ文書を入力文書とすれば良いことが保証される。さらに、この推論によって得られた入力スキーマにしたがうＸＭＬ文書をＸＳＬＴスタイルシートに入力して、この推論に用いられた出力スキーマに適合する出力文書が得られれば、このＸＳＬＴスタイルシートが正しく動作していることが保証される。
【００２３】
図１は、本実施の形態のスキーマ生成検証システムを実現するのに好適なコンピュータ装置のハードウェア構成の例を模式的に示した図である。
図１に示すコンピュータ装置は、ＣＰＵ（中央処理装置）１０１と、システムバスを介してＣＰＵ１０１に接続されたＭ／Ｂ（マザーボード）チップセット１０２及びメインメモリ１０３と、ＰＣＩバスなどの高速なバスを介してＭ／Ｂチップセット１０２に接続されたビデオカード１０４、ハードディスク１０５及びネットワークインターフェイス１０６と、さらにこの高速なバスからブリッジ回路１１０及びＩＳＡバスなどの低速なバスを介してＭ／Ｂチップセット１０２に接続されたフロッピーディスクドライブ１０７、キーボード１０８及びＩ／Ｏポート１０９とを備える。
なお、図１は本実施の形態を実現するコンピュータ装置の構成を例示するに過ぎず、本実施の形態を適用可能であれば、他の種々のシステム構成を取ることが可能である。
【００２４】
図２は、図１に示したコンピュータ装置にて実現される本実施の形態によるスキーマ生成検証システムの構成を示す図である。
図２を参照すると、本実施の形態は、処理対象であるＸＳＬＴスタイルシートを入力するＸＳＬＴスタイルシート入力部１０と、処理対象である出力スキーマを入力する出力スキーマ入力部２０と、推論規則を適用して生成すべき文書スキーマ（入力スキーマ）を構成する生成規則群を生成する推論実行部３０と、推論実行部３０にて生成された生成規則群を持った入力文法を種々の形式で出力する入力文法出力部４０とを備える。
【００２５】
図２に示したスキーマ生成検証システムの各構成要素は、図１に示したメインメモリ１０３に展開されたプログラムにてＣＰＵ１０１を制御することにより実現される仮想的なソフトウェアブロックである。ＣＰＵ１０１を制御してこれらの機能を実現させる当該プログラムは、磁気ディスクや光ディスク、半導体メモリ、その他の記憶媒体に格納して配布したり、ネットワークを介して配信したりすることにより提供することができる。本実施の形態では、図１に示したネットワークインターフェイス１０６やフロッピーディスクドライブ１０７、図示しないＣＤ−ＲＯＭドライブなどを介して当該プログラムを入力し、ハードディスク１０５に格納する。そして、ハードディスク１０５に格納されたプログラムをメインメモリ１０３に読み込んで展開し、ＣＰＵ１０１にて実行することにより、図２に示した各構成要素の機能を実現する。
【００２６】
図２に示すスキーマ生成検証システムにおいて、ＸＳＬＴスタイルシート入力部１０は、ＸＳＬＴスタイルシートのスクリプト（以下、ＸＳＬＴスクリプト）を入力し、ＸＳＬＴ式に変換する。
ＸＳＬＴスクリプトは、図１に示したハードディスク１０５に格納されているものを読み出して処理対象としても良いし、ネットワークインターフェイス１０６を介して他の装置から入力したり、キーボード１０８その他の入力手段を介して入力したりすることもできる。また、変換されたＸＳＬＴ式は、図１に示したＣＰＵ１０１のキャッシュメモリやメインメモリ１０３に保持される。
ここで、ＸＳＬＴ式とは、ＢＮＦ（Backus Naur Form）記法などで表現される計算機に理解しやすい木構造で記述される。ＸＳＬＴスクリプト自体をＸＳＬＴ式と考えることも可能であるが、実際のＸＳＬＴスクリプトは冗長、すなわち、同じ動作をするのに幾通りもの記述があるので、本実施の形態では、似た機能を持つ命令をとりまとめて大きく以下の７つのＸＳＬＴ式基本構成子に分類した。なお、以下に現れるＸＳＬＴの文の詳細及び用語（カレントノード、子ノード列、リテラル結果要素）については、Ｗ３Ｃの勧告
XSL Transformations (XSLT) Version 1.0 (W3C Recommendation 16 November 1999)http://www.w3.org/TR/xslt
に詳しい。
【００２７】
（１）ｅ、ｅ’は、ＸＳＬＴ文の並びを表現する式構成子である。
（２）element(σ){e}は、ＸＳＬＴのリテラル結果要素の生成、あるいは、element文に対応する。
（３）copy{e}は、直接にはＸＳＬＴのcopy文に対応する。
（４）if(σ){e}は、ＸＳＬＴのif文でカレントノードの要素名に対してテストした場合に対応する。
（５）foreach{e}とは、直接的にはＸＳＬＴのfor-each文で子ノード列、すなわち、./*を選択した場合に対応する。
（６）μx.{e}は、直接にはcall-template文に対応する再起呼び出しを表現する構成子である。
（７）φは空ＸＳＬＴ文に対応する式構成子である。
【００２８】
例えば、ＸＳＬＴで頻繁に使われるapply-templates文は、ＸＳＬＴ式
μx. {... {for-each{x}} ...}
に対応している。また、value-of文で自分の下位のノード全てを選択し、それを出力するという動作は、ＸＳＬＴ式
μx. {copy{for-each{x}}}
に対応している。さらにまた、template文をある要素名σにマッチさせる場合には、if(σ){e}構成子を使うことができる。その他にも様々なケースで、ＸＳＬＴ式がＸＳＬＴスクリプトを模倣できる場合がある。全てのＸＳＬＴスクリプトが、このように上記の式構成子を用いて表現できるわけではないが、ほとんどのＸＳＬＴスクリプトは、上記の式構成子の部分あるいは全てを含んでいると言うことができる。
【００２９】
出力スキーマ入力部２０は、ＤＴＤやＲＥＬＡＸ（REgular LAnguage description for XML）などのスキーマ言語で記述された出力スキーマを入力し、適当な文法（以下、出力文法）に変換する。本実施の形態では、２分木（binary tree）文法に変換することとする。
出力スキーマは、図１に示したハードディスク１０５に格納されているものを読み出して処理対象としても良いし、ネットワークインターフェイス１０６を介して他の装置から入力したり、キーボード１０８その他の入力手段を介して入力したりすることもできる。また、変換された出力文法は、図１に示したＣＰＵ１０１のキャッシュメモリやメインメモリ１０３に保持される。
【００３０】
ここで、２分木文法について説明する。
図１０（Ａ）に示す木と図１０（Ｂ）に示す２分木との対応は一意である。ＤＴＤなど、ほとんどの文書型定義は、図１０（Ａ）に示すような木で、正規木言語とよばれる木言語のクラスに含まれる表現能力を持つ。これは、図１０（Ｂ）に示す木では正規２分木言語とよばれる範囲である。この正規２分木言語を生成する２分木文法は、非終端記号集合、生成規則、終端記号、開始記号で表現される。
なお、ＤＴＤやＲＥＬＡＸなどで記述されたスキーマから２分木文法への変換には、既存の技術を用いることができる。
【００３１】
推論実行部３０は、ＸＳＬＴ式及び出力スキーマの全体から出発し、プログラムの末端に至るまで、推論規則を繰り返し適用する操作（以下、推論操作）を行う。そして、この推論操作の過程で、入力文書がしたがうべき文書スキーマの文法（以下、入力文法）を生成する。
推論実行部３０においては、推論規則群を、ＸＳＬＴ式の各要素生成命令に対してなるべく正しく用意する必要がある。どのような規則群が正しいと言えるかについては後述する。
【００３２】
図３は、推論実行部３０による推論操作を説明する図である。
図３を参照すると、推論操作においては、まず、図１に示したＣＰＵ１０１のキャッシュメモリやメインメモリ１０３に保持されているＸＳＬＴ式及び出力文法のうち、個々のＸＳＬＴ式（部分）及び出力文法の文法部分に着目して読み出し、個別に推論を実行して入力文法の文法部分を出力する。そして、得られた文法部分を合成して入力文法を生成する。推論操作において着目しているＸＳＬＴ式に部分式、すなわち{}で括られた式がある場合は、当該部分式に対して再帰的に推論規則を適用する。そして、下位の部分式から得られた入力文法の文法部分を利用して上位の文法部分の推論操作を実行する。なお、生成される入力文法は任意の形式で良いが、正規木言語にてスキーマを記述し得る文法であることが好ましい。
推論実行部３０により生成された入力文法は、図１に示したＣＰＵ１０１のキャッシュメモリやメインメモリ１０３に保持される。
【００３３】
ここで、ある２分木文法に対して、その文法部分とは、２つの非終端記号の組（q,q'）で表現される。これは、開始記号をｑとし、生成中の文書の右端に出現する記号が非終端記号ｑ’であった場合のみ、ｑ’→εという書き換えを許した場合に生成される文書の集合を表している。このことは、文法部分（q,q'）により生成される文書の後に文法部分（q',q''）により生成される文書を並べたものは、そしてそのような文書のみが、文法部分（q,q''）によって生成され得る文書であるということを保証する。
２分木文法を使わない場合であっても、文法部分に相応するデータ構造を考える必要がある。例えば、ＤＴＤが
<!ELEMENT doc (a*,b*)>
のようであったならば、doc-要素の内容モデルは、次のように２つの文法部分の連結として表現される。すなわち、
・(a)*と(a*,b*)
・(a*,b*)と(b)*
の２通りである。なお、a-要素１つの文法部分とは、<a>…</a>という形をした文書のみを生成する文法部分のことである。doc-要素の内容モデルに含まれる要素１つの文法部分は、（a|b）である。
なお、具体的な推論規則の内容及び推論操作の手順については後述する。
【００３４】
入力文法出力部４０は、図１に示したＣＰＵ１０１のキャッシュメモリやメインメモリ１０３から、推論実行部３０にて生成された入力文法を読み出し、実際に使用可能な形態（すなわち、ＤＴＤ等のスキーマ言語に基づく文書スキーマ）に変換して出力する。また、入力文法を文書スキーマに変換する変換手段として動作するのみならず、生成された入力文法を他の文法と比較してその包含関係を判断する場合などには、生成された入力文法をそのまま出力することもできる。
【００３５】
以上のように構成された本実施の形態では、次のことが保証される。
所定のＸＳＬＴスタイルシートと所定の出力スキーマとを入力としてスキーマ生成が行われた場合、生成された文書スキーマは、入力スキーマとして健全である。すなわち、この文書スキーマに合致する全てのＸＭＬ文書（入力文書）は、処理対象であったＸＳＬＴスタイルシートによって、必ず処理対象であった出力スキーマに適合するＸＭＬ文書（出力文書）に変換される。
すなわち、本実施の形態を使えば期待された入力スキーマに合致するＸＭＬ文書を与えられれば期待された出力スキーマに適合するＸＭＬ文書を出力するという意味において、ＸＳＬＴスタイルシートが正しいか正しくないかを機械的に判定できる。このため、プログラマは、ＸＳＬＴスタイルシートの誤りを発見するために自らＸＭＬ文書の変換テストなどを行う必要が無く、負担を軽減することができる。
一方、生成されたこの文書スキーマは、入力スキーマとして完全である。すなわち、所定のＸＭＬ文書（入力文書）が、処理対象であったＸＳＬＴスタイルシートによって処理対象であった出力スキーマに適合するＸＭＬ文書（出力文書）に変換されるならば、当該入力文書は、必ず本実施の形態にて生成された文書スキーマに合致する。
ここで、生成された文書スキーマが健全であることと、完全であることとは重要である。上述した推論規則群の正しさとは、この両者のどちらかあるいは両方が成立することが保証されるような推論規則に他ならない。出力スキーマ及び入力スキーマとして正規木言語を用いることにより、この文書スキーマの健全性及び完全性を満足することができる。
【００３６】
次に、推論実行部３０による推論操作の具体的な手順及び推論規則の内容について説明する。
上記のように、本実施の形態によるスキーマ生成検証システムは、ＸＳＬＴスタイルシートと出力スキーマとを入力し、入力スキーマの生成規則群を生成する。すなわち、逆方向のスキーマ推論を行う。これとは反対に、ＸＳＬＴスタイルシートと入力スキーマとを入力し、出力スキーマの生成規則群を生成する順方向のスキーマ推論を行うことも可能である。本実施の形態では、実際の推論において、順方向よりも逆方向の推論が優れている場合が多いことから、逆方向のスキーマ推論を採用する。
【００３７】
推論実行部３０は、図３に示したように、着目中のＸＳＬＴ式と出力文法における着目中の文法部分とを入力し、推論を行って、入力文法の文法部分を出力する。なお、出力である入力文法の文法部分は、必ず要素１つの文法部分であるとする。一方、入力である出力文法の文法部分は、複数のあるいは０個の要素が並んだものを示し得るような文法部分であるとする。
推論は、入力における同じ文法部分とＸＳＬＴ式との組合せに対して２回行われる必要はないため、各組合せに対する推論が済んだならば、当該文法部分とＸＳＬＴ式との組合せに対して何を推論したかを、例えばテーブルに登録して覚えておき、利用することができる。また、ある文法部分とＸＳＬＴ式との組合せに対する推論の途中で、自分自身に対する推論が要求された場合は、即座にＵＮＤＥＦ（未定義）という結果を返す。
【００３８】
図４は、推論実行部３０による推論手順を説明するフローチャートである。
図４を参照すると、処理対象であるＸＳＬＴ式及び出力文法の文法部分を入力した推論実行部３０は、当該ＸＳＬＴ式が上述した７種類の基本構成子のいずれであるかを調べ、その基本構成子に応じた推論規則を適用する（ステップ４０１〜４１４）。なお、図４においては、便宜上、ＸＳＬＴ式が該当する基本構成子の種類の判断を上述した基本構成子（１）〜（７）の順序で行っているが、本処理では、該当する基本構成子が判断でき、対応する推論を行うことができれば良いので、この順番に限るものではない。
【００３９】
図４において、まず、処理対象のＸＳＬＴ式が基本構成子（１）のｅ、ｅ’であった場合、推論実行部３０は、次の推論規則を適用する（ステップ４０１、４０２）。
処理対象である出力文法の文法部分（Ｂ）が所定の２つの文法部分（Ｂ１）と（Ｂ２）との連結として表現できるような全ての組合せを求める。出力文法が２分木文法である場合、文法部分（Ｂ）が（ｑ，ｑ”）ならば、全ての非終端記号ｑ’に対して（ｑ，ｑ’）と（ｑ’，ｑ”）という文法部分の組合せを求めることになる。各組の文法部分（Ｂ１）と（Ｂ２）とに対して、
・ＸＳＬＴ式ｅと文法部分（Ｂ１）に対して推論操作を適用した結果（Ｃ１）
・ＸＳＬＴ式ｅ’と文法部分（Ｂ２）に対して推論操作を適用した結果（Ｃ２）
を求める。もし、（Ｃ１）と（Ｃ２）とがＵＮＤＥＦでなければ、さらに（Ｃ１）と（Ｃ２）とに対して、どちらの文法部分からも生成される文書のみを含むような共通部分（Ｃ３）を求める。
次に、文法部分（Ｂ）の全ての分割に対する結果（Ｃ３）のいずれかから生成される文書を全て含むような和（Ｃ）を求める。この（Ｃ）が推論結果である入力文法の文法部分である。したがって、推論実行部３０は、文法部分（Ｃ）を出力する。
図５は、以上の推論規則を図解した図である。
【００４０】
ここで、複数の文法あるいは文法部分の共通部分とは、それらの文法あるいは文法部分うちのいずれによっても生成することのできる文書の集まりのことである。また、複数の文法あるいは文法部分の和とは、それらの文法あるいは文法部分うちのいずれかによって生成することのできる文書の集まりのことである。通常の２分木文法において、単純に共通部分や和を求める方法は周知である。しかし、本発明においては共通部分や和を求められるべき文法部分がその時点で内部構造まで既知ではない場合、すなわち再帰的な推論を要する場合があり得る。しかしながら、これを解決するための遅延的な共通部分、和の計算アルゴリズムは既存技術であり、例えば次の文献に詳細に記載されている。
文献：D.E.Muller and P.E.Schupp. Alternating automata on infinte trees.Theoretical Computer Science, 54,;267-276, 1987
【００４１】
次に、処理対象のＸＳＬＴ式が基本構成子（２）のelement(σ){e}であった場合、推論実行部３０は、次の推論規則を適用する（ステップ４０３、４０４）。処理対象である出力文法の文法部分（Ｂ）のうちで、σ−要素１つの文法部分であり、その子に文法部分（Ｂ１）が現れる場合を探す。出力文法が２分木文法である場合、文法部分（Ｂ１）は、（ｑ，ｑ’）に注目しているときに、ｑ→σ（ｑ”，ｑ’）であるようなｑ”に対して（ｑ”，ｑ'''）である。ただし、ｑ'''とは、２分木文法の中でｑ'''→εであるような非終端記号であるとする。
そして、ＸＳＬＴ式ｅと文法部分（Ｂ１）とに対して推論操作を適用した結果（Ｃ１）が推論結果である入力文法の文法部分（Ｃ）である。ただし、ｑ'''→εである非終端記号ｑ'''が複数ある場合は、全てのｑ'''に対しての（Ｃ１）の和を推論結果の文法部分（Ｃ）とする。（Ｃ１）が常にＵＮＤＥＦならば、（Ｃ）もＵＮＤＥＦである。
図６は、以上の推論規則を図解した図である。
【００４２】
次に、処理対象のＸＳＬＴ式が基本構成子（３）のcopy{e}であった場合、推論実行部３０は、次の推論規則を適用する（ステップ４０５、４０６）。
処理対象である出力文法の文法部分（Ｂ）のうちで、σを任意の要素名として、σ−要素１つの文法部分であり、その子に文法部分（Ｂ１）が現れる場合を探す。出力文法が２分木文法である場合、文法部分（Ｂ１）は、（ｑ，ｑ’）に注目しているときに、ｑ→σ（ｑ”，ｑ’）であるようなｑ”に対して（ｑ”，ｑ'''）である。ただし、ｑ'''とは、２分木文法の中でｑ'''→εであるような非終端記号であるとする。
そして、ＸＳＬＴ式ｅと文法部分（Ｂ１）とに対して推論操作を適用した結果（Ｃ１）のうち、σ−要素１つの文法部分が推論結果である入力文法の文法部分（Ｃ）である。ただし、ｑ'''→εである非終端記号ｑ'''が複数ある場合は、全てのｑ'''に対してσ−要素１つの文法部分（Ｃ１）の和を求め、これを推論結果の文法部分（Ｃ）とする。（Ｃ１）が常にＵＮＤＥＦならば、（Ｃ）もＵＮＤＥＦである。
図７は、以上の推論規則を図解した図である。
【００４３】
次に、処理対象のＸＳＬＴ式が基本構成子（４）のif(σ){e}であった場合、推論実行部３０は、次の推論規則を適用する（ステップ４０７、４０８）。
・ＸＳＬＴ式ｅと文法部分（Ｂ１）に対して推論操作を適用した結果（Ｃ１）
・ＸＳＬＴ式ｅと空文書とを示す文法部分εに対して推論操作を適用した結果（Ｃ２）
を求める。この（Ｃ１）のうち、σ−要素１つの並びで表現されるような文法部分と（Ｃ２）との和（Ｃ）が推論結果である入力文法の文法部分である。そのような文法部分が存在しないならば、ＵＮＤＥＦである。
図８は、以上の推論規則を図解した図である。
【００４４】
次に、処理対象のＸＳＬＴ式が基本構成子（５）のforeach{e}であった場合、推論実行部３０は、次の２つの手順により推論規則を適用する（ステップ４０９、４１０）。
１：入力文法の生成規則を追加する。まず、２分木文法の場合を考える。２分木文法において、Ｘqq',eの形で非終端記号を与えるとする。２分木文法においては、出力文法の文法部分の数は、たかだか非終端記号の数の２乗であるので、全ての文法部分を数え上げることができる。今、ある文法部分（Ｂｋ）が（ｑ’，ｑ”）であったとする。この文法部分（Ｂｋ）に対して、
・ＸＳＬＴ式ｅと文法部分（Ｂｋ）に対して推論操作を適用した結果（Ｃｋ）
を求める。このとき、（Ｃｋ）は、いくつかのσについてσ−要素１つの並びで表現され、またその子がωを開始記号とするような入力文法の文法部分であるものとする。このとき、任意のｑについて
・Ｘqq',e→σ（ω，Ｘqq",e）
という生成規則を加える。この生成規則は、実際に任意のｑについて作る必要はなく、Ｘq',e→σ（ω，Ｘq",e）のような生成規則１つで他の規則を代表させても良い。この入力文法の生成規則の追加を、これを全ての（Ｂｋ）に対して繰り返しても良いし、また、処理対象である出力文法の文法部分（Ｂ）に対する部分文法部分であるような（Ｂｋ）に対してのみ繰り返しても良い。さらに、
・Ｘqq→ε
という規則も追加する。
今、処理対象である文法部分（Ｂ）が文法部分（ｑ，ｑ’）であったとする。文法部分（Ｂ）は、ｎ個の部分文法部分の連結（Ｂ１）、・・・、（Ｂｎ）に分解可能である。しかし、２分木文法を使えば、（Ｃ）の子である入力文法の文法部分（Ｘqq,e，Ｘqq',e）を要素１つの文法部分の連結（Ｃ１）、・・・、（Ｃｎ）に分解して（Ｃｋ）とＸＳＬＴ式ｅとに推論操作を適用すると、（Ｂｋ）になるということがｋ∈１、・・・、ｎにおいて保証される。なお、２分木文法を使わない場合でも同等のことが保証されるような規則を作ることができれば、それを使用しても構わない。
２：推論規則の結果として返される文法部分（Ｃ）は、任意のσについて、その子がＸqq',eを開始記号とするような入力文法の文法部分であるような文法部分である。
図９は、以上の推論規則を図解した図である。
【００４５】
次に、処理対象のＸＳＬＴ式が基本構成子（６）のμx.{e}であった場合、推論実行部３０は、次の推論規則を適用する（ステップ４１１、４１２）。
ＸＳＬＴ式ｅの中に自由に出現するｘ、すなわち、他のμx.{e'}におけるｅ’の中ではないようなｘを全てμx.{e}に書き換えたものをｅ”とおく。そして、ｅ”と文法部分（Ｂ）とに対して推論操作を適用した結果（Ｃ）が入力文法の文法部分である。
【００４６】
次に、処理対象のＸＳＬＴ式が基本構成子（７）のφであった場合、推論実行部３０は、次の推論規則を適用する（ステップ４１３、４１４）。
文法部分（Ｂ）がεを含むような文法部分ならば、任意のσに対してどんな子をも持ち得るσ−要素１つの並びを生成する文法部分（Ｃ）を入力文法の文法部分とする。それ以外の場合は、ＵＮＤＥＦである。なお、ここで文法部分（Ｂ）がεを含むとは、２分木文法においては、文法部分が（ｑ，ｑ）という形であることと等価である。
【００４７】
次に、本実施の形態による入力文法の生成例を示す。
図１１は、処理対象であるＸＳＬＴスクリプトを示す図である。また、図１２は、もう一方の処理対象である出力文法を示す図である。
図１１に示すＸＳＬＴスクリプトは、
0003972323.tif 000002
に変換する。
【００４８】
図１２に示す出力文法は、
・ＸＭＬ文書  <b/> (= b(ε, ε))
・ＸＭＬ文書  <a/><b/> (= a(ε, b(ε, ε)))
・ＸＭＬ文書  <a/><a/><b/> (= a(ε, a(ε, b(ε, ε))))
・ＸＭＬ文書  <a/><a/><a/><b/> (=a(ε, a(ε, a(ε, b(ε, ε)))))
・・・・・
などを表現する文法である。
【００４９】
まず、ＸＳＬＴスタイルシート入力部１０が、図１１のＸＳＬＴスクリプトを入力し、ＸＳＬＴ式に変換する。すると、ＸＳＬＴ式は、次のようになる。
μx.{copy{φ}, foreach{x}}
変換された上記のＸＳＬＴ式は、推論実行部３０に送られる。
また、出力スキーマ入力部２０は、出力スキーマを入力して出力文法に変換するが、ここでは図１２の出力文法が提供されているため、そのまま推論実行部３０に送られる。
【００５０】
次に、推論実行部３０が、入力したＸＳＬＴ式と出力文法とに基づいて入力文法の推論を実行する。
（ｉ）まず、ＸＳＬＴ式μx.{copy, foreach{x}}と出力スキーマの全体を示す文法部分（０，１）から推論を開始する。今、着目している式がμx.{e}の形をしているので、上述したμx.{e}の場合の推論規則を適用する。このとき、ｅの中に自由に出現するｘを全てμx.{e}に書き換えると、
copy, foreach{μx.{copy, foreach{x}}}
が得られる。以下、μx.{copy, foreach{x}}をｅ！とおく。
【００５１】
（ｉｉ）ここで、ＸＳＬＴ式copy{φ}, foreach{e!} と文法部分（０，１）とに対して、再帰的に推論操作を適用する。これにより、文法部分（０，１）から分割された文法部分（０，０）と（０，１）、及び（０，１）と（１，１）の両者に対して、ｅ，ｅ’の場合の推論規則が適用される。
【００５２】
（ｉｉｉ）このうち、上記文法部分（０，０）と（０，１）における文法部分（０，０）に対する推論は次のように行われる。すなわち、ＸＳＬＴ式copy{φ} と文法部分（０，０）とに対して、推論操作を適用する。これにより、（０，０）と図１２の出力文法における生成規則とに基づいて生成される文書のうち、要素１つの並びであるものは、
ＸＭＬ文書 <a/> (= a(ε, ε))
のようであるから、ａ−要素１つの文法部分で、子は空文書を示す（１，１）という文法部分である。
したがって、ＸＳＬＴ式φと文法部分（１，１）とに対して、再帰的に推論操作を適用する。これにより、要素σは何でも良く、その子も何でも良いような入力文法が得られる。
そして、この結果から、ＸＳＬＴ式copy{φ} と文法部分（０，０）とに対して推論操作を適用した結果は、要素がａでなくてはならず、その子は何でも良いような入力文法部分となる。
【００５３】
（ｉｖ）また、上記文法部分（０，０）と（０，１）における文法部分（０，１）に対する推論は次のように行われる。すなわち、ＸＳＬＴ式foreach{e!} と文法部分（０，１）とに対して、推論操作を適用する。ＸＳＬＴ式foreach{e!} に対する推論なので、上述したように文法部分の計算と生成規則の計算とを行う必要があるが、この時点では文法部分の計算のみを行い、生成規則の計算は後で行う。部分の計算は任意のσ−要素についてその子がＸ01,e!を開始記号とするような入力文法の文法部分となる。
【００５４】
（ｖ）次に、上記文法部分（０，１）と（１，１）における文法部分（０，１）に対する推論は次のように行われる。すなわち、ＸＳＬＴ式copy{φ} と文法部分（０，１）とに対して、推論操作を適用する。これにより、（０，１）と図１２の出力文法の生成規則から生成される文書のうち、要素１つの並びであるものは、
ＸＭＬ文書 <b/> (= b(ε,ε))
のようであるから、ａ−要素１つの文法部分で子は空文書を示す（１，１）という文法部分である。
したがって、ＸＳＬＴ式φと文法部分（１，１）とに対して、再帰的に推論操作を適用する。これにより、要素σは何でも良く、その子も何でも良いような入力文法が得られる。
そして、この結果から、ＸＳＬＴ式copy{φ} と文法部分（０，１）とに対して推論操作を適用した結果は、要素がｂでなくてはならず、その子は何でも良いような入力文法部分となる。
【００５５】
（ｖｉ）また、上記文法部分（０，１）と（１，１）における文法部分（１，１）に対する推論は次のように行われる。すなわち、ＸＳＬＴ式foreach{e!} と文法部分（１，１）とに対して、推論操作を適用する。ＸＳＬＴ式foreach{e!} に対する推論なので、上述したように文法部分の計算と生成規則の計算とを行う必要があるが、この時点では文法部分の計算のみを行い、生成規則の計算は後で行う。部分の計算は任意のσ−要素についてその子がＸ11,e! を開始記号とするような入力文法の文法部分となる。
【００５６】
（ｖｉｉ）以上の推論の後、推論ステップ（ｉｉ）におけるＸＳＬＴ式copy{φ}, foreach{e!} と文法部分（０，１）とに対する推論に立ち戻る。これにより、得られる入力文法部分は、推論ステップ（ｉｉｉ）と（ｉｖ）の推論結果の共通部分、及び推論ステップ（ｖ）と（ｖｉ）の推論結果の共通部分の和である。
推論ステップ（ｉｉｉ）と（ｉｖ）の推論結果から、その共通部分は、要素はａでなくてはならず、子はＸ00,e!を開始記号とするような入力文法の文法部分となる。
一方、推論ステップ（ｖ）と（ｖｉ）の推論結果から、その共通部分は、要素はｂでなくてはならず、子はＸ01,e!を開始記号とするような入力文法の文法部分となる。この両者の和が求める入力文法の文法部分である。
【００５７】
（ｖｉｉｉ）さらに、推論ステップ（ｖｉｉ）の推論結果をもって、推論ステップ（ｉ）におけるＸＳＬＴ式μx.{copy, foreach{x}}と出力スキーマの全体を示す文法部分（０，１）とに対する推論に立ち戻る。推論ステップ（ｖｉｉ）の推論結果より、要素はａでなくてはならず子はＸ01,e!を開始記号とするような入力文法の文法部分、及び、要素はｂでなくてはならず子はＸ11,e!を開始記号とするような入力文法の文法部分の和が、求める入力文法の文法部分となる。これは、次のような生成規則及び開始記号Ｘ’に対応する文法である。
生成規則：Ｘ→ａ（Ｘ01,e!，Ｘ’），Ｘ→ｂ（Ｘ11,e!，Ｘ’），Ｘ’→ε
【００５８】
ここまでで、ＸＳＬＴ式foreach{e!} に対する生成規則の計算以外の推論は全て終了した。以上の処理では、ＸＳＬＴ式copy{φ}, foreach{e!} と文法部分（０，１）とに対しての入力文法の文法部分を求めた。ＸＳＬＴ式foreach{e!} と文法部分（０，１）に対する生成規則の計算、及びＸＳＬＴ式foreach{e!} と文法部分（１，１）に対する生成規則の計算は、以上の推論と同等の処理を出力文法における他の文法部分（０，０）、（１，０）、（１，１）のそれぞれに対して実行しなくてはならない。この処理の結果は、次の（ｉｘ）〜（ｘｉ）のようになる。
【００５９】
（ｉｘ）ＸＳＬＴ式copy{φ}, foreach{e!} と文法部分（０，１）とに対して、推論操作を適用する。これにより、文法部分（０，１）から分割された文法部分（０，０）及び（０，０）に対して、ｅ，ｅ’の場合の推論規則が適用される。
前者の推論結果は、既に推論ステップ（ｉｉｉ）において計算した推論結果と同様である。後者の推論結果は、要素は同様にａでなくてはならず、その子はＸ00,e!を開始記号とするような文法部分である。
したがって、両者の共有部分である文法部分は、要素はａでなくてはならず、その子はＸ01,e!を開始記号とするような入力文法の文法部分である。
【００６０】
（ｘ）文法部分（１，０）は、対応する生成規則が存在しないので、何を適用しても結果はＵＮＤＥＦである。
【００６１】
（ｘｉ）ＸＳＬＴ式copy{φ}, foreach{e!} と文法部分（１，１）とに対して、推論操作を適用する。これにより、文法部分（０，１）から分割された文法部分（１，１）及び（１，１）に対して、ｅ，ｅ’の場合の推論規則が適用される。
この場合、前者の結果がＵＮＤＥＦであり、したがって、共通部分である全体の結果もＵＮＤＥＦとなる。
【００６２】
以上の推論ステップ（ｉ）及び（ｘｉ）〜（ｉｘ）の推論結果から、入力文法の生成規則は、無駄なものを取り除くと次のようになる。
・Ｘ00,e!→ａ（Ｘ01,e!，Ｘ00,e!）
・Ｘ00,e!→ａ（Ｘ01,e!，Ｘ01,e!）
・Ｘ00,e!→ｂ（Ｘ11,e!，Ｘ01,e!）
・Ｘ→ａ（Ｘ01,e!，Ｘ’），Ｘ→ｂ（Ｘ11,e!，Ｘ’）
・Ｘ’→ε，Ｘ00→ε，Ｘ11→ε
また、入力文法の開始記号は、Ｘである。
【００６３】
以上のようにして生成された入力文法は、上述したように入力文法出力部４０により、必要に応じて適当なスキーマ言語による入力スキーマに変換して出力される。
これにより、処理対象となったＸＳＬＴスタイルシートを用いて、推論実行部３０の推論により生成された入力文法（あるいは入力文法出力部から出力される入力スキーマ）に適合するＸＭＬ文書の変換を行えば、処理対象となった出力スキーマに適合するＸＭＬ文書が得られることとなる。すなわち、これらのＸＳＬＴスタイルシート、入力スキーマ及び出力スキーマの整合性が保証される。
【００６４】
次に、上述した本実施の形態によるスキーマ生成検証システムの実装例について説明する。
上述したように、本実施の形態を用いれば、ＸＳＬＴスタイルシートと入力スキーマと出力スキーマとの整合性を確認することができる。そこで、ＸＳＬＴスタイルシートのデバッガに本実施の形態を実装することができる。
図１３は、本実施の形態を実装したデバッガの構成例を示す図である。
図１３を参照すると、このデバッガは、処理対象としてＸＳＬＴスタイルシート、入力スキーマ及び出力スキーマを入力するデータ入力部１３１０と、データ入力部１３１０にて入力されたＸＳＬＴスタイルシート、入力スキーマ及び出力スキーマを格納するデータ記憶部１３２０と、本実施の形態のスキーマ生成検証システムに相当するスキーマ生成部１３３０と、スキーマ生成部１３３０にて生成される文書スキーマに基づいてＸＳＬＴスタイルシート、入力スキーマ及び出力スキーマの整合性を判定する整合性判定部１３４０と、整合性判定部１３４０による判定結果を出力する出力制御部１３５０とを備える。
データ入力部１３１０、整合性判定部１３４０及び出力制御部１３５０は、本実施の形態に相当するスキーマ生成部１３３０と同様に、例えば、図１に示したプログラム制御されたＣＰＵ１０１により実現される。また、データ記憶部１３２０は、例えば、図１に示したメインメモリ１０３により実現される。
【００６５】
データ入力部１３１０は、例えば、ユーザからの命令を受け付ける操作画面をディスプレイ装置に表示してデバッグの開始命令を受け付け、これに応じて、処理対象であるＸＳＬＴスタイルシートのスクリプト（ＸＳＬＴスクリプト）、入力スキーマ及び出力スキーマを入力してデータ記憶部１３２０に格納する。
処理対象のＸＳＬＴスクリプト、入力スキーマ及び出力スキーマは、上記の操作画面にて特定できるようにすることができる。また、処理対象のＸＳＬＴスクリプト、入力スキーマ及び出力スキーマは、図１に示したハードディスク１０５に格納されているものを読み出して処理対象としても良いし、ネットワークインターフェイス１０６を介して他の装置から入力したり、キーボード１０８その他の入力手段を介して入力したりすることもできる。
【００６６】
スキーマ生成部１３３０は、上述したように本実施の形態のスキーマ生成検証システムに相当し、データ記憶部１３２０からＸＳＬＴスクリプトと出力スキーマとを読み出して推論処理を行い、推論結果として文書スキーマを生成する。この文書スキーマは、データ記憶部１３２０に格納されている入力スキーマと同一のスキーマ言語にて記述された状態に変換されている。そして、この文書スキーマは、整合性判定部１３４０に送られる。
【００６７】
整合性判定部１３４０は、スキーマ生成部１３３０から生成された文書スキーマを受け取ると共に、データ記憶部１３２０から入力スキーマを読み出して、これらを比較する。そして、当該文書スキーマと入力スキーマとが等しいか、または入力スキーマが当該文書スキーマに包含されるならば、整合性判定部１３４０は、処理対象であるＸＳＬＴスタイルシート、入力スキーマ及び出力スキーマは整合性を有すると判定する。それ以外の場合は、整合性を有しないと判定する。
【００６８】
出力制御部１３５０は、例えば、ディスプレイ表示や音声にて整合性判定部１３４０による判定結果を示すコメントを出力する。
ここで、出力は単純にＸＳＬＴスタイルシート、入力スキーマ及び出力スキーマの不整合を通知するようにしても良いが、デバッグ対象の設定に応じて任意のメッセージ等を出力するようにしても良い。
【００６９】
例えば、使用したい入力スキーマ及び出力スキーマが決まっており、用意したＸＳＬＴスタイルシートの正しさを調べたい場合、本実装例のデバッガにて整合性を判定し、整合するならばＸＳＬＴスタイルシートが正しいことを示し、不整合ならばＸＳＬＴスタイルシートが正しくないことを示すメッセージを出力する。この場合、正しいと判定された当該ＸＳＬＴスタイルシートを用いてＸＭＬ文書を変換する場合に、入力文書と当該入力スキーマとを照合して適合していることを確認すれば、変換されたＸＭＬ文書は必ず当該出力スキーマに適合することが保証されることとなる。
【００７０】
同様に、使用したいＸＳＬＴスタイルシート及び入出力スキーマの一方が決まっており、入出力スキーマの他方の正しさを調べたい場合に、本実装例のデバッガにて整合性を判定し、整合するならば当該文書スキーマが正しいことを示し、不整合ならば当該文書スキーマが正しくないことを示すメッセージを出力することができる。
特に、入力スキーマの正しさを調べたい場合であって、不整合と判定された場合は、スキーマ生成部１３３０にて生成された文書スキーマが入力スキーマとして健全かつ完全であるので、この生成された文書スキーマを入力スキーマの雛形として出力することができる。このようにすれば、ユーザが、出力された文書スキーマと用意した入力スキーマとを比較して、修正すべき内容を判断することができる。
【００７１】
また、他の実装例として、所定のＸＳＬＴスタイルシートに入力する入力ＸＭＬ文書の検証システムに本実施の形態を実装することができる。
この場合、本実施の形態は、初期動作として、使用するＸＳＬＴスタイルシートと変換後のＸＭＬ文書が適合すべき出力スキーマとに基づいて推論を行い、ＸＳＬＴスタイルシートに入力されるＸＭＬ文書が適合すべき入力スキーマを生成しておく。そして、ＸＭＬ文書をＸＳＬＴスタイルシートに入力する前段において、本実装例の検証システムが、予め生成された入力スキーマと、当該ＸＭＬ文書の文書スキーマとを比較し、検証する。この場合、当該ＸＭＬ文書の文書スキーマが入力スキーマと等しいか、入力スキーマに包含されるならば、そのままＸＳＬＴスタイルシートに入力して変換を行う。それ以外の場合には、エラー出力を行ってユーザに入力文書の不正を通知することができる。
【００７２】
さらにまた、他の実装例として、本実施の形態によるスキーマ生成検証システムをそのまま実装し、使用するＸＳＬＴスタイルシートと出力スキーマが決まっている状態で、要求される入力スキーマを生成することができる。これによれば、ＸＳＬＴスタイルシートの作成者が、入力スキーマを特定せず、ある程度の幅を含んで想定している状態でＸＳＬＴスタイルシートを作成した場合に、必要とされる入力スキーマを自動的に得ることができる。
【００７３】
なお、本実施の形態では、逆方向の推論を用いて文書スキーマの生成規則を生成したが、適切な推論規則を用意することによって、順方向の推論により文書スキーマの生成規則を生成するシステムを構築することができる。
この場合、スキーマ生成検証システムは、ＸＳＬＴスタイルシートと入力スキーマとから、出力スキーマを生成することとなる。したがって、実装例においても、デバッガにおいて出力スキーマの雛形を出力したり、出力スキーマの生成システムとして実装したりすることができる。
【００７４】
また、上述した本実施の形態では、出力スキーマの生成規則の表現に２分木文法を用いたが、これは推論における計算の効率を向上するために用いたに過ぎず、他の種類の文法を用いて出力スキーマの生成規則を表現しても構わない。
【００７５】
【発明の効果】
以上説明したように、本発明によれば、所望の変換処理に用いるＸＳＬＴスタイルシートと入力スキーマと出力スキーマとが整合していることを保証することが可能となる。
また、これにより、ＸＳＬＴスタイルシートが正しく動作することを保証することが可能となり、ＸＳＬＴスタイルシートのテストなどの作業負担を軽減することができる。
さらに、本発明によれば、ＸＳＬＴスタイルシートと入力スキーマと出力スキーマとが整合していることを保証することにより、入力スキーマが存在しない場合に、どのような構造範囲のＸＭＬ文書であれば要求される出力スキーマを持ったＸＭＬ文書に変換できるかを知ることが可能となる。
【図面の簡単な説明】
【図１】  本実施の形態のスキーマ生成検証システムを実現するのに好適なコンピュータ装置のハードウェア構成の例を模式的に示した図である。
【図２】  図１に示したコンピュータ装置にて実現される本実施の形態によるスキーマ生成検証システムの構成を示す図である。
【図３】  本実施の形態における推論実行部による推論操作を説明する図である。
【図４】  本実施の形態における推論実行部による推論手順を説明するフローチャートである。
【図５】  本実施の形態にて用いられる推論規則を図解した図であり、ＸＳＬＴ式がｅ、ｅ’である場合の推論規則を説明する図である。
【図６】  本実施の形態にて用いられる推論規則を図解した図であり、ＸＳＬＴ式がelement(σ){e}である場合の推論規則を説明する図である。
【図７】  本実施の形態にて用いられる推論規則を図解した図であり、ＸＳＬＴ式がcopy{e}である場合の推論規則を説明する図である。
【図８】  本実施の形態にて用いられる推論規則を図解した図であり、ＸＳＬＴ式がif(σ){e}である場合の推論規則を説明する図である。
【図９】  本実施の形態にて用いられる推論規則を図解した図であり、ＸＳＬＴ式がforeach{e}である場合の推論規則を説明する図である。
【図１０】  本実施の形態に用いられる２分木文法を説明する図である。
【図１１】  本実施の形態の処理対象であるＸＳＬＴスクリプトの例を示す図である。
【図１２】  本実施の形態の処理対象である出力文法の例を示す図である。
【図１３】  本実施の形態を実装したデバッガの構成例を示す図である。
【符号の説明】
１０…ＸＳＬＴスタイルシート入力部、２０…出力スキーマ入力部、３０…推論実行部、４０…入力文法出力部、１０１…ＣＰＵ（中央処理装置）、１０２…Ｍ／Ｂ（マザーボード）チップセット、１０３…メインメモリ、１０４…ビデオカード、１０５…ハードディスク、１０６…ネットワークインターフェイス、１０７…フロッピーディスクドライブ、１０８…キーボード、１０９…Ｉ／Ｏポート、１１０…ブリッジ回路、１３１０…データ入力部、１３２０…データ記憶部、１３３０…スキーマ生成部、１３４０…整合性判定部、１３５０…出力制御部
【図１】
0003972323.tif 000003
【図２】
0003972323.tif 000004
【図３】
0003972323.tif 000005
【図４】
0003972323.tif 000006
【図５】
0003972323.tif 000007
【図６】
0003972323.tif 000008
【図７】
0003972323.tif 000009
【図８】
0003972323.tif 000010
【図９】
0003972323.tif 000011
【図１０】
0003972323.tif 000012
【図１１】
0003972323.tif 000013
【図１２】
0003972323.tif 000014
【図１３】
0003972323.tif 000015