JP2005018776A - クエリ中間言語の方法およびシステム - Google Patents
クエリ中間言語の方法およびシステム Download PDFInfo
- Publication number
- JP2005018776A JP2005018776A JP2004185646A JP2004185646A JP2005018776A JP 2005018776 A JP2005018776 A JP 2005018776A JP 2004185646 A JP2004185646 A JP 2004185646A JP 2004185646 A JP2004185646 A JP 2004185646A JP 2005018776 A JP2005018776 A JP 2005018776A
- Authority
- JP
- Japan
- Prior art keywords
- xml
- operators
- query
- operator
- node
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/80—Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
- G06F16/83—Querying
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99931—Database or file accessing
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99931—Database or file accessing
- Y10S707/99933—Query processing, i.e. searching
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99941—Database schema or data structure
- Y10S707/99942—Manipulating data structure, e.g. compression, compaction, compilation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Devices For Executing Special Programs (AREA)
- Machine Translation (AREA)
Abstract
【課題】 リレーショナルおよび非リレーショナルデータソースにまたがって1つまたは複数のXML言語照会のセマンティック表現を生成するコンピュータシステムおよび方法を提供すること。
【解決手段】 セマンティック中間言語表現は、1つまたは複数のXML言語照会の意味を明示的に記述する。セマンティック中間言語は、元のクエリの演算を記述するノードを備えたグラフ構造とすることができる。セマンティックグラフ中のノードに割り当てられた演算子は、元のXMLクエリの確定的な定義を可能にする。セマンティック中間言語を使用して、単一または複数のデータソースにわたるXMLクエリを実行することができる。方法は、少なくとも1つの照会を受け取り、受け取った照会内の演算ごとに少なくとも1つのノードオブジェクトを定義し、演算子を使用して各ノードオブジェクトをトランスレートし、演算子からセマンティック表現を生成することを含む。
【選択図】 図2
【解決手段】 セマンティック中間言語表現は、1つまたは複数のXML言語照会の意味を明示的に記述する。セマンティック中間言語は、元のクエリの演算を記述するノードを備えたグラフ構造とすることができる。セマンティックグラフ中のノードに割り当てられた演算子は、元のXMLクエリの確定的な定義を可能にする。セマンティック中間言語を使用して、単一または複数のデータソースにわたるXMLクエリを実行することができる。方法は、少なくとも1つの照会を受け取り、受け取った照会内の演算ごとに少なくとも1つのノードオブジェクトを定義し、演算子を使用して各ノードオブジェクトをトランスレートし、演算子からセマンティック表現を生成することを含む。
【選択図】 図2
Description
本発明は一般に、データソースにわたってクエリを行うソフトウェアの分野に関し、より詳しくは、中間言語を使用して1つまたは複数のXMLまたは仮想XMLデータソースにわたってクエリを行うことに関する。
XML(eXtensible Markup Language)は、汎用シンタックスを提供して人間が読み取ることができるタグでデータをマークアップする文書フォーマット化のためのWorld Wide Webコンソーシアム(W3C)公認規格である。XMLは、タグおよびエレメントの固定のセットを有しておらず、そのためXML規格に準拠する限り、ユーザはこのようなタグを定義することができる。データは、テキストマークアップで囲まれているテキストの文字列としてXML文書に格納することができる。W3Cは、XML情報セット(XML Infoset)と呼ばれる仕様においてXMLの抽象データモデルを成文化している。Infosetは、プロパティ収容ノードに関してXML文書の論理構造を記述している。XMLは、文書のコンテンツを適切に定義されたフォーマットで容易に記述することができるが、それらの構造が標準テキスト文書のものと一貫していないためか、またはXMLと適合性のない何らかのその他の特徴のために、それほど容易に記述することのできない他のソースのデータがある。このようなデータソースの一例がスプレッドシートまたはリレーショナルデータベースである場合がある。
仮想XMLとは、多様なデータアクセスプログラミングモデルにわたって一貫性を確立する概念であり、実際の記憶フォーマットの代わりにユーザが考える方法でユーザのデータを扱うことができるようにする。仮想XMLデータを介したクエリの概念には、現実には決してデータをXMLに変換することなく、データをあたかもXMLであるかのように扱うことが含まれる。この概念の利点の1つは、XMLエンコード化のオーバヘッドが最小限に抑えられることである。仮想XMLのシナリオでは、クエリ言語を使用して、あたかもデータソースがXMLであるかのように非XMLデータソースにわたってクエリを行うことができるという利点があれば望ましい。さらに、実際のデータと仮想XML表示との間のマッピングの忠実性が高いことも望まれる。
仮想XMLを実装するには固有の課題が数多くある。問題の1つは効率である。XMLReader(商標)などの仮想XMLインターフェースを用いて、データソースを単に公開し、その後、XPathNavigator(商標)などの既存のXMLクエリ実装を用いて、そのインターフェースを介してクエリを行うことができる。しかし、作業のすべては、データソースそれ自体によって実行されるのではなく、XMLクエリエンジンで発生する。
例として、SQLServerに具体化されたSQL(structured query language)を介して次のような仮想XMLクエリを考えてみる:
sql:database(“Northwind”/Customer[@ID=‘ALKFI’]/Order
sql:database(“Northwind”/Customer[@ID=‘ALKFI’]/Order
このクエリでは、sql:database(“Northwind”)は、仮想XMLとしてSQLServerのNorthwindデータベースを公開し、そして、XPath/Customer[@ID=‘ALKFI’]/OrderがCustomerエレメントのうちの1つからすべてのOrderエレメントを選択する。一実施例では、次のような試みが行われる可能性がある:
SQLServerMapping map = new SQLServerMapping(“Northwind”);
SQLServerXmlReader Data = new SQLServerXmlReader(map);
XPathNavigator nav = new XpathNavigator(data,“/Customer[@ID=’ALKFI’]/Order;
SQLServerXmlReader Data = new SQLServerXmlReader(map);
XPathNavigator nav = new XpathNavigator(data,“/Customer[@ID=’ALKFI’]/Order;
このアプローチでは、少なくとも2つの欠陥がある。先ず、マッピング全体が、たとえその一部のみがクエリに使用されている場合であっても、XmlReaderによって行われることである。第2の欠点は、SQLServerはXPathNavigatorよりもはるかに効率的に、ID別にCustomersを選択できることである。上記の例では、XPathNavigatorが作業のすべてを行っていることに留意されたい。この課題に対するより良い解決策は、できるだけ多くのクエリをデータソース(ここではSQLServerデータベース)にオフロードすることであろう。しかし、これにはかなりのクエリ解析および書き換えを伴う可能性がある。
仮想XMLを実装するにあたっての別の問題は、XMLデータモデルが基礎となるデータモデルおよびその型システムと常にうまく整合していないことである。基礎となるデータソースの型のすべてをXML型にマップすることがきるであろうが、このプロセスにより忠実性が失われ、非効率的にもなる。さらに、あるシステムにおける型が、別のシステムで明白な等価物を持たない可能性がある。たとえば、XMLでイメージなどのバイナリデータを表すには、XML文字セット(たとえばbase64エンコード)へのコストのかかる変換が必要である。
仮想XMLを介してクエリを行うための以前の試みでは、1つはクエリ、もう1つはマッピングのための2つの異なるデータ構造を構築し、そしてそれらをタンデムにトラバースして、仮想XMLビューを実体化することなく、直接元のデータソースを介して効率的なクエリを生成することによって、この問題に対処していた。このアプローチは、当初はうまく機能するが、クエリおよびマッピング言語が複雑化するにつれて開発が桁外れに難しくなる。クエリまたはマッピングの概念は、直接ターゲットのデータモデルにトランスレートされないことが多く、複雑なビューを備えた複雑なクエリを構成することは、大量のセマンティック解析(semantic analysis)および書き換えを必要とする。
このように、XMLおよび非XMLデータソースを介したXMLクエリおよびビューのための仮想XMLを実施するために、統一表現が求められている。クエリを、複雑なマッピングを介して、クエリを構成するあまり複雑でない問題に実装し、これらのクエリをあまり複雑でないマッピングを介して実行する方法およびシステムが望まれている。本発明は前述のニーズおよび欠点に取り組み、本明細書で表明されるような追加の利点によりこれらを解決する。
本発明は、XML言語のクエリまたはビューの意味を表す、クエリ中間言語(QIL:query intermediate language)と称されるXML中間言語定義を対象とする。QILは、XMLにおけるクエリまたはビューの意味の抽象化であり、クエリを実行するために使用するか、またはターゲット言語においてクエリを実行するための言語トランスレータまたはコンパイラへの入力として使用することができる。QILを使用すると、リレーショナルおよび非リレーショナルの両方のデータソースにわたってクエリすることができる。
本発明の態様によれば、QILは、XML言語照会を受け取り、XML言語照会内の演算ごとに少なくとも1つのノードオブジェクトを定義し、定義されたノードオブジェクトのそれぞれをQIL特有の演算子を使用してトランスレートし、そしてノードグラフの演算子から元の照会のクエリ中間言語表現を生成することによって構築される。
通常、QIL言語は、XMLクエリおよびビューが生成されるXML言語用のフロントエンドコンパイラと、QILジェネレータと、XMLクエリまたはビューのQILセマンティック表現(semantic representation)を使用して1つまたは複数のデータソースにわたって検索することのできるバックエンドエンジンとを含むコンピュータシステムの一部として使用される。クエリされるデータソースは、リレーショナルデータまたは非リレーショナルデータであってよい。
フロントエンドXML言語の例には、XPath、XSLT、XQuery、DML、OPath、および注釈付きスキーマ(Annotated Schema)がある。バックエンドエンジンタイプの例として、言語変換器をクエリするためのQILを挙げることができ、この場合クエリ言語は、いくつかの例を挙げるとSQL、MSIL、およびXQueryなど、数多くのデータ検索言語のうちのいずれであってもよい。
例示的なQIL定義には、XMLクエリおよびビュー式の意味を表すための確定的で明示的な命令を提供するノード定義演算子として使用することのできるXMLInfosetに基づいてうまく定義された演算子のセットが含まれる。この演算子には、たとえば、タプル(tuple)、リテラル、ブール演算子、シーケンス演算子、算術演算子、文字列演算子、値比較演算子、ノード比較演算子、関数定義および呼び出し、XMLナビゲーション、XML構造体、XMLプロパティアクセサ(accessor)、型演算子、言語固有演算子、データ操作、特殊演算子、ならびにデータソース演算子などが含まれることが望ましい。
本発明の追加の機能および利点は、付随する図面を参照して進める以下の例示的な実施形態の詳細な説明から明らかになろう。
前述の概要ならびに以下の好ましい実施形態に関する詳細な説明は、添付の図面と共に読むことでより良く理解される。本発明を例示する目的で本発明の例示的な構造が図面に示されているが、本発明は、開示された特定の方法および手段に限定されるものではない。
(概要)
本発明のXML中間言語は、クエリの意味またはセマンティックを明示的に表す。XML中間言語は、クエリ中間言語(QIL)と称される。
本発明のXML中間言語は、クエリの意味またはセマンティックを明示的に表す。XML中間言語は、クエリ中間言語(QIL)と称される。
XML中間言語QILは、(1)それによってクエリ/ビュー複合(composition)問題がかなり簡略化されるXMLクエリおよびXMLビューの統一表現、ならびに(2)システムのインターフェースをかなり簡略化する「仮想XML」としてすべてのビューを取り扱うこと、を提供する。あらゆる考えられる言語およびデータモデルについて1つのAPIを有する代わりに、すべてのAPIが共通のデータモデル、すなわちXML中間言語QILの演算子を共有することができる。
QILは、よく知られたコンパイラ問題についても取り組んでいる。通常、ある言語で、コンパイラはN個のバックエンドターゲットマシンにわたってM個のフロントエンド言語を実装する必要がある。各2つ1組の組合せが実装される場合、必要な組合せをカバーするにはM×N個のコンパイラ実装が必要になる。しかし、共通の中間表現を導入することでこれら2つが分離されれば、コンパイラの複雑さはM+Nだけにまで低減される。
クエリ中間言語は、このようなコンパイラの複雑さの低減に対応するために、XMLクエリ/ビュー言語とターゲットデータモデル(.NETの実XMLデータ、SQLデータまたはファイルシステムにわたる仮想XMLビュー)との間の抽象化を提供する。
クエリ中間言語は、XMLクエリ言語それら自体のどれよりも表現に富む場合がある。これにより、クエリおよびビューにオリジナル言語だけが使用された場合には可能ではなかったであろう新しい種類の解析および最適化が可能である。
(例示的なコンピューティングデバイス)
図1および以下の考察は、本発明が実施可能な好適なコンピューティング環境の簡単な一般的説明を提供することを意図している。しかし、すべての種類のハンドヘルド、ポータブルおよびその他のコンピューティングデバイス、ならびにコンピューティングオブジェクトが、前述のように本発明に関連した使用に企図されていることが理解されるべきである。このように、以下では汎用コンピュータについて説明するが、これは一例に過ぎず、本発明は、ネットワーク/バスの相互運用性およびやりとりを有するクライアントなど、その他のコンピューティングデバイスで実施することもできる。このように、本発明は、ほんの僅かまたは最小限のクライアントリソースしか関与していないネットワーク化されたホストサービスの環境で実施することができ、これは、たとえばクライアントデバイスがアプライアンス内に配置されたオブジェクト、またはその他のコンピューティングデバイスおよびオブジェクトなど、ネットワーク/バスへの単なるインターフェースとして機能するネットワーク化された環境である。本質において、データを格納することができるか、またはデータを取り出すことのできる場所であればどこでも、本発明による操作にとって望ましいか、または適した環境である。
図1および以下の考察は、本発明が実施可能な好適なコンピューティング環境の簡単な一般的説明を提供することを意図している。しかし、すべての種類のハンドヘルド、ポータブルおよびその他のコンピューティングデバイス、ならびにコンピューティングオブジェクトが、前述のように本発明に関連した使用に企図されていることが理解されるべきである。このように、以下では汎用コンピュータについて説明するが、これは一例に過ぎず、本発明は、ネットワーク/バスの相互運用性およびやりとりを有するクライアントなど、その他のコンピューティングデバイスで実施することもできる。このように、本発明は、ほんの僅かまたは最小限のクライアントリソースしか関与していないネットワーク化されたホストサービスの環境で実施することができ、これは、たとえばクライアントデバイスがアプライアンス内に配置されたオブジェクト、またはその他のコンピューティングデバイスおよびオブジェクトなど、ネットワーク/バスへの単なるインターフェースとして機能するネットワーク化された環境である。本質において、データを格納することができるか、またはデータを取り出すことのできる場所であればどこでも、本発明による操作にとって望ましいか、または適した環境である。
必須ではないが、本発明は、デバイスまたはオブジェクトのためのサービスの開発者による使用のために、オペレーティングシステムを介して実施すること、および/または本発明に従って動作するアプリケーションソフトウェア内に含めることができる。ソフトウェアは、クライアントワークステーション、サーバ、またはその他のデバイスなど、1つまたは複数のコンピュータによって実行されている、プログラムモジュールなどのコンピュータ実行可能命令の一般的な関連で説明することができる。一般に、プログラムモジュールには、特定のタスクを行うかまたは特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。一般に、プログラムモジュールの機能は、所望に応じて、様々な実施形態で組合せるか、または分散させることができる。さらに当業者であれば、本発明が他のコンピュータ構成でも実施可能であることを理解されよう。本発明と共に使用するのに適する可能性のあるその他のよく知られたコンピューティングシステム、環境、および/または構成には、パーソナルコンピュータ(PC)、現金自動預払機、サーバコンピュータ、ハンドヘルドもしくはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、プログラム可能な民生用電子機器、ネットワークPC、アプライアンス、照明、環境制御要素、ミニコンピュータ、メインフレームコンピュータなどが含まれるが、これらに限定されない。本発明は、通信ネットワーク/バスまたはその他のデータ伝送媒体を介してリンクされたリモート処理デバイスによってタスクが実行される分散コンピューティング環境で実施することもできる。分散コンピューティング環境では、メモリ記憶デバイスを含むローカルおよびリモートの両方のコンピュータ記憶媒体に、プログラムモジュールを配置することが可能であり、クライアントノードはサーバノードとして振る舞うことがある。
図1は、本発明が実施可能な好適なコンピューティングシステム環境100の一例を示しているが、上記で明らかにしたように、コンピューティングシステム環境100は好適なコンピューティング環境の一例に過ぎず、本発明の用途または機能の範囲についていかなる限定を示唆するものではない。コンピューティング環境100は、例示的なオペレーティング環境100に示された構成要素のいずれか1つまたはそれらの組合せに関して、どのような依存性または要件を有するものと解釈されるべきではない。
図1を参照すると、本発明を実施するための例示的なシステムには、コンピュータシステム110の形態の汎用コンピューティングデバイスが含まれる。コンピュータシステム110の構成要素は、処理ユニット120、システムメモリ130、および、システムメモリを含む様々なシステム構成要素を処理ユニット120に結合するシステムバス121を含むことができるが、これらに限定されるものではない。システムバス121は、メモリバスまたはメモリコントローラ、周辺バス、および様々なバスアーキテクチャのうちのいずれかを使用するローカルバスを含む、いくつかのタイプのバス構造のうちのいずれかであってよい。限定ではなく、例として、このようなアーキテクチャには、ISA(Industry Standard Architecture)バス、MCA(Micro Channel Architecture)バス、EISA(Enhanced ISA)バス、VESA(Video Electronics Standards Association)ローカルバス、およびPCI(Peripheral Component Interconnect)バス(メザニンバスとしても知られている)が含まれる。
コンピュータシステム110は、通常、様々なコンピュータ読取り可能媒体を含む。コンピュータ読取り可能媒体は、コンピュータシステム110によってアクセスすることができる任意の利用可能な媒体であってよく、揮発性および不揮発性の媒体、取外し可および取外し不可の媒体の両方を含む。限定ではなく、例として、コンピュータ読取り可能媒体は、コンピュータ記憶媒体および通信媒体を含むことがある。コンピュータ記憶媒体は、コンピュータ読取り可能命令、データ構造、プログラムモジュール、またはその他のデータなど、情報を格納するための任意の方法または技術で実施された、揮発性および不揮発性、取外し可および取外し不可の媒体を含む。コンピュータ記憶媒体は、RAM(Random Access Memory)、ROM(Read Only Memory)、EEPROM(Electrically Erasable Programmable Read Only Memory)、フラッシュメモリもしくはその他のメモリ技術、CDROM(Compact Disk Read Only Memory)、CDRW(compact disk−rewritable)、DVD(digital versatile disks)もしくはその他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくはその他の磁気記憶デバイス、または所望の情報を格納するために使用することができ、コンピュータシステム110によってアクセスすることができる任意のその他の媒体を含むが、これらに限定されない。通信媒体は、通常、コンピュータ読取り可能命令、データ構造、プログラムモジュール、または他のデータを、搬送波または他のトランスポートメカニズムなどの変調データ信号で具体化し、任意の情報配信媒体を含む。「変調データ信号」という用語は、情報を信号内に符号化するような方法でその特徴のうちの1つまたは複数を設定または変更した信号を意味する。限定ではなく、例として、通信媒体には、有線ネットワークまたは直接配線ド接続などの有線媒体、ならびに、音響、RF、赤外線およびその他の無線媒体などの無線媒体が含まれる。上記のいずれかの組合せも、コンピュータ読取り可能媒体の範囲に含まれるものとする。
システムメモリ130は、読取り専用メモリ(ROM)131およびランダムアクセスメモリ(RAM)132などの、揮発性および/または不揮発性メモリの形態のコンピュータ記憶媒体を含む。起動時などにコンピュータシステム110内の要素間での情報の転送を助ける基本ルーチンが入っている基本入出力システム(BIOS)133は、通常はROM131に格納される。RAM132は、通常、処理ユニット120によって即時にアクセス可能であり、そして/または現在操作中であるデータおよび/またはプログラムモジュールを収容する。限定ではなく、例として、図1には、オペレーティングシステム134、アプリケーションプログラム135、他のプログラムモジュール136、およびプログラムデータ137が示されている。
コンピュータシステム110は、他の取外し可/取外し不可の揮発性/不揮発性コンピュータ記憶媒体も含むことができる。単なる例として、図1には、取外し不可の不揮発性磁気媒体との読取りまたは書込みを行うハードディスクドライブ141と、取外し可の不揮発性磁気ディスク152との読取りまたは書込みを行う磁気ディスクドライブ151と、CDROM、CDRWまたはその他の光媒体などの、取外し可の不揮発性光ディスク156との読取りまたは書込みを行う光ディスクドライブ155とが示されている。例示的なオペレーティング環境で使用することができる他の取外し可/取外し不可の揮発性/不揮発性コンピュータ記憶媒体には、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、ソリッドステートRAM、ソリッドステートROMなどが含まれるが、これらに限定されない。ハードディスクドライブ141は、通常インターフェース140などの取外し不可のメモリインターフェースを介してシステムバス121に接続され、磁気ディスクドライブ151および光ディスクドライブ155は、通常インターフェース150などの取外し可のメモリインターフェースによってシステムバス121に接続される。
上記で論じ図1に示したドライブおよび関連するコンピュータ記憶媒体は、コンピュータシステム110のためのコンピュータ読取り可能命令、データ構造、プログラムモジュールおよび他のデータの記憶機能を提供する。図1では、たとえば、ハードディスクドライブ141は、オペレーティングシステム144、アプリケーションプログラム145、他のプログラムモジュール146、およびプログラムデータ147を格納するものとして示されている。これらのコンポーネントは、オペレーティングシステム134、アプリケーションプログラム135、他のプログラムモジュール136、およびプログラムデータ137と同じものであっても異なるものであってもよいことに留意されたい。オペレーティングシステム144、アプリケーションプログラム145、他のプログラムモジュール146、およびプログラムデータ147には、少なくともそれらが異なるコピーであることを示すために、ここでは異なる番号が与えられている。ユーザは、キーボード162および、一般にマウス、トラックボール、またはタッチパッドと呼ばれるポインティングデバイス161などの入力デバイスを介して、コンピュータシステム110にコマンドおよび情報を入力することができる。他の入力デバイス(図示せず)には、マイクロフォン、ジョイスティック、ゲームパッド、衛星アンテナ、スキャナ、などが含まれる。これらおよび他の入力デバイスは、システムバス121に結合されているユーザ入力インターフェース160を介して処理ユニット120に接続されることが多いが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス(USB)などの他のインターフェースおよびバス構造によって接続することも可能である。モニタ191または他のタイプのディスプレイデバイスも、ビデオインターフェース190などのインターフェースを介してシステムバス121に接続され、これらはビデオメモリ(図示せず)と通信することもできる。モニタ191に加えて、コンピュータシステムは、スピーカ197およびプリンタ196などの他の周辺出力デバイスを含むことも可能であり、これらは出力周辺インターフェース195を介して接続可能である。
コンピュータシステム110は、リモートコンピュータ180などの1つまたは複数のリモートコンピュータへの論理接続を使用してネットワーク環境または分散環境で動作可能である。リモートコンピュータ180は、パーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ピアデバイスまたは他の共通ネットワークノードであってよく、通常は、コンピュータシステム110に関して上記で述べた多くまたはすべての要素を含むが、図1にはメモリ記憶デバイス181のみが示されている。図1に示した論理接続には、ローカルエリアネットワーク(LAN)171およびワイドエリアネットワーク(WAN)173が含まれているが、他のネットワーク/バスを含むこともできる。このようなネットワーキング環境は、家庭、オフィス、企業規模のコンピュータネットワーク、イントラネット、およびインターネットで一般に普及している。
LANネットワーキング環境で使用される場合、コンピュータシステム110は、ネットワークインターフェースまたはアダプタ170を介してLAN171に接続される。WANネットワーキング環境で使用される場合、コンピュータシステム110は、通常、インターネットなどのWAN173を介した通信を確立するためのモデム172または他の手段を含む。モデム172は内蔵型でも外付けでもよく、ユーザ入力インターフェース160または他の適切なメカニズムを介してシステムバス121に接続することができる。ネットワーク環境では、コンピュータシステム110に関して示したプログラムモジュールまたはその一部を、リモートメモリ記憶デバイスに格納することができる。限定ではなく、例として、図1には、リモートアプリケーションプログラム185がメモリデバイス181上にあるものとして示されている。図示されたネットワーク接続は例示的なものであり、コンピュータ間の通信リンクを確立する他の手段が使用可能であることを理解されよう。
パーソナルコンピューティングおよびインターネットの収斂に鑑みて、これまでに様々な分散コンピューティングフレームワークが開発され、また現在も開発されている。個人および法人のユーザにも同様に、アプリケーションおよびコンピューティングデバイスのためのシームレスに相互運用可能なWeb使用可能なインターフェースが提供されており、コンピューティング活動はますますWebブラウザまたはネットワーク指向のものとなりつつある。
たとえば、MICROSOFT(登録商標)の.NETプラットフォームは、サーバ、Webベースのデータストレージなどのビルディングブロックサービス、およびダウンロード可能なデバイスソフトウェアが含まれる。本明細書では、例示的な実施形態についてコンピューティングデバイス上に常駐するソフトウェアに関連して説明するが、本発明の1つまたは複数の部分は、オペレーティングシステム、アプリケーションプログラムインターフェース(API)、またはコプロセッサ、ディスプレイデバイス、および要求元オブジェクトのうちのいずれかの間の「媒介者(middle man)」オブジェクトを介して実施することも可能であり、その結果、本発明に従った操作は、.NETの言語およびサービスのすべてによって実行するか、サポートするか、またはアクセスすることが可能であり、さらに他の分散コンピューティングフレームワーク内でも同様である。
(例示的な実施形態)
図2は、本発明を具体化しているシステムアーキテクチャを示すブロック図である。このアーキテクチャは、複数のデータソースに関して効果的なXMLクエリのためにデータを受け入れ、コンパイルし、解釈し、ノーマライズし(normalize)、アクセスするのに必要な基本ブロックを表している。複数のフロントエンド言語コンパイラ210は、XMLまたはXML関連の標準に適合するものと理解することができる。これらのフロントエンドコンパイラ210は、XMLクエリ、XMLビュー、または他の関連するXML言語照会を生成してコンパイル済みのXMLコード215を生成する。
図2は、本発明を具体化しているシステムアーキテクチャを示すブロック図である。このアーキテクチャは、複数のデータソースに関して効果的なXMLクエリのためにデータを受け入れ、コンパイルし、解釈し、ノーマライズし(normalize)、アクセスするのに必要な基本ブロックを表している。複数のフロントエンド言語コンパイラ210は、XMLまたはXML関連の標準に適合するものと理解することができる。これらのフロントエンドコンパイラ210は、XMLクエリ、XMLビュー、または他の関連するXML言語照会を生成してコンパイル済みのXMLコード215を生成する。
中間言語ジェネレータ220は、入力されたコンパイル済みXMLコードの中間言語表現225を生成する。中間言語表現をアーキテクチャ200の中の機能230によってノーマライズし、複数のデータソースにまたがってユーティリティを提供することができる。ノーマライザ230を使用して、効率的な中間言語表現235を生成するように中間言語を最適化することもできる。中間言語ノーマライザは、図2のアーキテクチャ200にとって厳密に要求されるものではないことに留意されたい。
中間コード表現を介してアクセス可能な多様なデータソース260をサポートするために、複数のバックエンドクエリエンジン240があってよい。サポートされた各データソース内のデータのモデルに適合するデータソース上で効率的に機能するように、各バックエンドエンジンを構築することができる。バックエンドエンジン240は、中間言語のXML式に対応するターゲットのデータソースクエリを生成する。バックエンドクエリエンジン240は、所与のクエリを実行することができるクエリ実行エンジン250に適切なマシンコード245を渡す。クエリ実行エンジン250は、通常、1つまたは複数のデータソース260とアクセスし(265)、その結果エンジンはクエリ結果270を出力する(255)ことができる。
1つまたは複数の当初のクエリを、異なるタイプの1つまたは複数の異なるデータソースにわたって使用して、所望のクエリ結果を生成することができる。
図3は、本発明に従った例示的な中間言語ジェネレータ(たとえば、図2の要素220)の機能ブロック図である。図3は、中間言語(IL)ジェネレータ220に送り込む複数のM個までのXML言語コンパイラソース210a〜dがあることを表現している。これらのXML言語コンパイラは、一般に、何らかのタイプのXML言語に対するスキャン、構文解析、セマンティック解析、および変換を伴う。このような言語の典型的な例は、XPath、XMLスタイルシート言語(XSL)、XSLT、XMLクエリ言語(XQuery)のW3C標準、ならびに、XQuery DML(商標)、OPath(商標)、およびWPath(商標)などのMicrosoft(登録商標)クエリ言語である。XMLビューコンパイラも存在可能であり、XQuery(商標)のW3C XML標準ビュー、および、SQLXML(商標)などのMicrosoft(登録商標)注釈付きスキーマを含むことができる。本発明の中間言語表現技法は、クエリおよびビューのための他のXML言語にも同様に適合可能である。総称的に、XMLに適合するクエリおよびビューのすべてを、XML言語照会と呼ぶことができる。
図3に示された中間言語ジェネレータ220は2つの主要部分に分けられ、1つは演算識別子310、もう1つはノード演算子プロセッサ320である。総合して、XML中間言語ジェネレータ220のセマンティック解釈機能を表している。演算識別子310は、コンパイラ210a〜dからのオリジナルXMLクエリまたはビュー内で演算を識別するタスクを実行する。識別された演算は、演算識別子310によって構築されたグラフ構造中のノードポイントにマップされる。ノード演算子プロセッサ320は、XML IL固有の演算子を構築されたグラフノード中にマップして、クエリのグラフ表現を完成する。ノード演算子プロセッサ320は、次に演算子をオリジナルのクエリまたはビューのXML中間言語表現にデコードする。この出力は、その後1つまたは複数のバックエンドエンジン240a〜dに渡すことができる。
N個までのバックエンドエンジン240a〜dを、中間言語表現を使用して複数のデータソースにわたってクエリを実行するためにアーキテクチャに追加することができる。クエリおよびビュー言語と複数のターゲットモデルとの間の中間言語抽象化によって、Microsoft(登録商標).NET(商標)などの実XMLデータおよび仮想XMLデータを、リレーショナル(たとえばSQL)および非リレーショナル(たとえばフラットファイル)の両方のデータにわたって使用することができるようになる。
図4は、例示的な中間言語ジェネレータのセマンティック解釈機能を表す本発明の実施形態の流れ図である。XMLクエリまたはビューは、ステップ410で中間言語ジェネレータによって受け取られる。受け取られたクエリは、ステップ420で識別機能に渡され(415)、先ず受け取られたXMLクエリまたはビューの中の各XML演算に対応するグラフノードを識別および生成する。ノードオブジェクトが識別されると、ステップ430でトランスレーション機能に渡される。トランスレーション機能は、識別されたオブジェクトを中間言語演算子に割り当てる。通常では、各ノードにつき1つの中間言語演算子がある。今は中間言語演算子であるトランスレートされたノードオブジェクトは、ステップ440で中間言語構成エンジンに渡される(435)。これにより、中間言語演算子が構築済み中間言語225を形成して明示的XML部分にマップされる。構築済み中間言語は、たとえば図2のアイテム230に示されるような中間言語ノーマライザに出力するか、たとえば図3のアイテム240a〜dに示されるような1つまたは複数のバックエンドエンジンに出力することができる。
クエリ中間言語の属性および機能
XML中間言語は、XMLクエリまたはビューの表現である。そのため、XMLクエリの意味の明示的表現なので、クエリ中間言語(QIL)と呼ぶことができる。QILは、XMLクエリおよびビューの言語コンパイラにわたって共通のセマンティック表現とみなすことができる。QILは、普通の抽象シンタックスツリー(AST)と同様であるが、QILはクエリのシンタックスではなくセマンティックまたは意味を捉えるという点で異なる。別の相違点は、QILはグラフ構造であり、ASTのようなツリー構造ではないことである。
XML中間言語は、XMLクエリまたはビューの表現である。そのため、XMLクエリの意味の明示的表現なので、クエリ中間言語(QIL)と呼ぶことができる。QILは、XMLクエリおよびビューの言語コンパイラにわたって共通のセマンティック表現とみなすことができる。QILは、普通の抽象シンタックスツリー(AST)と同様であるが、QILはクエリのシンタックスではなくセマンティックまたは意味を捉えるという点で異なる。別の相違点は、QILはグラフ構造であり、ASTのようなツリー構造ではないことである。
QILは、様々な異なるターゲットデータソース(リレーショナルおよび非リレーショナルデータなど)にわたって、複数の異なるXMLクエリ言語およびビュー定義言語(XPath、XSLT、XQuery、DMLおよび注釈付きスキーマなど)の抽象化を可能にする。そのためQILにより、共通構造が適合性のあるXML言語のすべてをサポートできるようにする。どの演算も明示的および確定的であり、これによってQILは冗長になるが、QILを使用するバックエンドエンジンから、QILの生成を支援するフロントエンドコンパイラを切り離す。
クエリ中間言語は、任意のデータソースを仮想XMLとしてモデル化する方法も提供する。データソースはXMLデータモデルを介して直接公開することができるか、あるいはQILユーザは先ずクエリによって生成された中間言語を解析し、クエリを最もうまく分散する方法を決定することができる。たとえば、いくつかのクエリ結果では、一部の演算子をそのデータソースに好適なクエリエンジンに直ぐに追い込み(push into)、このようにクエリを論理的な方法で区分することのできることを示すことができる。QILにより、そのクエリタスクを最も効果的に行うことができるエンジンにクエリタスクを追い込むことができるようになる。
クエリ中間言語は、オリジナルのクエリを表すグラフ構造のノードと共に、それ自体の演算子を利用する。これらの演算子により、新しい種類のクエリ最適化、クエリ書き換え、および以前には対応するデータソースで実現できなかった他の解析が可能になる。ほとんどのQIL演算子は複数の言語にまたがって共通であり、一部は特定のXMLクエリ言語に固有である。どのXML言語にもそれ自体の暗黙の規則および特殊なケースがあるが、クエリ中間言語はこれらの意味を明示的および確定的にエンコードする。
クエリ中間言語は、ノードオブジェクトのグラフである。この中間言語は、XML中間言語機能を定義するゼロ以上の追加のグラフを伴って、主要なクエリである、多くても1つのルートとなるグラフからなる。メモリ内のグラフを表す方法は数多くあるが、ノードオブジェクトのネットワークを使用することは実施形態の1つである。QILは、ノード型ごとに1つのクラスを定義するのではなく、多くの異なるノード型にまたがって共用されるクラスを用いる。
QILは、たとえオリジナルのクエリ言語がそうでなくとも、強く型付けされて(strongly−typed)いる。QILは、XMLデータにわたるXMLクエリ、リレーショナルデータのXMLビューにわたるXMLクエリ、リレーショナルデータにわたるXSLT、ならびに、テキストファイル、スプレッドシート、および非リレーショナルデータベースなどの非リレーショナルデータにわたるXMLクエリをサポートすることができる。QILを使用して、複数のデータソースをまたがって異種の分散化されたクエリを行うことも、そしてXMLと仮想XMLデータソースとを統合することもできる。
QILはクエリの意味を表すものであり、そのため、論理クエリプランであり、物理クエリプランではない。QILに対する複数の実行戦略がある。言語を直接実行し、QILグラフ全体にわたって左の深さ優先の様式(left−depth−first fashion)で繰り返すことができる。あるいは、クエリ中間言語を実行のためにSQLなどの別の言語にトランスレートすることができる。さらに別の方法では、QILを渡して解析し、あるエンジンによる実行のために特定の部分を抽出し、必要に応じてグラフを修正し、別の既存のエンジンによる実行のために残りをそのままにしておく。
QILは強く型付けされている。QILには詳細な型システムがあり、この型システムは、その一部を本明細書で説明する例示的なQIL演算子を参照するテーブルに反映されている。特に注記されない限り、記述は静的な型の式を示し、式が評価される動的な型の値ではない。
DocumentOrderおよびDMLのようないくつかの選択された「演算子」を除き、あらゆるQilNode式は何らかの基数(cardinality)のシーケンスである。この基数は、特に指示のない限り、常にNone(未知(unknown))、Zero(空)、One(シングルトン)、More(2以上)、またはこれらの組合せのうちの1つである。
シーケンスはアイテムで構成されており、これらのアイテムは異種のシーケンスが許容されるので、原子値(atomic value)もしくはノード、またはその両方であってよい。原子値は、さらにInt32、String、およびDateTimeなどの型のセットに分類される。ほとんどの部分で、QILの原子型はXQuery原子型のサブセットであり、実際的な実装の選択肢を反映している。式は原子(すなわちノードまたはDMLのような選択された演算子型)でないときは、原子型Noneを有する。
例示的なQIL演算子
好ましくは、QILの各演算子は一意の対応するNodeTypeと、それを表すクラスとを有する。本来、演算子はQILグラフ構造のノード中に存在する。結果として、ノードに割り当てられた演算子はノード型を有し、演算子はノード型の関数となる。クラス毎に多くのノード型があるが、ノード型毎には1つのクラスしかない。各演算子は、単一の明示的および確定的な意味を有することが望ましい。一般に、この意味は、そのオペランドの型またはそれが使用されるコンテキストには非依存である。それゆえ、各演算子はコンテキストフリーであるとみなすことができる。各演算子は、本明細書に記載されたQIL型システムに従って強く型付けされている。
好ましくは、QILの各演算子は一意の対応するNodeTypeと、それを表すクラスとを有する。本来、演算子はQILグラフ構造のノード中に存在する。結果として、ノードに割り当てられた演算子はノード型を有し、演算子はノード型の関数となる。クラス毎に多くのノード型があるが、ノード型毎には1つのクラスしかない。各演算子は、単一の明示的および確定的な意味を有することが望ましい。一般に、この意味は、そのオペランドの型またはそれが使用されるコンテキストには非依存である。それゆえ、各演算子はコンテキストフリーであるとみなすことができる。各演算子は、本明細書に記載されたQIL型システムに従って強く型付けされている。
本明細書では、各演算子ノード型に対していくつかの例示的プロパティを示す表が与えられている。特に注記のない限り、オペランドがヌルであることはない。QIL演算子は、次の例示的なグループに類別することができる。これらは、特殊演算子(エラー、無演算(nop)、未知)、データソース、リテラル(スカラ定数)、ブール演算子、シーケンス演算子、算術演算子、文字列演算子、値比較演算子、ノード比較演算子、タプルスペース(ソート化を含む)、関数定義および呼び出し、XMLナビゲーション、XML構造体、XMLプロパティアクセサ、型演算子、XPathの言語固有演算子、XSLT、XQuery、およびデータ操作言語(DML)である。
タプルスペース演算子
QILにおける1つの例示的な演算子がタプルである。タプル演算子はQILで頻繁に使用することができ、ネストされた様式で使用することができる。この演算子はTupleノード型(クラスQIL Tuple)で表され、正確に3つの子ノードを常時有することが望ましく、これらは、タプルスペースを構築する反復子のリスト、タプルスペースをフィルタするwhere節、およびタプルスペースの結果を生成するreturn節である。
QILにおける1つの例示的な演算子がタプルである。タプル演算子はQILで頻繁に使用することができ、ネストされた様式で使用することができる。この演算子はTupleノード型(クラスQIL Tuple)で表され、正確に3つの子ノードを常時有することが望ましく、これらは、タプルスペースを構築する反復子のリスト、タプルスペースをフィルタするwhere節、およびタプルスペースの結果を生成するreturn節である。
ネストされたタプルを視覚化する1つの方法は、セルそれら自体が表を収容する、行および列の表をイメージすることである。6面のさいころのペアを例に取ってみる。可能な組合せは36通りあり、その一部を以下の表1に示す。
このタプルスペースには3つの列がある。最初の2つはそれぞれ第1および第2のさいころに対応する。第3の列は、結果、すなわちこの場合は値のペアを保持するために使用される。このタプルスペースには、2つのさいころを振った結果として得られる区別可能な組合せの数に対応する36の行がある。以下は、セット(1,2,3,4,5,6)とそれ自体、たとえば次のXQueryで、結合した結果として得られるタプルスペースである。
for $die1 in (1,2,3,4,5,6),
$die2 in (1,2,3,4,5,6)
return ($die1,$die2)
$die2 in (1,2,3,4,5,6)
return ($die1,$die2)
このXQueryは、2つのセットのクロス乗積を計算し、そのクロス乗積の各メンバについて、シーケンス、すなわちさいころの値のペアを戻す。結果は、リストの順序付けされたリストとなる。
((1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(2,1),(2,2),...)
しかし、XQueryはリストのリストをそれらすべての連結として扱うため、これは実際には単なる平坦なリストとなる。
(1,1,1,2,1,3,1,4,1,5,1,6,2,1,2,2,...)
(1,1,1,2,1,3,1,4,1,5,1,6,2,1,2,2,...)
クエリは、次のようにも書くことができることに留意されたい。
for $die1 in (1,2,3,4,5,6),
for $die2 in (1,2,3,4,5,6)
let $result: =($die1,$die2)
return $result
for $die1 in (1,2,3,4,5,6),
for $die2 in (1,2,3,4,5,6)
let $result: =($die1,$die2)
return $result
この形では、各XQuery変数はタプルスペースの中の正確に1つの列に対応する。これは、QILの概念でもある。QIL Tupleノードまたは演算子の中の各反復子は、タプルスペースの1つの列に対応する。return節は、上記でLETを使用して変数割当てとして書かれた、追加の列に寄与する。
Tupleノードを実行した結果が結果の順序付けされたリストであり、結果それら自体がリストである場合、前と同じように共に連結(平坦化)される。XQuery同様、QILはリストとリストのリストとを区別しない。
where節は、いくつかの行を削除することによって、タプルスペースをフィルタする機会を提供する。where節は、タプルスペース上で他の影響がないことが望ましい。上記のすべての例において、where節は、あらゆる行が受け入れられる(フィルタが行われていない)ことを意味する、単一のtrueノードからなる。しかし、この結果は、以下のように、合計が7になる6通りのさいころの目に限られる場合があり、
for $die1 in (1,2,3,4,5,6),
for $die2 in (1,2,3,4,5,6)
let $result: =($die1,$die2)
where $die1 + $die2 = 7
return $result
これによって、表2に記載されたフィルタされたタプルスペースが作成される。
for $die1 in (1,2,3,4,5,6),
for $die2 in (1,2,3,4,5,6)
let $result: =($die1,$die2)
where $die1 + $die2 = 7
return $result
これによって、表2に記載されたフィルタされたタプルスペースが作成される。
このXQueryの例は、以下のクエリ中間言語表現で表すことが可能である。
注:これはQILデータ構造の単なるXML表現である。
注:これはQILデータ構造の単なるXML表現である。
反復子ノード(For、Let)は反復子リストに導入され、後にクエリで再度参照される。それらを記号的に参照するために、一意のid属性が与えられ、後にこれらの名前で参照されることがある。これらのid文字列は、実際にはグラフ中に存在せず、オリジナルのクエリとは関係がなく、グラフをXMLとして印刷するときにのみ生成されることに留意されたい。好ましくは、これらの参照はオリジナルのノードインスタンスに対するメモリポインタである。
結果的に、このQILグラフには22個の一意のノードと、太字で強調表示された5つの参照($cの定義の2つ、Tupleのwhere節の2つ、そしてTupleのreturn節の1つ)が含まれる。
別の例として、次のXQueryについて考えてみる。
for $i in document(‘foo.xml’)/x/y
return<z/>
これは次のXQueryと等価であり、
for $a in document(‘foo.xml’)
return
for $b in $i/x
return
for $c in $j/y
return<z/>
どちらも、以下のQIL式で表すことができる。
for $i in document(‘foo.xml’)/x/y
return<z/>
これは次のXQueryと等価であり、
for $a in document(‘foo.xml’)
return
for $b in $i/x
return
for $c in $j/y
return<z/>
どちらも、以下のQIL式で表すことができる。
<Tuple>
<For id = “$a”>
<DataSource>
<String>foo.xml</String>
<DataSource>
</For>
<True/><!−−where節なし−−>
<Tuple>
<For id = “$b”/>
</Content>
<For id = “$a”/>
</Content>
</For>
<Eq>
<NameOf>
<For id = “$b”/>
</NameOf>
<QName local−name = “x”/>
</Eq>
<Tuple>
<For id = “$c”>
<Content>
<For id = “$b”>
</Content>
</For>
<Eq>
<NameOf>
<For id = “$c”/>
</NameOf>
<QName local−name+“y”/>
</Eq>
<ElementCtor>
<QName local−name = “z”/>
<List/>
</ElementCtor>
</Tuple>
</Tuple>
<For id = “$a”>
<DataSource>
<String>foo.xml</String>
<DataSource>
</For>
<True/><!−−where節なし−−>
<Tuple>
<For id = “$b”/>
</Content>
<For id = “$a”/>
</Content>
</For>
<Eq>
<NameOf>
<For id = “$b”/>
</NameOf>
<QName local−name = “x”/>
</Eq>
<Tuple>
<For id = “$c”>
<Content>
<For id = “$b”>
</Content>
</For>
<Eq>
<NameOf>
<For id = “$c”/>
</NameOf>
<QName local−name+“y”/>
</Eq>
<ElementCtor>
<QName local−name = “z”/>
<List/>
</ElementCtor>
</Tuple>
</Tuple>
オリジナル文書foo.xmlが以下のXMLからなる場合
<x id = “x1”>
<y id = “y1”/>
<y id = “y2”/>
</x>
<x id = “x2”>
<x id = “y3”/>
<x id = “y4”/>
<x id = “y5”/>
</x>
<x id = “x1”>
<y id = “y1”/>
<y id = “y2”/>
</x>
<x id = “x2”>
<x id = “y3”/>
<x id = “y4”/>
<x id = “y5”/>
</x>
次にこのQILおよびXQuery例は、表3に示されたネスとされたタプルスペースを生成する。
このデータモデル例はリストのリストを含まないので、N列を備えた表が入っている列はそれらのN列によって、必要に応じて行の拡張およびコピーして置き換えることができる。それゆえ、このタプルスペースは、一連のネストされていない演算子を通じて、表4の「平坦化された」タプルスペースと等価である。
QILを実行することにより、期待される文書順序でx/yにわたって反復される、5つの<z/>エレメントが作成される。
タプルスペース演算子としてグループ化された演算子のセットについて、表5に関して説明する。Tupleは変数バインディング(割当てまたは反復)を導入し、これをwhere節でフィルタして、結果式を戻す。戻された結果はそれ自体Tupleであるとき、クロス乗積または結合となる。
反復子ノードには、FORおよびLETの2種類がある。LETは単なる変数割当てであり、基数1を有する。FORはシーケンスにわたって繰り返され、順に各メンバとバインディングする。それゆえFORの基数はそのバインディングの長さである。タプルスペースの基数は、多くてもその反復子の基数にそのreturn節の基数を掛けたものである。タプルスペースの中の各アイテムについてwhere節が評価され、trueの場合、return節が評価され、戻される。タプルの結果は、すべてのこれらの戻り値(お可能性として空のシーケンス)のシーケンス連結である。タプルに導入されたとき、各反復子はwhere節およびreturn節のすべてについての範囲内にある。LET反復子はその引数のノード識別を保持する。この複雑さを除き、QILは参照上トランスペアレントである(LETはそのバインディングによって置き換えられるか、またはその逆が可能であることを意味する)。
POSITIONOF演算子は反復子に適用することができる。これは、そのバインディング内の反復子の現在位置を決定する。この位置は1を基準とするインデックスである。このPOSITIONOF a LET反復子は常に1である。POSITIONOF a FOR反復子は、1からその長さまでの間である。
リテラル演算子
リテラル演算子としてグループ化された演算子のセットについて、下記および表6で説明する。リテラルは定数を表す。単一クラスQILLiteralは、すべてのリテラルタイプを表す(QILNodeそれ自体を使用して表されるBoolean、およびQILNameを使用して表されるNameを除く)。リテラル値はオブジェクトとして格納される。
リテラル演算子としてグループ化された演算子のセットについて、下記および表6で説明する。リテラルは定数を表す。単一クラスQILLiteralは、すべてのリテラルタイプを表す(QILNodeそれ自体を使用して表されるBoolean、およびQILNameを使用して表されるNameを除く)。リテラル値はオブジェクトとして格納される。
ブール演算子
ブール演算子としてグループ化された演算子のセットについて、下記および表7で説明する。QILは、従来の2つの値を持つ論理演算子、AND、OR、およびNOT、ならびにCONDITIONAL(含意)をサポートすることが望ましい。汎用(universal)および存在(existential)の修飾(qualification)はIsEmptyとTupleの組合せを通じて達成されるのが好ましい。
ブール演算子としてグループ化された演算子のセットについて、下記および表7で説明する。QILは、従来の2つの値を持つ論理演算子、AND、OR、およびNOT、ならびにCONDITIONAL(含意)をサポートすることが望ましい。汎用(universal)および存在(existential)の修飾(qualification)はIsEmptyとTupleの組合せを通じて達成されるのが好ましい。
QILは、論理積正規形、論理和正規形、および一種のスイッチのための便利な演算子をサポートしている。ANDおよびORの場合、どちらのオペランドもブールシングルトン(singleton)であることが望ましい。NOT演算子のオペランドは、ブールシングルトンであることが望ましい。
演算子CONDITIONALの場合、条件式(QILTernaryノードの左プロパティ)はブールシングルトンであることが望ましく、true/falseブランチ(それぞれ中央および右プロパティ)はいずれの型でもよい。elseブランチはオプションではない。しかし通常は、空のリストを使用して「dummy」ブランチの効果を得ることができる。式全体の型は、true/falseブランチ型の共用体(union)である。
オペランドにBooleanを強制するために、アプリケーションの必要性に応じてXQUERYEBVまたはCONVERTなどのオペレータを使用することができる。
シーケンス演算子
シーケンス演算子としてグループ化された演算子のセットについて、下記および表8で説明する。どのQIL式も何らかの基数の順序付けされたシーケンスであることが好ましい。シーケンスで機能するため、XQueryはいくつかの演算子および統合機能を定義する。LIST演算子は、そのメンバに関してシーケンス連結を行う。空リストではほとんどの型がNoneに設定されるが、そうでない場合、リストの型はそのメンバのすべての型の共用体である。LISTは、識別による重複ノードまたは重複値を除去しない。シーケンスから重複を除去するためには、区別演算子(DISTINCT、DISTINCTBYVALUE)のうちの1つを明示的に適用することが可能であり、そうでなければSET演算子を使用することができる。
シーケンス演算子としてグループ化された演算子のセットについて、下記および表8で説明する。どのQIL式も何らかの基数の順序付けされたシーケンスであることが好ましい。シーケンスで機能するため、XQueryはいくつかの演算子および統合機能を定義する。LIST演算子は、そのメンバに関してシーケンス連結を行う。空リストではほとんどの型がNoneに設定されるが、そうでない場合、リストの型はそのメンバのすべての型の共用体である。LISTは、識別による重複ノードまたは重複値を除去しない。シーケンスから重複を除去するためには、区別演算子(DISTINCT、DISTINCTBYVALUE)のうちの1つを明示的に適用することが可能であり、そうでなければSET演算子を使用することができる。
RANGEは、XQuery TO演算子と同様に、左バウンドと右バウンドの間に整数の連続するシーケンスを構築する。右バウンドが左バウンドよりも小さい場合、シーケンスは減少している。それらが等しい場合、シーケンスは単一のメンバ(その値)を有する。
NTIMESはバイナリ演算子であり、その左オペランドは任意の型でよく、右オペランドは負でない整数のシングルトンであることが望ましい。左オペランドをN回含むシーケンスを生成し、ここでNは右オペランドの値である。これはオリジナルをコピーしないことに留意されたい。(NTIMES left right)は、式(Tuple(For(Range 1 Right))(True)(Left))と同等である。
DISTINCTは、リストから(識別により)重複ノードを除去する。ノードが除去される順序は、実装により定義されるのが好ましい。
DISTINCTBYVALUEは、シーケンスにわたって、その第1の引数としてFOR反復子を取り、これは次に参照のために第2の引数の範囲内である。第2の引数は、重複を除去する際に使用する値の計算方法を指定する。
UNION、INTERSECTION、およびDIFFERENCE演算子は、ノード識別を使用して対応するセット演算子を実行して、重複を除去する。それらのオペランドはノードシーケンスであってよい。セット差は非対称であり、2つのシーケンスAおよびBの対称差について、それらの2つ1組の差のUNIONである(Union(Difference A B)(Difference B A))か、あるいは同等に、それらのINTERSECTIONを有するそれらUNIONのDIFFERENCEである(Difference (Union A B)(Intersection A B))のいずれかを取ることができる。
数値集約関数(AVERAGE、SUM、MINIMUM、MAXIMUM)は、望ましくは数値のシーケンスであるオペランドを有する。これらは、シーケンスのすべてのメンバを共通の型に昇格(promote)させ、適切な関数を計算する。たとえば、(Average(Decimal 1.0)(Int32 3))は(Decimal 2.0)である。空シーケンスに適用されるすべての4つの演算子は、空のシーケンスとなる。
これらの演算子のほとんどについて、全体式の型はその引数に依存する。たとえば、エレメントのシーケンスの属性のシーケンスとの共用体は、そのNodeKindとしてそれら2種類の共用体を有する。グループシーケンス演算子のすべては、どのような基数のオペランドも受け入れる。
算術演算子
算術演算子としてグループ化された演算子のセットについて、下記および表9で説明する。算術演算子は、それらのオペランドの型に依存して変化する振る舞いを有する。すべての算術演算子は、それらのオペランドが同じ(数値の)型および基数1を有し、その型で算術を実行するように要求する。除算がこれらの規則の1つの例外である。DIVIDEは、整数オペランドを常にdoubleに昇格させる。INTEGERDIVIDEは整数除算を実行し、したがってそのオペランドは整数である。
算術演算子としてグループ化された演算子のセットについて、下記および表9で説明する。算術演算子は、それらのオペランドの型に依存して変化する振る舞いを有する。すべての算術演算子は、それらのオペランドが同じ(数値の)型および基数1を有し、その型で算術を実行するように要求する。除算がこれらの規則の1つの例外である。DIVIDEは、整数オペランドを常にdoubleに昇格させる。INTEGERDIVIDEは整数除算を実行し、したがってそのオペランドは整数である。
オーバフローおよびアンダフローなどの算術例外は、実装により定義される。浮動小数点型の場合、NaNは非シグナリングであり、無限大および負のゼロが許容される。
算術演算子は、非数値型または非シングルトンには定義されない。文字列に関して動作させるため、文字列演算子(STRCONCATのような)を使用するか、またはそれらを数値型に変換することができる。
数字のシーケンスに関して演算を行うために、TUPLEを使用してシーケンスを通じて繰り返し、メンバワイズ(member−wise)の演算を行うか、そうでなければSUMなどのシーケンスアグリゲータのうちのいくつかを使用することを検討することができる。
文字列演算子
文字列演算子としてグループ化された演算子のセットについて、下記および表10で説明する。文字列演算子は、連結および部分文字列マッチングなどの共通の文字列機能を提供する。
文字列演算子としてグループ化された演算子のセットについて、下記および表10で説明する。文字列演算子は、連結および部分文字列マッチングなどの共通の文字列機能を提供する。
STRLENGTHは文字列の長さを計算する。その引数はシングルトン文字列であることが望ましい。STRCONCATは、LISTのような可変引数演算子である。これは、その引数を単一の文字列に連結する。各引数は文字列のリストまたは空のリストであってよい。空の文字列に対して空のリストを取る。STRCONCATは、デフォルトで空の文字列を取る、オプションの文字列プロパティDelimiterを受け入れる。これは、文字列メンバのあらゆるペアの間に区切り値を挿入する。STRCONCAT((),())は依然として空の文字列であるが、STRCONCAT(“”,“”)は結果として区切り文字となることに留意されたい。
STRSUBSTRINGノード演算子は、文字列の部分文字列を計算する。第1の引数はシングルトン文字列でなければならず、第2および第3の引数はシングルトン整数であることが望ましい。これは、最大の0または第2の引数(i0と呼ばれる)、および最大の0または第3の引数(i1と呼ばれる)を取り、i0からi0+i1までの間の文字からなる部分文字列を計算する。
STRCONTAINSは、2つのシングルトン文字列を引数として取り、第1の文字列が第2の文字列を含む場合はtrueを戻し、そうでない場合はfalseを戻す。どの文字列にも空の文字列が含まれる。STRENDSWITHおよびSTRBEGINSWITHは同じ機能を持つが、マッチを制約して、それぞれ文字列の終わりまたは始まりに現れる。
値比較演算子
値比較演算子としてグループ化された演算子のセットについて、下記および表11で説明する。QILは、値を比較するためのいくつかの演算子を定義する。これらは同じ名前(EQ、NE、LT、LE、GT、およびGE)を有するXQueryの値比較演算子に対応する。ノード比較演算子については、以下で説明する。
値比較演算子としてグループ化された演算子のセットについて、下記および表11で説明する。QILは、値を比較するためのいくつかの演算子を定義する。これらは同じ名前(EQ、NE、LT、LE、GT、およびGE)を有するXQueryの値比較演算子に対応する。ノード比較演算子については、以下で説明する。
各オペランドはシングルトンが望ましく、どちらのオペランドも同じ型を有することが望ましい。TREAT、CONVERT、または他の型の演算子を使用して、必要に応じてオペランドを昇格させるかまたは変換することができる。
文字列比較は、通常、照合(collation)を考慮に入れなければならない。シーケンスは、存在、汎用、第1、メンバワイズなど、多くの異なる方法で比較することができる。
ノード比較演算子
ノード比較演算子としてグループ化された演算子のセットについて、下記および表12で説明する。QILは、識別または文書順序によってノードを比較するためのいくつかの演算子を定義する。これらはXQueryのノード比較演算子(IS、ISNOT、BEFORE(<<)、およびAFTER(>>))に対応する。
ノード比較演算子としてグループ化された演算子のセットについて、下記および表12で説明する。QILは、識別または文書順序によってノードを比較するためのいくつかの演算子を定義する。これらはXQueryのノード比較演算子(IS、ISNOT、BEFORE(<<)、およびAFTER(>>))に対応する。
BEFORE(AFTER)は、文書順序で左のオペランドが右よりも前(後)に表示される場合、trueを戻す。異なる文書からの(または文書にまったくない)ノードの場合、順序付けが定義され、クエリの実行内で安定しているが、そうでなければ、実装により定義される。
各オペランドはシングルトンノードであることが望ましい。ノード型ISは、2つのオペランドが同じノード(識別による)の場合はtrueを戻し、そうでない場合はfalseを戻す。ISNOTはその反対を戻す。BEFORE/AFTERの定義から、BEFOREおよびAFTERの両方がそれらについてfalseを戻す場合、その場合にのみ、2つのノードが同じ識別を有することになる。結果として、(IsNot$x$yは(Or(Before $x $y)(After $x $y))と等価である。シーケンスは、存在、汎用、第1、メンバワイズなど、多くの異なる方法で比較することができる。
ソートおよび照合演算子
ソートおよび照合演算子としてグループ化された演算子のセットについて、下記および表13で説明する。QILは、単一のSORTノードまたは演算子を定義し、これは2つの引数を取る。第1の引数は、ソートされる照合にわたってFOR反復子を導入する。この反復子は、第2の引数に対する範囲内にあり、ソートキーを表現する。
ソートおよび照合演算子としてグループ化された演算子のセットについて、下記および表13で説明する。QILは、単一のSORTノードまたは演算子を定義し、これは2つの引数を取る。第1の引数は、ソートされる照合にわたってFOR反復子を導入する。この反復子は、第2の引数に対する範囲内にあり、ソートキーを表現する。
各ソートキーはASCENDINGまたはDESCENDINGのいずれかである。キー式はDOCUMENTORDERのような定数またはより複雑な式であってよい。
DOCORDERDISTINCTは文書順別にシーケンスをソートし、識別によって重複ノードが除去される便利な演算子である。(DocOrderDistinct x)は(Distinct(Sort X(Ascending DocOrder)))と等価である。そのオペランドは可能性として空であるノードシーケンスでなければならない。
関数定義および呼び出し演算子
関数定義および呼び出し演算子としてグループ化された演算子のセットについて、下記および表14で説明する。QILは、関数定義と呼び出しの両方を表すことができる。呼び出しにはいくつかのスタイルがあり、QILを使用してそれ自体が定義された関数の呼び出し、実行時関数に組み込みの呼び出し、ならびに、任意メソッド(たとえば、XSLT拡張オブジェクト)の早期バインド(early−bound)および遅延バインド(late−bound)された両方の呼び出しがある。
関数定義および呼び出し演算子としてグループ化された演算子のセットについて、下記および表14で説明する。QILは、関数定義と呼び出しの両方を表すことができる。呼び出しにはいくつかのスタイルがあり、QILを使用してそれ自体が定義された関数の呼び出し、実行時関数に組み込みの呼び出し、ならびに、任意メソッド(たとえば、XSLT拡張オブジェクト)の早期バインド(early−bound)および遅延バインド(late−bound)された両方の呼び出しがある。
引数は定位置であること(positional)が好ましい。QILを介して名前によるコール(call−by−name)セマンティックスをトンネルする必要がある場合、すべての名前を位置にマップする(XSLTコンパイラがするように)必要があるか、そうでなければ名前を値とペアにする(ms:variables()がSQLXMLストアドプロシージャ(proc)にうまく行うように)構造を構築し、QILで名前マッチングアルゴリズムをエンコードすることができる。
呼び出しは、LET反復子のアレイを使用して引数を渡す。FUNCTION定義では、これらの反復子は、実行時に値が外部から供給される記号参照として機能しているヌルにバインドされる。
XMLナビゲーション演算子
XMLナビゲーション演算子としてグループ化された演算子のセットについて、下記および表15で説明する。PathスタイルナビゲーションはQILでシンタックスに保持されず、タプルスペースおよびナビゲーション演算子に解かれる。
XMLナビゲーション演算子としてグループ化された演算子のセットについて、下記および表15で説明する。PathスタイルナビゲーションはQILでシンタックスに保持されず、タプルスペースおよびナビゲーション演算子に解かれる。
一般的に言えば、QILでのナビゲーションはCONTENTノード演算子を使用して行われる。この演算子はノード内のすべてのコンテンツ(たとえば、すべての属性、名前スペース、テキスト、処理命令、コメント、および1エレメント内のエレメントノード)を選択することが望ましい。コンテンツシーケンスを次にフィルタして、特定のノード種類のみを(たとえば、TUPLEおよびISTYPEを使用して)選択的に保持することができる。
ATTRIBUTE演算子はパターン認識で便利なように供給され、名前によって属性ノードを選択し(右オペランド)、0または1の属性ノードをマッチする。他のナビゲーションノードはグラフの中の共通の指示に与えられ、これらはほとんどXPathから取られ、同じ意味を有する。
どの演算子にも1回に1つのノードが適用され、ノードの全シーケンスに適用するために、TUPLEを使用してこのノードシーケンスにわたって繰り返すことができる。1つの例外はDEREFであり、その引数は単一のID値でなければならない。これはid()ルックアップの結果を計算する。
XML構造演算子
XML構造演算子としてグループ化された演算子のセットについて、下記および表16で説明する。QILは、あらゆるXMLノード種類を構築するための演算子を定義する。これらのコンストラクタはすべて、通常のXMLデータモデル制約に従う。たとえば、どのノードも文書ノードを収容することができず、連続するテキストノードがマージされる。
XML構造演算子としてグループ化された演算子のセットについて、下記および表16で説明する。QILは、あらゆるXMLノード種類を構築するための演算子を定義する。これらのコンストラクタはすべて、通常のXMLデータモデル制約に従う。たとえば、どのノードも文書ノードを収容することができず、連続するテキストノードがマージされる。
あらゆる構築済みノードは一意の識別を取得することが好ましい。この識別は、XQueryの場合と同様に、QILのために定義される。これはLETのような演算にまたがって保持され、副作用を伴う演算子、特にDMLによって尊重されるべきである。
あらゆる構築済みノードは、あらゆる他のノードに関する順序付けを取得する。これは、たとえ文書内ではなくノード、および異なる文書からのノードに適用するとしても、「文書順序」と称される。この順序付けは、XQueryの場合とまったく同様に、QILのために定義される。
ELEMENTCTOR演算子
ELEMENTCTORは、クラスQilBinaryを使用して実装される。左オペランドは名前、右オペランドはコンテンツである。これは、コンテンツの中のいずれかのノードが文書ノードであれば、エラーとなることがある。コンテンツの中のすべてのノードは暗黙的にコピーされる。
ELEMENTCTORは、クラスQilBinaryを使用して実装される。左オペランドは名前、右オペランドはコンテンツである。これは、コンテンツの中のいずれかのノードが文書ノードであれば、エラーとなることがある。コンテンツの中のすべてのノードは暗黙的にコピーされる。
ATTRIBUTEおよびNAMESPACEノードは、エレメントの中の他の非属性/名前スペースコンテンツの後には構築されないことがある。このような状況での振る舞いは実装により定義される。エレメント名が名前スペースにあり、名前スペースが範囲内にない場合、実装により合成された名前スペース宣言および/またはプリフィックスを発行することができる。実装は名前のプリフィックス値に従う必要はなく、これは単なる逐次化のヒントである。
ATTRIBUTECTOR演算子
ATTRIBUTECTORは、QilBinaryクラスを使用して実装される。左オペランドは名前、右オペランドはコンテンツである。右オペランドは、XQUERYATTRIBUTECONTENTなどの演算子を使用して、所望の式に強制することができる。属性名が名前スペースにあり、名前スペースが範囲内にない場合、実装により合成された名前スペース宣言および/またはプリフィックスを発行することができる。実装は名前のプリフィックス値に従う必要はなく、これは単なる逐次化のヒントである。型付け属性を構築するために、これをXMLスキーマ型情報でマーク付けするか、またはXQUERYVALIDATEなどの型演算子を適用することができる。
ATTRIBUTECTORは、QilBinaryクラスを使用して実装される。左オペランドは名前、右オペランドはコンテンツである。右オペランドは、XQUERYATTRIBUTECONTENTなどの演算子を使用して、所望の式に強制することができる。属性名が名前スペースにあり、名前スペースが範囲内にない場合、実装により合成された名前スペース宣言および/またはプリフィックスを発行することができる。実装は名前のプリフィックス値に従う必要はなく、これは単なる逐次化のヒントである。型付け属性を構築するために、これをXMLスキーマ型情報でマーク付けするか、またはXQUERYVALIDATEなどの型演算子を適用することができる。
TEXTCTORおよびCDATACTOR演算子
TEXTCTORはQilUnaryクラスを使用して実装される。子オペランドはテキストコンテンツであり、文字列型付けシングルトンでなければならない。CDATACTORは、オプションの逐次化のヒントを示すTEXTCTORである(すなわち、CDATAセクションを使用するため)。実装によりこのヒントを無視することができる。
TEXTCTORはQilUnaryクラスを使用して実装される。子オペランドはテキストコンテンツであり、文字列型付けシングルトンでなければならない。CDATACTORは、オプションの逐次化のヒントを示すTEXTCTORである(すなわち、CDATAセクションを使用するため)。実装によりこのヒントを無視することができる。
COMMENTCTOR演算子
COMMENTCTORはQilUnaryクラスを使用して実装される。CLASSオペランドはテキストコンテンツであり、文字列型付けシングルトンでなければならない。
COMMENTCTORはQilUnaryクラスを使用して実装される。CLASSオペランドはテキストコンテンツであり、文字列型付けシングルトンでなければならない。
PICTOR演算子
PICTORはQilBinaryクラスを使用して実装される。左オペランドはターゲットNCNAMEであり、ヌルであってもよい。そうでない場合はQName型付けシングルトンでなければならない。右オペランドは残りのコンテンツであり、文字列型付けシングルトンでなければならない。
PICTORはQilBinaryクラスを使用して実装される。左オペランドはターゲットNCNAMEであり、ヌルであってもよい。そうでない場合はQName型付けシングルトンでなければならない。右オペランドは残りのコンテンツであり、文字列型付けシングルトンでなければならない。
NAMESPACEDECL演算子
NamespaceDeclはQilBinaryクラスを使用して実装される。これは名前スペース宣言を構築する。左オペランドはプリフィックスであり、望ましくはQName型付けシングルトンである。右オペランドは名前スペースであり、望ましくは文字列型付けシングルトンである。左オペランドが空の文字列の場合、NAMESPECECTORはデフォルトの名前スペース宣言に対応する。
NamespaceDeclはQilBinaryクラスを使用して実装される。これは名前スペース宣言を構築する。左オペランドはプリフィックスであり、望ましくはQName型付けシングルトンである。右オペランドは名前スペースであり、望ましくは文字列型付けシングルトンである。左オペランドが空の文字列の場合、NAMESPECECTORはデフォルトの名前スペース宣言に対応する。
名前スペース宣言の競合が発生した場合(たとえば、エレメントのコンテンツの中の同じプリフィックスに対する2つのNAMESPACECTORS、またはすでに発行されたプリフィックス付き名前と競合するNAMESPACECTOR)、この振る舞いは実施により定義される。
RTFCTOR演算子
RTFCTORはQilUnaryクラスを使用して実装され、その子はノードシーケンスまたは空のシーケンスであることが望ましい。これは、結果ツリーフラグメントを(XSLTから)構築する。効果的には、RTFCTORはナビゲーションに対するバリアであり、コンポジションが行われるのを防ぐ。多くの点で、これはノードよりは原子値のように振る舞う。
RTFCTORはQilUnaryクラスを使用して実装され、その子はノードシーケンスまたは空のシーケンスであることが望ましい。これは、結果ツリーフラグメントを(XSLTから)構築する。効果的には、RTFCTORはナビゲーションに対するバリアであり、コンポジションが行われるのを防ぐ。多くの点で、これはノードよりは原子値のように振る舞う。
ノードプロパティ演算子
ノードプロパティ演算子としてグループ化された演算子のセットについて、下記および表17で説明する。QILは名前などの特定のノードプロパティにアクセスするための演算子をサポートする。
ノードプロパティ演算子としてグループ化された演算子のセットについて、下記および表17で説明する。QILは名前などの特定のノードプロパティにアクセスするための演算子をサポートする。
NAMEOF演算子は、ノードのQNameを計算する。ノードに名前がない場合、空のシーケンスを戻す。LOCALNAMEOF、NAMESPACEOF、およびPREFIXOF演算子は、ノードの名前の対応部分を計算する。ノードに名前がないか、またはこれらの部分のうちの1つが欠けている場合、空の文字列を戻す。これら演算子のすべては、それらのオペランドがシングルトンノードである必要がある。
コピーおよびプロジェクション演算子
コピーおよびプロジェクション演算子としてグループ化された演算子のセットについて、下記および表18で説明する。QILはいくつかの種類のコピーおよびプロジェクション演算子をサポートする。コピーは望ましくは原子値に影響を与えない演算である。ノードに関する影響は、実質上オリジナルの正確な複製であるが、新しいノード識別を備えた複製を生成する。プロジェクションはノード識別を「保持」するが、選択的にノードを枝取り(prune)してそのコンテンツの一部のみを保持する。
コピーおよびプロジェクション演算子としてグループ化された演算子のセットについて、下記および表18で説明する。QILはいくつかの種類のコピーおよびプロジェクション演算子をサポートする。コピーは望ましくは原子値に影響を与えない演算である。ノードに関する影響は、実質上オリジナルの正確な複製であるが、新しいノード識別を備えた複製を生成する。プロジェクションはノード識別を「保持」するが、選択的にノードを枝取り(prune)してそのコンテンツの一部のみを保持する。
DEEPCOPYは、ノードによってヘッドされた部分グラフ全体のコピーを構築する。SHALLOWCOPYは、エレメントおよび文書ノード以外のすべてのノード種類について、そのコンテンツではなく文書ノードをコピーする文書について、そのコンテンツではなく(すなわち属性なし)エレメントノード(すなわちその名前)をコピーするエレメントについて、DEEPCOPYと同じである。
PROJECTINCLUDEおよびPROJECTEXCLUDEは、どちらもバイナリ演算子である。左オペランドは、ノードのシーケンスにわたるFOR反復子でなければならない。右オペランドは、可能性としてその反復子を参照しているブールシングルトンでなければならない。どちらの演算子も、左オペランドによって記述されたフォレスト(forest)にわたって再帰的に繰り返すこと、ならびに、右オペランドがtrueと評価するすべてのノードおよびすべての祖先をそれぞれ含むかまたは除外することによって、プロジェクションを実行する。
型演算子
型演算子としてグループ化された演算子のセットについて、下記および表19で説明する。QILは、QIL型システムと共に動的に機能するための多くの演算子を定義する。
型演算子としてグループ化された演算子のセットについて、下記および表19で説明する。QILは、QIL型システムと共に動的に機能するための多くの演算子を定義する。
ATOMIZE演算子
ATOMIZE演算子は、標準に記載されたXQuery原子化(atomization)規則を実行することによって、XMLノードの型付け値を効果的に取り出す。詳細には、ATOMIZEは任意の基数のシーケンスを取り、原子値に対しては無演算(no−op)であり、ノードに対しては型付け値のアクセサへのコールのような、オリジナルシーケンスのメンバの原子値からなる新しいシーケンスを戻す。たとえば、(XQueryAtomize(List(1 “b” 3))では結果的にリストは変更されないが、$xは型付け値(1,2)を備えたノードであり、$yは型付け値(“3”,4)を備えたノードである、(XQueryAtomize(List $x $y))は、結果的に組み合わせられたシーケンス(1,2,“3”,4)となるであろう。
ATOMIZE演算子は、標準に記載されたXQuery原子化(atomization)規則を実行することによって、XMLノードの型付け値を効果的に取り出す。詳細には、ATOMIZEは任意の基数のシーケンスを取り、原子値に対しては無演算(no−op)であり、ノードに対しては型付け値のアクセサへのコールのような、オリジナルシーケンスのメンバの原子値からなる新しいシーケンスを戻す。たとえば、(XQueryAtomize(List(1 “b” 3))では結果的にリストは変更されないが、$xは型付け値(1,2)を備えたノードであり、$yは型付け値(“3”,4)を備えたノードである、(XQueryAtomize(List $x $y))は、結果的に組み合わせられたシーケンス(1,2,“3”,4)となるであろう。
TREATAS演算子
QILは強くかつ静的に型付けされているため、式が静的に有するよりもより強いかまたはより弱い型が望まれる場合がある。たとえば、式が整数の場合、ダブル(double)が望ましい場合がある。このような場合(たとえばアップキャスティング(upcasting)またはダウンキャスティング(downcasting))、TREATASを使用して、式を所望の型または基数に強制することができる。
QILは強くかつ静的に型付けされているため、式が静的に有するよりもより強いかまたはより弱い型が望まれる場合がある。たとえば、式が整数の場合、ダブル(double)が望ましい場合がある。このような場合(たとえばアップキャスティング(upcasting)またはダウンキャスティング(downcasting))、TREATASを使用して、式を所望の型または基数に強制することができる。
TREATASは、引数および型を取る。これは、引数をその型を有するものとして扱おうとする。動的影響は、何もしないこと(すなわち、値は変更されないままである)か、そうでなければエラーである。静的影響は、式の静的型を変更することである。ConvertまたはXQuery Validateとは異なり、型の階層にまたがって動くことは可能でなく、構文解析は行われない。たとえば、文字列を整数として扱ったり、または小数をダブルとして扱ったりしようとするとエラーになる。
ターゲット型のすべてのプロパティが使用される。ターゲット型のプロパティが引数型のそれに等しいとき、何の働きも行われない。プロパティが異なるとき、効果は以下のとおりである。引数の基数がターゲット基数と互換性がある場合、値は変更されずに戻される。そうでない場合、エラーが発生することがある。表20は基数の互換性を示している。引数の(正確、動的ば)基数が左側、(静的)ターゲット基数が上側にある。「OK」はTREAT−ASの成功を意味し、「err」は失敗を意味する。
引数アイテムの種別がターゲットアイテムの種別と互換性がある場合、値は変更されずに戻される。そうでない場合、エラーがスローされる。表21は、アイテムの種別の互換性を記述している。
引数原子型がターゲット原子型と互換性がある場合、値は変更されずに戻される。そうでない場合、エラーが発生することがある。この互換性は、リスト/共用体によってではなく制約によって、一方が他方から継承する場合、そしてその場合にのみ、2つの型が互換性がある部分型置換性規則によって決定される。ターゲット型が厳密でなければ、XML型情報を調べて、引数型が静的なものの部分型であるかどうかを判定することができる。そうでなければ、これはQIL原子型から判定することができる。引数ノード種別とターゲットノード種別とのビットワイズの論理和がゼロであれば、エラーが発生することがある。そうでなければ、ノード種別は互換性がある。
最終的に、ターゲット型が厳密でなければ、厳密さはチェックされない。ターゲット型が厳密であり、引数型はそうでない場合、引数は厳密なターゲット型を動的に有しているはずであり、そうでなければエラーが生じる可能性がある。
CANTREATAS演算子
CANTREATASはTREATASが成功するとtrueを戻し、そうでない場合はfalseを戻す(TREATASがエラーとなる場合)。この演算子は主にCONVERT/ISCONVERTIBLEとの対称のために存在する。
CANTREATASはTREATASが成功するとtrueを戻し、そうでない場合はfalseを戻す(TREATASがエラーとなる場合)。この演算子は主にCONVERT/ISCONVERTIBLEとの対称のために存在する。
CONVERT演算子
CONVERT演算子は、1つの型の値から別の型の値へのデータ型変換を適用する。たとえば、(Convert(String“1”)Int32)の結果は整数1となる。CONVERTは、値がすでに有しているか、または有するように昇格される型にのみキャストすることができる、TREATASとは異なる。
CONVERT演算子は、1つの型の値から別の型の値へのデータ型変換を適用する。たとえば、(Convert(String“1”)Int32)の結果は整数1となる。CONVERTは、値がすでに有しているか、または有するように昇格される型にのみキャストすることができる、TREATASとは異なる。
適用される固有の型変換は、XQueryによって使用されるものとマッチすることになる。
ISCONVERTIBLE演算子
ISCONVERTIBLEは、CONVERTが成功するであろう場合trueを戻し、そうでない場合はfalseを戻す(CONVERTがエラーとなるであろう場合)。これは通常CONVERTを実行するのと同じくらい費用がかかるが、計算をエラーで終了する代わりに条件付きブランチを可能にする。この演算子は主にXQueryのCASTABLE演算子をサポートするために存在する。
ISCONVERTIBLEは、CONVERTが成功するであろう場合trueを戻し、そうでない場合はfalseを戻す(CONVERTがエラーとなるであろう場合)。これは通常CONVERTを実行するのと同じくらい費用がかかるが、計算をエラーで終了する代わりに条件付きブランチを可能にする。この演算子は主にXQueryのCASTABLE演算子をサポートするために存在する。
ISTYPE演算子
ISTYPEは、値が指示された型を有する場合にtrueを戻す。これは、型のスイッチおよび等化物を実施するのに役立つ。QilTypeの各態様では、常にあらゆる値と一致するワイルドカード値(たとえば、QilCardinality.Any、QilAtomicType.Anyなど)がある。したがって、たとえばある式が任意の型のエレメントであるかどうかをテストするために、QilTypeのXmlNodeKindがQilXmeNodeKind.Elementであり、エレメントおよび他のすべての値はワイルドカードであるQilTypeを使用することができる。ある式が所与の基数を有するかどうかをテストするために、QilTypeの基数がその値であり、その型の他のすべてのアスペクトはワイルドカードであるQilTypeを使用することができる。
ISTYPEは、値が指示された型を有する場合にtrueを戻す。これは、型のスイッチおよび等化物を実施するのに役立つ。QilTypeの各態様では、常にあらゆる値と一致するワイルドカード値(たとえば、QilCardinality.Any、QilAtomicType.Anyなど)がある。したがって、たとえばある式が任意の型のエレメントであるかどうかをテストするために、QilTypeのXmlNodeKindがQilXmeNodeKind.Elementであり、エレメントおよび他のすべての値はワイルドカードであるQilTypeを使用することができる。ある式が所与の基数を有するかどうかをテストするために、QilTypeの基数がその値であり、その型の他のすべてのアスペクトはワイルドカードであるQilTypeを使用することができる。
ISEMPTY演算子
ISTYPE(QilCardinality.Zeroを使用する)と同様に、この演算子はシーケンスが空の場合にtrueを、そうでない場合はfalseを戻す。
ISTYPE(QilCardinality.Zeroを使用する)と同様に、この演算子はシーケンスが空の場合にtrueを、そうでない場合はfalseを戻す。
XQuery演算子
XQuery演算子としてグループ化された演算子のセットについて、下記および表22で説明する。特定の言語は、他のQIL演算子を使用して表現することができない追加の演算子を有するか、そうでなければその言語がそれ自体のノード型に値するほど一般的である。
XQuery演算子としてグループ化された演算子のセットについて、下記および表22で説明する。特定の言語は、他のQIL演算子を使用して表現することができない追加の演算子を有するか、そうでなければその言語がそれ自体のノード型に値するほど一般的である。
XQUERYEBV演算子
この単項演算子は値のシーケンスを取り、XQuery仕様に記載された規則に従ってこれをブール値に変換する。
この単項演算子は値のシーケンスを取り、XQuery仕様に記載された規則に従ってこれをブール値に変換する。
具体的には、オペランドが空のシーケンスか、ブール値falseか、空の文字列か、ゼロ(任意の数値型)か、またはNaN(doubleまたはfloat)である場合に、falseを戻す。それ以外の場合はtrueを戻す。
XQUERYELEMENTCONTENT演算子
XQUERYELEMENTCONTENTは、その引数としてシーケンスを取り、ノードのシーケンスを戻す。オリジナルシーケンスの中の各ノードは保持され、隣接する原子値の各シーケンスは、分離スペースと連結された原子値が入っているテキストノードに変換される。
XQUERYELEMENTCONTENTは、その引数としてシーケンスを取り、ノードのシーケンスを戻す。オリジナルシーケンスの中の各ノードは保持され、隣接する原子値の各シーケンスは、分離スペースと連結された原子値が入っているテキストノードに変換される。
XQUERYATTRIBUTECONTENT演算子
XQUERYATTRIBUTECONTENTは、その引数としてシーケンスを取り、文字列値を戻す。オリジナルシーケンスノ中の各ノードはその文字列値によって置き換えられ、各原子値も文字列に変換される。その後、結果として生じる原子値のシーケンスは、分離スペースと連結される。
XQUERYATTRIBUTECONTENTは、その引数としてシーケンスを取り、文字列値を戻す。オリジナルシーケンスノ中の各ノードはその文字列値によって置き換えられ、各原子値も文字列に変換される。その後、結果として生じる原子値のシーケンスは、分離スペースと連結される。
XQUERYVALIDATE演算子
XQUERYVALIDATE演算子は、ノードのシーケンスを妥当性検査し、その結果、妥当性検査エラーか、そうでなければ型注釈付きノードの新しいシーケンスとなる。これは、XQueryのVALIDATE演算子と同じ意味を有する。
XQUERYVALIDATE演算子は、ノードのシーケンスを妥当性検査し、その結果、妥当性検査エラーか、そうでなければ型注釈付きノードの新しいシーケンスとなる。これは、XQueryのVALIDATE演算子と同じ意味を有する。
XPath演算子
XPath演算子としてグループ化された演算子のセットについて、下記および表23で説明する。XPathは追加のナビゲーション軸および何らかの型変換を表すのに必要な、少数の演算子を有する。これらの一部は、既存のQIL演算子を使用して表現することが可能であるが、それら自体の表現に値するほど十分に一般的である。
XPath演算子としてグループ化された演算子のセットについて、下記および表23で説明する。XPathは追加のナビゲーション軸および何らかの型変換を表すのに必要な、少数の演算子を有する。これらの一部は、既存のQIL演算子を使用して表現することが可能であるが、それら自体の表現に値するほど十分に一般的である。
XPATHNODEVALUE、XPATHNUMBERTOSTRING、およびXPATHSTRINGTONUMBERは、XPath型変換規則を実装する。3つはすべて単項演算子である。XPATHNODEVALUEに対するオペランドはシングルトンノードでなければならない。オペランドXPATHNUMBERTOSTRINGは、シングルトン数値型でなければならない。XPATHSTRINGTONUMBERに対するオペランドはシングルトン文字列でなければならない。
その他の演算子はナビゲーションを実行する。オペランドがシングルトンノードでなければならないものはすべて単項演算子であり、それらは結果として、そのナビゲーション演算によって到達したノードの期待シーケンスとなる。
DML演算子
DML演算子としてグループ化された演算子のセットについて、下記および表24で説明する。QILは、挿入、削除、および更新などのデータ変更演算を表すことができる。
DML演算子としてグループ化された演算子のセットについて、下記および表24で説明する。QILは、挿入、削除、および更新などのデータ変更演算を表すことができる。
XQueryのDML文法は、XQuery文法の条件付き生成を変えて、いずれかのブランチとしてDMLステートメントを可能にする。これは条件のためのQIL式を変更する必要はなく、コンパイラは条件付きノードのtrue/falseブランチとしてDML式を配置することになる。XQueryのDML文法はFLWR式を変えて、通常のreturn節に代わってDMLステートメントが現れるようにもできる。FLWR式のQIL式(Tuple)は、TUPLEノードの戻りメンバである。XQueryのDML文法は、INSERT、UPDATE、DELETE、およびREPLACEという4つの新しい演算子を追加する。表24にリスト表示されたQIL演算子が、XQueryのDML仕様によって定義されたものと同じセマンティックスと共にこれらを表す。
DML演算子には戻り値がないため、対応するQILDataTypeがない。値QilItemKind.Dmlは、コンパイラおよびオプティマイザでのスタティック型チェックを容易にするDML式型を表す。QIL式がDMLを実行できるかどうかをテストするためには、一番上のノードのMemberKindを調べる必要がある。
特殊演算子
特殊演算子としてグループ化された演算子のセットについて、下記および表25で説明する。NOPノード型は、主としてQILオンデマンドの構築をサポートするためか、またはQILのトップダウン構築を容易にするために存在する。たとえば、開発者はNOPノードをグラフの中に配置し、構築が発展するにつれて、後でそのコンテンツをあてがうことができる。ノード型は依然として適切に設定されなければならないことに留意されたい。
特殊演算子としてグループ化された演算子のセットについて、下記および表25で説明する。NOPノード型は、主としてQILオンデマンドの構築をサポートするためか、またはQILのトップダウン構築を容易にするために存在する。たとえば、開発者はNOPノードをグラフの中に配置し、構築が発展するにつれて、後でそのコンテンツをあてがうことができる。ノード型は依然として適切に設定されなければならないことに留意されたい。
UNKNOWNノード型は、主として、コンパイル中に部分的に構築されたQILをサポートするため、およびアプリケーションがそれら独自の目的でQILを「再利用」できるようにするために存在する。基本的に、UNKNOWNは定義されたセマンティックスのない不透明なノード型であり、全くどのようなクラスを使用しても表すことができる。
ERRORノード型は2つの引数を取る。第1は文字列シーケンスでなければならず、ユーザへのメッセージを記述する。第2はブールシングルトンでなければならず、trueの場合はエラーが致命的である(実行終了に関する)ことを示す。falseの場合、実行はメッセージ後も続行することができる。
オペランドの型または基数に関して制約は設定されない。
外部データソース演算子
外部データソースと称される演算子について、下記および表26で説明する。外部データの主なソースはDATASOURCEノード型であり、QILDATASOURCEクラスで実装される。この演算子は、そのデータソースの種類を記述する(たとえば名前スペースのように)文字列タグ値と、QILによって解釈されないが、何らかのバックエンドプロセッサに対する意味を有する可能性のある任意のUser Dataオブジェクトとを有する。
外部データソースと称される演算子について、下記および表26で説明する。外部データの主なソースはDATASOURCEノード型であり、QILDATASOURCEクラスで実装される。この演算子は、そのデータソースの種類を記述する(たとえば名前スペースのように)文字列タグ値と、QILによって解釈されないが、何らかのバックエンドプロセッサに対する意味を有する可能性のある任意のUser Dataオブジェクトとを有する。
データソースはディレクトリまたはファイルに対するパス名であるか、あるいはユニバーサルリソースロケータアドレスであってよい。このデータソース型の場合、User Dataオブジェクトは文字列を評価するQILノード式である。文字列値は、(たとえば、document()関数に対するコールとまったく同様)XML文書をロードするための関数に渡すためのロケーションを識別する。XML文書は実際のXMLである必要はなく、文書は仮想XMLの型などのXMLの抽象化であってよい。
(まとめ)
上記で述べたように、本発明の例示的な実施形態について、様々なコンピューティングデバイスおよびネットワークアーキテクチャに関連して説明してきたが、基礎となる概念は、XMLのための中間言語表現を実装することが望ましい任意のコンピューティングデバイスまたはシステムに適用することができる。このように、本発明の方法およびシステムは、様々なアプリケーションおよびデバイスに適用することができる。例示的なプログラミング言語、名前、および例が、本明細書では、様々な選択肢の代表として選択されているが、これらの言語、名前、および例に限定されることを意図するものではない。通常の当業者であれば、本発明によって達成されるものと同じ、同様、または等価のシステムおよび方法を達成する、オブジェクトコードを提供する数多くの方法があることを理解されよう。
上記で述べたように、本発明の例示的な実施形態について、様々なコンピューティングデバイスおよびネットワークアーキテクチャに関連して説明してきたが、基礎となる概念は、XMLのための中間言語表現を実装することが望ましい任意のコンピューティングデバイスまたはシステムに適用することができる。このように、本発明の方法およびシステムは、様々なアプリケーションおよびデバイスに適用することができる。例示的なプログラミング言語、名前、および例が、本明細書では、様々な選択肢の代表として選択されているが、これらの言語、名前、および例に限定されることを意図するものではない。通常の当業者であれば、本発明によって達成されるものと同じ、同様、または等価のシステムおよび方法を達成する、オブジェクトコードを提供する数多くの方法があることを理解されよう。
本明細書に記載された様々な技法は、ハードウェアまたはソフトウェア、あるいは適切であればその両方の組合せに関連して実装することができる。このように、本発明の方法および装置、またはその特定の態様または部分は、フロッピー(登録商標)ディスク、CD−ROM、ハードドライブ、または任意の他のマシン読取り可能媒体などの有形の媒体に具体化されるプログラムコード(すなわち命令)の形を取ることが可能であり、当該プログラムコードがコンピュータなどのマシンにロードされ、マシンによって実行される場合、このマシンは本発明を実施するための装置となる。プログラム可能コンピュータ上でプログラムコードを実行する場合、コンピューティングデバイスは一般に、プロセッサ、プロセッサによって読取り可能な記憶媒体(揮発性および不揮発性のメモリおよび/または記憶エレメントを含む)、少なくとも1つの入力デバイス、ならびに少なくとも1つの出力デバイスを含むことになる。たとえばデータ処理APIなどの使用を通じて、本発明の信号処理サービスを利用することができる1つまたは複数のプログラムは、コンピュータと通信するために、高水準手続き型またはオブジェクト指向型のプログラミング言語で実施されることが好ましい。しかしプログラムは、必要であればアセンブリまたはマシン言語で実施することができる。いずれの場合でも、言語はコンパイルまたは解釈された言語であり、ハードウェア実装と組み合わせることができる。
本発明の方法および装置は、電気配線またはケーブルを介するか、光ファイバを介するか、または任意の他の形式の伝送を介するなど、何らかの伝送媒体を介して伝送される、プログラムコードの形態で具体化される通信を経由して実施することも可能であり、当該プログラムコードが、EPROM、ゲートアレイ、プログラム可能な論理デバイス(PLD)、クライアントコンピュータ、ビデオレコーダなどまたは前述の例示的実施形態に記載されたような信号処理機能を有する受信側マシンによって受信され、ロードされ、実行されると、本発明を実施するための装置となる。汎用プロセッサ上で実施される場合、プログラムコードはプロセッサと組み合わされて、本発明の機能を呼び出すために動作する固有の装置を提供する。さらに、本発明に関連して使用される任意の記憶技法は、常にハードウェアおよびソフトウェアの組合せであってよい。
以上、本発明について、様々な図面の好ましい実施形態に関連して述べてきたが、他の同様の実施形態が使用可能であり、あるいは記載の実施形態に、本発明を逸脱することなくその同じ機能を実行するために修正および追加が可能であることを理解されよう。さらに、特に無線ネットワークデバイスの数が激増を続けるにつれて、ハンドヘルドデバイスオペレーティングシステムおよび他のアプリケーション特有のオペレーティングシステムを含む、様々なコンピュータプラットフォームが企図されることも強調されるべきであろう。それゆえ、本発明はどの単一の実施形態にも限定されるべきではなく、むしろ添付の特許請求の範囲による範囲および広がりにおいて解釈されるべきである。
210a〜d フロントエンド言語コンパイラ
310 演算識別子
320 ノード演算子プロセッサ
240a〜d バックエンドクエリエンジン
310 演算識別子
320 ノード演算子プロセッサ
240a〜d バックエンドクエリエンジン
Claims (23)
- リレーショナルおよび非リレーショナルデータソースにまたがる1つまたは複数のXML言語照会のセマンティック表現のための方法であって、
少なくとも1つの照会を受け取ることと、
前記少なくとも1つの受け取った照会内で演算ごとに少なくとも1つのノードオブジェクトを定義することと、
前記少なくとも1つのノードオブジェクトのそれぞれを、演算子を使用してトランスレートすることと
前記演算子からセマンティック表現を生成することとを備え、
前記セマンティック表現は、前記1つまたは複数のXML言語照会の意味を明示的に記述することを特徴とする方法。 - 前記セマンティック表現は、ターゲットクエリエンジンによる解釈および実行のために形成される中間言語表現であることを特徴とする請求項1に記載の方法。
- 前記非リレーショナルデータソースは、テキスト文書、スプレッドシート、および非リレーショナルデータベースのうちの1つまたは複数を備えることを特徴とする請求項2に記載の方法。
- 前記生成するステップは、前記受け取った照会の高水準の演算を明示的部分に落し込むことをさらに備えることを特徴とする請求項1に記載の方法。
- 前記明示的部分は、複数のXML言語にまたがって共通であることを特徴とする請求項4に記載の方法。
- 前記演算子は、特殊演算子、データソース、リテラル、ブール演算子、シーケンス演算子、算術演算子、文字列演算子、値比較演算子、ノード比較演算子、タプルスペース、関数定義および呼び出し、XMLナビゲーション、XML構造、XMLプロパティアクセサ、型演算子、言語固有演算子、およびデータ操作演算子のうちの1つまたは複数を備えることを特徴とする請求項1に記載の方法。
- 前記少なくとも1つのノードオブジェクトのグラフデータ構造を形成することをさらに備えることを特徴とする請求項1に記載の方法。
- 前記少なくとも1つの受け取った照会は、XMLクエリ言語およびXMLビュー定義言語のうちの1つまたは複数を備えることを特徴とする請求項1に記載の方法。
- 前記少なくとも1つの受け取った照会は、XPath、XSLT、XQuery、DML、OPath、および注釈付きスキーマ照会のうちの1つまたは複数を備えることを特徴とする請求項1に記載の方法。
- 前記セマンティック言語表現は、リレーショナルデータのXMLビューにわたってXMLクエリを可能にするものであることを特徴とする請求項1に記載の方法。
- 複数のデータソースにまたがってXMLクエリおよびXMLビューのうちの1つまたは複数の意味を表現するためのセマンティック解釈プログラムであって、
照会を形成する前記XMLクエリおよびXMLビューのうちの1つまたは複数を受け取るための入力と、
前記照会内の演算ごとにノードオブジェクトを定義するためのグラフ構造ジェネレータと、
各ノードオブジェクトに演算子を割り当てるためのトランスレータであって、前記演算子は前記照会の演算を明示的部分に落し込むトランスレータと、
前記明示的部分を、前記XMLクエリおよびXMLビューのうちの1つまたは複数の意味を表現するための中間言語表現として提供するための出力と
を備えたことを特徴とするセマンティック解釈プログラム。 - 前記複数のデータソースは、リレーショナルおよび非リレーショナルデータソースを備えたことを特徴とする請求項11に記載のセマンティック解釈プログラム。
- 前記非リレーショナルデータソースは、テキスト文書、スプレッドシート、および非リレーショナルデータベースのうちの1つまたは複数を備えたことを特徴とする請求項12に記載のセマンティック解釈プログラム。
- 前記演算子は、特殊演算子、データソース、リテラル、ブール演算子、シーケンス演算子、算術演算子、文字列演算子、値比較演算子、ノード比較演算子、タプルスペース、関数定義および呼び出し、XMLナビゲーション、XML構造、XMLプロパティアクセサ、型演算子、言語固有演算子、およびデータ操作のうちの1つまたは複数を備えたことを特徴とする請求項11に記載のセマンティック解釈プログラム。
- 前記明示的部分は、複数のXML言語にまたがって共通であることを特徴とする請求項11に記載のセマンティック解釈プログラム。
- 前記中間言語表現は、ターゲットクエリエンジンによる解釈および実行のために形成されることを特徴とする請求項11に記載のセマンティック解釈プログラム。
- 受け取った照会の中間言語表現の方法を実行するためのコンピュータ実行可能命令を有するコンピュータ読取り可能媒体であって、
前記受け取った照会を形成するXMLクエリおよびXMLビューのうちの1つまたは複数を受け取ることと、
前記受け取った照会内で演算ごとにノードオブジェクトを定義することと、
前記受け取った照会の演算を明示的部分に落し込む演算子を使用して各ノードをトランスレートすることと、
リレーショナルおよび非リレーショナルデータソースのうちの1つまたは複数にわたる後続のクエリのための中間言語表現を形成する前記明示的部分に対応する命令を生成することと
を備えたことを特徴とするコンピュータ読取り可能媒体。 - 前記演算子は、特殊演算子、データソース、リテラル、ブール演算子、シーケンス演算子、算術演算子、文字列演算子、値比較演算子、ノード比較演算子、タプルスペース、関数定義および呼び出し、XMLナビゲーション、XML構造、XMLプロパティアクセサ、型演算子、言語固有演算子、およびデータ操作のうちの1つまたは複数を備えたことを特徴とする請求項17に記載のコンピュータ読取り可能媒体。
- 前記明示的部分は、複数のXML言語にまたがって共通であることを特徴とする請求項17に記載のコンピュータ読取り可能媒体。
- 前記受け取った照会は、XMLクエリ言語およびXMLビュー定義言語のうちの1つまたは複数を備えたことを特徴とする請求項17に記載のコンピュータ読取り可能媒体。
- 照会のセマンティック表現を生成するためのコンピュータシステムは、
コンピュータ命令を実行するためのプロセッサと、
少なくとも1つのモジュールであって、
前記照会を形成するXMLクエリおよびXMLビューのうちの1つまたは複数を受け取るための入力機能と、
前記照会内の演算ごとにノードオブジェクトを定義するためのグラフ構造ジェネレータと、
各ノードオブジェクトに演算子を割り当てるためのトランスレータ機能であって、前記演算子が前記照会の演算を明示的部分に落し込むトランスレータ機能と、
前記明示的部分を、前記XMLクエリおよびXMLビューの意味を表現するための中間言語表現として提供するための出力と
を備えた少なくとも1つのモジュールと
を備え、
前記少なくとも1つのモジュールは、1つまたは複数のソフトウェアモジュールおよび1つまたは複数のハードウェアモジュールのうちの1つまたは複数を備えたことを特徴とするコンピュータシステム。 - 前記演算子は、特殊演算子、データソース、リテラル、ブール演算子、シーケンス演算子、算術演算子、文字列演算子、値比較演算子、ノード比較演算子、タプルスペース、関数定義および呼び出し、XMLナビゲーション、XML構造、XMLプロパティアクセサ、型演算子、言語固有演算子、およびデータ操作のうちの1つまたは複数を備えたことを特徴とする請求項21に記載のコンピュータシステム。
- 前記明示的部分は、複数のXML言語にまたがって共通であることを特徴とする請求項21に記載のコンピュータシステム。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/601,444 US7519577B2 (en) | 2003-06-23 | 2003-06-23 | Query intermediate language method and system |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2005018776A true JP2005018776A (ja) | 2005-01-20 |
JP2005018776A5 JP2005018776A5 (ja) | 2007-08-09 |
Family
ID=33418592
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004185646A Pending JP2005018776A (ja) | 2003-06-23 | 2004-06-23 | クエリ中間言語の方法およびシステム |
Country Status (5)
Country | Link |
---|---|
US (1) | US7519577B2 (ja) |
EP (1) | EP1492032A3 (ja) |
JP (1) | JP2005018776A (ja) |
KR (1) | KR20050000348A (ja) |
CN (1) | CN100527127C (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8112438B2 (en) | 2007-10-29 | 2012-02-07 | Kabushiki Kaisha Toshiba | Coordinator server, database server, and pipeline processing control method |
Families Citing this family (212)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7366708B2 (en) | 1999-02-18 | 2008-04-29 | Oracle Corporation | Mechanism to efficiently index structured data that provides hierarchical access in a relational database system |
US8335775B1 (en) | 1999-08-05 | 2012-12-18 | Oracle International Corporation | Versioning in internet file system |
US7421541B2 (en) * | 2000-05-12 | 2008-09-02 | Oracle International Corporation | Version management of cached permissions metadata |
US7873649B2 (en) * | 2000-09-07 | 2011-01-18 | Oracle International Corporation | Method and mechanism for identifying transaction on a row of data |
US7321900B1 (en) | 2001-06-15 | 2008-01-22 | Oracle International Corporation | Reducing memory requirements needed to represent XML entities |
US8244702B2 (en) * | 2002-02-26 | 2012-08-14 | International Business Machines Corporation | Modification of a data repository based on an abstract data representation |
US6996558B2 (en) | 2002-02-26 | 2006-02-07 | International Business Machines Corporation | Application portability and extensibility through database schema and query abstraction |
US7698642B1 (en) | 2002-09-06 | 2010-04-13 | Oracle International Corporation | Method and apparatus for generating prompts |
US7007017B2 (en) * | 2003-02-10 | 2006-02-28 | Xerox Corporation | Method for automatic discovery of query language features of web sites |
US7386568B2 (en) * | 2003-05-01 | 2008-06-10 | Oracle International Corporation | Techniques for partial rewrite of XPath queries in a relational database |
US6836778B2 (en) * | 2003-05-01 | 2004-12-28 | Oracle International Corporation | Techniques for changing XML content in a relational database |
US7188090B2 (en) * | 2003-06-30 | 2007-03-06 | Microsoft Corporation | Drill-through queries from data mining model content |
US7395271B2 (en) * | 2003-08-25 | 2008-07-01 | Oracle International Corporation | Mechanism to enable evolving XML schema |
US8694510B2 (en) | 2003-09-04 | 2014-04-08 | Oracle International Corporation | Indexing XML documents efficiently |
US8229932B2 (en) | 2003-09-04 | 2012-07-24 | Oracle International Corporation | Storing XML documents efficiently in an RDBMS |
US7207002B2 (en) * | 2003-11-13 | 2007-04-17 | International Business Machines Corporation | Serialization and preservation of objects |
US7165063B2 (en) * | 2003-11-19 | 2007-01-16 | International Business Machines Corporation | Context quantifier transformation in XML query rewrite |
US7900133B2 (en) | 2003-12-09 | 2011-03-01 | International Business Machines Corporation | Annotation structure type determination |
US8949220B2 (en) * | 2003-12-19 | 2015-02-03 | Oracle International Corporation | Techniques for managing XML data associated with multiple execution units |
US8775412B2 (en) * | 2004-01-08 | 2014-07-08 | International Business Machines Corporation | Method and system for a self-healing query access plan |
US7493305B2 (en) * | 2004-04-09 | 2009-02-17 | Oracle International Corporation | Efficient queribility and manageability of an XML index with path subsetting |
US7603347B2 (en) * | 2004-04-09 | 2009-10-13 | Oracle International Corporation | Mechanism for efficiently evaluating operator trees |
US7366735B2 (en) * | 2004-04-09 | 2008-04-29 | Oracle International Corporation | Efficient extraction of XML content stored in a LOB |
US7398265B2 (en) * | 2004-04-09 | 2008-07-08 | Oracle International Corporation | Efficient query processing of XML data using XML index |
US7499915B2 (en) * | 2004-04-09 | 2009-03-03 | Oracle International Corporation | Index for accessing XML data |
US7440954B2 (en) | 2004-04-09 | 2008-10-21 | Oracle International Corporation | Index maintenance for operations involving indexed XML data |
US7930277B2 (en) | 2004-04-21 | 2011-04-19 | Oracle International Corporation | Cost-based optimizer for an XML data repository within a database |
US20050283471A1 (en) * | 2004-06-22 | 2005-12-22 | Oracle International Corporation | Multi-tier query processing |
US7702627B2 (en) | 2004-06-22 | 2010-04-20 | Oracle International Corporation | Efficient interaction among cost-based transformations |
CA2572272C (en) * | 2004-06-23 | 2012-10-30 | Oracle International Corporation | Efficient evaluation of queries using translation |
AU2005265030B2 (en) * | 2004-06-23 | 2010-05-13 | Oracle International Corporation | Efficient evaluation of queries using translation |
US7516121B2 (en) * | 2004-06-23 | 2009-04-07 | Oracle International Corporation | Efficient evaluation of queries using translation |
US20050289175A1 (en) * | 2004-06-23 | 2005-12-29 | Oracle International Corporation | Providing XML node identity based operations in a value based SQL system |
US7885980B2 (en) * | 2004-07-02 | 2011-02-08 | Oracle International Corporation | Mechanism for improving performance on XML over XML data using path subsetting |
US8566300B2 (en) * | 2004-07-02 | 2013-10-22 | Oracle International Corporation | Mechanism for efficient maintenance of XML index structures in a database system |
US7302447B2 (en) * | 2005-01-14 | 2007-11-27 | International Business Machines Corporation | Virtual columns |
US7668806B2 (en) * | 2004-08-05 | 2010-02-23 | Oracle International Corporation | Processing queries against one or more markup language sources |
US7685137B2 (en) * | 2004-08-06 | 2010-03-23 | Oracle International Corporation | Technique of using XMLType tree as the type infrastructure for XML |
US7814042B2 (en) | 2004-08-17 | 2010-10-12 | Oracle International Corporation | Selecting candidate queries |
US8694532B2 (en) * | 2004-09-17 | 2014-04-08 | First American Data Co., Llc | Method and system for query transformation for managing information from multiple datasets |
US9171100B2 (en) | 2004-09-22 | 2015-10-27 | Primo M. Pettovello | MTree an XPath multi-axis structure threaded index |
US8447774B1 (en) * | 2004-11-23 | 2013-05-21 | Progress Software Corporation | Database-independent mechanism for retrieving relational data as XML |
US20060116999A1 (en) * | 2004-11-30 | 2006-06-01 | International Business Machines Corporation | Sequential stepwise query condition building |
US7461052B2 (en) * | 2004-12-06 | 2008-12-02 | International Business Machines Corporation | Abstract query plan |
US7921076B2 (en) | 2004-12-15 | 2011-04-05 | Oracle International Corporation | Performing an action in response to a file system event |
US8131766B2 (en) | 2004-12-15 | 2012-03-06 | Oracle International Corporation | Comprehensive framework to integrate business logic into a repository |
US8131744B2 (en) * | 2004-12-17 | 2012-03-06 | International Business Machines Corporation | Well organized query result sets |
US7333981B2 (en) * | 2004-12-17 | 2008-02-19 | International Business Machines Corporation | Transformation of a physical query into an abstract query |
US8112459B2 (en) * | 2004-12-17 | 2012-02-07 | International Business Machines Corporation | Creating a logical table from multiple differently formatted physical tables having different access methods |
US8122012B2 (en) * | 2005-01-14 | 2012-02-21 | International Business Machines Corporation | Abstract record timeline rendering/display |
US7624097B2 (en) * | 2005-01-14 | 2009-11-24 | International Business Machines Corporation | Abstract records |
US7321895B2 (en) * | 2005-01-14 | 2008-01-22 | International Business Machines Corporation | Timeline condition support for an abstract database |
US7523131B2 (en) * | 2005-02-10 | 2009-04-21 | Oracle International Corporation | Techniques for efficiently storing and querying in a relational database, XML documents conforming to schemas that contain cyclic constructs |
US8095553B2 (en) * | 2005-03-17 | 2012-01-10 | International Business Machines Corporation | Sequence support operators for an abstract database |
US8346737B2 (en) * | 2005-03-21 | 2013-01-01 | Oracle International Corporation | Encoding of hierarchically organized data for efficient storage and processing |
US8463801B2 (en) * | 2005-04-04 | 2013-06-11 | Oracle International Corporation | Effectively and efficiently supporting XML sequence type and XQuery sequence natively in a SQL system |
US7305414B2 (en) * | 2005-04-05 | 2007-12-04 | Oracle International Corporation | Techniques for efficient integration of text searching with queries over XML data |
US7685150B2 (en) * | 2005-04-19 | 2010-03-23 | Oracle International Corporation | Optimization of queries over XML views that are based on union all operators |
US20060235839A1 (en) * | 2005-04-19 | 2006-10-19 | Muralidhar Krishnaprasad | Using XML as a common parser architecture to separate parser from compiler |
US7949941B2 (en) * | 2005-04-22 | 2011-05-24 | Oracle International Corporation | Optimizing XSLT based on input XML document structure description and translating XSLT into equivalent XQuery expressions |
US8166059B2 (en) | 2005-07-08 | 2012-04-24 | Oracle International Corporation | Optimization of queries on a repository based on constraints on how the data is stored in the repository |
US8762410B2 (en) * | 2005-07-18 | 2014-06-24 | Oracle International Corporation | Document level indexes for efficient processing in multiple tiers of a computer system |
US7406478B2 (en) | 2005-08-11 | 2008-07-29 | Oracle International Corporation | Flexible handling of datetime XML datatype in a database system |
US7814065B2 (en) | 2005-08-16 | 2010-10-12 | Oracle International Corporation | Affinity-based recovery/failover in a cluster environment |
US8972423B2 (en) * | 2006-09-26 | 2015-03-03 | Siemens Product Lifecycle Management Software Inc. | Opaque mechanism for web service interoperability |
US7814091B2 (en) * | 2005-09-27 | 2010-10-12 | Oracle International Corporation | Multi-tiered query processing techniques for minus and intersect operators |
US8073841B2 (en) | 2005-10-07 | 2011-12-06 | Oracle International Corporation | Optimizing correlated XML extracts |
US8554789B2 (en) * | 2005-10-07 | 2013-10-08 | Oracle International Corporation | Managing cyclic constructs of XML schema in a rdbms |
US8024368B2 (en) * | 2005-10-07 | 2011-09-20 | Oracle International Corporation | Generating XML instances from flat files |
US9367642B2 (en) * | 2005-10-07 | 2016-06-14 | Oracle International Corporation | Flexible storage of XML collections within an object-relational database |
US7444332B2 (en) * | 2005-11-10 | 2008-10-28 | International Business Machines Corporation | Strict validation of inference rule based on abstraction environment |
US20070112827A1 (en) * | 2005-11-10 | 2007-05-17 | International Business Machines Corporation | Abstract rule sets |
US7440945B2 (en) * | 2005-11-10 | 2008-10-21 | International Business Machines Corporation | Dynamic discovery of abstract rule set required inputs |
US7664742B2 (en) | 2005-11-14 | 2010-02-16 | Pettovello Primo M | Index data structure for a peer-to-peer network |
US8949455B2 (en) | 2005-11-21 | 2015-02-03 | Oracle International Corporation | Path-caching mechanism to improve performance of path-related operations in a repository |
US8370375B2 (en) * | 2005-12-08 | 2013-02-05 | International Business Machines Corporation | Method for presenting database query result sets using polymorphic output formats |
US7933928B2 (en) | 2005-12-22 | 2011-04-26 | Oracle International Corporation | Method and mechanism for loading XML documents into memory |
US7774355B2 (en) | 2006-01-05 | 2010-08-10 | International Business Machines Corporation | Dynamic authorization based on focus data |
US7730032B2 (en) | 2006-01-12 | 2010-06-01 | Oracle International Corporation | Efficient queriability of version histories in a repository |
US7987456B2 (en) * | 2006-01-24 | 2011-07-26 | Microsoft Corporation | Qualitatively annotated code |
US9229967B2 (en) | 2006-02-22 | 2016-01-05 | Oracle International Corporation | Efficient processing of path related operations on data organized hierarchically in an RDBMS |
US7809713B2 (en) * | 2006-03-15 | 2010-10-05 | Oracle International Corporation | Efficient search space analysis for join factorization |
US7644062B2 (en) * | 2006-03-15 | 2010-01-05 | Oracle International Corporation | Join factorization of union/union all queries |
US7945562B2 (en) * | 2006-03-15 | 2011-05-17 | Oracle International Corporation | Join predicate push-down optimizations |
US7869585B2 (en) * | 2006-03-17 | 2011-01-11 | Microsoft Corporation | Declarations for transformations within service sequences |
US7644066B2 (en) * | 2006-03-31 | 2010-01-05 | Oracle International Corporation | Techniques of efficient XML meta-data query using XML table index |
US7853573B2 (en) * | 2006-05-03 | 2010-12-14 | Oracle International Corporation | Efficient replication of XML data in a relational database management system |
US9460064B2 (en) * | 2006-05-18 | 2016-10-04 | Oracle International Corporation | Efficient piece-wise updates of binary encoded XML data |
US8510292B2 (en) * | 2006-05-25 | 2013-08-13 | Oracle International Coporation | Isolation for applications working on shared XML data |
US10318752B2 (en) * | 2006-05-26 | 2019-06-11 | Oracle International Corporation | Techniques for efficient access control in a database system |
US20080222121A1 (en) * | 2006-06-02 | 2008-09-11 | Wolfgang Wiessler | System for Adaptively Querying a Data Storage Repository |
US7730080B2 (en) * | 2006-06-23 | 2010-06-01 | Oracle International Corporation | Techniques of rewriting descendant and wildcard XPath using one or more of SQL OR, UNION ALL, and XMLConcat() construct |
JP5484048B2 (ja) * | 2006-06-30 | 2014-05-07 | アペリオ・テクノロジーズ・インコーポレイテッド | Dicomを介した大画像保存および取得方法 |
US7577642B2 (en) * | 2006-07-13 | 2009-08-18 | Oracle International Corporation | Techniques of XML query optimization over static and dynamic heterogeneous XML containers |
US20080016088A1 (en) * | 2006-07-13 | 2008-01-17 | Zhen Hua Liu | Techniques of XML query optimization over dynamic heterogeneous XML containers |
US20080033967A1 (en) * | 2006-07-18 | 2008-02-07 | Ravi Murthy | Semantic aware processing of XML documents |
US7801856B2 (en) * | 2006-08-09 | 2010-09-21 | Oracle International Corporation | Using XML for flexible replication of complex types |
US7739219B2 (en) * | 2006-09-08 | 2010-06-15 | Oracle International Corporation | Techniques of optimizing queries using NULL expression analysis |
US20080082514A1 (en) * | 2006-09-29 | 2008-04-03 | International Business Machines Corporation | Method and apparatus for integrating relational and hierarchical data |
US7689549B2 (en) * | 2006-10-05 | 2010-03-30 | Oracle International Corporation | Flashback support for domain index queries |
US7933935B2 (en) | 2006-10-16 | 2011-04-26 | Oracle International Corporation | Efficient partitioning technique while managing large XML documents |
US7797310B2 (en) | 2006-10-16 | 2010-09-14 | Oracle International Corporation | Technique to estimate the cost of streaming evaluation of XPaths |
US7627566B2 (en) * | 2006-10-20 | 2009-12-01 | Oracle International Corporation | Encoding insignificant whitespace of XML data |
US7739251B2 (en) | 2006-10-20 | 2010-06-15 | Oracle International Corporation | Incremental maintenance of an XML index on binary XML data |
US9436779B2 (en) * | 2006-11-17 | 2016-09-06 | Oracle International Corporation | Techniques of efficient XML query using combination of XML table index and path/value index |
US20080120283A1 (en) * | 2006-11-17 | 2008-05-22 | Oracle International Corporation | Processing XML data stream(s) using continuous queries in a data stream management system |
US7840590B2 (en) * | 2006-12-18 | 2010-11-23 | Oracle International Corporation | Querying and fragment extraction within resources in a hierarchical repository |
US20080147615A1 (en) * | 2006-12-18 | 2008-06-19 | Oracle International Corporation | Xpath based evaluation for content stored in a hierarchical database repository using xmlindex |
US7860899B2 (en) * | 2007-03-26 | 2010-12-28 | Oracle International Corporation | Automatically determining a database representation for an abstract datatype |
US7814117B2 (en) * | 2007-04-05 | 2010-10-12 | Oracle International Corporation | Accessing data from asynchronously maintained index |
US8214351B2 (en) * | 2007-04-16 | 2012-07-03 | International Business Machines Corporation | Selecting rules engines for processing abstract rules based on functionality and cost |
US8037039B2 (en) * | 2007-04-20 | 2011-10-11 | Microsoft Corporation | Runtime class database operation |
US8255883B2 (en) * | 2007-04-20 | 2012-08-28 | Microsoft Corporation | Translating late bound LINQ expressions into database queries |
US8140557B2 (en) | 2007-05-15 | 2012-03-20 | International Business Machines Corporation | Ontological translation of abstract rules |
US8868620B2 (en) * | 2007-06-08 | 2014-10-21 | International Business Machines Corporation | Techniques for composing data queries |
US7836098B2 (en) | 2007-07-13 | 2010-11-16 | Oracle International Corporation | Accelerating value-based lookup of XML document in XQuery |
US8386500B2 (en) * | 2007-08-28 | 2013-02-26 | Rocket Software, Inc. | Apparatus, system, and method for XML based disconnected data access for multivalued/hierarchical databases |
US20090063654A1 (en) * | 2007-08-28 | 2009-03-05 | International Business Machines Corporation | Apparatus, system, and method for xml based disconnected data access for multivalued/hierarchical databases |
US8291310B2 (en) * | 2007-08-29 | 2012-10-16 | Oracle International Corporation | Delta-saving in XML-based documents |
US8140547B2 (en) * | 2007-10-02 | 2012-03-20 | International Business Machines Corporation | Systems, methods and computer products for a monitoring context generator |
US7979420B2 (en) * | 2007-10-16 | 2011-07-12 | Oracle International Corporation | Handling silent relations in a data stream management system |
US7996388B2 (en) * | 2007-10-17 | 2011-08-09 | Oracle International Corporation | Adding new continuous queries to a data stream management system operating on existing queries |
US8296316B2 (en) * | 2007-10-17 | 2012-10-23 | Oracle International Corporation | Dynamically sharing a subtree of operators in a data stream management system operating on existing queries |
US8073826B2 (en) * | 2007-10-18 | 2011-12-06 | Oracle International Corporation | Support for user defined functions in a data stream management system |
US8521867B2 (en) * | 2007-10-20 | 2013-08-27 | Oracle International Corporation | Support for incrementally processing user defined aggregations in a data stream management system |
US7991766B2 (en) | 2007-10-20 | 2011-08-02 | Oracle International Corporation | Support for user defined aggregations in a data stream management system |
US8438152B2 (en) | 2007-10-29 | 2013-05-07 | Oracle International Corporation | Techniques for bushy tree execution plans for snowstorm schema |
US8180791B2 (en) * | 2007-11-08 | 2012-05-15 | Oracle International Corporation | Combining streaming and navigation for evaluating XML queries |
US7991768B2 (en) | 2007-11-08 | 2011-08-02 | Oracle International Corporation | Global query normalization to improve XML index based rewrites for path subsetted index |
US8543898B2 (en) | 2007-11-09 | 2013-09-24 | Oracle International Corporation | Techniques for more efficient generation of XML events from XML data sources |
US8250062B2 (en) | 2007-11-09 | 2012-08-21 | Oracle International Corporation | Optimized streaming evaluation of XML queries |
US20090144229A1 (en) * | 2007-11-30 | 2009-06-04 | Microsoft Corporation | Static query optimization for linq |
US9842090B2 (en) | 2007-12-05 | 2017-12-12 | Oracle International Corporation | Efficient streaming evaluation of XPaths on binary-encoded XML schema-based documents |
US7870124B2 (en) * | 2007-12-13 | 2011-01-11 | Oracle International Corporation | Rewriting node reference-based XQuery using SQL/SML |
US7882120B2 (en) * | 2008-01-14 | 2011-02-01 | Microsoft Corporation | Data description language for record based systems |
US7996444B2 (en) * | 2008-02-18 | 2011-08-09 | International Business Machines Corporation | Creation of pre-filters for more efficient X-path processing |
US8606757B2 (en) * | 2008-03-31 | 2013-12-10 | Intel Corporation | Storage and retrieval of concurrent query language execution results |
US9009211B2 (en) * | 2008-04-14 | 2015-04-14 | Telecom Italia S.P.A. | Distributed service framework |
US8713015B2 (en) * | 2008-04-23 | 2014-04-29 | Microsoft Corporation | Expressive grouping for language integrated queries |
US8429196B2 (en) | 2008-06-06 | 2013-04-23 | Oracle International Corporation | Fast extraction of scalar values from binary encoded XML |
US8364750B2 (en) | 2008-06-24 | 2013-01-29 | Microsoft Corporation | Automated translation of service invocations for batch processing |
US8819046B2 (en) * | 2008-06-24 | 2014-08-26 | Microsoft Corporation | Data query translating into mixed language data queries |
US8375044B2 (en) * | 2008-06-24 | 2013-02-12 | Microsoft Corporation | Query processing pipelines with single-item and multiple-item query operators |
US8713048B2 (en) * | 2008-06-24 | 2014-04-29 | Microsoft Corporation | Query processing with specialized query operators |
US8364751B2 (en) | 2008-06-25 | 2013-01-29 | Microsoft Corporation | Automated client/server operation partitioning |
US8606806B2 (en) * | 2008-07-25 | 2013-12-10 | Microsoft Corporation | Static typing of xquery expressions in lax validation content |
US7958112B2 (en) | 2008-08-08 | 2011-06-07 | Oracle International Corporation | Interleaving query transformations for XML indexes |
US8676841B2 (en) * | 2008-08-29 | 2014-03-18 | Oracle International Corporation | Detection of recurring non-occurrences of events using pattern matching |
WO2010031081A2 (en) * | 2008-09-15 | 2010-03-18 | Erik Thomsen | Extracting semantics from data |
US8805875B1 (en) * | 2008-10-04 | 2014-08-12 | Reflex Systems Llc | Systems and methods for information retrieval |
US8145859B2 (en) * | 2009-03-02 | 2012-03-27 | Oracle International Corporation | Method and system for spilling from a queue to a persistent store |
US8352517B2 (en) | 2009-03-02 | 2013-01-08 | Oracle International Corporation | Infrastructure for spilling pages to a persistent store |
US8875111B2 (en) * | 2009-04-23 | 2014-10-28 | Microsoft Corporation | Intermediate language representation and modification |
US8676808B2 (en) | 2009-07-09 | 2014-03-18 | Dillon Software Services, Llc | Data store interface that facilitates distribution of application functionality across a multi-tier client-server architecture |
US8321450B2 (en) * | 2009-07-21 | 2012-11-27 | Oracle International Corporation | Standardized database connectivity support for an event processing server in an embedded context |
US8387076B2 (en) * | 2009-07-21 | 2013-02-26 | Oracle International Corporation | Standardized database connectivity support for an event processing server |
US8386466B2 (en) * | 2009-08-03 | 2013-02-26 | Oracle International Corporation | Log visualization tool for a data stream processing server |
US8527458B2 (en) * | 2009-08-03 | 2013-09-03 | Oracle International Corporation | Logging framework for a data stream processing server |
US9081873B1 (en) * | 2009-10-05 | 2015-07-14 | Stratacloud, Inc. | Method and system for information retrieval in response to a query |
US8631028B1 (en) | 2009-10-29 | 2014-01-14 | Primo M. Pettovello | XPath query processing improvements |
US9430494B2 (en) | 2009-12-28 | 2016-08-30 | Oracle International Corporation | Spatial data cartridge for event processing systems |
US9305057B2 (en) | 2009-12-28 | 2016-04-05 | Oracle International Corporation | Extensible indexing framework using data cartridges |
US8959106B2 (en) | 2009-12-28 | 2015-02-17 | Oracle International Corporation | Class loading using java data cartridges |
US8255372B2 (en) | 2010-01-18 | 2012-08-28 | Oracle International Corporation | Efficient validation of binary XML data |
US10162851B2 (en) * | 2010-04-19 | 2018-12-25 | Salesforce.Com, Inc. | Methods and systems for performing cross store joins in a multi-tenant store |
US8365156B2 (en) * | 2010-04-17 | 2013-01-29 | Microsoft Corporation | Intermediate language support for change resilience |
US9135297B2 (en) * | 2010-05-17 | 2015-09-15 | Green Sql Ltd. | Database translation system and method |
US8713049B2 (en) | 2010-09-17 | 2014-04-29 | Oracle International Corporation | Support for a parameterized query/view in complex event processing |
US9189280B2 (en) | 2010-11-18 | 2015-11-17 | Oracle International Corporation | Tracking large numbers of moving objects in an event processing system |
US8990416B2 (en) | 2011-05-06 | 2015-03-24 | Oracle International Corporation | Support for a new insert stream (ISTREAM) operation in complex event processing (CEP) |
US9396284B2 (en) * | 2011-05-18 | 2016-07-19 | Oracle International Corporation | Method and system for implementing efficient updatable relational views over XML data |
US9177021B2 (en) | 2011-06-09 | 2015-11-03 | International Business Machines Corporation | Relational query planning for non-relational data sources |
JP2013003664A (ja) * | 2011-06-13 | 2013-01-07 | Sony Corp | 情報処理装置および方法 |
US8713037B2 (en) * | 2011-06-30 | 2014-04-29 | Xerox Corporation | Translation system adapted for query translation via a reranking framework |
US9329975B2 (en) | 2011-07-07 | 2016-05-03 | Oracle International Corporation | Continuous query language (CQL) debugger in complex event processing (CEP) |
US10756759B2 (en) | 2011-09-02 | 2020-08-25 | Oracle International Corporation | Column domain dictionary compression |
CN103176967A (zh) * | 2011-12-23 | 2013-06-26 | 英顺源(上海)科技有限公司 | 依据多个查询字词的翻译查询系统及其方法 |
JP5895545B2 (ja) * | 2012-01-17 | 2016-03-30 | 富士通株式会社 | プログラム、圧縮ファイル生成方法、圧縮符号伸張方法、情報処理装置、および記録媒体 |
US8543563B1 (en) | 2012-05-24 | 2013-09-24 | Xerox Corporation | Domain adaptation for query translation |
US9563663B2 (en) | 2012-09-28 | 2017-02-07 | Oracle International Corporation | Fast path evaluation of Boolean predicates |
US8812523B2 (en) | 2012-09-28 | 2014-08-19 | Oracle International Corporation | Predicate result cache |
US9805095B2 (en) | 2012-09-28 | 2017-10-31 | Oracle International Corporation | State initialization for continuous queries over archived views |
US10042907B2 (en) * | 2012-11-29 | 2018-08-07 | Teradata Us, Inc. | Providing metadata to database systems and environments with multiple processing units or modules |
US10956422B2 (en) | 2012-12-05 | 2021-03-23 | Oracle International Corporation | Integrating event processing with map-reduce |
US10298444B2 (en) | 2013-01-15 | 2019-05-21 | Oracle International Corporation | Variable duration windows on continuous data streams |
US9098587B2 (en) | 2013-01-15 | 2015-08-04 | Oracle International Corporation | Variable duration non-event pattern matching |
WO2014122295A2 (en) * | 2013-02-07 | 2014-08-14 | Qatar Foundation | Methods and systems for data cleaning |
US9390135B2 (en) | 2013-02-19 | 2016-07-12 | Oracle International Corporation | Executing continuous event processing (CEP) queries in parallel |
US9047249B2 (en) | 2013-02-19 | 2015-06-02 | Oracle International Corporation | Handling faults in a continuous event processing (CEP) system |
US9418113B2 (en) | 2013-05-30 | 2016-08-16 | Oracle International Corporation | Value based windows on relations in continuous data streams |
US9934279B2 (en) | 2013-12-05 | 2018-04-03 | Oracle International Corporation | Pattern matching across multiple input data streams |
US9870390B2 (en) | 2014-02-18 | 2018-01-16 | Oracle International Corporation | Selecting from OR-expansion states of a query |
US10073873B2 (en) * | 2014-03-21 | 2018-09-11 | Futurewei Technologies, Inc. | System and method for column-specific materialization scheduling |
US9244978B2 (en) | 2014-06-11 | 2016-01-26 | Oracle International Corporation | Custom partitioning of a data stream |
US9712645B2 (en) | 2014-06-26 | 2017-07-18 | Oracle International Corporation | Embedded event processing |
US20160048504A1 (en) * | 2014-08-14 | 2016-02-18 | Avaz, Inc. | Conversion of interlingua into any natural language |
US10120907B2 (en) | 2014-09-24 | 2018-11-06 | Oracle International Corporation | Scaling event processing using distributed flows and map-reduce operations |
US9886486B2 (en) | 2014-09-24 | 2018-02-06 | Oracle International Corporation | Enriching events with dynamically typed big data for event processing |
US10320633B1 (en) | 2014-11-20 | 2019-06-11 | BloomReach Inc. | Insights for web service providers |
US10585887B2 (en) | 2015-03-30 | 2020-03-10 | Oracle International Corporation | Multi-system query execution plan |
US20170024432A1 (en) | 2015-07-24 | 2017-01-26 | International Business Machines Corporation | Generating sql queries from declarative queries for semi-structured data |
WO2017018901A1 (en) | 2015-07-24 | 2017-02-02 | Oracle International Corporation | Visually exploring and analyzing event streams |
US10031940B2 (en) * | 2015-09-24 | 2018-07-24 | Futurewei Technologies, Inc. | System and method for database query |
US10339137B2 (en) | 2015-12-07 | 2019-07-02 | Futurewei Technologies, Inc. | System and method for caching and parameterizing IR |
WO2017135838A1 (en) | 2016-02-01 | 2017-08-10 | Oracle International Corporation | Level of detail control for geostreaming |
WO2017135837A1 (en) | 2016-02-01 | 2017-08-10 | Oracle International Corporation | Pattern based automated test data generation |
US10474653B2 (en) | 2016-09-30 | 2019-11-12 | Oracle International Corporation | Flexible in-memory column store placement |
US10445422B2 (en) * | 2018-02-09 | 2019-10-15 | Microsoft Technology Licensing, Llc | Identification of sets and manipulation of set data in productivity applications |
JP6517414B1 (ja) * | 2018-08-24 | 2019-05-22 | グレイステクノロジー株式会社 | ドキュメント作成支援システム |
CN110164216B (zh) * | 2019-05-23 | 2021-04-23 | 福建工程学院 | 一种sql在线评测系统 |
US12001781B2 (en) | 2020-09-23 | 2024-06-04 | Evernorth Strategic Development, Inc. | Query selection system |
US11586624B2 (en) | 2020-09-28 | 2023-02-21 | Databricks, Inc. | Integrated native vectorized engine for computation |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
IL100987A (en) | 1991-02-27 | 1995-10-31 | Digital Equipment Corp | Method and device for encoding |
US5960200A (en) | 1996-05-03 | 1999-09-28 | I-Cube | System to transition an enterprise to a distributed infrastructure |
US6601058B2 (en) * | 1998-10-05 | 2003-07-29 | Michael Forster | Data exploration system and method |
US7124144B2 (en) * | 2000-03-02 | 2006-10-17 | Actuate Corporation | Method and apparatus for storing semi-structured data in a structured manner |
US6947945B1 (en) * | 2000-03-21 | 2005-09-20 | International Business Machines Corporation | Using an XML query language to publish relational data as XML |
US6934712B2 (en) | 2000-03-21 | 2005-08-23 | International Business Machines Corporation | Tagging XML query results over relational DBMSs |
US6654734B1 (en) * | 2000-08-30 | 2003-11-25 | International Business Machines Corporation | System and method for query processing and optimization for XML repositories |
WO2002035395A2 (en) | 2000-10-27 | 2002-05-02 | Entigen Corporation | Integrating heterogeneous data and tools |
US7203678B1 (en) * | 2001-03-27 | 2007-04-10 | Bea Systems, Inc. | Reconfigurable query generation system for web browsers |
US6799184B2 (en) * | 2001-06-21 | 2004-09-28 | Sybase, Inc. | Relational database system providing XML query support |
US6725212B2 (en) * | 2001-08-31 | 2004-04-20 | International Business Machines Corporation | Platform-independent method and system for graphically presenting the evaluation of a query in a database management system |
US6901410B2 (en) * | 2001-09-10 | 2005-05-31 | Marron Pedro Jose | LDAP-based distributed cache technology for XML |
US7120645B2 (en) * | 2002-09-27 | 2006-10-10 | Oracle International Corporation | Techniques for rewriting XML queries directed to relational database constructs |
US7146352B2 (en) * | 2003-06-23 | 2006-12-05 | Microsoft Corporation | Query optimizer system and method |
-
2003
- 2003-06-23 US US10/601,444 patent/US7519577B2/en not_active Expired - Fee Related
-
2004
- 2004-06-07 EP EP04102566A patent/EP1492032A3/en not_active Ceased
- 2004-06-23 CN CNB2004100714135A patent/CN100527127C/zh not_active Expired - Fee Related
- 2004-06-23 KR KR1020040047194A patent/KR20050000348A/ko not_active Application Discontinuation
- 2004-06-23 JP JP2004185646A patent/JP2005018776A/ja active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8112438B2 (en) | 2007-10-29 | 2012-02-07 | Kabushiki Kaisha Toshiba | Coordinator server, database server, and pipeline processing control method |
Also Published As
Publication number | Publication date |
---|---|
US20040267760A1 (en) | 2004-12-30 |
EP1492032A3 (en) | 2005-03-30 |
KR20050000348A (ko) | 2005-01-03 |
US7519577B2 (en) | 2009-04-14 |
CN1609856A (zh) | 2005-04-27 |
CN100527127C (zh) | 2009-08-12 |
EP1492032A2 (en) | 2004-12-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7519577B2 (en) | Query intermediate language method and system | |
US7383255B2 (en) | Common query runtime system and application programming interface | |
US7146352B2 (en) | Query optimizer system and method | |
Braga et al. | XQBE (XQ uery B y E xample) A visual interface to the standard XML query language | |
US7386541B2 (en) | System and method for compiling an extensible markup language based query | |
AU2002318459B2 (en) | Programming language extensions for processing data representation language objects and related applications | |
US7634498B2 (en) | Indexing XML datatype content system and method | |
JP5542142B2 (ja) | 宣言型プログラミング言語の木ベースの有向グラフのプログラミング構造 | |
US7627541B2 (en) | Transformation of modular finite state transducers | |
US7624075B2 (en) | Transformation of modular finite state transducers | |
EP1686495A1 (en) | Mapping web services to ontologies | |
US20040193575A1 (en) | Path expressions and SQL select statement in object oriented language | |
JP2012504826A (ja) | 拡張可能な構文を有するプログラミング言語 | |
JP2007519078A (ja) | オブジェクトとしてカプセル化されたxmlデータをデータベースストアに格納し検索するシステムおよび方法 | |
AU2002318459A1 (en) | Programming language extensions for processing data representation language objects and related applications | |
Rompf et al. | A SQL to C compiler in 500 lines of code | |
Zou et al. | Towards a portable XML-based source code representation | |
Fernandez et al. | Growing xquery | |
KR100491725B1 (ko) | 엑스퀘리를 사용하여 통합 스키마를 정의하는 데이터 통합시스템 및 그 방법 | |
Zhang | Efficient XML stream processing and searching | |
Rose et al. | Phantom XML | |
Fernández et al. | Implementing XQuery 1.0: The Story of Galax | |
Schuhart | Design and Implementation of a Database Programming Language for XML-based Applications | |
Jordan | No Such Thing as a~ Bad Day</title | |
Matthes et al. | Visualizing Persistent Objects using Higher-Order Functions in SGML |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070622 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20070622 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20100309 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20100810 |