(57)【要約】  クエリの受取りを含めてクエリを処理するための技術が提供され、クエリは所定の演算を特定し、この技術はさらに、クエリが第１のクエリ言語の第１の部分および第２のクエリ言語の第２の部分を含むと判断し、第１の部分に対する第１のインメモリ表現を生成し、第２の部分に対する第２のインメモリ表現を生成し、第１のインメモリ表現および第２のインメモリ表現に基づいて第３のインメモリ表現を生成し、かつ第３のインメモリ表現に基づいて所定の演算を行うためのものである。
2008504601.tif 000002
【特許請求の範囲】
【請求項１】
クエリを処理する方法であって、
前記クエリを受取るステップを含み、前記クエリは、所定の演算を特定し、前記方法はさらに、
前記クエリが第１のクエリ言語において第１の部分および第２のクエリ言語において第２の部分を含むと判断するステップと、
前記第１の部分のための第１のインメモリ表現を生成するステップと、
前記第２の部分のための第２のインメモリ表現を生成するステップと、
前記第１のインメモリ表現および前記第２のインメモリ表現に基づいて前記クエリの第３のインメモリ表現を生成するステップと、
前記第３のインメモリ表現に基づいて前記所定の演算を実行するステップとを含む、方法。
【請求項２】
前記第１のインメモリ表現および前記第３のインメモリ表現は第１の抽象構文でフォーマットされ、前記第２のインメモリ表現は第２の抽象構文でフォーマットされ、前記第３のインメモリ表現を生成するステップは、
前記第２のインメモリ表現に基づいて前記第１の抽象構文において第４のインメモリ表現を生成するステップと、
前記第１のインメモリ表現および前記第４のインメモリ表現に基づいて前記第３のインメモリ表現を生成するステップとを含む、請求項１に記載の方法。
【請求項３】
前記第２のインメモリ表現は、前記第２の抽象構文においてクエリ要素の１つ以上のインメモリ表現を含み、前記第４のインメモリ表現を生成するステップは、
前記第２の抽象構文におけるクエリ要素の前記１つ以上のインメモリ表現のために前記第１の抽象構文におけるクエリ要素の１つ以上の同等のインメモリ表現の第２のセットを決定するステップと、
前記第１の抽象構文におけるクエリ要素の前記１つ以上の同等のインメモリ表現の第２のセットに基づいて前記第１の抽象構文において前記第４のインメモリ表現を生成するステップとを含む、請求項２に記載の方法。
【請求項４】
前記第２の抽象構文におけるクエリ要素の前記１つ以上のインメモリ表現におけるクエリ要素の各インメモリ表現は、前記第１の抽象構文におけるクエリ要素の前記１つ以上の同等のインメモリ表現の第２のセットにおけるクエリ要素の１つ以上のインメモリ表現に対応する、請求項３に記載の方法。
【請求項５】
前記第１のインメモリ表現、前記第２のインメモリ表現および前記第３のインメモリ表現のうちの１つ以上が、抽象構文ツリーとしてメモリにおいて表現される、請求項１に記載の方法。
【請求項６】
前記第１のクエリ言語は構造化されたクエリ言語である、請求項１に記載の方法。
【請求項７】
前記第２のクエリ言語はマークアップクエリ言語である、請求項１に記載の方法。
【請求項８】
前記第２のクエリ言語はXQueryである、請求項１に記載の方法。
【請求項９】
前記第２のクエリ言語はXQueryXである、請求項１に記載の方法。
【請求項１０】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてXQuery総計を含み、前記
第４のインメモリ表現を生成するステップは、前記総計を計算するよう前記第１の抽象構文においてSQLサブクエリを生成するステップを含み、前記SQLサブクエリは、前記第２の抽象構文における前記XQuery総計に基づいて生成されている、請求項２に記載の方法。
【請求項１１】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてリテラル式を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記リテラル式に基づいて前記第１の抽象構文においてSQLリテラルを生成するステップを含む、請求項２に記載の方法。
【請求項１２】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてXQueryキャスト式を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記XQueryキャスト式に基づいて前記第１の抽象構文においてSQLキャスト関数およびSQL変換関数のうちの１つを生成するステップを含む、請求項２に記載の方法。
【請求項１３】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてセット式を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記セット式に基づいて前記第１の抽象構文においてSQL UNION、SQL MINUSおよびSQL INTERSECTのうちの１つを生成するステップを含む、請求項２に記載の方法。
【請求項１４】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてXQuery算術式を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記XQuery算術式に基づいて前記第１の抽象構文においてSQL算術式を生成するステップを含む、請求項２に記載の方法。
【請求項１５】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてXQuery比較を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記XQuery比較に基づいて前記第１の抽象構文においてSQL比較を生成するステップを含む、請求項２に記載の方法。
【請求項１６】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文において節によるXQuery FLWORオーダを含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における節による前記XQuery FLWORオーダに基づいて前記第１の抽象構文において節によるSQLオーダを生成するステップを含む、請求項２に記載の方法。
【請求項１７】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてXML論理式を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記XML論理式に基づいて前記第１の抽象構文においてSQL論理式要素を生成するステップを含む、請求項２に記載の方法。
【請求項１８】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてXML FLWOR式を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記XML FLWOR式に基づいて前記第１の抽象構文においてSQL選択式要素を生成するステップを含む、
請求項２に記載の方法。
【請求項１９】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてXML経路式を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記XML経路式に基づいて前記第１の抽象構文においてSQL経路式を生成するステップを含む、請求項２に記載の方法。
【請求項２０】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてXML if-then-else式を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記XML if-then-else式に基づいて前記第１の抽象構文においてSQL case-when式を生成するステップを含む、請求項２に記載の方法。
【請求項２１】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文において、XML量化表現を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記XML量化表現に基づいて前記第１の抽象構文においてSQL Exists式を生成するステップを含む、請求項２に記載の方法。
【請求項２２】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてSQL/XML構成式を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記SQL/XML構成式に基づいて前記第１の抽象構文においてSQL構成式を生成するステップを含む、請求項２に記載の方法。
【請求項２３】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてXMLオペレータを含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記XMLオペレータに基づいて前記第１の抽象構文においてSQLオペレータを生成するステップを含む、請求項２に記載の方法。
【請求項２４】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてXQueryシーケンス型演算を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記XQueryシーケンス型演算に基づいて前記第１の抽象構文においてSQL型演算を生成するステップを含む、請求項２に記載の方法。
【請求項２５】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてXQuery型コンストラクタを含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記XQuery型コンストラクタに基づいて前記第１の抽象構文においてSQLスカラ・コンストラクタを生成するステップを含む、請求項２に記載の方法。
【請求項２６】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてXQuery validate演算を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記XQuery validate演算に基づいて前記第１の抽象構文においてSQL/XML IsValid演算およびSQL/XML Validate演算のうちの１つを生成するステップを含む、請求項２に記載の方法。
【請求項２７】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてポリモーフィックXQuery算術オペレータを含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記ポリモーフィックXQuery算術オペレータに基づいて前記第１の抽象構文においてポリモーフィックSQL算術オペレータのうちの１つを生成するステップを含む、請求項２に記載の方法。
【請求項２８】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてポリモーフィックXQuery比較オペレータを含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記ポリモーフィックXQuery比較オペレータに基づいて前記第１の抽象構文においてポリモーフィックSQL値比較オペレータのうちの１つを生成するステップを含む、請求項２に記載の方法。
【請求項２９】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてXQuery関数呼出を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記XQuery関数呼出に基づいて前記第１の抽象構文においてSQL関数呼出を生成するステップを含む、請求項２に記載の方法。
【請求項３０】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてユーザ定義のXQuery関数を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記ユーザ定義のXQuery関数に基づいて前記第１の抽象構文においてユーザ定義のPL/SQL関数を生成するステップを含む、請求項２に記載の方法。
【請求項３１】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文において外部XQuery関数を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記外部XQuery関数に基づいて前記第１の抽象構文において外部SQL関数を生成するステップを含む、請求項２に記載の方法。
【請求項３２】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてXQueryモジュールを含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記XQueryモジュールに基づいて前記第１の抽象構文においてPL/SQLパッケージを生成するステップを含む、請求項２に記載の方法。
【請求項３３】
クエリを処理する方法であって、
前記クエリを受取るステップを含み、前記クエリは、所定の演算を特定し、マークアップ言語に記憶されたデータへのクエリを行い、前記方法はさらに、
前記クエリの第１のインメモリ表現を生成するステップと、
前記第１のインメモリ表現に基づいて第２のインメモリ表現を生成するステップとを含み、前記第２のインメモリ表現は、リレーショナルデータベースへのクエリを行っている同等のクエリを処理することによって生成されたのと同じ形であり、前記方法はさらに、
前記第２のインメモリ表現に基づいて前記所定の演算を実行するステップを含む、方法。
【請求項３４】
前記所定の演算を実行するステップは、前記リレーショナルデータベースに対して前記
第２のインメモリ表現において特定されるコマンドを実行することによって前記所定の演算を実行するステップを含む、請求項３３に記載の方法。
【請求項３５】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項１に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項３６】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項２に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項３７】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項３に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項３８】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項４に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項３９】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項５に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項４０】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項６に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項４１】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項７に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項４２】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項８に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項４３】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項９に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項４４】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項１０に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項４５】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項１１に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項４６】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項１２に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項４７】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項１３に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項４８】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項１４に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項４９】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項１５に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項５０】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項１６に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項５１】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項１７に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項５２】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項１８に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項５３】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項１９に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項５４】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項２０に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項５５】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項２１に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項５６】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項２２に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項５７】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項２３に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項５８】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項２４に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項５９】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項
２５に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項６０】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項２６に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項６１】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項２７に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項６２】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項２８に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項６３】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項２９に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項６４】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項３０に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項６５】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項３１に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項６６】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項３２に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項６７】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項３３に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【請求項６８】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項３４に記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の分野
この発明はクエリの処理に関する。特に、この発明は変換を使用したクエリの効率的な評価に関する。
【背景技術】
【０００２】
発明の背景
このセクションに説明されるアプローチは追及され得るが、必ずしも以前に構想されたかまたは追求されたアプローチではない。したがって、ここに別段の記載がない限り、このセクションに説明されるアプローチは、この出願の請求項に対する先行技術ではなく、このセクションに含められることによって先行技術であると認められない。
【０００３】
リレーショナルデータベース管理システム（RDBMS）はテーブルに情報を記憶し、データの各断片は特定の行および列に記憶される。所与の行の情報は一般に特定のオブジェクトと関連付けられ、所与の列の情報は一般に情報の特定のカテゴリに関する。たとえば、テーブルの各行は特定の従業員に対応してもよいし、テーブルのさまざまな列は従業員名、従業員の社会保障番号および従業員の給料に対応してもよい。
【０００４】
ユーザは、データベースアプリケーションと対話することによってデータベースから情報を検索し、データベースに更新を行なう。ユーザの動作はデータベースアプリケーションによってクエリへと変換される。データベースアプリケーションはクエリをデータベースサーバに提出する。データベースサーバは、テーブルに記憶されたどの情報がクエリを満たすかを判断するためにクエリで特定されたテーブルにアクセスすることによって、クエリに応答する。クエリを満たす情報がデータベースサーバによって検索され、データベースアプリケーションへと伝送される。またはこれに代えて、ユーザは、コマンドラインまたはグラフィカルインターフェイスを使用してクエリを構成し、直接的にデータベースサーバに提出することによって、データベースサーバから直接的に情報を要求してもよい。
【０００５】
データベースサーバに提出されたクエリは特定のクエリ言語の構文上のルールに従わなければならない。構造化されたクエリ言語（Structured Query Language, SQL）として知られる１つの一般的なクエリ言語は、検索されるべき情報を特定するためのさまざまな方法をユーザに提供する。拡張可能マークアップ言語（Extensible Markup Language, XML）に基づく別の言語はXMLクエリ言語（XML Query Language, XQuery）である。XMLクエリ言語は複数の構文上の表現を有し得る。たとえば、それらのうちの１つは人間の読取可能な形であり、もう１つはXML表現（XQueryX）である。XQueryは、www.w3.org/TR/xqueryの２００４年７月２３日のＷ３Ｃ作業草案「XQuery1.0:XML言語」（“XQuery1.0:An XML Language”）に説明される。XQueryXはwww.w3.org/TR/xqueryxの２００３年１２月１９日のＷ３Ｃ作業草案「XQuery 1.0のためのXML構文(XQueryX)」（“XML Syntax for XQuery 1.0(XQueryX)”）に説明される。別の関連技術、XPath（X経路）は、www.w3.org/TR/xpath20の２００３年１１月１２日のＷ３Ｃ作業草案「XML経路言語(XPath)2.0 」（“XML Path Language (XPath)2.0”）に説明される。XQueryおよびXQueryXは経路横断のためにXPathを使用し得る。
【０００６】
RDBMSでXQueryのサポートを実現するため、コプロセッサアプローチと称される１つのアプローチは、RDBMSエンジン内に汎用XQueryプロセッサを埋込み、RDBMS SQLプロセッサのためにXQueryプロセッサにXQueryを実行させることである。コプロセッサアプローチは
、SQLプロセッサにXQueryコプロセッサをブラックボックスとして扱わせる。SQL記述の実行中、SQLプロセッサは、クエリのXQuery部分のテキストおよび必要なXML値を入力としてXQueryプロセッサに渡すことによってクエリのXQuery部分を取扱う。次にXQueryプロセッサは、クエリのXQuery部分を処理した結果をSQLプロセッサに返し、SQLプロセッサはクエリによって特定された他の適切なオペレーションを行なう。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
コプロセッサアプローチは多くの問題を有する。第１に、XQueryプロセッサはXMLデータを記憶するための基礎となる技術のどれも知らない、したがって、XQueryプロセッサは完全に具体化されたXMLを入力として必要とする。結果として、XQueryプロセッサによって必要とされるXML入力は、RDBMSによって構築されるかまたは具体化されなければならない。しばしばXQueryのために必要とされるXML入力はデータベースに記憶され、１つまたは構成要素のXML要素へと「細断される」ことがあり、それらXML要素は１つまたは複数のリレーショナルテーブルまたはオブジェクトリレーショナルテーブルに記憶され得る。これらの条件下で、XMLデータを具体化するプロセスは時間およびリソースを浪費し、したがって、コプロセッサアプローチを非効率なものにする。
【０００８】
コプロセッサアプローチの第２の問題は、入来するクエリのXQuery部分が入来するクエリのSQL部分で最適化できないことである（その逆も同じ）。具体的には、XQueryプロセッサはクエリのSQL部分を最適化することができず、SQLプロセッサはクエリのXQuery部分を最適化することができない。したがって、クエリのSQLおよびXQuery部は（もしあれば）別々に最適化され、これは次善最適である。さらに、クエリのXQuery部分で必要なデータの基礎となる記憶は（複数のXMLType（XML型）列に細分されたような）XML以外の形で記憶される。XQueryプロセッサは基礎となるデータが記憶される形を知らないため、XQueryプロセッサは記憶情報に基づいてXQuery演算の実行を最適化することはできない。
【０００９】
コプロセッサアプローチの第３の問題は、XQueryプロセッサが複数回起動されたときに起こり、ここで第１のXQueryの出力は元々のクエリの第２XQueryへの入力になる。たとえば、第１のXQueryの出力が入力として第２のXQueryに渡されなければならない場合、第１のXQueryの出力はXMLとして生成されなければならない。このことによって、XQueryプロセッサは、第１のXQueryの結果を決定した後、結果をXML文書でXMLとして具体化し、XML文書をSQLプロセッサへと送らなければならない。SQLプロセッサは第２のXQueryとともにXML文書をXQueryプロセッサへと渡す。XQueryプロセッサはXML文書とともに第２のXQueryを検索および処理する。これは通信および計算ステップならびに帯域幅の多大な浪費になる。
【００１０】
したがって、上述のコプロセッサアプローチの欠点を克服する技術が明らかに必要とされている。
【００１１】
この発明は、添付の図面で制限ではなく、例によって説明され、図面中、同様の参照番号は同様の要素を示す。
【発明を実施するための最良の形態】
【００１２】
詳細な説明
変換を使用したクエリの効率的な評価のための技術が説明される。以下の記述では、説明のため、多くの具体的な詳細を示してこの発明を完全に理解できるようにしている。しかしながら、この発明はこれらの具体的な詳細なしに実現され得ることは明らかであろう。場合によっては、この発明を不必要にわかりにくくするのを避けるため、周知の構造および装置はブロック図の形で示される。
【００１３】
1.0  導入
ここに説明される技術は、何らかの特定の実施例または実施例の局面に制限されない。ここに説明される技術の１つの例示的な実施例は、SQL、XQueryおよびXQueryXでクエリを受入れるデータベースサーバである。この実施例は例示のためにのみ説明される。
【００１４】
データベースサーバがクエリを受取るとき、それはクエリのいずれかの部分がSQL以外のクエリ言語（たとえば、XQueryまたはXQueryX）であるかどうかを判断する。そのような各部分について、データベースサーバはその部分を構文解析し、その部分を非SQLクエリ言語に関連する抽象構文の抽象構文ツリー（AST）へとコンパイルする。そのようなASTは、ここではXQuery ASTなどの特定のクエリ言語に関連する「非SQL AST」またはASTと称される。非SQL ASTは次にSQLに関連する抽象構文でASTへと変換される。そのようなASTはここでは「SQL AST」と称される。これは非SQLクエリ言語（たとえば、XQueryまたはXQueryX）であるクエリの各部分について繰返される。SQLのクエリの各部分もSQL ASTへとコンパイルされる。データベースサーバはクエリの各部分に対応するASTのすべてを組合せる。この組合されたASTは、最適化され実行されるか、または後の実行のために記憶され得る。
【００１５】
ここに説明される技術は、少なくとも１つまたは複数の宣言的クエリ言語でクエリの１つまたは複数の部分を有するクエリに当てはまる。宣言的クエリ言語によって、情報がどのように検索されるべきかを特定する必要なく、データソースから検索されるべき情報を特定することができる。
【００１６】
2.0  XMLデータベースオペレーション
一部のRDBMSおよびオブジェクトリレーショナルデータベースシステム（ORDBMS）は「XML」または「XMLType」をネイティブのデータ型としてサポートする。XMLTypeを使用して、ユーザはXMLテーブルまたはテーブルのXMLType列の使用を介してXML文書をデータベースに記憶することができる。さらに、ユーザはXMLElement（XML要素）、XMLConcat（XML連結）等のSQL/XMLパブリッシング機能の使用を介してそれらのリレーショナルデータをXMLTypeビューに変換することができる。XQueryはXMLQueryなどの関数を通じてSQLで使用可能であり、これはXMLType値でのクエリを可能にする。XMLTable（XMLテーブル）関数は、XML値（たぶん１つまたは複数のXMLType列から、またはXQueryから返された値）を仮想のリレーショナルテーブルへと変換することを可能にする。「purchaseOrder（発注書）」と呼ばれるテーブルがXMLTypeテーブルであり、各行がpurchaseOrder XML文書インスタンスを記憶している例を考える。各XML文書インスタンスは以下のものに類似の内容を有する。
【００１７】
【数１】
2008504601.tif 000003
【００１８】
以下のSQL記述は、XQueryがXMLQuery関数に埋込まれており、その価格が４５より大きい購入品目を有するpurchaseOrder XML文書インスタンスのすべてのShippingAddress（出荷住所）を見付ける。
【００１９】
【数２】
2008504601.tif 000004
【００２０】
ここにXMLTable構造物を介してXML文書インスタンスをリレーショナルテーブルへと変換する例をあげる。
【００２１】
【数３】
2008504601.tif 000005
【００２２】
3.0  システム概要
図１は、変換を使用したクエリの効率的な評価のためのシステムを示すブロック図である。
【００２３】
図１に示されるシステムはデータベースサーバ１５０を含む。データベースサーバ１５０は論理機械である。データベースサーバ１５０は、非SQLパーサユニット１１０ａ、SQLパーサユニット１１０ｂ、コンパイラユニット１２０、トランスレータユニット１３０およびさらに別のクエリ処理ユニット１４０を含む。ユニット１１０ａ、１１０ｂ、１２０、１３０および１４０の各々は論理機械であり得る。各論理機械は別々の物理的な計算機械上で実行してもよく、他の論理機械の１つまたは複数として同じ物理的な計算機械上で実行してもよい。コンピュータおよび他の物理的および論理的な機械のさまざまな実施例は、ハードウェア概要と題されるセクションで後に詳しく説明される。一実施例では、ユニット１１０〜１４０の各々は１つまたは複数のコンピュータ上の１つまたは複数のプロセッサ上で走るソフトウェアユニットであり、１つまたは複数のコンピュータ上のそれら１つまたは複数のプロセッサはデータベースサーバ１５０を構成する。データベースサーバ１５０は、ここに説明されない他のソフトウェアユニットを含んでもよい。ユニット１１０〜１４０はすべて同じソフトウェアプログラムの一部であってもよく、または別のソフトウェアプログラムの一部であってもよい。つまり、単一のソフトウェアプログラムがユニット１１０〜１４０のうちの２つ以上の機能性を行ってもよい。またはこれに代えて、第１のソフトウェアプログラムが特定のユニット１１０〜１４０のために機能の一部を行なってもよく、第２のソフトウェアプログラムが特定のユニット１１０〜１４０のために他の機能を行なってもよい。
【００２４】
非SQLパーサユニット１１０ａは非SQLクエリまたはクエリの部分を入力として取り、それを（SQLなどの）第２の表現へと変換する。たとえば、非SQLパーサユニット１１０ａは、入力としてXQueryクエリを取り、それをXQueryX表現へと変換するXQueryパーサユニット１１０ａであってもよい。コンパイラユニット１２０はクエリを入力として取り、クエリのインメモリ（in-memory）表現を生成する。たとえば、コンパイラユニット１２０はXQueryXクエリを入力として取り、それをXQuery ASTへとコンパイルしてもよい。一実施例では、コンパイラユニットは２つ以上のクエリ言語のクエリを入力として取ってもよく、各クエリ言語のクエリは異なるフォーマットのインメモリ表現へとコンパイルされる。た
とえば、SQLクエリはSQL ASTへとコンパイルされてもよく、XQueryXクエリはXQuery ASTへとコンパイルされてもよい。またはこれに代えて、１つまたは複数の異なるクエリ言語のクエリは類似または同じフォーマットのインメモリ表現へとコンパイルされてもよい。代替の実施例では、各クエリ言語に対して別々のパーサユニット１１０ａおよび１１０ｂならびにコンパイラユニット１２０がある。たとえば、XQueryパーサユニット１１０ａおよびSQLパーサユニット１１０ｂがあってもよい。
【００２５】
トランスレータユニット１３０はさまざまなフォーマットのインメモリ表現間で変換する。たとえば、トランスレータユニット１３０はXQuery ASTを同等のSQL ASTへと変換してもよく、またはこの反対を行なってもよい。
【００２６】
さらに別のクエリ処理ユニット１４０はインメモリ表現を入力として取り、クエリのインメモリ表現に基づいてクエリの最適化、クエリの記憶、および／または実行を提供する。さらに別のクエリ処理ユニット１４０はクエリの１つまたは複数のインメモリ表現またはクエリの一部を組合せるステップ、および組合されたインメモリ表現に基づいてクエリの最適化、クエリの記憶および／または実行を行なうステップを行なってもよい。
【００２７】
データベースサーバ１５０は通信可能にデータベース１６０に結合される。データベース１６０は、リレーショナルデータベース、オブジェクト指向データベース、ファイル、リポジトリ、または機械の読取可能な媒体上に記憶されたあらゆる形の構造化されたデータであってもよい。データベースサーバ１５０は、（たとえば、さらに別のクエリ処理ユニット１４０を使用して）コンパイラユニット１２０、トランスレータユニット１３０またはさらに別のクエリ処理ユニット１４０によって生成されたインメモリ表現に基づいてデータベース１６０に対してクエリによって必要とされる所定の演算を行なってもよい。さまざまな実施例では、結合は、光学的、赤外線または無線信号の伝送、直接ケーブリング、無線ネットワーキング、ローカルエリアネットワーク（LAN）、ワイドエリアネットワーク（WAN）、無線ローカルエリアネットワーク（WLAN）、インターネット、または適切な通信機構によって実現される。
【００２８】
4.0  機能的概要
図２は、変換を使用したクエリの効率的な評価のためのプロセスを示すフロー図である。
【００２９】
ステップ２０５では、クエリが受取られる。クエリは適切なフォーマットであればどのようなフォーマットであってもよい。たとえば、クエリはSQL、XQuery、またはXQueryXであってもよい。クエリは、XPathなどのマークアップ言語文書の一部をアドレス指定するための言語も利用してもよい。クエリは１つまたは複数の「部分」を含んでもよい。部分の各々は他の部分の各々と異なるフォーマットであってもよい。たとえば、図１の状況では、データベースサーバ１５０はSQLおよびXQueryの両方の部分を含むクエリを受取り得る。
【００３０】
【数４】
2008504601.tif 000006
【００３１】
ここでクエリの外側部分はSQLであり、xmlquery（...）の内側のクエリの部分はXQueryである。クエリは単一のフォーマットであってもよい。
【００３２】
ステップ２０７では、クエリは、１つまたは複数のクエリ言語のクエリの部分があるかどうかを検出するために処理される。ステップ２０７でクエリの部分が検出されると、クエリがXQuery（ステップ２１０）またはSQL（ステップ２３０）を含むかどうかを判断するために検査が行なわれる。他の実施例では、クエリが他の特定のクエリ言語（たとえば、XQueryX）の記述を含むかどうかを判断するために他の検査が行なわれ、XQuery（ステップ２１０〜２２５）またはSQL（ステップ２３０〜２４５）についてのものと類似のステップがそれら他のクエリ言語の各々のクエリについて行なわれる。
【００３３】
ステップ２１０では、クエリがXQueryを含むかどうかを判断するために検査が行なわれる。クエリがXQueryで行なわれべきオペレーションを含むと検出することは、XQuery標識またはファンクションコールを探すかまたは見付けることを含み得る。たとえば、非SQLパーサユニット１１０ａはクエリを構文解析し、XMLQuery関数を検出し、それにより括弧内に含まれるクエリがXQueryフォーマットであると判断してもよい。さまざまな実施例では、ステップ２１０はクエリがXQueryXまたはXPathを含むかどうかを判断するステップを含み、後続のステップ２２０〜２２５は、見付けられたXQueryXまたはXPathクエリもしくはサブクエリで行なわれる。
【００３４】
クエリがXQueryを含まない場合、ステップ２４２が行なわれる。ステップ２４２は以下に説明される。またはこれに代えて、クエリがXQueryまたはSQL記述を含まない場合であって、さらにデータベースサーバ１５０によって認識可能でない要素のみを含む場合、クエリの提出者またはシステム管理者にメッセージを送り、クエリのフォーマットが識別可能でないことを示してもよい。
【００３５】
クエリがXQueryを含む場合、ステップ２２０でクエリのXQuery部分は構文解析され、XQuery ASTへとコンパイルされる。クエリのXQuery部分は適切なパーサを使用して構文解析されてもよい。構文解析されたXQueryは次にXQueryのインメモリ表現へとコンパイルされる。クエリのXQuery部分のインメモリ表現は、後のステップと互換性のある態様でフォーマットされる。ここに説明される技術は何らかの特定のインメモリ表現に制限されない。ここでの例は抽象構文ツリーを使用する。ASTは、構文の詳細を除去しつつクエリのセマンティック（semantic）な意味を捕らえる。
【００３６】
XQueryのクエリの部分に対するASTは、XQueryに関連する特定の抽象構文である。ステップ２２５では、クエリのXQuery部分に対するXQuery ASTは、SQLに関連する特定の抽象構文で同等のSQL ASTへと変換される。AST内の各用語が変換される。一実施例では、「葉（leaves）」またはASTの最も深いレベルにある要素は、XQuery関連の抽象構文からSQL関連の抽象構文へと変換される。次に最も低いレベルのノードが変換される。ASTの「より高い」レベルは一度に１レベルずつ底部から上方へと処理される。またはこれに代えて、ASTの葉のうちの１つまたは複数が変換され、AST内のそれらの子ノードのすべてが変換されるとこれら葉の親ノードが変換される。どのXQuery記述がどのSQL記述へと変換されるかの詳細は、XQuery変換と題されるセクションおよび‘７０６に示される。XQuery ASTが同等のSQL ASTへと変換されると、同等のSQL ASTは、ステップ２４５で他のSQL ASTと後に組合され得る（以下に説明する）。
【００３７】
ステップ２２５が行なわれた後、次に、ステップ２４２では、クエリの他の部分が処理される必要があるかどうかを判断するために検査が行なわれる。処理すべきクエリの部分がさらにある場合、ステップ２０７が行なわれる。またはこれに代えて、さらに処理すべきクエリの部分がある場合、ステップ２１０または２３０が行なわれ得る。さらに処理すべきクエリの部分がない場合、ステップ２４５が行なわれる。一般に、データベースサーバ１５０によってサポートされる言語の元々のクエリの部分は処理され得る。たとえば、クエリが第１のXQuery部分、第２のXQuery部分およびSQL部分を有する場合、第１のXQuer
y部分および第２のXQuery部分の各々に対してステップ２１０〜２２５が行なわれ、クエリのSQL部分に対してステップ２３０〜２４０が行なわれる。クエリのコンパイルされた部分は次に組合される（ステップ２４５〜２５５に関して以下に説明する）。
【００３８】
ステップ２３０では、クエリがSQLを含むかどうかを判断するために検査が行なわれる。たとえば、SQLパーサユニット１１０ｂはクエリを構文解析し（ステップ２０７）、クエリのSQL部分を検出して、それによりクエリがSQLを含むと判断してもよい（ステップ２３０）。クエリがSQLを含まない場合、ステップ２４２が行なわれる。ステップ２４２は既に説明した。クエリがSQLを含む場合、ステップ２４０で、クエリのSQL部分が構文解析され、SQL ASTへとコンパイルされる。XQueryのクエリを構文解析およびコンパイルするさまざまな実施例はステップ２２０に関して既に挙げた。SQL（または他のクエリ言語）のクエリを構文解析およびコンパイルするための技術は、XQueryについて述べられたものと類似であるが、構文解析するためにSQLパーサおよびSQL構文ルールを使用し得る。SQL ASTなどの結果的なインメモリ表現はSQLに関連する抽象構文のクエリのSQL部分の語義（semantics）を含む。
【００３９】
ステップ２４０が行なわれた後、ステップ２４２では、クエリの他の部分が処理される必要があるかどうかを判断するために検査が行なわれる。クエリのXQuery部分が構文解析され、コンパイルされ、SQL ASTへと変換され、かつクエリのSQL部分が構文解析されかつSQL ASTへとコンパイルされると、ステップ２４５でクエリの異なる部分を表わすASTが組合され得る。ASTを組合せるステップは、クエリのために新しいASTを形成するステップ、およびクエリの異なる部分を表わすASTを指すかまたはコピーするステップを含む。またはこれに代えて、クエリの異なる部分を表わすASTのうちの１つまたは複数がクエリの異なる部分を表わす他のASTのうちの１つまたは複数を指すかまたは組込んでもよい。組合されたASTはSQL関連の抽象構文であり、クエリ全体を表わす。たとえば、図１の状況では、さらに別のクエリ処理ユニット１４０はステップ２２５および２４０で生成されたASTを組合せる。
【００４０】
ステップ２５０では、組合されたASTはクエリの最適化のための基礎として使用される。クエリ全体が単一の抽象構文で表されるため、クエリを最適化するために適切な単一の抽象構文最適化技術が使用され得る。ステップ２５５では、最適化されたクエリが実行されるかまたは後の実行のために記憶される。
【００４１】
ここに説明される技術のさまざまな実施例は、複数のクエリ言語のサブクエリを含むクエリを単一の抽象構文でASTに基づいて記憶するかまたは実行することを可能にする。これら技術の実施例の利点の１つは、クエリを表わすASTは単一の抽象構文であるため、クエリ全体が、それが元々単一のクエリ言語で書かれているかのように最適化され得ることである。
【００４２】
ここに説明される技術のさまざまな実施例は、クエリが第１のクエリ言語（たとえば、XQuery）で到着することを可能にし、クエリが第２のクエリ言語（たとえば、SQL）の同等の形へと処理され、変換されることを可能にする。これは、第２のクエリ言語について利用可能な処理または最適化の技術が第１のクエリ言語のものより好ましい場合に有利であり得る。たとえば、XQueryオプティマイザ（optimizers）を有さないがSQLクエリオプティマイザを有するシステムを考える。ここで説明される技術を使用して、クエリがXQueryフォーマットで到着する場合、クエリは処理され、SQL ASTが生成され得る。SQL ASTはSQLクエリオプティマイザを使用して最適化され得る。（最適化されたSQL ASTによって表されるような）最適化された同等のクエリは元々のXQueryの代わりに実行され、それによりクエリの処理時間を節約することができる。
【００４３】
ここに論じられる例では、データベースサーバ１５０は非SQLクエリまたはクエリの部分を受取り、それらをSQLへと変換する。ここに説明される技術は、しかしながら、そのような実施例に制限されない。たとえば、他の実施例では、データベースアプリケーションとデータベースサーバ１５０との間でミドルウェアとして働く中間層サーバがここに説明されるような変換を行なってもよい。変換されたSQLクエリはデータベースサーバ１５０へと送られそこで実行される。
【００４４】
ここに説明される技術は、１つの抽象構文から別の構文への変換の面から提示される。ここに説明される技術の他の実施例では、第１の構文（たとえば、XQuery）のクエリの部分は、それが抽象構文へとコンパイルされる前に第２の構文（たとえば、SQL）へと変換されてもよい。
【００４５】
5.0  XQUERY変換
上述のように、ここに説明される技術は、１つの抽象構文のASTを別の抽象構文のASTへと変換することを実現する。以下はXQuery ASTとSQL ASTとの間の変換の説明である。
【００４６】
5.1.  式の変換
XQuery式はそれらの同等のSQL式へと書き直される。たとえば、XQueryのリテラル（literal）はSQLのストリング（string）または数値リテラル（OPNTSTR）へとマッピングされる。以下の表は一般式のそれらのSQL同等物へのマッピングの一覧である。セクション5.2は個々のXQueryオペレータおよび関数のSQLオペレータへのマッピングを説明する。
【００４７】
5.1.1.  有効ブール値
シーケンスの有効ブール値（EFB）は、以下の型の式の処理中に暗黙的に計算される。
【００４８】
・論理式（and,or）
・fn:not関数
・FLWOR式のWHERE節
・[b]などのある型の述部（predicates）
・条件式（if）
・量化表現（some,every）
有効ブール値は以下の場合「偽」を返す。その他の場合、それは「真」を返す。
【００４９】
・空のシーケンス
・ブール値偽
・型xs:stringまたはxdt:untypedAtomicのゼロの長さの値
・ゼロに等しい数値
・xs:doubleまたはxs:float value NaN
ルールの例：EFB（expr）をSQLへとマッピングする、以下のルールが適用される。
【００５０】
ｉ）  exprをそのSQL同等物へと変換する。
ii）  exprの静的な型が数量詞が１であると示す場合（すなわち、シングルトン（singleton）expr）、
ｉ．型がブールであり、SQL型もブールである場合（すなわち、それは論理オペレータのうちの１つにマッピングされる）、何もすることはない。
【００５１】
ii．型がブールであり、SQL型が数である場合、IS NOT NULLを付加する（case <expr> when 1 then 1 else null）
iii．型が数値である場合、IS NOT NULLを付加する（case <expr> when 0 then 0 when NaN then 0 else 1）
iv．型が何らかの他のスカラである場合、IS NOT NULL（expr）を付加する
iii）  exprの静的な型が数量詞が*or＋thenであると示す場合
ｉ．型が数またはブールである場合、コレクション（collection）をサブクエリに変換し、以下のサブクエリ式を上部に付加する
【００５２】
【数５】
2008504601.tif 000007
【００５３】
ii．すべての他の型について、＜expr＞が非サブクエリオペランドである場合、それをIS NOT NULL（＜expr＞）へとマッピングし、exprがSQLサブクエリである場合、EXISTS（＜expr＞）へとマッピングする。
【００５４】
5.1.2.  値の原子化（atomization）
スカラ値への原子化および変換がいくつかの場所で必要とされる。原子化は静的な型の分析によって決定される。XQueryでは、これはfn:data（）関数を使用して表される。
【００５５】
fn:data（）の結果は、入力シーケンスの各項目に以下のルールを適用することによって生成された原子値のシーケンスである。
【００５６】
・項目が原子値（atomic value）の場合、それは返される。
・項目がノードの場合、その型付けされた（typed）値が返される。
【００５７】
原子化は以下の型の式を処理する際に使用される。
・算術式
・比較式
・ファンクションコールおよびリターン（return）
・キャスト式
・計算された要素および属性コンストラクタ
原子化を書き直すとき、基礎となるSQLオブジェクトがXMLType（またはノード）である場合、ノード値を同等のSQL型に変換するためにOPTXT2SQLTオペレータが使用される。
【００５８】
ルールの例：原子化が必要であり、かつ基礎となるSQLオブジェクトの型がスカラでないときはいつでも、所望の型を備えたOPTXT2SQLTオペレータを付加する。OPTXT2SQLTは、結果を変換し、値を結果へと原子化するために入力XMLおよびSQL型を取る。
【００５９】
5.1.3.  リテラル式
XQueryのリテラル式はSQLリテラルへと変換される。ブールは数０＆１としてマッピングされる。たとえば、式「１」は値「１」とともにSTRTCONSへとマッピングされる。数値リテラルは型NUMBERのSQLリテラルへとマッピングされ、ストリングリテラルは型VARCHAR2を備えたSQLリテラルへとマッピングされる。
【００６０】
ルールの例：XQueryリテラルを適切な型の情報を備えたSQLリテラルへとマッピングする。ストリングリテラルの場合、それが＞４Ｋであれば、初めにempty_clobを備えたconcat演算のセットへとマッピングする。
【００６１】
【数６】
2008504601.tif 000008
【００６２】
5.1.4.  組込み型コンストラクタ、キャスト式
XQuery CASTおよび型コンストラクタは、SQL TO_CHAR、TO_NUMBERおよびXMLCastへとマッピングされる。XMLCastは、ユーザー定義の単純な型（たとえば、帽子のサイズ）へと明示的にキャストするため、および単純なスカラ型をXML値へと変換するため（関数等へと渡すために）使用される。
【００６３】
以下の表は、XMLデータ型のそれらのSQL同等物へのマッピングを説明する。コンストラクタ列は値の有効性を検査するために使用される（たとえば、バイトは＜１２７であり-１２８より大きいことがあり得る）。コンストラクタは、静的な型が式が正しい型（またはサブタイプ）であると示す場合に必要でないことがあり得る。コンストラクタを排除するために定数の畳込みが行なわれ得る。
【００６４】
ルールの例：どれへキャストするべきかデータ型を検査する。入力が定数の場合、範囲を検査し、適切であればエラーを発生させる。さもなければ、それが数値データ型である場合、TO_NUMBERおよび範囲検査を付加する。それがデータ型である場合、それを適切なフォーマットでTIMESTAMP_TZへと変換する。
【００６５】
【表１】
2008504601.tif 000009
【００６６】
【表２】
2008504601.tif 000010
【００６７】
5.1.5.  シーケンスコンストラクタ
XMLConcat（）はシーケンスを連結するために使用される。しかしながら、XMLコンストラクタはスカラ値をXMLTypeへと変換するために必要とされる。たとえば、シーケンスコンストラクタ（１，２，３）はXMLConcat（XMLCast(1),XMLCast(2),XMLCast(3)）へとマッピングされる。
【００６８】
ルールの例：シーケンスコンストラクタのすべての入力で繰返す。各式に対して、それをそのSQL同等物へと変換する。結果型が単純なスカラの場合、XMLCastオペランドをその上部に付加する。結果を単一のXMLTypeへと連結するためにXMLConcat（）を作成する。
【００６９】
5.1.6.  範囲（RANGE）式
範囲式は、オペレータOPTXNRNG()を使用することによって取扱われ得る。オペレータの一連の範囲オペレータを参照。この範囲オペレータは整数の一覧を含むXMLTypeを返す。
【００７０】
ルールの例：OPTXNRNGオペレータへとマッピングする。
5.1.7.  セット（SET）式（UNION,INTERSECT,MINUS,EXCEPT）
セット演算は値での結合（union）の場合に値の演算へと変換される。XMLType(Seq)がS
QL UNION、INTERSECT、MINUSおよび／またはEXCEPT構造物へとマッピング可能であり得る場合、そうすることはノード間の複写を排除し得る。
【００７１】
ルールの例：セット式をSQL UNION、INTERSECT、MINUSおよびEXCEPT構造物へとマッピングする。オーダ／マッピング方法はノードレベルのオペレーションを行なうためにXMLTypeで使用される。
【００７２】
5.1.8.  算術式
静的な型付け（typing）は、入力が数値または原子化であり得るようにし、型のキャストが付加されるようにする。変換は単にそれをSQL算術式へと変換する。
【００７３】
ルールの例：XQuery算術式をそのSQL同等物へと変換する。さまざまなオペレータの詳細なマッピングについてはオペレータの表を参照。
【００７４】
5.1.9.  値比較式
静的な型付けは、入力がスカラ値または原子化であり得るようにし、型のキャストが付加されるようにする。変換は単にそれをSQL比較式へと変換する。
【００７５】
ルールの例：XQuery比較式をそのSQL同等物へと変換する。さまざまなオペレータの詳細なマッピングについてはオペレータの表を参照。
【００７６】
5.1.10.  一般的な比較式
静的な型検査（typechecking）は、可能であれば一般的な比較式を値の比較へと変換し得る。両方の側が非コレクション値（non collection value）であり、かつ型が互換性があれば、それらは値の比較へと変換される。たとえば、式＄po/PoNo＝２１は、＄po/PoNoの型の数量詞がコレクション（*、＋等）でない場合に＄po/PoNo eq ２１に変換され得る。
【００７７】
両方の側に対する静的な型の情報が既知の互換性のスカラ型である場合（たとえば、integer（整数）*）、それらはEXISTSサブクエリへとマッピングされる。たとえば、＄po//LineItems＝２１は、EXISTS（select*from TABLE（XMLSEQUENCE（＜xpath-conv-for＄po//LineItems＞））x where value（x）＝２１）へとマッピングされ得る。
【００７８】
静的な型が知られていない場合（untypedAtomic*）、同等の一般的な比較オペレータが使用される。
【００７９】
ルールの例：expr１ GCOMP expr２であれば、２つの式の静的な型の互換性を検査する。
【００８０】
・両方の側の型がuntypedAtomicである場合、それらはともにVARCHAR2型へと変換される。
【００８１】
・１つの側がuntypedAtomicであり他方が数値である場合、untypedAtomic値はBINARY_DOUBLEへと変換される。
【００８２】
型に対する数量詞を検査する（たとえば、数量詞（integer*）は*である）。たとえば、
・両方の側に対する数量詞がシングルトン（emptyまたは？）である場合、GCOMPをSQL値比較オペレータへとマッピングする。
【００８３】
・expr1数量詞型がコレクション（*または＋）であり、かつexpr2数量詞がシングルトンである場合、以下のものへとマッピングする。
【００８４】
【数７】
2008504601.tif 000011
【００８５】
・expr2数量詞型がコレクション（*または＋）であり、かつexpr1数量詞がシングルトンである場合、以下のものへとマッピングする。
【００８６】
【数８】
2008504601.tif 000012
【００８７】
・両方の式がコレクションである場合、式を以下のものへとマッピングする。
【００８８】
【数９】
2008504601.tif 000013
【００８９】
5.1.11.  ノード比較式
ノード比較は、XMLTypeでオーダ方法を使用することにより取扱われる。それらはXQL値比較オペレータへとマッピングされる。
【００９０】
ルールの例：ここに説明されるようにSQL値比較オペレータへとマッピングする。
5.1.12.  オーダ比較式
オーダ比較式は節によるFLWORオーダで使用される。これらは節によるSQLオーダへとマッピングされる。
【００９１】
ルールの例：オーダ比較式を節の式によってSQLオーダへとマッピングする。
5.1.13.  論理式（AND,OR,NOT）
XML論理式はSQL論理式へとマッピングされる。SQLは３値の論理を有するが、空のシーケンスはNULLへとマッピングされ、これは非制約オペレーションに対して働く。制約は重要なものであり得る。なぜなら、制約からのNULL値は制約の適合として扱われるからである。
【００９２】
ルールの例：論理式をSQL論理式（AND,OR）へとマッピングする。論理式がトップレベルの式（WHERE節またはIF節の外側）として現れる場合、結果にCASE式を付加する。たとえば、クエリが式「ａ＜２０ and ｂ＞３０」である場合、それをCASE WHEN（ａ＜２０ and ｂ＞３０）then 1 else 0へとマッピングする。
【００９３】
5.1.14.  FLWOR式
FLWOR式はSQL select（選択）式へとマッピングされる。LET節はSQLクエリの共通の部分式（sub expression）としてマッピングされる。for節のRHSはfrom節へとマッピングされ、where節はSQL where節へとマッピングされ、return節はSQL select節へとマッピングされる。ノード識別がクエリに保存されるべきである場合、クエリブロックはNO_MERGEとしてマーキングされる。
【００９４】
【数１０】
2008504601.tif 000014
【００９５】
へとマッピングされる。
例１：単純なFLWOR節
【００９６】
【数１１】
2008504601.tif 000015
【００９７】
へとマッピングされる。
例２．XPath式を備えたFLWOR節：
【００９８】
【数１２】
2008504601.tif 000016
【００９９】
になる。
5.1.14.1.  LET節の取扱い
LET節の式はノード識別が保存される必要がない場合にクエリ式へとインラインされる（inlined）（および共通の部分式としてマーキングされる）。その他の場合はサブクエリはその選択リストとしてLET節の式で作成される。サブクエリは、ビューの併合を防止するために非併合可能としてマーキングされる。
【０１００】
ノード識別が保存される例：
【０１０１】
【数１３】
2008504601.tif 000017
【０１０２】
になる。
ノード識別の保存がない例：ノード識別の保存が重要ではない場合、LET節は式自身に直接的にインラインされてもよい。この最適化は、ユーザにノード識別が重要でないと特定するプラグマを有するように要求することによって行なってもよい。これはノード関連のオペレーションがクエリで使用されているかどうかを判断するためにグローバルに調べて暗示的に行なってもよい。
【０１０３】
【数１４】
2008504601.tif 000018
【０１０４】
になる。
技術の例：ビューの併合を防止することはクエリの性能に悪影響を及ぼすことがあるため、FLWOR式に対するWHERE節は、それがLET変数のいずれかを含むかどうかを知るために最初に探索される。含まない場合、LET節は（returnとともに）FLWOR節の結果として評価され得る。
【０１０５】
たとえば以下の式では、
【０１０６】
【数１５】
2008504601.tif 000019
【０１０７】
であり、＄ｊはしばしばreturn節で使用され、WHERE節では使用されないため、WHERE節はLET節の前に評価され得る。このクエリは次のものと同等である。
【０１０８】
【数１６】
2008504601.tif 000020
【０１０９】
ルールの例：型の宣言を正規化する：FORまたはLETの節が型の宣言を伴う場合、節に対応する式の静的な型を検査する。それが同じであるかまたは宣言された型のサブタイプで
ある場合、型の宣言を無視する。それが宣言された型のスーパータイプである場合、その式にTREAT式を付加し、それをSQLへとマッピングする。その他の場合はエラーを発生させる。FOR＜var＞＜type＞:＝＜expr＞はfor＜var＞:＝TREAT＜expr＞as＜type＞へと正規化され、SQLへとマッピングされる。
【０１１０】
FOR、WHERE、LETおよびRETURN節のすべての式をそれらのSQL同等物へと変換する。FOR節の式をSQL FROM節へとマッピングする（結合）。ノード識別が保存される必要がない場合、LET節の式をそれが参照されるところならどこにインラインしてもよい。たとえば、
【０１１１】
【数１７】
2008504601.tif 000021
【０１１２】
へとマッピングされる。
その他の場合、ノード識別が保存されるべきである場合、LET節で規定された変数がWHERE節で使用されているかどうかを検査することにより、FLWOR式のLET節を調べて、WHERE節の前にそれらが評価され得るかどうかを判断する。ビューの併合が行なわれるべきでないことを示すために内側のクエリブロックにNO_MERGEのヒントを付加する。
【０１１３】
LET節がWHERE節の前に評価される必要がある場合、LET節の式を選択リストサブクエリとしてマッピングし、WHERE節を外側のクエリブロックのSQL WHERE節へとマッピングする。たとえば、
【０１１４】
【数１８】
2008504601.tif 000022
【０１１５】
へとマッピングされる。
LET節がWHERE節の前に評価される必要がない場合、LET節の式を選択リストサブクエリ
としてマッピングするが、WHERE節を内側のクエリブロックのSQL WHERE節へとマッピングする。たとえば、
【０１１６】
【数１９】
2008504601.tif 000023
【０１１７】
へとマッピングされる。
5.1.15.  経路式
経路式はSQL式へとマッピングされる。オペレータOPTXATGは経路式の個々のノードを抽出するために使用される。それは単一ステップの横断を表す。静的な型検査は経路式の変換の一部を最適化するために使用される。
【０１１８】
5.1.15.1.  名前テストを伴う経路ステップ
これは標準のXPath１．０経路式を表す。名前テストを伴う単純な経路横断はOPTXATGオペレータへと書き直される。静的な型検査はさまざまなステップの型および基数を理解するために使用される。これは後に変換のために使用される。述部は正規化の後に関係するWHERE節へとマッピングされる。コレクション要素を伴う一般的な比較は、値の比較を伴うサブクエリへとマッピングされる。静的な型検査情報が利用可能でない場合、各ステップはuntypedAnyを生成すると仮定される。
【０１１９】
OPTXATGは入力引き数に基づいてさらに最適化される（または崩壊される）。たとえば、
$i/PurchaseOrder/PoNo
は、
OPTXATG(OPTXATG($i, ′PurchaseOrder′), ′PoNo′)
へとマッピングされる。
【０１２０】
OPTXATGは入力引き数に基づいてさらに最適化される（または崩壊される）。たとえば、次の式
（＜Ａ＞＜Ｂ＞３３＜/Ｂ＞＜／Ａ＞）/Ａ/Ｂ
は
OPTXATG(OPTXATG(XMLElement(“Ａ”,XMLElement(“Ｂ”,３３)),‘Ａ’),‘Ｂ’)
へとマッピングされる。
【０１２１】
ＡおよびＡを作成するXMLElementを抽出するXATGは崩壊され、結果は、結果＜Ｂ＞３３＜/Ｂ＞に対応するXMLElement(“Ｂ”，３３３)である。
【０１２２】
第２の例では、経路述部は関係する述部へとマッピングされる．
【０１２３】
【数２０】
2008504601.tif 000024
【０１２４】
へとマッピングされる。
以前のマッピングは、静的な型検査中にPoNoの型が数へとキャストされ得る原子値である場合のみ有効である。利用可能なスキーマ情報がない場合、静的な型の情報はPoNoがxs:anyTypeに関するという事実のみを得る。この場合のXMLCastは値の原子化を行ない、入力（PoNo）が単一の原子値でないかまたは数へとキャスト可能な要素でない場合にエラーを発生させ得る。
【０１２５】
一般的な比較オペレータ（＝）が使用されかつ型情報が知られていない場合、それはコレクション比較として扱われなければならない。この場合、経路述部は値の比較を使用してTABLEサブクエリへと書き直される。たとえば、
【０１２６】
【数２１】
2008504601.tif 000025
【０１２７】
へとマッピングされる。
経路ステップ自身に述部を伴う経路式も同様の態様で取扱われる。たとえば、
【０１２８】
【数２２】
2008504601.tif 000026
【０１２９】
へとマッピングされ、
スキーマ入力のない一般的な比較の場合、
【０１３０】
【数２３】
2008504601.tif 000027
【０１３１】
へとマッピングされる。
5.1.15.2.  種類テストを伴う経路ステップ
種類テストはノードの型（たとえば、text（）、processing-instruction（処理命令）（）等）の検査を伴う。XQueryはノードの名前およびスキーマ型などの型検査のさらに別のセットを付加する。たとえば、$i/element(foo,bar)は、型barのfooと名付けられた子要素が抽出される必要があることを示す。OPTXATGオペレータは、抽出のためにノード名に加えてノード型を取入れるように強化される。
【０１３２】
5.1.15.3.  フィルタ（FILTER）式を伴う経路ステップ
フィルタ式は，経路式を正規化しかつ経路式を状況ノードへと押込むことにより扱われる。たとえば、$i/PurchaseOrder/(for $j in LineItems return count($j/Orders)は(for $j in $i/PurchaseOrder/LineItems return count($j/Orders))へと正規化され得る。
【０１３３】
ルールの例：経路式の各ステップに対して、それを次のようにSQLオペレータへとマッピングする。
【０１３４】
ａ）  ステップが名前テストである場合、それをOPTXATGオペレータへとマッピングする。＜expr＞＜step＞＜QName-or-wildcard＞はOPTXATG(＜expr＞,＜step＞,＜localname＞，＜namespace＞)へとマッピングする
ｂ）  ステップが種類テストである場合、それをOPTXATGオペレータへとマッピングし、型情報＜expr＞＜step＞＜type＞はOPTXATG(＜expr＞,＜step＞,＜type＞)へとマッピングされる
ｃ）  ステップがフィルタステップである場合、式を次のように正規化する-＜expr＞＜step＞＜filterexpr＞は(for $m in＜expr＞return＜filterexpr＞へと正規化され、filter exprの状況ノードは＄ｍへと変更される。これはSQLへと書き直される。
【０１３５】
たとえば、$i/PurchaseOrder/(for $j in LineItems return count($j/Orders))はfor $m in $i/PurchaseOrder return(for $j in $m/LineItems return count($j/Orders))へと正規化され、SQLへとマッピングされる。
【０１３６】
経路式の述部については、述部を含む式の静的な型が次のように検査され得る。
ａ）  静的な型が式がコレクション（数量詞＝＊または＋）になることを示す場合、その式でサブクエリを作成し、述部をWHERE節へとマッピングする。
【０１３７】
ｂ）  さもなければ静的な型が式がシングルトンノードになることを示す場合、ａへとマッピングする。
【０１３８】
5.1.16.  条件式
If-then-else式は、SQL CASE WHEN式へとマッピングされる。
【０１３９】
ルールの例：if＜expr１＞then＜expr２＞else＜expr３＞であるとする。（静的な型検査によって決定されるように）必要であれば有効ブール値オペレータをexpr１に付加し、式をCASE WHEN＜expr１＞then＜expr２＞else＜expr３＞へとマッピングする。
【０１４０】
5.1.17.  量化表現
量化表現はSQL EXISTS節へとマッピングされ得る。たとえば、ライン品目番号のうちの少なくとも１つが不良品目リストに存在するすべての発注書を見付けるために、
【０１４１】
【数２４】
2008504601.tif 000028
【０１４２】
であり、ここで“ora:view（）”は、XMLの形でリレーションテーブルからデータを返すXQuery関数であり、
【０１４３】
【数２５】
2008504601.tif 000029
【０１４４】
へとマッピングされ得る。
5.1.18.  直接要素コンストラクタ式
要素コンストラクタはXMLElement（）オペレータへとマッピングされる。要素内の属性はXMLElement（）オペレータのXMLAttrivute（）節へとマッピングされる。
【０１４５】
例は次のようである。
【０１４６】
【数２６】
2008504601.tif 000030
【０１４７】
ルールの例：属性の構築のためにXMLAttrivute（）を使用して要素コンストラクタをXMLElement（）へとマッピングする。
【０１４８】
5.1.19.  計算された要素コンストラクタ式
計算された要素コンストラクタもXMLElement（）へとマッピングされる。要素コンストラクタの子である計算された属性コンストラクタは最適化され、XMLAttrivute（）節へと
マッピングされる。XMLElement（）オペレータは動的な要素名が可能となるように緩められる。オペレータは自立型属性の子が要素の属性となるように変形され得る。
【０１４９】
【数２７】
2008504601.tif 000031
【０１５０】
へとマッピングされる。
ルールの例：計算された要素コンストラクタをXMLElement（）へとマッピングし、子の属性コンストラクタをXMLAttrivute（）へとマッピングする。
【０１５１】
5.1.20.  計算された属性コンストラクタ式
属性コンストラクタはXMLAttrivute（）がトップレベルのSQL関数であるようにすることによって取扱われる。
【０１５２】
【数２８】
2008504601.tif 000032
【０１５３】
へとマッピングされる。
ルールの例：属性コンストラクタをXMLAttributeへとマッピングする。
【０１５４】
5.1.21.  他のXML構築式
ルールの例：XMLコンストラクタは同等のSQL/XML標準関数へとマッピングされる。
【０１５５】
【表３】
2008504601.tif 000033
【０１５６】
5.1.22.  型スイッチ（TYPESWITCH）式
型スイッチ式はそれらが入力の型でスイッチすることを除いてif-then-elseと同様である。型検査は、型が適合する場合に１を返す入力のXQuery型を検査するSQLオペレータOPTXTYPCHKを使用して行なわれ得る。式の静的な型の情報が知られる場合、型スイッチは完全に最適化され得る。OPTXTYPCHKオペレータは静的な型のチェック情報が型検査を最適化し得る場合の大半について最適化され得る。
【０１５７】
ルールの例：TypeswithをCase式へとマッピングし、OPTXTYPCHKを使用して入力の型を検査する。次のようである。
【０１５８】
【数２９】
2008504601.tif 000034
【０１５９】
＜expr＞の静的な型を検査する。これをetypeとする。各Case式について、etypeをCase式のtype-iと適合する。２つの型が同じであるかまたはetypeがtype-iのサブタイプである場合、型スイッチ式を最適化し、expr-iのSQL同等物を返す。type-iがetypeのサブタイプである場合、型スイッチ式全体を次の形のSQL式へとマッピングする。
【０１６０】
【数３０】
2008504601.tif 000035
【０１６１】
type-iがetypeの型の階層にない場合、規定値の式exprnのSQL同等物を返す。
5.1.23.  インスタンスオブ（INSTANCEOF）式
InstanceOf式は、OPTXTYPCHKオペレータを使用して評価されてもよく、入力式の静的な型を使用して最適化されてもよい。
【０１６２】
ルールの例：＜expr１＞instanceOf＜type１＞であるとする。＜expr１＞の静的な型が同じであるかまたは＜type１＞のサブタイプであるかどうかを検査する。そうであれば、その式を除去する。静的な型がtype１のスーパータイプである場合、OPTXTYPCHK(＜expr１＞，＜type１＞)へとマッピングする。さもなければそれはエラーである。
【０１６３】
5.1.24.  キャスト可能な（CASTABLE）式
キャスト可能な式は、入力が所与の形にキャスト可能であるかどうかを検査するために使用される。それらは式が他の型へとキャスト可能であるかどうかを判断するために使用され得るOPTCASTABLEオペレータを使用してSQLへとマッピングされ得る。この式は入力の静的な型が同じであるかまたは入力のサブタイプである場合に除去され得ることに注目されたい。
【０１６４】
ルールの例：＜expr＞castable as ＜type＞はOPTXTYPCHK(＜expr＞，＜type＞)へとマッピングされる
5.1.25.  トリート（TREAT）式
treat式はCase式へとマッピングされる。
【０１６５】
ルールの例：treat＜expr＞as＜type＞をCASE WHEN OPTXTYPCHK(＜expr＞，＜type＞)＝１ then＜expr＞else error()endへとマッピングする。
【０１６６】
5.1.26.   確認（VALIDATE）式
Validate式はXMLValidate（）関数へとマッピングされる。XMLValidate（）はスキーマ型（ローカルまたはグローバル）を取入れ、確認されたXML値を返すかまたはエラーを返すSQLオペレータである。
【０１６７】
ルールの例：validate＜type＞＜expr＞をXMLValidate(＜expr＞,＜type＞)へとマッピングする。
【０１６８】
Validate式はXMLIsValid（）関数へもマッピングされ得る。
5.1.27.   総計（AGGREGATE）式
XQueryでは、総計がクエリ内のどこに存在してもよい。これはSQLによって直接的にサポートされていない。たとえば、以下のXQueryはそれらの中に２１より多いライン品目を有するすべての発注書を返す。
【０１６９】
【数３１】
2008504601.tif 000036
【０１７０】
総計は、総計を計算するためのサブクエリを使用して書き直される。
【０１７１】
【数３２】
2008504601.tif 000037
【０１７２】
ルールの例：関数＆オペレータ（Ｆ＆Ｏ）をSQL式へとマッピングするとき、Ｆ＆Ｏが総計である場合、それをSQLサブクエリへとマッピングする。agg-func（＜expr＞)を(select sql-agg-func(value(p))from table(xmlsequence(＜expr＞))p)へとマッピングする。
【０１７３】
5.1.28.  ポリモーフィックオペレータ
XQueryはさまざまなデータ型を取扱うために算術および比較の関数の多重定義を可能にするため、SQLオペレータへのマッピングはオペランドの実行時の入力型に応じて異なり得る。そのような多重定義を利用するXQueryオペレータは「ポリモーフィックオペレータ」と呼ばれる。
【０１７４】
たとえば、次のXQuery式を考える。
declare $b xs:boolean external;
(if($b)then 3.3 else xs:date(“2001-08-25”))+
(if($b)then 44 else xdt:yearMonthDuration(“P5Y0M”)
外部変数＄ｂに対する実行時の値に応じて、XQueryでの加算は、１０進数の加算（この場合、それは１０進値３．３および４４を加算する）へと変換され得るか、またはyearMonthDuration（年月期間）での日付の加算に変換され得る（この場合、それは′２００１−０８−２５′の日付に５年およびゼロヶ月を加算し、これは日付′２００６−０８−２５′になる）。
【０１７５】
したがって、この式がSQL１０進数オペレータにマッピングされるかまたはSQL日付加算オペレータへとマッピングされるかに関する判断は実行時のみに行なわれ得る。これをサポートするため、ここに説明される技術は、静的な型検査から決定されるようにその入力データ型がポリモーフィックである算術式をポリモーフィックSQL算術オペレータへとマッピングする。ポリモーフィックSQL算術オペレータは、実行時の入力型に応じて実行時に適切なSQL算術オペレータへとディスパッチすることができる。
【０１７６】
同様の変換はポリモーフィックXQuery比較関数に対しても使用される。ポリモーフィックXQuery比較関数はポリモーフィックSQL値比較オペレータへとマッピングされる。
【０１７７】
上述のように、入力型がXQueryコンパイル時間中に変わり得る場合、ポリモーフィックオペレータ変換を使用することが有利であり得る。さらに、３．３＋４４などの非ポリモーフィックXQuery式は、ポリモーフィックSQLオペレータのかわりに、たとえばSQL１０進数加算オペレータを使用することによって、非ポリモーフィックSQL式へと直接的に変換され得る。
【０１７８】
5.1.29.  XQueryユーザ定義および外部の関数
XQueryは、その実現がXQuery環境外であるXQueryおよび外部関数で書かれたユーザ定義の関数をサポートする。たとえば、関数の本体はJava（登録商標）プログラミング言語などのプログラミング言語で書かれ得る。
【０１７９】
ユーザ定義のXQuery関数はオラクル（Oracle）PL/SQL（Procedural Language／Structured Query Language）関数へと変換され得る。これは、XQuery式からユーザ定義のXQuery関数の本体をPL/SQL式へと変換することにより行なわれ得る。さらに、XQuery関数の起動はSQLのPL/SQL関数の起動へと変換され得る。
【０１８０】
ここに説明される技術はXQueryの外部ユーザ定義関数もサポートする。たとえば、関数の本体がJava（登録商標）プログラミング言語で書かれる場合、その関数は、ターゲット言語で書かれたSQL外部ユーザ定義関数（たとえば、Java（登録商標）ユーザ定義のSQL関数）を使用して同等の外部ユーザ定義関数へとマッピングされ得る。したがって、Java（登録商標）、Ｃ、PL/SQLまたは他の適切な言語で実現されたXQueryの外部ユーザ定義関数は、SQLシステムによってサポートされるJava（登録商標）、Ｃ、PL/SQLまたは他の適切な言語で書かれたユーザ定義のPL/SQL関数へと変換され得る。
【０１８１】
5.1.30.  XQueryモジュール
XQueryはモジュールをサポートする。XQueryモジュールは、独立して作成されかつXQueryプロセッサへとインポートまたはロードされ得るXQueryコードの断片である。XQueryモジュールは、独立して作成されかつデータベースサーバへとロードされ得るOracle PL/SQLパッケージへと変換され得る。
【０１８２】
５．２．  関数およびオペレータのマッピング
以下の表は、既存のSQLオペレータまたは新しいSQLオペレータへの、XQueryオペレータおよび標準関数（Ｆ＆Ｏ）のマッピングを説明する。
【０１８３】
【表４】
2008504601.tif 000038
【０１８４】
【表５】
2008504601.tif 000039
【０１８５】
【表６】
2008504601.tif 000040
【０１８６】
【表７】
2008504601.tif 000041
【０１８７】
【表８】
2008504601.tif 000042
【０１８８】
【表９】
2008504601.tif 000043
【０１８９】
【表１０】
2008504601.tif 000044
【０１９０】
【表１１】
2008504601.tif 000045
以下のSQLオペレータはまた、XQuery関連の演算を実行するのに提供される。OPTXTYPCHKは、所与のXQuery型（たとえば、xs:integer）と一致するように入力上において型検査を実行する。OPTXATGは、XPath抽出演算を実行する。OPTXT2SQLTは、XML型をSQL（XMLCast（sqltypeとしてのxmltype expr））にキャストするのに用いられる。OPTSQL2XMLTは、SQL型をXML（XMLCast（xml-typeとしてのsql-expr））にキャストするのに用いられる。
【０１９１】
５．３．  式マッピング例
共通式のうちのいくつかおよびそれらのマッピングがこのセクションにおける例で説明される。
【０１９２】
たとえば、リポジトリ・クエリ（doc）：
【０１９３】
【数３３】
2008504601.tif 000046
【０１９４】
は、
【０１９５】
【数３４】
2008504601.tif 000047
【０１９６】
に書き換えられ、これが、
【０１９７】
【数３５】
2008504601.tif 000048
【０１９８】
に書き換えられる。
たとえば、リポジトリ（Collection）：
【０１９９】
【数３６】
2008504601.tif 000049
【０２００】
は、
【０２０１】
【数３７】
2008504601.tif 000050
【０２０２】
になる。
たとえば、SQLテーブルクエリ：
【０２０３】
【数３８】
2008504601.tif 000051
【０２０４】
は、
【０２０５】
【数３９】
2008504601.tif 000052
【０２０６】
になり、これが、
【０２０７】
【数４０】
2008504601.tif 000053
【０２０８】
に書き換えられる。
６．０  代替例
ここに説明される実施例においては、XQueryおよびXQueryXは、XML言語ソースへのクエリのためのクエリ言語の例として表され、SQLは、リレーショナルデータベースへのクエリのためのクエリ言語の例として表されていた。これらの技術は、それらのクエリ言語に限定されない。他のいかなるクエリ言語が用いられてもよい。
【０２０９】
ここに記載される技術は、変換を用いるクエリの効率的な評価についての固有の解決策を表す。しかしながら、これらの技術は、マークアップ言語データソース上で作成されるクエリに限定されない。他の実施例においては、いかなるクエリ言語が用いられてもよい。クエリ言語におけるクエリは構文解析され、インメモリ（in-memory）表現の第１の形にコンパイルされ得る。インメモリ表現の第１の形は、インメモリ表現の第２の形に変換され、以下に記載のとおりさらに処理され得る。
【０２１０】
ここに記載される技術では、さまざまなフォーマットのクエリが、まず構文解析され、ＡＳＴまたは他のインメモリ表現にコンパイルされることが提供される。これらのインメモリ表現は特定の抽象構文に変換される。他の実施例においては、第１の構文におけるクエリの要素（たとえば、XQuery）が構文解析され、コンパイルされ、要素ごとに直ちに特定のフォーマットに変換される。当該実施例においては、いかなる特定のときにも、第１のフォーマットでのクエリの部分全体のインメモリ表現が必ずしも存在するわけではないかもしれない。
【０２１１】
７．０  ハードウェア概要
図３は、この発明の実施例が実現され得るコンピュータシステム３００を示すブロック図である。コンピュータシステム３００は、情報を伝達するためのバス３０２または他の通信機構と、バス３０２に結合され情報を処理するためのプロセッサ３０４とを含む。コンピュータシステム３００はまた、プロセッサ３０４によって実行されるべき情報および命令を記憶するための、バス３０２に結合されるランダムアクセスメモリ（ＲＡＭ）また
は他の動的記憶装置等のメインメモリ３０６を含む。メインメモリ３０６はまた、プロセッサ３０４によって実行されるべき命令の実行中に一時変数または他の中間情報を記憶するのに用いられ得る。コンピュータシステム３００はさらに、プロセッサ３０４のための静的情報および命令を記憶するための、バス３０２に結合される読出専用メモリ（ＲＯＭ）３０８または他の静的記憶装置を含む。磁気ディスクまたは光ディスク等の記憶装置３１０が設けられ、情報および命令を記憶するためにバス３０２に結合される。
【０２１２】
コンピュータシステム３００は、コンピュータユーザに情報を表示するための、陰極線管（ＣＲＴ）等のディスプレイ３１２にバス３０２を介して結合され得る。英数字および他のキーを含む入力装置３１４がバス３０２に結合されて、情報およびコマンド選択をプロセッサ３０４に伝達する。別の種類のユーザ入力装置は、方向情報およびコマンド選択をプロセッサ３０４に伝達し、ディスプレイ３１２上でのカーソルの動きを制御するための、マウス、トラックボールまたはカーソル方向キー等のカーソル制御３１６である。この入力装置は、典型的には、２つの軸、すなわち第１の軸（たとえば、ｘ）および第２の軸（たとえば、ｙ）、において２自由度を有しており、これにより、装置が平面で位置を特定することが可能となる。
【０２１３】
この発明は、ここで説明される技術を実現するためのコンピュータシステム３００の用途に関する。この発明の一実施例に従うと、これらの技術は、メインメモリ３０６に含まれる１つ以上の命令の１つ以上のシーケンスをプロセッサ３０４が実行することに応答して、コンピュータシステム３００によって実行される。このような命令は、記憶装置３１０等の別の機械読取り可能媒体からメインメモリ３０６へと読取られてもよい。メインメモリ３０６内に含まれる命令のシーケンスを実行することにより、ここで説明されるプロセスステップをプロセッサ３０４に実行させる。代替的な実施例では、ソフトウェア命令の代わりに、またはソフトウェア命令と組合せてハードワイヤード回路を用いてこの発明を実現することもできる。したがって、この発明の実施例は、ハードウェア回路とソフトウェアとの特定のいずれかの組合せに限定されない。
【０２１４】
ここで用いられる「機械読取り可能媒体」という用語は、実行のための命令をプロセッサ３０４に提供することに関与するいかなる媒体をも指す。このような媒体は、不揮発性媒体、揮発性媒体および伝送媒体を含むがそれらに限定されない多くの形をとり得る。不揮発性媒体は、たとえば、記憶装置３１０等の光ディスクまたは磁気ディスクを含む。揮発性媒体は、メインメモリ３０６等のダイナミックメモリを含む。伝送媒体は、バス３０２を含むワイヤを含んだ、同軸ケーブル、銅線および光ファイバを含む。伝送媒体はまた、電波および赤外線データ通信中に生成されるような音波または光波の形をとり得る。
【０２１５】
機械読取り可能媒体の一般的な形は、たとえば、フロッピー（登録商標）ディスク、フレキシブルディスク、ハードディスク、磁気テープ、他のいずれかの磁気媒体、ＣＤ−ＲＯＭ、他のいずれかの光学媒体、パンチカード、紙テープ、孔のパターンを備えた他のいずれかの物理的媒体、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ、ＦＬＡＳＨ−ＥＰＲＯＭ、他のいずれかのメモリチップもしくはカートリッジ、以下に記載される搬送波、またはコンピュータが読取ることのできる他のいずれかの媒体を含む。
【０２１６】
さまざまな形の機械読取り可能媒体は、実行のための１つ以上の命令の１つ以上のシーケンスをプロセッサ３０４に搬送することに関与し得る。たとえば、当該命令は、最初にリモートコンピュータの磁気ディスク上で搬送され得る。リモートコンピュータは、命令をそのダイナミックメモリにロードし、モデムを用いて電話線上で命令を送信し得る。コンピュータシステム３００にとってローカルなモデムは、電話線上のデータを受信し、赤外線送信機を用いてデータを赤外線信号に変換し得る。赤外線検出器が、赤外線信号で搬送されたデータを受信し、適切な回路が当該データをバス３０２上に配置し得る。バス３
０２はデータをメインメモリ３０６へと搬送し、ここから、プロセッサ３０４が命令を取出し、実行する。メインメモリ３０６が受取る命令は、随意には、プロセッサ３０４による実行の前または後に記憶装置３１０に記憶され得る。
【０２１７】
コンピュータシステム３００はまた、バス３０２に結合される通信インターフェイス３１８を含む。通信インターフェイス３１８は、ローカルネットワーク３２２に接続されるネットワークリンク３２０に対する双方向データ通信結合を提供する。たとえば、通信インターフェイス３１８は、データ通信接続を対応する種類の電話線に提供する統合サービスデジタル通信網（ＩＳＤＮ）カードまたはモデムであってもよい。別の例として、通信インターフェイス３１８は、データ通信接続を互換性のあるＬＡＮに提供するローカルエリアネットワーク（ＬＡＮ）カードであってもよい。ワイヤレスリンクも実現され得る。このようないずれの実現例においても、通信インターフェイス３１８は、さまざまな種類の情報を表わすデジタルデータストリームを搬送する電気信号、電磁信号または光信号を送受信する。
【０２１８】
ネットワークリンク３２０は、典型的には、１つ以上のネットワークを介して他のデータ装置にデータ通信を提供する。たとえば、ネットワークリンク３２０は、ローカルネットワーク３２２を介した、ホストコンピュータ３２４、またはインターネットサービスプロバイダ（ＩＳＰ）３２６が作動させるデータ設備への接続をもたらし得る。ＩＳＰ３２６は、現在では一般的に「インターネット」３２８と称される世界的なパケットデータ通信網を介してデータ通信サービスを提供する。ローカルネットワーク３２２およびインターネット３２８はともに、デジタルデータストリームを搬送する電気信号、電磁信号または光信号を用いる。さまざまなネットワークを介する信号ならびにネットワークリンク３２０上にあり通信インターフェイス３１８を介する信号は、コンピュータシステム３００との間でデジタルデータをやり取りするものであるが、情報を運ぶ搬送波の例示的な形である。
【０２１９】
コンピュータシステム３００は、ネットワーク、ネットワークリンク３２０および通信インターフェイス３１８を介して、プログラムコードを含むデータを受取りかつメッセージを送ることができる。インターネットの例では、サーバ３３０は、インターネット３２８、ＩＳＰ３２６、ローカルネットワーク３２２および通信インターフェイス３１８を介してアプリケーションプログラムについての要求されたコードを伝送し得る。
【０２２０】
コードが受取られると、当該受取られたコードはプロセッサ３０４によって実行され、および／または、後の実行のために記憶装置３１０もしくは他の不揮発性記憶装置に記憶され得る。このように、コンピュータシステム３００は、搬送波の形でアプリケーションコードを獲得し得る。
【０２２１】
上述の明細書では、この発明の実施例を、実現例ごとに異なり得る多数の特定の詳細を参照して説明してきた。したがって、この発明が何であるか、およびこの発明を目指して出願人が何を意図しているかを独占的に示す唯一のものが、この出願から発生して特有の形態をとった請求項の組である。特有の形態であるこのような請求項は、以降の任意の補正を含んで発生する。このような請求項に含まれる用語に対してこの明細書で明示された任意の定義は、請求項で用いられている通りにこのような用語の意味を支配するものとする。したがって、請求項に明示的に記載されていない限定、要素、特性、特徴、利点または属性は、このような請求項の範囲を決して限定しない。したがって、明細書および図面は限定的な意味ではなく例示的な意味で捉えられるべきである。
【図面の簡単な説明】
【０２２２】
【図１】変換を使用したクエリの効率的な評価のためのシステムを示すブロック図である。
【図２】変換を使用したクエリの効率的な評価のためのシステムを示すフロー図である。
【図３】この発明の実施例を実現可能なコンピュータシステムを示すブロック図である。
【図１】
2008504601.tif 000054
【図２】
2008504601.tif 000055
【図３】
2008504601.tif 000056
【手続補正書】
【提出日】平成18年11月30日(2006.11.30)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
クエリを処理する方法であって、
前記クエリを受取るステップを含み、前記クエリは、所定の演算を特定し、前記方法はさらに、
前記クエリが第１のクエリ言語において前記所定の演算のうちの第１の１つ以上を特定する第１の部分および第２のクエリ言語において前記所定の演算のうちの第２の１つ以上を特定する第２の部分を含むと判断するステップと、
前記第１の部分のための第１のインメモリ表現を生成するステップと、
前記第２の部分のための第２のインメモリ表現を生成するステップとを含み、前記第２のインメモリ表現は、前記第１のクエリ言語のためのクエリプロセッサによって理解されない、前記第２のクエリ言語によってサポートされる少なくとも１つのクエリ要素を表現し、前記方法はさらに、
前記所定の演算のいずれかを実行する前に、前記第１のインメモリ表現および第４のインメモリ表現に基づいて前記クエリの第３のインメモリ表現を生成するステップを含み、前記第３のインメモリ表現は前記所定の演算のすべてを特定し、前記第３のインメモリ表現を生成するステップは、
前記第２のインメモリ表現に基づいて前記第４のインメモリ表現を生成するステップを含み、前記第４のインメモリ表現は、前記第１のクエリ言語によってサポートされ前記第１のクエリ言語のための前記クエリプロセッサによって理解されるクエリ要素だけを表現し、前記方法はさらに、
前記第３のインメモリ表現に基づいて前記所定の演算を実行するステップを含む、方法。
【請求項２】
前記第１のインメモリ表現および前記第３のインメモリ表現は第１の抽象構文でフォーマットされ、前記第２のインメモリ表現は第２の抽象構文でフォーマットされ、前記第４のインメモリ表現は前記第１の抽象構文でフォーマットされる、請求項１に記載の方法。
【請求項３】
前記第２のインメモリ表現は、前記第２の抽象構文においてクエリ要素の１つ以上のイ
ンメモリ表現を含み、前記第４のインメモリ表現を生成するステップは、
前記第２の抽象構文におけるクエリ要素の前記１つ以上のインメモリ表現のために前記第１の抽象構文におけるクエリ要素の１つ以上の同等のインメモリ表現の第２のセットを決定するステップと、
前記第１の抽象構文におけるクエリ要素の前記１つ以上の同等のインメモリ表現の第２のセットに基づいて前記第１の抽象構文において前記第４のインメモリ表現を生成するステップとを含む、請求項２に記載の方法。
【請求項４】
前記第２の抽象構文におけるクエリ要素の前記１つ以上のインメモリ表現におけるクエリ要素の各インメモリ表現は、前記第１の抽象構文におけるクエリ要素の前記１つ以上の同等のインメモリ表現の第２のセットにおけるクエリ要素の１つ以上のインメモリ表現に対応する、請求項３に記載の方法。
【請求項５】
前記第１のインメモリ表現、前記第２のインメモリ表現および前記第３のインメモリ表現のうちの１つ以上が、抽象構文ツリーとしてメモリにおいて表現される、請求項１に記載の方法。
【請求項６】
前記第１のクエリ言語は構造化されたクエリ言語である、請求項１に記載の方法。
【請求項７】
前記第２のクエリ言語はマークアップクエリ言語である、請求項１に記載の方法。
【請求項８】
前記第２のクエリ言語はXQueryである、請求項１に記載の方法。
【請求項９】
前記第２のクエリ言語はXQueryXである、請求項１に記載の方法。
【請求項１０】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてXQuery総計を含み、前記第４のインメモリ表現を生成するステップは、前記総計を計算するよう前記第１の抽象構文においてSQLサブクエリを生成するステップを含み、前記SQLサブクエリは、前記第２の抽象構文における前記XQuery総計に基づいて生成されている、請求項２に記載の方法。
【請求項１１】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてリテラル式を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記リテラル式に基づいて前記第１の抽象構文においてSQLリテラルを生成するステップを含む、請求項２に記載の方法。
【請求項１２】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてXQueryキャスト式を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記XQueryキャスト式に基づいて前記第１の抽象構文においてSQLキャスト関数およびSQL変換関数のうちの１つを生成するステップを含む、請求項２に記載の方法。
【請求項１３】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてセット式を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記セット式に基づいて前記第１の抽象構文においてSQL UNION、SQL MINUSおよびSQL INTERSECTのうちの１つを生成するステップを含む、請求項２に記載の方法。
【請求項１４】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の
抽象構文であり、前記第２の部分は前記第２の抽象構文においてXQuery算術式を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記XQuery算術式に基づいて前記第１の抽象構文においてSQL算術式を生成するステップを含む、請求項２に記載の方法。
【請求項１５】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてXQuery比較を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記XQuery比較に基づいて前記第１の抽象構文においてSQL比較を生成するステップを含む、請求項２に記載の方法。
【請求項１６】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文において節によるXQuery FLWORオーダを含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における節による前記XQuery FLWORオーダに基づいて前記第１の抽象構文において節によるSQLオーダを生成するステップを含む、請求項２に記載の方法。
【請求項１７】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてXML論理式を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記XML論理式に基づいて前記第１の抽象構文においてSQL論理式要素を生成するステップを含む、請求項２に記載の方法。
【請求項１８】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてXML FLWOR式を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記XML FLWOR式に基づいて前記第１の抽象構文においてSQL選択式要素を生成するステップを含む、請求項２に記載の方法。
【請求項１９】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてXML経路式を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記XML経路式に基づいて前記第１の抽象構文においてSQL経路式を生成するステップを含む、請求項２に記載の方法。
【請求項２０】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてXML if-then-else式を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記XML if-then-else式に基づいて前記第１の抽象構文においてSQL case-when式を生成するステップを含む、請求項２に記載の方法。
【請求項２１】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文において、XML量化表現を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記XML量化表現に基づいて前記第１の抽象構文においてSQL Exists式を生成するステップを含む、請求項２に記載の方法。
【請求項２２】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてSQL/XML構成式を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記SQL/
XML構成式に基づいて前記第１の抽象構文においてSQL構成式を生成するステップを含む、請求項２に記載の方法。
【請求項２３】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてXMLオペレータを含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記XMLオペレータに基づいて前記第１の抽象構文においてSQLオペレータを生成するステップを含む、請求項２に記載の方法。
【請求項２４】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてXQueryシーケンス型演算を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記XQueryシーケンス型演算に基づいて前記第１の抽象構文においてSQL型演算を生成するステップを含む、請求項２に記載の方法。
【請求項２５】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてXQuery型コンストラクタを含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記XQuery型コンストラクタに基づいて前記第１の抽象構文においてSQLスカラ・コンストラクタを生成するステップを含む、請求項２に記載の方法。
【請求項２６】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてXQuery validate演算を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記XQuery validate演算に基づいて前記第１の抽象構文においてSQL/XML IsValid演算およびSQL/XML Validate演算のうちの１つを生成するステップを含む、請求項２に記載の方法。
【請求項２７】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてポリモーフィックXQuery算術オペレータを含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記ポリモーフィックXQuery算術オペレータに基づいて前記第１の抽象構文においてポリモーフィックSQL算術オペレータを生成するステップを含む、請求項２に記載の方法。
【請求項２８】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてポリモーフィックXQuery比較オペレータを含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記ポリモーフィックXQuery比較オペレータに基づいて前記第１の抽象構文においてポリモーフィックSQL値比較オペレータを生成するステップを含む、請求項２に記載の方法。
【請求項２９】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてXQuery関数呼出を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記XQuery関数呼出に基づいて前記第１の抽象構文においてSQL関数呼出を生成するステップを含む、請求項２に記載の方法。
【請求項３０】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてユーザ定義のXQuery関数
を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記ユーザ定義のXQuery関数に基づいて前記第１の抽象構文においてユーザ定義のPL/SQL関数を生成するステップを含む、請求項２に記載の方法。
【請求項３１】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文において外部XQuery関数を含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記外部XQuery関数に基づいて前記第１の抽象構文において外部SQL関数を生成するステップを含む、請求項２に記載の方法。
【請求項３２】
前記第１の抽象構文はSQL関連の抽象構文であり、前記第２の抽象構文はXQuery関連の抽象構文であり、前記第２の部分は前記第２の抽象構文においてXQueryモジュールを含み、前記第４のインメモリ表現を生成するステップは、前記第２の抽象構文における前記XQueryモジュールに基づいて前記第１の抽象構文においてPL/SQLパッケージを生成するステップを含む、請求項２に記載の方法。
【請求項３３】
クエリを処理する方法であって、
前記クエリを受取るステップを含み、前記クエリは、所定の演算を特定し、マークアップ言語に記憶されたデータへのクエリを行い、前記方法はさらに、
前記クエリの第１のインメモリ表現を生成するステップを含み、前記第１のインメモリ表現は、リレーショナルクエリプロセッサによって理解されない少なくとも１つのクエリ要素を表現し、前記方法はさらに、
前記所定の演算のいずれかを実行する前に、前記第１のインメモリ表現に基づいて第２のインメモリ表現を生成するステップを含み、前記第２のインメモリ表現は、リレーショナルデータベースへのクエリを行っている同等のクエリを処理することによって生成されたのと同じ形であり、前記第２のインメモリ表現は、前記リレーショナルクエリプロセッサによって理解されない如何なるクエリ要素をも表現せず、前記第２のインメモリ表現は前記所定の演算のすべてを特定し、前記方法はさらに、
前記第２のインメモリ表現に基づいて前記所定の演算を実行するステップを含む、方法。
【請求項３４】
前記所定の演算を実行するステップは、前記リレーショナルデータベースに対して前記第２のインメモリ表現において特定されるコマンドを実行することによって前記所定の演算を実行するステップを含む、請求項３３に記載の方法。
【請求項３５】
１つ以上のプロセッサによって実行されるときに、前記１つ以上のプロセッサに請求項１から３４のいずれかに記載の方法を実行させる命令の１つ以上のシーケンスを搬送する、コンピュータ読取可能媒体。
【国際調査報告】
2008504601.tif 000057
2008504601.tif 000058
2008504601.tif 000059
2008504601.tif 000060