JP3972323B2 - スキーマ生成装置、データ処理装置及びその方法並びにプログラム - Google Patents
スキーマ生成装置、データ処理装置及びその方法並びにプログラム Download PDFInfo
- Publication number
- JP3972323B2 JP3972323B2 JP2001267212A JP2001267212A JP3972323B2 JP 3972323 B2 JP3972323 B2 JP 3972323B2 JP 2001267212 A JP2001267212 A JP 2001267212A JP 2001267212 A JP2001267212 A JP 2001267212A JP 3972323 B2 JP3972323 B2 JP 3972323B2
- Authority
- JP
- Japan
- Prior art keywords
- grammar
- schema
- result
- xslt
- generation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/151—Transformation
- G06F40/154—Tree transformation for tree-structured or markup documents, e.g. XSLT, XSL-FO or stylesheets
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/14—Tree-structured documents
- G06F40/143—Markup, e.g. Standard Generalized Markup Language [SGML] or Document Type Definition [DTD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/205—Parsing
Description
【発明の属する技術分野】
本発明は、XSLTスタイルシートを用いたXML文書の変換において、XSLTスタイルシートと入出力文書における文書スキーマとの整合性を保証する方法に関する。
【0002】
【従来の技術】
XML(Extensible Markup Language)では、どのような文書構造のXML文書が許容されるかを、文書スキーマ(schema)を記述することにより記述することができる。例えば、DTD(文書型定義:Document Type Definition)は、文書スキーマを記述するための代表的なスキーマ言語である。
このため、XML文書を用いてデータ交換を行う場合、当該XML文書を利用するアプリケーションや通信環境の要求に応じて、所定のXML文書を他の形式(文書構造)のXML文書に構造変換することが必要な場合がある。
【0003】
XML文書を構造変換して他の形式のXML文書を作成するための言語としてXSLT(XSL Transformations)がある。XSLTは、W3C(World Wide Web Consortium)によって制定されており、実装も数多く存在している。このXSLTで作成されたXSLTスタイルシートに任意のXML文書を入力することにより、構造変換された他の形式のXML文書を生成することができる。
【0004】
ところで、XSLTスタイルシートは、通常、入力文書がどんな文書スキーマに適合するか(以下、この場合の文書スキーマを入力スキーマという)、及び出力文書がどんな文書スキーマに適合しなければならないか(以下、この場合の文書スキーマを出力スキーマという)が想定されて書かれている。また、データベースのような大きな文書に対する検索をXSLTで書く場合や、XML文書をHTML文書やXHTML文書に変換するXSLTスタイルシートなどのように、入力スキーマが予めわかっている場合や、出力スキーマが明示的に決まっている場合もある。
【0005】
しかし、XSLTは、このような入力スキーマや出力スキーマを一切利用しない。すなわち、XSLTスタイルシートはXML文書を文書スキーマとは関係なく変換するのであり、XSLTスタイルシートの出力する文書が出力スキーマに適合しているという保証はない。この場合、出力文書が出力スキーマに適合していることを保証するには、個々の出力文書を実際に出力スキーマと照合する必要があった。例えば、入力文書が100個あれば、100個の出力文書を各々個別に出力スキーマと照合しなければならなかった。しかも、この場合、101個目の入力文書を処理して得られる出力文書が、出力スキーマに適合するという保証はなく、これも別途出力スキーマと照合する必要があった。
【0006】
【発明が解決しようとする課題】
上記のように、XSLTスタイルシートは、XML文書を文書スキーマに関わらずに構造変換する。すなわち、XSLTスタイルシートと入力スキーマと出力スキーマとが整合していることを保証していない。したがって、出力文書が出力スキーマに適合するかどうかは、個々の出力文書ごとに個別に確認しなければならなかった。
また、誤りのあるXSLTスタイルシートの場合、期待された入力スキーマにしたがうXML文書を入力しても、期待された出力スキーマに適合したXML文書に変換しない場合がある。従来、XSLTスタイルシートにおけるこのような誤りを発見するためには、プログラマが自分で実際にXML文書を変換するテストなどを繰り返す必要があった。
【0007】
この問題を解決するため、XML文書の構造変換(以下、文書変換と称す)とXML文書におけるスキーマの変換(スキーマ推論)の両方が可能な言語を設計し、XSLTの代わりに用いるという提案がある。
XDuceやType Checking for XML transformersは、そのような変換言語である。
XDuceは、順方向のスキーマ推論を行う言語である。すなわち、入力スキーマと変換プログラムを与えられて、内部的な中間スキーマを作成し、ユーザが指定した出力スキーマとこの中間スキーマとが整合しているかどうかを判定する。XDuceの実装は、一般に公開されている。一方、Type Checking for XML transformersは、逆方向のスキーマ推論を行う方式の提案である。つまり、出力スキーマと変換プログラムとを与えられて入力スキーマを推論する方法の提案である。
【0008】
このXDuceのような変換言語は、入力スキーマにしたがう文書を変換した結果が出力スキーマに適合することを保証することができる。しかし、専用の変換言語としたため、W3Cで制定されているXSLTのように広く利用されることは期待できない。また、XDuceによるスキーマ推論は、健全性を保証するのみである。
Type Checking for XML transformersによる提案は、健全かつ完全なスキーマ推論を可能にするが、実現可能な方式を示したものではなく、原理的に可能であることを示したに過ぎない。
【0009】
ここで、「健全」「完全」の文言について説明する。
XDuceで用いられる順方向のスキーマ推論では、
1.与えられた入力スキーマに属する全ての文書が推論されたスキーマに属する出力文書に必ず変換されるならば「健全」。
2.推論されたスキーマの出力文書に変換されるような入力文書が必ず入力文書スキーマに属するならば「完全」。
と定義される。一方、逆方向のスキーマ推論では、
1.推論されたスキーマに属する全ての文書が与えられた出力スキーマに属する出力文書に変換されるならば「健全」。
2.与えられた出力スキーマに属する出力文書に変換されるような入力文書を全て含むようなスキーマが推論されるならば「完全」。
と定義される。
【0010】
「健全」「完全」の別は、そのスキーマ推論を用いて実現できる「スキーマチェック(スキーマ検証)」の健全性、完全性に由来する。「スキーマチェック」では、与えられたプログラムを静的に解析して当該プログラムが「正しい」かどうか(常にスキーマを壊さずに正しく動作するどうか)をYES/NOで判定する。逆方向のスキーマ推論を用いた場合、推論されたスキーマが与えられたプログラムの入力スキーマを包含するならばYESであり、そうでないならばNOである。一方、順方向のスキーマ推論を用いた場合、与えられた出力スキーマが推論されたスキーマを包含するならばYESであり、そうでないならばNOである。どちらの場合も、結果として得られた「スキーマチェック」についての健全性、完全性が、スキーマ推論における健全性、完全性からそれぞれ導かれることとなる。ただし、「スキーマチェック」の健全性、完全性とは以下のようなものである。
1.「スキーマチェック」がYESと答えたときにプログラムが必ず正しいものならば「健全」
2.正しいプログラムの全てに「スキーマチェック」がYESと答えるならば「完全」
一般に、スキーマつきプログラミング言語のスキーマチェックは健全でなくてはならない。また、完全であることが望ましいが、通常は完全たり得ない。
【0011】
以上のように、従来のXSLTスタイルシートは、XSLTスタイルシートと入力スキーマと出力スキーマとが整合していることを保証しないため、出力文書が出力スキーマに適合することを機械的に保証することができない。また、XSLTの代わりにXDuceなどの特別な言語を用いるとしても、実用性能が十分でないことや、特別な言語であるために広く利用することが難しいといった問題が残る。
したがって、XSLTスタイルシートと入力スキーマと出力スキーマとが整合していることを保証する手段が望まれる。XSLTスタイルシートを用いたXML文書の変換における信頼性が向上し、またXSLTを用いるために広範囲な利用することが容易となる。
【0012】
そこで、本発明は、XDuceなどの特別な言語を用いることなく、所望の変換処理に用いるXSLTスタイルシートと入力スキーマと出力スキーマとが整合していることを保証できるようにすることを目的とする。
また、これにより、XSLTスタイルシートが正しく動作することを保証できるようにすることを目的とする。
さらに、本発明は、XSLTスタイルシートと入力スキーマと出力スキーマとが整合していることを保証することにより、入力スキーマが存在しない場合に、どのような構造範囲のXML文書であれば要求される出力スキーマを持ったXML文書に変換できるかを知ることができるようにすることを目的とする。
【0013】
【課題を解決するための手段】
上記の目的を達成する本発明は、次のように構成されたことを特徴とするスキーマ生成装置を提供する。すなわち、このスキーマ生成装置は、XSLTスタイルシートを入力するXSLTスタイルシート入力手段と、所定のXMLデータがしたがうべき文書スキーマを入力するスキーマ入力手段と、入力されたXSLTスタイルシートと入力された文書スキーマとに基づき、所定の推論規則を用いて導き出される他の文書スキーマを表現する生成規則を生成する推論実行手段とを備える。
【0014】
ここで、さらに詳しくは、このスキーマ入力手段は、入力した文書スキーマを所定の生成規則の集合に置き換え、この推論実行手段は、置き換えられた生成規則の集合に基づいて他の文書スキーマを表現する生成規則を生成する。
また、この推論実行手段にて生成される生成規則を正規木言語で表現されることが好ましい。
さらに、上記のスキーマ生成装置は、推論実行手段にて生成された生成規則を、所定のスキーマ言語による具体的な文書スキーマに変換する変換手段をさらに備える構成とすることができる。
【0015】
また、本発明は、次のように構成されたことを特徴とするデータ処理装置を提供する。すなわち、このデータ処理装置は、XSLTスタイルシートと、このXSLTスタイルシートによる変換前のXMLデータがしたがうべき文書スキーマである入力スキーマと、このXMLスタイルシートによる変換後のXMLデータがしたがうべき文書スキーマである出力スキーマとを入力する入力手段と、入力されたXSLTスタイルシートと入力スキーマと出力スキーマとを格納する格納手段と、この格納手段から読み出された入力スキーマまたは出力スキーマのいずれか一方とXSLTスタイルシートとに基づいて所定の文書スキーマを生成するスキーマ生成手段と、スキーマ生成手段にて生成された文書スキーマと格納手段から読み出された入力スキーマまたは出力スキーマの他方とを比較することにより、XSLTスタイルシートと入力スキーマと出力スキーマとの整合性を判定する判定手段とを備える。
【0016】
ここで、さらに詳しくは、このスキーマ生成手段は、出力スキーマとXSLTスタイルシートとに基づいて、逆方向の推論により所定の文書スキーマを生成し、この判定手段は、生成された所定の文書スキーマとこの入力スキーマとを比較することによって、XSLTスタイルシートと入力スキーマと出力スキーマとの整合性を判定する。
また、この判定手段は、生成された文書スキーマが、比較対象である入力スキーマまたは出力スキーマと等しいか、またはこれらを包含する場合に、XSLTスタイルシートと入力スキーマと出力スキーマとは整合性を有すると判定する。
【0017】
さらにまた、本発明は、上記のような入力手段及び格納手段を備え、この格納手段からXSLTスタイルシートと入力スキーマと出力スキーマとを読み出し、この入力スキーマに適合するXMLデータをこのXSLTスタイルシートが変換することによって得られるXMLデータがこの出力スキーマに適合することを保証できるかどうかを判定する判定手段とを備えるデータ処理装置として実現することができる。
【0018】
また、本発明は、コンピュータを用いたデータ処理方法であって、XSLTスタイルシートに含まれる要素生成命令を要素生成命令記憶手段に格納するステップと、所定のXMLデータがしたがうべき文書スキーマを表現する生成規則を生成規則記憶手段に格納するステップと、要素生成命令記憶手段から要素生成命令を読み出し、生成規則記憶手段から生成規則を読み出して、この要素生成命令及び生成規則に基づき、所定の推論規則を用いて導き出される他の文書スキーマを表現する生成規則を生成するステップとを含むことを特徴とする。
【0019】
ここで、この生成規則を生成するステップは、逆方向の推論を行うことにより、要素生成命令と、XSLTスタイルシートによる変換結果として生成されるXML(Extensible Markup Language)データがしたがうべき文書スキーマの生成規則とに基づいて、このXSLTスタイルシートへの入力として与えられるXMLデータが適合すべき文書スキーマの生成規則を生成するステップを含む。
また、この生成規則を生成するステップは、正規木言語で表現される生成規則を生成するステップを含む。
さらにまた、上記のデータ処理方法は、生成規則を生成するステップにおいて生成された生成規則にて表現される文書スキーマと、所定のXMLデータにおける文書スキーマとを比較することにより、このXMLデータまたはXSLTスタイルシートの正しさを判定するステップをさらに含む。
【0020】
また、本発明は、コンピュータを制御して上述したスキーマ生成装置やデータ処理装置を実現し、あるいは上述したデータ処理方法を実行させるプログラムとして実現することができる。このプログラムは磁気ディスクや光ディスク、半導体メモリなどの記憶媒体に格納して配布したり、ネットワークを介して配信したりすることにより提供することができる。
【0021】
【発明の実施の形態】
以下、添付図面に示す実施の形態に基づいて、この発明を詳細に説明する。
まず、本発明の概要を説明する。本発明は、XSLTスタイルシートを要素生成命令の集まりと解釈する。また、XML文書のスキーマ(入力スキーマまたは出力スキーマ)を生成規則の集まりとして表現する。そして、スキーマ推論のための推論規則群を繰り返し適用することにより、XSLTスタイルシートの各要素生成命令及びXML文書のスキーマ(入力スキーマまたは出力スキーマ)における各生成規則から、他のXML文書のスキーマ(出力スキーマまたは入力スキーマ)の生成規則を推論し生成する。これにより、例えばXSLTスタイルシートと変換後のXML文書(出力文書)の出力スキーマとに基づいて変換前のXML文書(入力文書)の入力スキーマを推論することができ、整合することが保証されたXSLTスタイルシートと出力スキーマと入力スキーマとを得ることができる。
【0022】
具体的には、この推論に用いられたXSLTスタイルシートに対し、この推論によって得られた入力スキーマにしたがうXML文書を入力すれば、生成される出力文書は、この推論に用いられた出力スキーマに適合することが保証される。反対に、この推論に用いられたXSLTスタイルシートによる変換で、この推論に用いられた出力スキーマに適合する出力文書を得るには、この推論によって得られた入力スキーマに適合するXML文書を入力文書とすれば良いことが保証される。さらに、この推論によって得られた入力スキーマにしたがうXML文書をXSLTスタイルシートに入力して、この推論に用いられた出力スキーマに適合する出力文書が得られれば、このXSLTスタイルシートが正しく動作していることが保証される。
【0023】
図1は、本実施の形態のスキーマ生成検証システムを実現するのに好適なコンピュータ装置のハードウェア構成の例を模式的に示した図である。
図1に示すコンピュータ装置は、CPU(中央処理装置)101と、システムバスを介してCPU101に接続されたM/B(マザーボード)チップセット102及びメインメモリ103と、PCIバスなどの高速なバスを介してM/Bチップセット102に接続されたビデオカード104、ハードディスク105及びネットワークインターフェイス106と、さらにこの高速なバスからブリッジ回路110及びISAバスなどの低速なバスを介してM/Bチップセット102に接続されたフロッピーディスクドライブ107、キーボード108及びI/Oポート109とを備える。
なお、図1は本実施の形態を実現するコンピュータ装置の構成を例示するに過ぎず、本実施の形態を適用可能であれば、他の種々のシステム構成を取ることが可能である。
【0024】
図2は、図1に示したコンピュータ装置にて実現される本実施の形態によるスキーマ生成検証システムの構成を示す図である。
図2を参照すると、本実施の形態は、処理対象であるXSLTスタイルシートを入力するXSLTスタイルシート入力部10と、処理対象である出力スキーマを入力する出力スキーマ入力部20と、推論規則を適用して生成すべき文書スキーマ(入力スキーマ)を構成する生成規則群を生成する推論実行部30と、推論実行部30にて生成された生成規則群を持った入力文法を種々の形式で出力する入力文法出力部40とを備える。
【0025】
図2に示したスキーマ生成検証システムの各構成要素は、図1に示したメインメモリ103に展開されたプログラムにてCPU101を制御することにより実現される仮想的なソフトウェアブロックである。CPU101を制御してこれらの機能を実現させる当該プログラムは、磁気ディスクや光ディスク、半導体メモリ、その他の記憶媒体に格納して配布したり、ネットワークを介して配信したりすることにより提供することができる。本実施の形態では、図1に示したネットワークインターフェイス106やフロッピーディスクドライブ107、図示しないCD−ROMドライブなどを介して当該プログラムを入力し、ハードディスク105に格納する。そして、ハードディスク105に格納されたプログラムをメインメモリ103に読み込んで展開し、CPU101にて実行することにより、図2に示した各構成要素の機能を実現する。
【0026】
図2に示すスキーマ生成検証システムにおいて、XSLTスタイルシート入力部10は、XSLTスタイルシートのスクリプト(以下、XSLTスクリプト)を入力し、XSLT式に変換する。
XSLTスクリプトは、図1に示したハードディスク105に格納されているものを読み出して処理対象としても良いし、ネットワークインターフェイス106を介して他の装置から入力したり、キーボード108その他の入力手段を介して入力したりすることもできる。また、変換されたXSLT式は、図1に示したCPU101のキャッシュメモリやメインメモリ103に保持される。
ここで、XSLT式とは、BNF(Backus Naur Form)記法などで表現される計算機に理解しやすい木構造で記述される。XSLTスクリプト自体をXSLT式と考えることも可能であるが、実際のXSLTスクリプトは冗長、すなわち、同じ動作をするのに幾通りもの記述があるので、本実施の形態では、似た機能を持つ命令をとりまとめて大きく以下の7つのXSLT式基本構成子に分類した。なお、以下に現れるXSLTの文の詳細及び用語(カレントノード、子ノード列、リテラル結果要素)については、W3Cの勧告
XSL Transformations (XSLT) Version 1.0 (W3C Recommendation 16 November 1999)http://www.w3.org/TR/xslt
に詳しい。
【0027】
(1)e、e’は、XSLT文の並びを表現する式構成子である。
(2)element(σ){e}は、XSLTのリテラル結果要素の生成、あるいは、element文に対応する。
(3)copy{e}は、直接にはXSLTのcopy文に対応する。
(4)if(σ){e}は、XSLTのif文でカレントノードの要素名に対してテストした場合に対応する。
(5)foreach{e}とは、直接的にはXSLTのfor-each文で子ノード列、すなわち、./*を選択した場合に対応する。
(6)μx.{e}は、直接にはcall-template文に対応する再起呼び出しを表現する構成子である。
(7)φは空XSLT文に対応する式構成子である。
【0028】
例えば、XSLTで頻繁に使われるapply-templates文は、XSLT式
μx. {... {for-each{x}} ...}
に対応している。また、value-of文で自分の下位のノード全てを選択し、それを出力するという動作は、XSLT式
μx. {copy{for-each{x}}}
に対応している。さらにまた、template文をある要素名σにマッチさせる場合には、if(σ){e}構成子を使うことができる。その他にも様々なケースで、XSLT式がXSLTスクリプトを模倣できる場合がある。全てのXSLTスクリプトが、このように上記の式構成子を用いて表現できるわけではないが、ほとんどのXSLTスクリプトは、上記の式構成子の部分あるいは全てを含んでいると言うことができる。
【0029】
出力スキーマ入力部20は、DTDやRELAX(REgular LAnguage description for XML)などのスキーマ言語で記述された出力スキーマを入力し、適当な文法(以下、出力文法)に変換する。本実施の形態では、2分木(binary tree)文法に変換することとする。
出力スキーマは、図1に示したハードディスク105に格納されているものを読み出して処理対象としても良いし、ネットワークインターフェイス106を介して他の装置から入力したり、キーボード108その他の入力手段を介して入力したりすることもできる。また、変換された出力文法は、図1に示したCPU101のキャッシュメモリやメインメモリ103に保持される。
【0030】
ここで、2分木文法について説明する。
図10(A)に示す木と図10(B)に示す2分木との対応は一意である。DTDなど、ほとんどの文書型定義は、図10(A)に示すような木で、正規木言語とよばれる木言語のクラスに含まれる表現能力を持つ。これは、図10(B)に示す木では正規2分木言語とよばれる範囲である。この正規2分木言語を生成する2分木文法は、非終端記号集合、生成規則、終端記号、開始記号で表現される。
なお、DTDやRELAXなどで記述されたスキーマから2分木文法への変換には、既存の技術を用いることができる。
【0031】
推論実行部30は、XSLT式及び出力スキーマの全体から出発し、プログラムの末端に至るまで、推論規則を繰り返し適用する操作(以下、推論操作)を行う。そして、この推論操作の過程で、入力文書がしたがうべき文書スキーマの文法(以下、入力文法)を生成する。
推論実行部30においては、推論規則群を、XSLT式の各要素生成命令に対してなるべく正しく用意する必要がある。どのような規則群が正しいと言えるかについては後述する。
【0032】
図3は、推論実行部30による推論操作を説明する図である。
図3を参照すると、推論操作においては、まず、図1に示したCPU101のキャッシュメモリやメインメモリ103に保持されているXSLT式及び出力文法のうち、個々のXSLT式(部分)及び出力文法の文法部分に着目して読み出し、個別に推論を実行して入力文法の文法部分を出力する。そして、得られた文法部分を合成して入力文法を生成する。推論操作において着目しているXSLT式に部分式、すなわち{}で括られた式がある場合は、当該部分式に対して再帰的に推論規則を適用する。そして、下位の部分式から得られた入力文法の文法部分を利用して上位の文法部分の推論操作を実行する。なお、生成される入力文法は任意の形式で良いが、正規木言語にてスキーマを記述し得る文法であることが好ましい。
推論実行部30により生成された入力文法は、図1に示したCPU101のキャッシュメモリやメインメモリ103に保持される。
【0033】
ここで、ある2分木文法に対して、その文法部分とは、2つの非終端記号の組(q,q')で表現される。これは、開始記号をqとし、生成中の文書の右端に出現する記号が非終端記号q’であった場合のみ、q’→εという書き換えを許した場合に生成される文書の集合を表している。このことは、文法部分(q,q')により生成される文書の後に文法部分(q',q'')により生成される文書を並べたものは、そしてそのような文書のみが、文法部分(q,q'')によって生成され得る文書であるということを保証する。
2分木文法を使わない場合であっても、文法部分に相応するデータ構造を考える必要がある。例えば、DTDが
<!ELEMENT doc (a*,b*)>
のようであったならば、doc-要素の内容モデルは、次のように2つの文法部分の連結として表現される。すなわち、
・(a)*と(a*,b*)
・(a*,b*)と(b)*
の2通りである。なお、a-要素1つの文法部分とは、<a>…</a>という形をした文書のみを生成する文法部分のことである。doc-要素の内容モデルに含まれる要素1つの文法部分は、(a|b)である。
なお、具体的な推論規則の内容及び推論操作の手順については後述する。
【0034】
入力文法出力部40は、図1に示したCPU101のキャッシュメモリやメインメモリ103から、推論実行部30にて生成された入力文法を読み出し、実際に使用可能な形態(すなわち、DTD等のスキーマ言語に基づく文書スキーマ)に変換して出力する。また、入力文法を文書スキーマに変換する変換手段として動作するのみならず、生成された入力文法を他の文法と比較してその包含関係を判断する場合などには、生成された入力文法をそのまま出力することもできる。
【0035】
以上のように構成された本実施の形態では、次のことが保証される。
所定のXSLTスタイルシートと所定の出力スキーマとを入力としてスキーマ生成が行われた場合、生成された文書スキーマは、入力スキーマとして健全である。すなわち、この文書スキーマに合致する全てのXML文書(入力文書)は、処理対象であったXSLTスタイルシートによって、必ず処理対象であった出力スキーマに適合するXML文書(出力文書)に変換される。
すなわち、本実施の形態を使えば期待された入力スキーマに合致するXML文書を与えられれば期待された出力スキーマに適合するXML文書を出力するという意味において、XSLTスタイルシートが正しいか正しくないかを機械的に判定できる。このため、プログラマは、XSLTスタイルシートの誤りを発見するために自らXML文書の変換テストなどを行う必要が無く、負担を軽減することができる。
一方、生成されたこの文書スキーマは、入力スキーマとして完全である。すなわち、所定のXML文書(入力文書)が、処理対象であったXSLTスタイルシートによって処理対象であった出力スキーマに適合するXML文書(出力文書)に変換されるならば、当該入力文書は、必ず本実施の形態にて生成された文書スキーマに合致する。
ここで、生成された文書スキーマが健全であることと、完全であることとは重要である。上述した推論規則群の正しさとは、この両者のどちらかあるいは両方が成立することが保証されるような推論規則に他ならない。出力スキーマ及び入力スキーマとして正規木言語を用いることにより、この文書スキーマの健全性及び完全性を満足することができる。
【0036】
次に、推論実行部30による推論操作の具体的な手順及び推論規則の内容について説明する。
上記のように、本実施の形態によるスキーマ生成検証システムは、XSLTスタイルシートと出力スキーマとを入力し、入力スキーマの生成規則群を生成する。すなわち、逆方向のスキーマ推論を行う。これとは反対に、XSLTスタイルシートと入力スキーマとを入力し、出力スキーマの生成規則群を生成する順方向のスキーマ推論を行うことも可能である。本実施の形態では、実際の推論において、順方向よりも逆方向の推論が優れている場合が多いことから、逆方向のスキーマ推論を採用する。
【0037】
推論実行部30は、図3に示したように、着目中のXSLT式と出力文法における着目中の文法部分とを入力し、推論を行って、入力文法の文法部分を出力する。なお、出力である入力文法の文法部分は、必ず要素1つの文法部分であるとする。一方、入力である出力文法の文法部分は、複数のあるいは0個の要素が並んだものを示し得るような文法部分であるとする。
推論は、入力における同じ文法部分とXSLT式との組合せに対して2回行われる必要はないため、各組合せに対する推論が済んだならば、当該文法部分とXSLT式との組合せに対して何を推論したかを、例えばテーブルに登録して覚えておき、利用することができる。また、ある文法部分とXSLT式との組合せに対する推論の途中で、自分自身に対する推論が要求された場合は、即座にUNDEF(未定義)という結果を返す。
【0038】
図4は、推論実行部30による推論手順を説明するフローチャートである。
図4を参照すると、処理対象であるXSLT式及び出力文法の文法部分を入力した推論実行部30は、当該XSLT式が上述した7種類の基本構成子のいずれであるかを調べ、その基本構成子に応じた推論規則を適用する(ステップ401〜414)。なお、図4においては、便宜上、XSLT式が該当する基本構成子の種類の判断を上述した基本構成子(1)〜(7)の順序で行っているが、本処理では、該当する基本構成子が判断でき、対応する推論を行うことができれば良いので、この順番に限るものではない。
【0039】
図4において、まず、処理対象のXSLT式が基本構成子(1)のe、e’であった場合、推論実行部30は、次の推論規則を適用する(ステップ401、402)。
処理対象である出力文法の文法部分(B)が所定の2つの文法部分(B1)と(B2)との連結として表現できるような全ての組合せを求める。出力文法が2分木文法である場合、文法部分(B)が(q,q”)ならば、全ての非終端記号q’に対して(q,q’)と(q’,q”)という文法部分の組合せを求めることになる。各組の文法部分(B1)と(B2)とに対して、
・XSLT式eと文法部分(B1)に対して推論操作を適用した結果(C1)
・XSLT式e’と文法部分(B2)に対して推論操作を適用した結果(C2)
を求める。もし、(C1)と(C2)とがUNDEFでなければ、さらに(C1)と(C2)とに対して、どちらの文法部分からも生成される文書のみを含むような共通部分(C3)を求める。
次に、文法部分(B)の全ての分割に対する結果(C3)のいずれかから生成される文書を全て含むような和(C)を求める。この(C)が推論結果である入力文法の文法部分である。したがって、推論実行部30は、文法部分(C)を出力する。
図5は、以上の推論規則を図解した図である。
【0040】
ここで、複数の文法あるいは文法部分の共通部分とは、それらの文法あるいは文法部分うちのいずれによっても生成することのできる文書の集まりのことである。また、複数の文法あるいは文法部分の和とは、それらの文法あるいは文法部分うちのいずれかによって生成することのできる文書の集まりのことである。通常の2分木文法において、単純に共通部分や和を求める方法は周知である。しかし、本発明においては共通部分や和を求められるべき文法部分がその時点で内部構造まで既知ではない場合、すなわち再帰的な推論を要する場合があり得る。しかしながら、これを解決するための遅延的な共通部分、和の計算アルゴリズムは既存技術であり、例えば次の文献に詳細に記載されている。
文献:D.E.Muller and P.E.Schupp. Alternating automata on infinte trees.Theoretical Computer Science, 54,;267-276, 1987
【0041】
次に、処理対象のXSLT式が基本構成子(2)のelement(σ){e}であった場合、推論実行部30は、次の推論規則を適用する(ステップ403、404)。処理対象である出力文法の文法部分(B)のうちで、σ−要素1つの文法部分であり、その子に文法部分(B1)が現れる場合を探す。出力文法が2分木文法である場合、文法部分(B1)は、(q,q’)に注目しているときに、q→σ(q”,q’)であるようなq”に対して(q”,q''')である。ただし、q'''とは、2分木文法の中でq'''→εであるような非終端記号であるとする。
そして、XSLT式eと文法部分(B1)とに対して推論操作を適用した結果(C1)が推論結果である入力文法の文法部分(C)である。ただし、q'''→εである非終端記号q'''が複数ある場合は、全てのq'''に対しての(C1)の和を推論結果の文法部分(C)とする。(C1)が常にUNDEFならば、(C)もUNDEFである。
図6は、以上の推論規則を図解した図である。
【0042】
次に、処理対象のXSLT式が基本構成子(3)のcopy{e}であった場合、推論実行部30は、次の推論規則を適用する(ステップ405、406)。
処理対象である出力文法の文法部分(B)のうちで、σを任意の要素名として、σ−要素1つの文法部分であり、その子に文法部分(B1)が現れる場合を探す。出力文法が2分木文法である場合、文法部分(B1)は、(q,q’)に注目しているときに、q→σ(q”,q’)であるようなq”に対して(q”,q''')である。ただし、q'''とは、2分木文法の中でq'''→εであるような非終端記号であるとする。
そして、XSLT式eと文法部分(B1)とに対して推論操作を適用した結果(C1)のうち、σ−要素1つの文法部分が推論結果である入力文法の文法部分(C)である。ただし、q'''→εである非終端記号q'''が複数ある場合は、全てのq'''に対してσ−要素1つの文法部分(C1)の和を求め、これを推論結果の文法部分(C)とする。(C1)が常にUNDEFならば、(C)もUNDEFである。
図7は、以上の推論規則を図解した図である。
【0043】
次に、処理対象のXSLT式が基本構成子(4)のif(σ){e}であった場合、推論実行部30は、次の推論規則を適用する(ステップ407、408)。
・XSLT式eと文法部分(B1)に対して推論操作を適用した結果(C1)
・XSLT式eと空文書とを示す文法部分εに対して推論操作を適用した結果(C2)
を求める。この(C1)のうち、σ−要素1つの並びで表現されるような文法部分と(C2)との和(C)が推論結果である入力文法の文法部分である。そのような文法部分が存在しないならば、UNDEFである。
図8は、以上の推論規則を図解した図である。
【0044】
次に、処理対象のXSLT式が基本構成子(5)のforeach{e}であった場合、推論実行部30は、次の2つの手順により推論規則を適用する(ステップ409、410)。
1:入力文法の生成規則を追加する。まず、2分木文法の場合を考える。2分木文法において、Xq q',eの形で非終端記号を与えるとする。2分木文法においては、出力文法の文法部分の数は、たかだか非終端記号の数の2乗であるので、全ての文法部分を数え上げることができる。今、ある文法部分(Bk)が(q’,q”)であったとする。この文法部分(Bk)に対して、
・XSLT式eと文法部分(Bk)に対して推論操作を適用した結果(Ck)
を求める。このとき、(Ck)は、いくつかのσについてσ−要素1つの並びで表現され、またその子がωを開始記号とするような入力文法の文法部分であるものとする。このとき、任意のqについて
・Xq q',e→σ(ω,Xq q",e)
という生成規則を加える。この生成規則は、実際に任意のqについて作る必要はなく、Xq',e→σ(ω,Xq",e)のような生成規則1つで他の規則を代表させても良い。この入力文法の生成規則の追加を、これを全ての(Bk)に対して繰り返しても良いし、また、処理対象である出力文法の文法部分(B)に対する部分文法部分であるような(Bk)に対してのみ繰り返しても良い。さらに、
・Xq q→ε
という規則も追加する。
今、処理対象である文法部分(B)が文法部分(q,q’)であったとする。文法部分(B)は、n個の部分文法部分の連結(B1)、・・・、(Bn)に分解可能である。しかし、2分木文法を使えば、(C)の子である入力文法の文法部分(Xq q,e,Xq q',e)を要素1つの文法部分の連結(C1)、・・・、(Cn)に分解して(Ck)とXSLT式eとに推論操作を適用すると、(Bk)になるということがk∈1、・・・、nにおいて保証される。なお、2分木文法を使わない場合でも同等のことが保証されるような規則を作ることができれば、それを使用しても構わない。
2:推論規則の結果として返される文法部分(C)は、任意のσについて、その子がXq q',eを開始記号とするような入力文法の文法部分であるような文法部分である。
図9は、以上の推論規則を図解した図である。
【0045】
次に、処理対象のXSLT式が基本構成子(6)のμx.{e}であった場合、推論実行部30は、次の推論規則を適用する(ステップ411、412)。
XSLT式eの中に自由に出現するx、すなわち、他のμx.{e'}におけるe’の中ではないようなxを全てμx.{e}に書き換えたものをe”とおく。そして、e”と文法部分(B)とに対して推論操作を適用した結果(C)が入力文法の文法部分である。
【0046】
次に、処理対象のXSLT式が基本構成子(7)のφであった場合、推論実行部30は、次の推論規則を適用する(ステップ413、414)。
文法部分(B)がεを含むような文法部分ならば、任意のσに対してどんな子をも持ち得るσ−要素1つの並びを生成する文法部分(C)を入力文法の文法部分とする。それ以外の場合は、UNDEFである。なお、ここで文法部分(B)がεを含むとは、2分木文法においては、文法部分が(q,q)という形であることと等価である。
【0047】
次に、本実施の形態による入力文法の生成例を示す。
図11は、処理対象であるXSLTスクリプトを示す図である。また、図12は、もう一方の処理対象である出力文法を示す図である。
図11に示すXSLTスクリプトは、
に変換する。
【0048】
図12に示す出力文法は、
・XML文書 <b/> (= b(ε, ε))
・XML文書 <a/><b/> (= a(ε, b(ε, ε)))
・XML文書 <a/><a/><b/> (= a(ε, a(ε, b(ε, ε))))
・XML文書 <a/><a/><a/><b/> (=a(ε, a(ε, a(ε, b(ε, ε)))))
・・・・・
などを表現する文法である。
【0049】
まず、XSLTスタイルシート入力部10が、図11のXSLTスクリプトを入力し、XSLT式に変換する。すると、XSLT式は、次のようになる。
μx.{copy{φ}, foreach{x}}
変換された上記のXSLT式は、推論実行部30に送られる。
また、出力スキーマ入力部20は、出力スキーマを入力して出力文法に変換するが、ここでは図12の出力文法が提供されているため、そのまま推論実行部30に送られる。
【0050】
次に、推論実行部30が、入力したXSLT式と出力文法とに基づいて入力文法の推論を実行する。
(i)まず、XSLT式μx.{copy, foreach{x}}と出力スキーマの全体を示す文法部分(0,1)から推論を開始する。今、着目している式がμx.{e}の形をしているので、上述したμx.{e}の場合の推論規則を適用する。このとき、eの中に自由に出現するxを全てμx.{e}に書き換えると、
copy, foreach{μx.{copy, foreach{x}}}
が得られる。以下、μx.{copy, foreach{x}}をe!とおく。
【0051】
(ii)ここで、XSLT式copy{φ}, foreach{e!} と文法部分(0,1)とに対して、再帰的に推論操作を適用する。これにより、文法部分(0,1)から分割された文法部分(0,0)と(0,1)、及び(0,1)と(1,1)の両者に対して、e,e’の場合の推論規則が適用される。
【0052】
(iii)このうち、上記文法部分(0,0)と(0,1)における文法部分(0,0)に対する推論は次のように行われる。すなわち、XSLT式copy{φ} と文法部分(0,0)とに対して、推論操作を適用する。これにより、(0,0)と図12の出力文法における生成規則とに基づいて生成される文書のうち、要素1つの並びであるものは、
XML文書 <a/> (= a(ε, ε))
のようであるから、a−要素1つの文法部分で、子は空文書を示す(1,1)という文法部分である。
したがって、XSLT式φと文法部分(1,1)とに対して、再帰的に推論操作を適用する。これにより、要素σは何でも良く、その子も何でも良いような入力文法が得られる。
そして、この結果から、XSLT式copy{φ} と文法部分(0,0)とに対して推論操作を適用した結果は、要素がaでなくてはならず、その子は何でも良いような入力文法部分となる。
【0053】
(iv)また、上記文法部分(0,0)と(0,1)における文法部分(0,1)に対する推論は次のように行われる。すなわち、XSLT式foreach{e!} と文法部分(0,1)とに対して、推論操作を適用する。XSLT式foreach{e!} に対する推論なので、上述したように文法部分の計算と生成規則の計算とを行う必要があるが、この時点では文法部分の計算のみを行い、生成規則の計算は後で行う。部分の計算は任意のσ−要素についてその子がX0 1,e!を開始記号とするような入力文法の文法部分となる。
【0054】
(v)次に、上記文法部分(0,1)と(1,1)における文法部分(0,1)に対する推論は次のように行われる。すなわち、XSLT式copy{φ} と文法部分(0,1)とに対して、推論操作を適用する。これにより、(0,1)と図12の出力文法の生成規則から生成される文書のうち、要素1つの並びであるものは、
XML文書 <b/> (= b(ε,ε))
のようであるから、a−要素1つの文法部分で子は空文書を示す(1,1)という文法部分である。
したがって、XSLT式φと文法部分(1,1)とに対して、再帰的に推論操作を適用する。これにより、要素σは何でも良く、その子も何でも良いような入力文法が得られる。
そして、この結果から、XSLT式copy{φ} と文法部分(0,1)とに対して推論操作を適用した結果は、要素がbでなくてはならず、その子は何でも良いような入力文法部分となる。
【0055】
(vi)また、上記文法部分(0,1)と(1,1)における文法部分(1,1)に対する推論は次のように行われる。すなわち、XSLT式foreach{e!} と文法部分(1,1)とに対して、推論操作を適用する。XSLT式foreach{e!} に対する推論なので、上述したように文法部分の計算と生成規則の計算とを行う必要があるが、この時点では文法部分の計算のみを行い、生成規則の計算は後で行う。部分の計算は任意のσ−要素についてその子がX1 1,e! を開始記号とするような入力文法の文法部分となる。
【0056】
(vii)以上の推論の後、推論ステップ(ii)におけるXSLT式copy{φ}, foreach{e!} と文法部分(0,1)とに対する推論に立ち戻る。これにより、得られる入力文法部分は、推論ステップ(iii)と(iv)の推論結果の共通部分、及び推論ステップ(v)と(vi)の推論結果の共通部分の和である。
推論ステップ(iii)と(iv)の推論結果から、その共通部分は、要素はaでなくてはならず、子はX0 0,e!を開始記号とするような入力文法の文法部分となる。
一方、推論ステップ(v)と(vi)の推論結果から、その共通部分は、要素はbでなくてはならず、子はX0 1,e!を開始記号とするような入力文法の文法部分となる。この両者の和が求める入力文法の文法部分である。
【0057】
(viii)さらに、推論ステップ(vii)の推論結果をもって、推論ステップ(i)におけるXSLT式μx.{copy, foreach{x}}と出力スキーマの全体を示す文法部分(0,1)とに対する推論に立ち戻る。推論ステップ(vii)の推論結果より、要素はaでなくてはならず子はX0 1,e!を開始記号とするような入力文法の文法部分、及び、要素はbでなくてはならず子はX1 1,e!を開始記号とするような入力文法の文法部分の和が、求める入力文法の文法部分となる。これは、次のような生成規則及び開始記号X’に対応する文法である。
生成規則:X→a(X0 1,e!,X’),X→b(X1 1,e!,X’),X’→ε
【0058】
ここまでで、XSLT式foreach{e!} に対する生成規則の計算以外の推論は全て終了した。以上の処理では、XSLT式copy{φ}, foreach{e!} と文法部分(0,1)とに対しての入力文法の文法部分を求めた。XSLT式foreach{e!} と文法部分(0,1)に対する生成規則の計算、及びXSLT式foreach{e!} と文法部分(1,1)に対する生成規則の計算は、以上の推論と同等の処理を出力文法における他の文法部分(0,0)、(1,0)、(1,1)のそれぞれに対して実行しなくてはならない。この処理の結果は、次の(ix)〜(xi)のようになる。
【0059】
(ix)XSLT式copy{φ}, foreach{e!} と文法部分(0,1)とに対して、推論操作を適用する。これにより、文法部分(0,1)から分割された文法部分(0,0)及び(0,0)に対して、e,e’の場合の推論規則が適用される。
前者の推論結果は、既に推論ステップ(iii)において計算した推論結果と同様である。後者の推論結果は、要素は同様にaでなくてはならず、その子はX0 0,e!を開始記号とするような文法部分である。
したがって、両者の共有部分である文法部分は、要素はaでなくてはならず、その子はX0 1,e!を開始記号とするような入力文法の文法部分である。
【0060】
(x)文法部分(1,0)は、対応する生成規則が存在しないので、何を適用しても結果はUNDEFである。
【0061】
(xi)XSLT式copy{φ}, foreach{e!} と文法部分(1,1)とに対して、推論操作を適用する。これにより、文法部分(0,1)から分割された文法部分(1,1)及び(1,1)に対して、e,e’の場合の推論規則が適用される。
この場合、前者の結果がUNDEFであり、したがって、共通部分である全体の結果もUNDEFとなる。
【0062】
以上の推論ステップ(i)及び(xi)〜(ix)の推論結果から、入力文法の生成規則は、無駄なものを取り除くと次のようになる。
・X0 0,e!→a(X0 1,e!,X0 0,e!)
・X0 0,e!→a(X0 1,e!,X0 1,e!)
・X0 0,e!→b(X1 1,e!,X0 1,e!)
・X→a(X0 1,e!,X’),X→b(X1 1,e!,X’)
・X’→ε,X0 0→ε,X1 1→ε
また、入力文法の開始記号は、Xである。
【0063】
以上のようにして生成された入力文法は、上述したように入力文法出力部40により、必要に応じて適当なスキーマ言語による入力スキーマに変換して出力される。
これにより、処理対象となったXSLTスタイルシートを用いて、推論実行部30の推論により生成された入力文法(あるいは入力文法出力部から出力される入力スキーマ)に適合するXML文書の変換を行えば、処理対象となった出力スキーマに適合するXML文書が得られることとなる。すなわち、これらのXSLTスタイルシート、入力スキーマ及び出力スキーマの整合性が保証される。
【0064】
次に、上述した本実施の形態によるスキーマ生成検証システムの実装例について説明する。
上述したように、本実施の形態を用いれば、XSLTスタイルシートと入力スキーマと出力スキーマとの整合性を確認することができる。そこで、XSLTスタイルシートのデバッガに本実施の形態を実装することができる。
図13は、本実施の形態を実装したデバッガの構成例を示す図である。
図13を参照すると、このデバッガは、処理対象としてXSLTスタイルシート、入力スキーマ及び出力スキーマを入力するデータ入力部1310と、データ入力部1310にて入力されたXSLTスタイルシート、入力スキーマ及び出力スキーマを格納するデータ記憶部1320と、本実施の形態のスキーマ生成検証システムに相当するスキーマ生成部1330と、スキーマ生成部1330にて生成される文書スキーマに基づいてXSLTスタイルシート、入力スキーマ及び出力スキーマの整合性を判定する整合性判定部1340と、整合性判定部1340による判定結果を出力する出力制御部1350とを備える。
データ入力部1310、整合性判定部1340及び出力制御部1350は、本実施の形態に相当するスキーマ生成部1330と同様に、例えば、図1に示したプログラム制御されたCPU101により実現される。また、データ記憶部1320は、例えば、図1に示したメインメモリ103により実現される。
【0065】
データ入力部1310は、例えば、ユーザからの命令を受け付ける操作画面をディスプレイ装置に表示してデバッグの開始命令を受け付け、これに応じて、処理対象であるXSLTスタイルシートのスクリプト(XSLTスクリプト)、入力スキーマ及び出力スキーマを入力してデータ記憶部1320に格納する。
処理対象のXSLTスクリプト、入力スキーマ及び出力スキーマは、上記の操作画面にて特定できるようにすることができる。また、処理対象のXSLTスクリプト、入力スキーマ及び出力スキーマは、図1に示したハードディスク105に格納されているものを読み出して処理対象としても良いし、ネットワークインターフェイス106を介して他の装置から入力したり、キーボード108その他の入力手段を介して入力したりすることもできる。
【0066】
スキーマ生成部1330は、上述したように本実施の形態のスキーマ生成検証システムに相当し、データ記憶部1320からXSLTスクリプトと出力スキーマとを読み出して推論処理を行い、推論結果として文書スキーマを生成する。この文書スキーマは、データ記憶部1320に格納されている入力スキーマと同一のスキーマ言語にて記述された状態に変換されている。そして、この文書スキーマは、整合性判定部1340に送られる。
【0067】
整合性判定部1340は、スキーマ生成部1330から生成された文書スキーマを受け取ると共に、データ記憶部1320から入力スキーマを読み出して、これらを比較する。そして、当該文書スキーマと入力スキーマとが等しいか、または入力スキーマが当該文書スキーマに包含されるならば、整合性判定部1340は、処理対象であるXSLTスタイルシート、入力スキーマ及び出力スキーマは整合性を有すると判定する。それ以外の場合は、整合性を有しないと判定する。
【0068】
出力制御部1350は、例えば、ディスプレイ表示や音声にて整合性判定部1340による判定結果を示すコメントを出力する。
ここで、出力は単純にXSLTスタイルシート、入力スキーマ及び出力スキーマの不整合を通知するようにしても良いが、デバッグ対象の設定に応じて任意のメッセージ等を出力するようにしても良い。
【0069】
例えば、使用したい入力スキーマ及び出力スキーマが決まっており、用意したXSLTスタイルシートの正しさを調べたい場合、本実装例のデバッガにて整合性を判定し、整合するならばXSLTスタイルシートが正しいことを示し、不整合ならばXSLTスタイルシートが正しくないことを示すメッセージを出力する。この場合、正しいと判定された当該XSLTスタイルシートを用いてXML文書を変換する場合に、入力文書と当該入力スキーマとを照合して適合していることを確認すれば、変換されたXML文書は必ず当該出力スキーマに適合することが保証されることとなる。
【0070】
同様に、使用したいXSLTスタイルシート及び入出力スキーマの一方が決まっており、入出力スキーマの他方の正しさを調べたい場合に、本実装例のデバッガにて整合性を判定し、整合するならば当該文書スキーマが正しいことを示し、不整合ならば当該文書スキーマが正しくないことを示すメッセージを出力することができる。
特に、入力スキーマの正しさを調べたい場合であって、不整合と判定された場合は、スキーマ生成部1330にて生成された文書スキーマが入力スキーマとして健全かつ完全であるので、この生成された文書スキーマを入力スキーマの雛形として出力することができる。このようにすれば、ユーザが、出力された文書スキーマと用意した入力スキーマとを比較して、修正すべき内容を判断することができる。
【0071】
また、他の実装例として、所定のXSLTスタイルシートに入力する入力XML文書の検証システムに本実施の形態を実装することができる。
この場合、本実施の形態は、初期動作として、使用するXSLTスタイルシートと変換後のXML文書が適合すべき出力スキーマとに基づいて推論を行い、XSLTスタイルシートに入力されるXML文書が適合すべき入力スキーマを生成しておく。そして、XML文書をXSLTスタイルシートに入力する前段において、本実装例の検証システムが、予め生成された入力スキーマと、当該XML文書の文書スキーマとを比較し、検証する。この場合、当該XML文書の文書スキーマが入力スキーマと等しいか、入力スキーマに包含されるならば、そのままXSLTスタイルシートに入力して変換を行う。それ以外の場合には、エラー出力を行ってユーザに入力文書の不正を通知することができる。
【0072】
さらにまた、他の実装例として、本実施の形態によるスキーマ生成検証システムをそのまま実装し、使用するXSLTスタイルシートと出力スキーマが決まっている状態で、要求される入力スキーマを生成することができる。これによれば、XSLTスタイルシートの作成者が、入力スキーマを特定せず、ある程度の幅を含んで想定している状態でXSLTスタイルシートを作成した場合に、必要とされる入力スキーマを自動的に得ることができる。
【0073】
なお、本実施の形態では、逆方向の推論を用いて文書スキーマの生成規則を生成したが、適切な推論規則を用意することによって、順方向の推論により文書スキーマの生成規則を生成するシステムを構築することができる。
この場合、スキーマ生成検証システムは、XSLTスタイルシートと入力スキーマとから、出力スキーマを生成することとなる。したがって、実装例においても、デバッガにおいて出力スキーマの雛形を出力したり、出力スキーマの生成システムとして実装したりすることができる。
【0074】
また、上述した本実施の形態では、出力スキーマの生成規則の表現に2分木文法を用いたが、これは推論における計算の効率を向上するために用いたに過ぎず、他の種類の文法を用いて出力スキーマの生成規則を表現しても構わない。
【0075】
【発明の効果】
以上説明したように、本発明によれば、所望の変換処理に用いるXSLTスタイルシートと入力スキーマと出力スキーマとが整合していることを保証することが可能となる。
また、これにより、XSLTスタイルシートが正しく動作することを保証することが可能となり、XSLTスタイルシートのテストなどの作業負担を軽減することができる。
さらに、本発明によれば、XSLTスタイルシートと入力スキーマと出力スキーマとが整合していることを保証することにより、入力スキーマが存在しない場合に、どのような構造範囲のXML文書であれば要求される出力スキーマを持ったXML文書に変換できるかを知ることが可能となる。
【図面の簡単な説明】
【図1】 本実施の形態のスキーマ生成検証システムを実現するのに好適なコンピュータ装置のハードウェア構成の例を模式的に示した図である。
【図2】 図1に示したコンピュータ装置にて実現される本実施の形態によるスキーマ生成検証システムの構成を示す図である。
【図3】 本実施の形態における推論実行部による推論操作を説明する図である。
【図4】 本実施の形態における推論実行部による推論手順を説明するフローチャートである。
【図5】 本実施の形態にて用いられる推論規則を図解した図であり、XSLT式がe、e’である場合の推論規則を説明する図である。
【図6】 本実施の形態にて用いられる推論規則を図解した図であり、XSLT式がelement(σ){e}である場合の推論規則を説明する図である。
【図7】 本実施の形態にて用いられる推論規則を図解した図であり、XSLT式がcopy{e}である場合の推論規則を説明する図である。
【図8】 本実施の形態にて用いられる推論規則を図解した図であり、XSLT式がif(σ){e}である場合の推論規則を説明する図である。
【図9】 本実施の形態にて用いられる推論規則を図解した図であり、XSLT式がforeach{e}である場合の推論規則を説明する図である。
【図10】 本実施の形態に用いられる2分木文法を説明する図である。
【図11】 本実施の形態の処理対象であるXSLTスクリプトの例を示す図である。
【図12】 本実施の形態の処理対象である出力文法の例を示す図である。
【図13】 本実施の形態を実装したデバッガの構成例を示す図である。
【符号の説明】
10…XSLTスタイルシート入力部、20…出力スキーマ入力部、30…推論実行部、40…入力文法出力部、101…CPU(中央処理装置)、102…M/B(マザーボード)チップセット、103…メインメモリ、104…ビデオカード、105…ハードディスク、106…ネットワークインターフェイス、107…フロッピーディスクドライブ、108…キーボード、109…I/Oポート、110…ブリッジ回路、1310…データ入力部、1320…データ記憶部、1330…スキーマ生成部、1340…整合性判定部、1350…出力制御部
Claims (13)
- XSLT(XSL Transformations)スタイルシートを入力するXSLTスタイルシート入力手段と、
所定のXML(Extensible Markup Language)データがしたがうべき文書スキーマを入力するスキーマ入力手段と、
前記XSLTスタイルシート入力手段にて入力された前記XSLTスタイルシートが、
e、e’:XSLT文の並びを表現する式構成子、である場合に、
前記文書スキーマの文法部分(B)が所定の2つの文法部分(B1)と(B2)との連結として表現できるような全ての組合せを求め、
各組の文法部分(B1)と(B2)とに対して、
・XSLTスタイルシートeと文法部分(B1)に対して推論操作を適用した結果(C1)
・XSLTスタイルシートe’と文法部分(B2)に対して推論操作を適用した結果(C2)
を求め、
結果(C1)と結果(C2)とが未定義でなければ、さらに結果(C1)と結果(C2)とに対して、どちらの文法部分からも生成される文書のみを含むような共通部分である結果(C3)を求め、
文法部分(B)の全ての分割に対する結果(C3)のいずれかから生成される文書を全て含むような結果(C)を求めることにより、他の文書スキーマを表現する生成規則を生成し、
element( σ ){e} :XSLTのリテラル結果要素の生成、または element 文に対応する内容、である場合に、
前記文書スキーマの文法部分(B)のうちで、σ−要素1つの文法部分であり、その子に文法部分(B1)が現れる場合を探し、
XSLTスタイルシートeと文法部分(B1)とに対して推論操作を適用した結果(C1)を求めることにより、他の文書スキーマを表現する生成規則を生成し、
copy{e} :XSLTの copy 文に対応する内容、である場合に、
前記文書スキーマの文法部分(B)のうちで、σを任意の要素名として、σ−要素1つの文法部分であり、その子に文法部分(B1)が現れる場合を探し、
XSLTスタイルシートeと文法部分(B1)とに対して推論操作を適用した結果(C1)のうち、σ−要素1つの文法部分をもとめることにより、他の文書スキーマを表現する生成規則を生成し、
if( σ ){e} :XSLTの if 文でカレントノードの要素名に対してテストした場合に対応する内容、である場合に、
・XSLTスタイルシートeと前記文書スキーマの文法部分(B)に対して推論操作を適用した結果(C1)
・XSLTスタイルシートeと空文書とを示す文法部分εに対して推論操作を適用した結果(C2)
を求め、
結果(C1)のうち、σ−要素1つの並びで表現されるような文法部分と結果(C2)との和(C)を求めることにより、他の文書スキーマを表現する生成規則を生成し、
foreach{e} :XSLTの for-each 文で子ノード列、すなわち、 ./* を選択した場合に対応する内容、である場合に、
前記文書スキーマを2分木文法で表現し、当該2分木文法において、X q q ’ ,e の形で非終端記号を与え、
前記文書スキーマのk個の文法部分のうち所定の文法部分(Bk)が2つの非終端記号の組(q’,q”)で表現される場合に、
・XSLTスタイルシートeと文法部分(Bk)に対して推論操作を適用した結果(Ck)
を求め、任意のqについて
・X q q',e →σ(ω,X q q",e )
という生成規則と、
・X q q →ε
という生成規則とを追加し、
任意のσ−要素について、その子がX q q',e を開始記号とするような文法部分を求めることにより、他の文書スキーマを表現する生成規則を生成し、
μ x.{e} : call-template 文に対応する再起呼び出しを表現する構成子、である場合に、
XSLTスタイルシートeの中に自由に出現するx、すなわち、他のμ x.{e ’ } におけるe’の中ではないようなxを全てμ x.{e} に書き換えたものをe”とおき、
e”と前記文書スキーマの文法部分(B)とに対して推論操作を適用した結果(C)を求めることにより、他の文書スキーマを表現する生成規則を生成し、
φ:空XSLT文に対応する式構成子、である場合に、
前記文書スキーマの文法部分(B)がεを含むような文法部分ならば、任意のσに対してどんな子をも持ち得るσ−要素1つの並びを生成する文法部分(C)を求めることにより、他の文書スキーマを表現する生成規則を生成する
推論実行手段と
を備えることを特徴とするスキーマ生成装置。 - 前記スキーマ入力手段は、前記文書スキーマを所定の生成規則の集合に置き換え、
前記推論実行手段は、前記生成規則の集合に基づいて前記他の文書スキーマを表現する生成規則を生成することを特徴とする請求項1に記載のスキーマ生成装置。 - 前記推論実行手段は、正規木言語で表現される前記生成規則を生成することを特徴とする請求項1に記載のスキーマ生成装置。
- 前記推論実行手段にて生成された前記生成規則を、所定のスキーマ言語による具体的な文書スキーマに変換する変換手段をさらに備えることを特徴とする請求項1に記載のスキーマ生成装置。
- XSLT(XSL Transformations)スタイルシートを入力するXSLTスタイルシート入力手段と、
前記XSLTスタイルシートによる変換結果として生成されるXML(Extensible Markup Language)データがしたがうべき文書スキーマを入力するスキーマ入力手段と、
前記XSLTスタイルシート入力手段にて入力された前記XSLTスタイルシートが、
e、e’:XSLT文の並びを表現する式構成子、である場合に、
前記文書スキーマの文法部分(B)が所定の2つの文法部分(B1)と(B2)との連結として表現できるような全ての組合せを求め、
各組の文法部分(B1)と(B2)とに対して、
・XSLTスタイルシートeと文法部分(B1)に対して推論操作を適用した結果(C1)
・XSLTスタイルシートe’と文法部分(B2)に対して推論操作を適用した結果(C2)
を求め、
結果(C1)と結果(C2)とが未定義でなければ、さらに結果(C1)と結果(C2)とに対して、どちらの文法部分からも生成される文書のみを含むような共通部分である結果(C3)を求め、
文法部分(B)の全ての分割に対する結果(C3)のいずれかから生成される文書を全て含むような結果(C)を求めることにより、他の文書スキーマを表現する生成規則を生成し、
element( σ ){e} :XSLTのリテラル結果要素の生成、または element 文に対応する内容、である場合に、
前記文書スキーマの文法部分(B)のうちで、σ−要素1つの文法部分であり、その子 に文法部分(B1)が現れる場合を探し、
XSLTスタイルシートeと文法部分(B1)とに対して推論操作を適用した結果(C1)を求めることにより、他の文書スキーマを表現する生成規則を生成し、
copy{e} :XSLTの copy 文に対応する内容、である場合に、
前記文書スキーマの文法部分(B)のうちで、σを任意の要素名として、σ−要素1つの文法部分であり、その子に文法部分(B1)が現れる場合を探し、
XSLTスタイルシートeと文法部分(B1)とに対して推論操作を適用した結果(C1)のうち、σ−要素1つの文法部分をもとめることにより、他の文書スキーマを表現する生成規則を生成し、
if( σ ){e} :XSLTの if 文でカレントノードの要素名に対してテストした場合に対応する内容、である場合に、
・XSLTスタイルシートeと前記文書スキーマの文法部分(B)に対して推論操作を適用した結果(C1)
・XSLTスタイルシートeと空文書とを示す文法部分εに対して推論操作を適用した結果(C2)
を求め、
結果(C1)のうち、σ−要素1つの並びで表現されるような文法部分と結果(C2)との和(C)を求めることにより、他の文書スキーマを表現する生成規則を生成し、
foreach{e} :XSLTの for-each 文で子ノード列、すなわち、 ./* を選択した場合に対応する内容、である場合に、
前記文書スキーマを2分木文法で表現し、当該2分木文法において、X q q ’ ,e の形で非終端記号を与え、
前記文書スキーマのk個の文法部分のうち所定の文法部分(Bk)が2つの非終端記号の組(q’,q”)で表現される場合に、
・XSLTスタイルシートeと文法部分(Bk)に対して推論操作を適用した結果(Ck)
を求め、任意のqについて
・X q q',e →σ(ω,X q q",e )
という生成規則と、
・X q q →ε
という生成規則とを追加し、
任意のσ−要素について、その子がX q q',e を開始記号とするような文法部分を求めることにより、他の文書スキーマを表現する生成規則を生成し、
μ x.{e} : call-template 文に対応する再起呼び出しを表現する構成子、である場合に、
XSLTスタイルシートeの中に自由に出現するx、すなわち、他のμ x.{e ’ } におけるe’の中ではないようなxを全てμ x.{e} に書き換えたものをe”とおき、
e”と前記文書スキーマの文法部分(B)とに対して推論操作を適用した結果(C)を求めることにより、他の文書スキーマを表現する生成規則を生成し、
φ:空XSLT文に対応する式構成子、である場合に、
前記文書スキーマの文法部分(B)がεを含むような文法部分ならば、任意のσに対してどんな子をも持ち得るσ−要素1つの並びを生成する文法部分(C)を求めることにより、他の文書スキーマを表現する生成規則を生成する
スキーマ生成手段と
を備えることを特徴とするスキーマ生成装置。 - 前記スキーマ入力手段は、前記文書スキーマを、所定の生成規則の集合に置き換え、
前記スキーマ生成手段は、前記生成規則の集合と、前記XSLTスタイルシートに含まれる要素生成命令とに基づいて、前記XSLTスタイルシートへの入力として与えられるXMLデータが適合すべき文書スキーマを表現する生成規則を生成することを特徴とする請求項5に記載のスキーマ生成装置。 - XSLT(XSL Transformations)スタイルシートと、当該XSLTスタイルシートによる変換前のXML(Extensible Markup Language)データがしたがうべき文書スキーマである入力スキーマと、当該XMLスタイルシートによる変換後のXMLデータがしたがうべき文書スキーマである出力スキーマとを入力する入力手段と、
前記入力手段にて入力されたXSLTスタイルシートと入力スキーマと出力スキーマとを格納する格納手段と、
前記格納手段から読み出された前記入力スキーマまたは前記出力スキーマのいずれか一方の文書スキーマと前記XSLTスタイルシートとに基づき、前記XSLTスタイルシートが、
e、e’:XSLT文の並びを表現する式構成子、である場合に、
前記文書スキーマの文法部分(B)が所定の2つの文法部分(B1)と(B2)との連結として表現できるような全ての組合せを求め、
各組の文法部分(B1)と(B2)とに対して、
・XSLTスタイルシートeと文法部分(B1)に対して推論操作を適用した結果(C1)
・XSLTスタイルシートe’と文法部分(B2)に対して推論操作を適用した結果(C2)
を求め、
結果(C1)と結果(C2)とが未定義でなければ、さらに結果(C1)と結果(C2)とに対して、どちらの文法部分からも生成される文書のみを含むような共通部分である結果(C3)を求め、
文法部分(B)の全ての分割に対する結果(C3)のいずれかから生成される文書を全て含むような結果(C)を求めることにより、他の文書スキーマを表現する生成規則を生成し、
element( σ ){e} :XSLTのリテラル結果要素の生成、または element 文に対応する内容、である場合に、
前記文書スキーマの文法部分(B)のうちで、σ−要素1つの文法部分であり、その子に文法部分(B1)が現れる場合を探し、
XSLTスタイルシートeと文法部分(B1)とに対して推論操作を適用した結果(C1)を求めることにより、他の文書スキーマを表現する生成規則を生成し、
copy{e} :XSLTの copy 文に対応する内容、である場合に、
前記文書スキーマの文法部分(B)のうちで、σを任意の要素名として、σ−要素1つの文法部分であり、その子に文法部分(B1)が現れる場合を探し、
XSLTスタイルシートeと文法部分(B1)とに対して推論操作を適用した結果(C1)のうち、σ−要素1つの文法部分をもとめることにより、他の文書スキーマを表現する生成規則を生成し、
if( σ ){e} :XSLTの if 文でカレントノードの要素名に対してテストした場合に対応する内容、である場合に、
・XSLTスタイルシートeと前記文書スキーマの文法部分(B)に対して推論操作を適用した結果(C1)
・XSLTスタイルシートeと空文書とを示す文法部分εに対して推論操作を適用した結果(C2)
を求め、
結果(C1)のうち、σ−要素1つの並びで表現されるような文法部分と結果(C2)との和(C)を求めることにより、他の文書スキーマを表現する生成規則を生成し、
foreach{e} :XSLTの for-each 文で子ノード列、すなわち、 ./* を選択した場合に対応する内容、である場合に、
前記文書スキーマを2分木文法で表現し、当該2分木文法において、X q q ’ ,e の形で非終端記号を与え、
前記文書スキーマのk個の文法部分のうち所定の文法部分(Bk)が2つの非終端記号 の組(q’,q”)で表現される場合に、
・XSLTスタイルシートeと文法部分(Bk)に対して推論操作を適用した結果(Ck)
を求め、任意のqについて
・X q q',e →σ(ω,X q q",e )
という生成規則と、
・X q q →ε
という生成規則とを追加し、
任意のσ−要素について、その子がX q q',e を開始記号とするような文法部分を求めることにより、他の文書スキーマを表現する生成規則を生成し、
μ x.{e} : call-template 文に対応する再起呼び出しを表現する構成子、である場合に、
XSLTスタイルシートeの中に自由に出現するx、すなわち、他のμ x.{e ’ } におけるe’の中ではないようなxを全てμ x.{e} に書き換えたものをe”とおき、
e”と前記文書スキーマの文法部分(B)とに対して推論操作を適用した結果(C)を求めることにより、他の文書スキーマを表現する生成規則を生成し、
φ:空XSLT文に対応する式構成子、である場合に、
前記文書スキーマの文法部分(B)がεを含むような文法部分ならば、任意のσに対してどんな子をも持ち得るσ−要素1つの並びを生成する文法部分(C)を求めることにより、他の文書スキーマを表現する生成規則を生成する
スキーマ生成手段と、
前記スキーマ生成手段にて生成された前記生成規則により表現される文書スキーマと前記格納手段から読み出された前記入力スキーマまたは前記出力スキーマの他方とを比較することにより、前記XSLTスタイルシートと前記入力スキーマと前記出力スキーマとの整合性を判定する判定手段と
を備えることを特徴とするデータ処理装置。 - 前記判定手段は、前記文書スキーマが、比較対象である前記入力スキーマまたは前記出力スキーマと等しいか、またはこれらを包含する場合に、前記XSLTスタイルシートと前記入力スキーマと前記出力スキーマとは整合性を有すると判定することを特徴とする請求項7に記載のデータ処理装置。
- コンピュータを用いたデータ処理方法であって、
XSLT(XSL Transformations)スタイルシートに含まれる要素生成命令を要素生成命令記憶手段に格納するステップと、
所定のXML(Extensible Markup Language)データがしたがうべき文書スキーマを表現する生成規則を生成規則記憶手段に格納するステップと、
前記要素生成命令記憶手段から前記要素生成命令を読み出し、前記生成規則記憶手段から前記生成規則を読み出して、当該要素生成命令及び当該生成規則に基づき、当該要素生成命令が、
e、e’:XSLT文の並びを表現する式構成子、である場合に、
前記生成規則の文法部分(B)が所定の2つの文法部分(B1)と(B2)との連結として表現できるような全ての組合せを求め、
各組の文法部分(B1)と(B2)とに対して、
・要素生成命令eと文法部分(B1)に対して推論操作を適用した結果(C1)
・要素生成命令e’と文法部分(B2)に対して推論操作を適用した結果(C2)
を求め、
結果(C1)と結果(C2)とが未定義でなければ、さらに結果(C1)と結果(C2)とに対して、どちらの文法部分からも生成される文書のみを含むような共通部分である結果(C3)を求め、
文法部分(B)の全ての分割に対する結果(C3)のいずれかから生成される文書を全て含むような結果(C)を求めることにより、他の文書スキーマを表現する生成規則を生成し、
element( σ ){e} :XSLTのリテラル結果要素の生成、または element 文に対応する内容、である場合に、
前記生成規則の文法部分(B)のうちで、σ−要素1つの文法部分であり、その子に文法部分(B1)が現れる場合を探し、
要素生成命令eと文法部分(B1)とに対して推論操作を適用した結果(C1)を求めることにより、他の文書スキーマを表現する生成規則を生成し、
copy{e} :XSLTの copy 文に対応する内容、である場合に、
前記生成規則の文法部分(B)のうちで、σを任意の要素名として、σ−要素1つの文法部分であり、その子に文法部分(B1)が現れる場合を探し、
要素生成命令eと文法部分(B1)とに対して推論操作を適用した結果(C1)のうち、σ−要素1つの文法部分をもとめることにより、他の文書スキーマを表現する生成規則を生成し、
if( σ ){e} :XSLTの if 文でカレントノードの要素名に対してテストした場合に対応する内容、である場合に、
・要素生成命令eと前記生成規則の文法部分(B)に対して推論操作を適用した結果(C1)
・要素生成命令eと空文書とを示す文法部分εに対して推論操作を適用した結果(C2)を求め、
結果(C1)のうち、σ−要素1つの並びで表現されるような文法部分と結果(C2)との和(C)を求めることにより、他の文書スキーマを表現する生成規則を生成し、
foreach{e} :XSLTの for-each 文で子ノード列、すなわち、 ./* を選択した場合に対応する内容、である場合に、
前記生成規則を2分木文法で表現し、当該2分木文法において、X q q ’ ,e の形で非終端記号を与え、
前記生成規則のk個の文法部分のうち所定の文法部分(Bk)が2つの非終端記号の組(q’,q”)で表現される場合に、
・要素生成命令eと文法部分(Bk)に対して推論操作を適用した結果(Ck)
を求め、任意のqについて
・X q q',e →σ(ω,X q q",e )
という生成規則と、
・X q q →ε
という生成規則とを追加し、
任意のσ−要素について、その子がX q q',e を開始記号とするような文法部分を求めることにより、他の文書スキーマを表現する生成規則を生成し、
μ x.{e} : call-template 文に対応する再起呼び出しを表現する構成子、である場合に、
要素生成命令eの中に自由に出現するx、すなわち、他のμ x.{e ’ } におけるe’の中ではないようなxを全てμ x.{e} に書き換えたものをe”とおき、
e”と前記生成規則の文法部分(B)とに対して推論操作を適用した結果(C)を求めることにより、他の文書スキーマを表現する生成規則を生成し、
φ:空XSLT文に対応する式構成子、である場合に、
前記生成規則の文法部分(B)がεを含むような文法部分ならば、任意のσに対してどんな子をも持ち得るσ−要素1つの並びを生成する文法部分(C)を求めることにより、他の文書スキーマを表現する生成規則を生成する
処理と
を含むことを特徴とするデータ処理方法。 - 前記生成規則を生成するステップは、正規木言語で表現される前記生成規則を生成するステップを含むことを特徴とする請求項9に記載のデータ処理方法。
- 前記生成規則を生成するステップにおいて生成された生成規則にて表現される文書スキーマと、所定のXMLデータにおける文書スキーマとを比較することにより、当該XMLデータまたは前記XSLTスタイルシートの正しさを判定するステップをさらに含むことを特徴とする請求項9に記載のデータ処理方法。
- コンピュータを制御して、データ処理を行うプログラムにおいて、
XSLT(XSL Transformations)スタイルシートに含まれる要素生成命令を要素生成命令記憶手段に格納する処理と、
所定のXML(Extensible Markup Language)データがしたがうべき文書スキーマを表現する生成規則を生成規則記憶手段に格納する処理と、
前記要素生成命令記憶手段から前記要素生成命令を読み出し、前記生成規則記憶手段から前記生成規則を読み出して、当該要素生成命令及び当該生成規則に基づき、当該要素生成命令が、
e、e’:XSLT文の並びを表現する式構成子、である場合に、
前記生成規則の文法部分(B)が所定の2つの文法部分(B1)と(B2)との連結として表現できるような全ての組合せを求め、
各組の文法部分(B1)と(B2)とに対して、
・要素生成命令eと文法部分(B1)に対して推論操作を適用した結果(C1)
・要素生成命令e’と文法部分(B2)に対して推論操作を適用した結果(C2)
を求め、
結果(C1)と結果(C2)とが未定義でなければ、さらに結果(C1)と結果(C2)とに対して、どちらの文法部分からも生成される文書のみを含むような共通部分である結果(C3)を求め、
文法部分(B)の全ての分割に対する結果(C3)のいずれかから生成される文書を全て含むような結果(C)を求めることにより、他の文書スキーマを表現する生成規則を生成し、
element( σ ){e} :XSLTのリテラル結果要素の生成、または element 文に対応する内容、である場合に、
前記生成規則の文法部分(B)のうちで、σ−要素1つの文法部分であり、その子に文法部分(B1)が現れる場合を探し、
要素生成命令eと文法部分(B1)とに対して推論操作を適用した結果(C1)を求めることにより、他の文書スキーマを表現する生成規則を生成し、
copy{e} :XSLTの copy 文に対応する内容、である場合に、
前記生成規則の文法部分(B)のうちで、σを任意の要素名として、σ−要素1つの文法部分であり、その子に文法部分(B1)が現れる場合を探し、
要素生成命令eと文法部分(B1)とに対して推論操作を適用した結果(C1)のうち、σ−要素1つの文法部分をもとめることにより、他の文書スキーマを表現する生成規則を生成し、
if( σ ){e} :XSLTの if 文でカレントノードの要素名に対してテストした場合に対応する内容、である場合に、
・要素生成命令eと前記生成規則の文法部分(B)に対して推論操作を適用した結果(C1)
・要素生成命令eと空文書とを示す文法部分εに対して推論操作を適用した結果(C2)を求め、
結果(C1)のうち、σ−要素1つの並びで表現されるような文法部分と結果(C2)との和(C)を求めることにより、他の文書スキーマを表現する生成規則を生成し、
foreach{e} :XSLTの for-each 文で子ノード列、すなわち、 ./* を選択した場合に対応する内容、である場合に、
前記生成規則を2分木文法で表現し、当該2分木文法において、X q q ’ ,e の形で非終端記号を与え、
前記生成規則のk個の文法部分のうち所定の文法部分(Bk)が2つの非終端記号の組(q’,q”)で表現される場合に、
・要素生成命令eと文法部分(Bk)に対して推論操作を適用した結果(Ck)
を求め、任意のqについて
・X q q',e →σ(ω,X q q",e )
という生成規則と、
・X q q →ε
という生成規則とを追加し、
任意のσ−要素について、その子がX q q',e を開始記号とするような文法部分を求めることにより、他の文書スキーマを表現する生成規則を生成し、
μ x.{e} : call-template 文に対応する再起呼び出しを表現する構成子、である場合に、
要素生成命令eの中に自由に出現するx、すなわち、他のμ x.{e ’ } におけるe’の中ではないようなxを全てμ x.{e} に書き換えたものをe”とおき、
e”と前記生成規則の文法部分(B)とに対して推論操作を適用した結果(C)を求めることにより、他の文書スキーマを表現する生成規則を生成し、
φ:空XSLT文に対応する式構成子、である場合に、
前記生成規則の文法部分(B)がεを含むような文法部分ならば、任意のσに対してどんな子をも持ち得るσ−要素1つの並びを生成する文法部分(C)を求めることにより、他の文書スキーマを表現する生成規則を生成する
処理と
を前記コンピュータに実行させることを特徴とするプログラム。 - コンピュータを制御して、データ処理を行うプログラムにおいて、
XSLT(XSL Transformations)スタイルシートと、当該XSLTスタイルシートによる変換前のXML(Extensible Markup Language)データがしたがうべき文書スキーマである入力スキーマと、当該XMLスタイルシートによる変換後のXMLデータがしたがうべき文書スキーマである出力スキーマとを入力し、データ記憶手段に格納する処理と、
前記データ記憶手段から前記入力スキーマまたは前記出力スキーマのいずれか一方の文書スキーマと前記XSLTスタイルシートとを読み出し、読み出した当該文書スキーマと当該XSLTスタイルシートとに基づき、前記XSLTスタイルシートが、
e、e’:XSLT文の並びを表現する式構成子、である場合に、
前記文書スキーマの文法部分(B)が所定の2つの文法部分(B1)と(B2)との連結として表現できるような全ての組合せを求め、
各組の文法部分(B1)と(B2)とに対して、
・XSLTスタイルシートeと文法部分(B1)に対して推論操作を適用した結果(C1)
・XSLTスタイルシートe’と文法部分(B2)に対して推論操作を適用した結果(C2)
を求め、
結果(C1)と結果(C2)とが未定義でなければ、さらに結果(C1)と結果(C2)とに対して、どちらの文法部分からも生成される文書のみを含むような共通部分である結果(C3)を求め、
文法部分(B)の全ての分割に対する結果(C3)のいずれかから生成される文書を全て含むような結果(C)を求めることにより、他の文書スキーマを表現する生成規則を生成し、
element( σ ){e} :XSLTのリテラル結果要素の生成、または element 文に対応する内容、である場合に、
前記文書スキーマの文法部分(B)のうちで、σ−要素1つの文法部分であり、その子に文法部分(B1)が現れる場合を探し、
XSLTスタイルシートeと文法部分(B1)とに対して推論操作を適用した結果(C1)を求めることにより、他の文書スキーマを表現する生成規則を生成し、
copy{e} :XSLTの copy 文に対応する内容、である場合に、
前記文書スキーマの文法部分(B)のうちで、σを任意の要素名として、σ−要素1つの文法部分であり、その子に文法部分(B1)が現れる場合を探し、
XSLTスタイルシートeと文法部分(B1)とに対して推論操作を適用した結果(C 1)のうち、σ−要素1つの文法部分をもとめることにより、他の文書スキーマを表現する生成規則を生成し、
if( σ ){e} :XSLTの if 文でカレントノードの要素名に対してテストした場合に対応する内容、である場合に、
・XSLTスタイルシートeと前記文書スキーマの文法部分(B)に対して推論操作を適用した結果(C1)
・XSLTスタイルシートeと空文書とを示す文法部分εに対して推論操作を適用した結果(C2)
を求め、
結果(C1)のうち、σ−要素1つの並びで表現されるような文法部分と結果(C2)との和(C)を求めることにより、他の文書スキーマを表現する生成規則を生成し、
foreach{e} :XSLTの for-each 文で子ノード列、すなわち、 ./* を選択した場合に対応する内容、である場合に、
前記文書スキーマを2分木文法で表現し、当該2分木文法において、X q q ’ ,e の形で非終端記号を与え、
前記文書スキーマのk個の文法部分のうち所定の文法部分(Bk)が2つの非終端記号の組(q’,q”)で表現される場合に、
・XSLTスタイルシートeと文法部分(Bk)に対して推論操作を適用した結果(Ck)
を求め、任意のqについて
・X q q',e →σ(ω,X q q",e )
という生成規則と、
・X q q →ε
という生成規則とを追加し、
任意のσ−要素について、その子がX q q',e を開始記号とするような文法部分を求めることにより、他の文書スキーマを表現する生成規則を生成し、
μ x.{e} : call-template 文に対応する再起呼び出しを表現する構成子、である場合に、
XSLTスタイルシートeの中に自由に出現するx、すなわち、他のμ x.{e ’ } におけるe’の中ではないようなxを全てμ x.{e} に書き換えたものをe”とおき、
e”と前記文書スキーマの文法部分(B)とに対して推論操作を適用した結果(C)を求めることにより、他の文書スキーマを表現する生成規則を生成し、
φ:空XSLT文に対応する式構成子、である場合に、
前記文書スキーマの文法部分(B)がεを含むような文法部分ならば、任意のσに対してどんな子をも持ち得るσ−要素1つの並びを生成する文法部分(C)を求めることにより、他の文書スキーマを表現する生成規則を生成する
処理と、
前記データ記憶手段から前記入力スキーマまたは前記出力スキーマの他方を読み出し、当該入力スキーマまたは当該出力スキーマと生成された前記他の文書スキーマとを比較することにより、前記XSLTスタイルシートと前記入力スキーマと前記出力スキーマとの整合性を判定する処理と
を前記コンピュータに実行させることを特徴とするプログラム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001267212A JP3972323B2 (ja) | 2001-09-04 | 2001-09-04 | スキーマ生成装置、データ処理装置及びその方法並びにプログラム |
US10/219,620 US20030097637A1 (en) | 2001-09-04 | 2002-08-15 | Schema generation apparatus, data processor, and program for processing in the same data processor |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001267212A JP3972323B2 (ja) | 2001-09-04 | 2001-09-04 | スキーマ生成装置、データ処理装置及びその方法並びにプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2003085016A JP2003085016A (ja) | 2003-03-20 |
JP3972323B2 true JP3972323B2 (ja) | 2007-09-05 |
Family
ID=19093377
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001267212A Expired - Fee Related JP3972323B2 (ja) | 2001-09-04 | 2001-09-04 | スキーマ生成装置、データ処理装置及びその方法並びにプログラム |
Country Status (2)
Country | Link |
---|---|
US (1) | US20030097637A1 (ja) |
JP (1) | JP3972323B2 (ja) |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8271530B2 (en) * | 2002-04-08 | 2012-09-18 | Oracale International Corporation | Method and mechanism for managing and accessing static and dynamic data |
US7530015B2 (en) * | 2003-06-25 | 2009-05-05 | Microsoft Corporation | XSD inference |
US7165216B2 (en) * | 2004-01-14 | 2007-01-16 | Xerox Corporation | Systems and methods for converting legacy and proprietary documents into extended mark-up language format |
US7921419B2 (en) * | 2004-05-12 | 2011-04-05 | Oracle International Corporation | Method and mechanism for managing incompatible changes in a distributed system |
WO2006051959A1 (ja) * | 2004-11-12 | 2006-05-18 | Justsystems Corporation | 文書処理装置及び文書処理方法 |
US7970730B2 (en) * | 2005-01-27 | 2011-06-28 | Microsoft Corporation | Efficient data access via runtime type inference |
US7587668B2 (en) * | 2005-02-17 | 2009-09-08 | Microft Corporation | Using existing content to generate active content wizard executables for execution of tasks |
JP2006351002A (ja) | 2005-05-17 | 2006-12-28 | Fuji Xerox Co Ltd | 文書検証装置、文書検証方法およびプログラム |
US7461335B2 (en) * | 2005-05-31 | 2008-12-02 | Sap Ag | Dynamic conversion of data into markup language format |
US8037408B2 (en) * | 2005-12-22 | 2011-10-11 | Sap Ag | Systems and methods of validating templates |
JP4698685B2 (ja) | 2006-01-19 | 2011-06-08 | 富士通株式会社 | 表示情報検証プログラム、方法及び装置 |
US20080071887A1 (en) * | 2006-09-19 | 2008-03-20 | Microsoft Corporation | Intelligent translation of electronic data interchange documents to extensible markup language representations |
US20080126385A1 (en) * | 2006-09-19 | 2008-05-29 | Microsoft Corporation | Intelligent batching of electronic data interchange messages |
US20080126386A1 (en) * | 2006-09-20 | 2008-05-29 | Microsoft Corporation | Translation of electronic data interchange messages to extensible markup language representation(s) |
US8108767B2 (en) * | 2006-09-20 | 2012-01-31 | Microsoft Corporation | Electronic data interchange transaction set definition based instance editing |
US20080071806A1 (en) * | 2006-09-20 | 2008-03-20 | Microsoft Corporation | Difference analysis for electronic data interchange (edi) data dictionary |
US8161078B2 (en) * | 2006-09-20 | 2012-04-17 | Microsoft Corporation | Electronic data interchange (EDI) data dictionary management and versioning system |
US9189464B2 (en) * | 2006-09-27 | 2015-11-17 | Educational Testing Service | Method and system for XML multi-transform |
US8214319B2 (en) * | 2009-01-29 | 2012-07-03 | Ontology-Partners Ltd. | Data processing in a distributed computing environment |
US9965453B2 (en) * | 2009-10-15 | 2018-05-08 | Microsoft Technology Licensing, Llc | Document transformation |
US9274773B2 (en) * | 2011-06-23 | 2016-03-01 | Microsoft Technology Licensing, Llc | Translating programming language patterns into database schema patterns |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5915259A (en) * | 1996-03-20 | 1999-06-22 | Xerox Corporation | Document schema transformation by patterns and contextual conditions |
US6487566B1 (en) * | 1998-10-05 | 2002-11-26 | International Business Machines Corporation | Transforming documents using pattern matching and a replacement language |
US7114147B2 (en) * | 2000-03-09 | 2006-09-26 | Electronic Data Systems Corporation | Method and system for reporting XML data based on precomputed context and a document object model |
US6963875B2 (en) * | 2000-03-23 | 2005-11-08 | General Atomics | Persistent archives |
US6742054B1 (en) * | 2000-04-07 | 2004-05-25 | Vitria Technology, Inc. | Method of executing a data transformation specification |
US20020095445A1 (en) * | 2000-11-30 | 2002-07-18 | Philips Electronics North America Corp. | Content conditioning method and apparatus for internet devices |
US6725231B2 (en) * | 2001-03-27 | 2004-04-20 | Koninklijke Philips Electronics N.V. | DICOM XML DTD/schema generator |
US7373600B2 (en) * | 2001-03-27 | 2008-05-13 | Koninklijke Philips Electronics N.V. | DICOM to XML generator |
US7146399B2 (en) * | 2001-05-25 | 2006-12-05 | 2006 Trident Company | Run-time architecture for enterprise integration with transformation generation |
US7099885B2 (en) * | 2001-05-25 | 2006-08-29 | Unicorn Solutions | Method and system for collaborative ontology modeling |
JPWO2003001409A1 (ja) * | 2001-06-22 | 2004-10-14 | セレスター・レキシコ・サイエンシズ株式会社 | 構造化データ処理装置 |
US20050086584A1 (en) * | 2001-07-09 | 2005-04-21 | Microsoft Corporation | XSL transform |
US7831655B2 (en) * | 2001-10-18 | 2010-11-09 | Bea Systems, Inc. | System and method for implementing a service adapter |
JP2003150586A (ja) * | 2001-11-12 | 2003-05-23 | Ntt Docomo Inc | 文書変換システム、文書変換方法及び文書変換プログラムを記録したコンピュータ読み取り可能な記録媒体 |
US6950985B2 (en) * | 2001-12-27 | 2005-09-27 | Koninklijke Philips Electronics, N.V. | Specifying DICOM semantic constraints in XML |
US7143344B2 (en) * | 2002-06-12 | 2006-11-28 | Microsoft Corporation | Transformation stylesheet editor |
-
2001
- 2001-09-04 JP JP2001267212A patent/JP3972323B2/ja not_active Expired - Fee Related
-
2002
- 2002-08-15 US US10/219,620 patent/US20030097637A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
JP2003085016A (ja) | 2003-03-20 |
US20030097637A1 (en) | 2003-05-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3972323B2 (ja) | スキーマ生成装置、データ処理装置及びその方法並びにプログラム | |
US8117533B2 (en) | Method and system for stylesheet rule creation, combination, and removal | |
US7240279B1 (en) | XML patterns language | |
JPS6375835A (ja) | 目的コ−ド、プログラム・リスト及び設計文書を生成する装置 | |
JPS61103247A (ja) | 翻訳プログラム作成システム | |
US20210263729A1 (en) | Bidirectional evaluation for general- purpose programming | |
Fisher et al. | The next 700 data description languages | |
JP2005332146A (ja) | 動的コンテンツ作成プログラムの生成装置、動的コンテンツ作成プログラムを生成するためのプログラム、及び動的コンテンツ作成プログラムの生成方法 | |
Wong | Recording and checking HOL proofs | |
Izquierdo et al. | Gra2MoL: A domain specific transformation language for bridging grammarware to modelware in software modernization | |
Kiselyov et al. | SXSLT: Manipulation language for XML | |
Nakano | An implementation scheme for XML transformation languages through derivation of stream processors | |
KR20230040516A (ko) | 자바스크립트의 중간 언어 기반 의미론 추출 자동화 시스템 및 방법 | |
JP5932707B2 (ja) | 計算機、プログラム及びデータ生成方法 | |
Bülow | Proof visualization for the lean 4 theorem prover | |
Paige et al. | Towards model transformation with TXL | |
Arnoldus et al. | Less is more: Unparser-completeness of metalanguages for template engines | |
JP2675100B2 (ja) | 言語変換器及び言語変換方法 | |
JP2002182912A (ja) | Webアプリケーション生成方法およびWebアプリケーション生成装置、並びに記録媒体 | |
Mishchenko et al. | New functionalities of the system for processing natural language specifications and its operating environment | |
JP2003162533A (ja) | スキーマ統合変換システム、スキーマ統合変換方法およびスキーマ統合変換用プログラム | |
Aspinall et al. | Proof general in Eclipse: system and architecture overview | |
Yafi et al. | Syntax Recovery for Uniface as a Domain Specific Language | |
Kay et al. | An XSLT compiler written in XSLT: can it perform | |
JP2009080681A (ja) | プログラム構造解析方法及び装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060912 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20061212 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070123 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070418 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20070522 |
|
RD14 | Notification of resignation of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7434 Effective date: 20070524 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20070601 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100622 Year of fee payment: 3 |
|
LAPS | Cancellation because of no payment of annual fees |