オブジェクト指向、Javaを取り入れた
新しい業界標準「SQL99」詳細解説

第三章 SQLJと今後の標準化動向(3)


オブジェクトリレーショナル機能の応用例

■SQL/MM全文検索(フルテキスト)

 SQL/マルチメディア・全文検索(SQL/Multimedia Fulltext、SQL/MMフルテキスト)は、文字テキストへのさまざまな探索を可能にする規格である。1999年11月末現在、最終仕様案の審議中の段階なので細部の仕様が変更される可能性があるが、大筋は決まっていることと、SQL99でサポートされるユーザ定義関数の応用例としてご紹介する。

 これまで文字テキストにが格納されている表の列に対して探したい文字列が存在するかどうかを検索するために、LIKE述語やSIMILAR述語を使用してきた。しかしそれらの述語は、文章の構造にはいっさい関係なく、単に比較値の文字列(あるいは文字コード)が存在するかどうかを調べるものである。それに対してSQL/MM全文検索が規定しようとしている関数CONTAINSなどを使えば、文章の構造や文意に沿ったより高度な検索を行うことができる。次のような文が表MyDocsのある行のTextBody列に格納されているとして、どのような検索ができるかを説明する。

例文:
 As assumed by this International Standard, every text value is associated with a specific language. (この国際規格によって仮定されているように、各テキストの値は、特定の言語に関連している)

単一語探索の場合:
SELECT * FROM MyDocs
WHERE 1 = CONTAINS(TextBody, '"specific"') ;

結果:
every text value is associated with a specific language.

 単一のことばである文字列「specific」を探索する。探索したい文字列は、CONTAINS関数の第2パラメタの単一引用符「'」の中に二重引用符「"」で囲む。ところでこの検索は次のような従来のLIKE述語でも表現可能である。CONTAINS関数の戻り値のデータ型は第二章で紹介した真理値で、ここでは真(true)を整数の1で表している。

SELECT * FROM MyDocs
WHERE TextBody LIKE '% specific %' ;

なお、CONTAINS関数のパラメタの比較値は、次のように複数個を組み合わせて指定することができる。

("specific" | "particular" ) & "language" & NOT "defact"

単フレーズ探索(成句探索):
SELECT * FROM MyDocs WHERE 1 = CONTAINS(TextBody, '"specific language"') ;

結果:
every text value is associated with a specific language.

フレーズ探索(成句探索)は、 複数のことばから構成されるフレーズ(成句、熟語)「specific language」を探索する。

コンテキスト探索 :
SELECT * FROM MyDocs WHERE 1 = CONTAINS(TextBody, '"text" IN SAME SENTENCE AS "language"') ;

結果:
every text value is associated with a specific language.

上記のコンテキスト探索は、同じ文中に「text」と「language」がある文を探索する。CONTAINS関数の第2引数中のIN SAME SENTENCESは、コンテキスト探索を指示するオプションである。SENTENCEの代わりにPARAGRAPHを指定すれば、段落中に比較値が存在するどうかを探索できる。このように文章構造を意識した探索をLIKE述語で表現することは困難である。

停止語処理(ストップワード):
SELECT * FROM MyDocs WHERE 1 = CONTAINS(TextBody, '"values was associated"') ;

結果:
every text value is associated with a specific language.

停止語とは、thisやis、andなどのように一般に探索の比較値にする必要がないことばである。この例は停止語を除いて探索を行えることを示している。ただし何を停止語にするかは実装に任されていて、必要であればユーザがあらかじめ登録することになるだろう。

語幹探索:
SELECT * FROM MyDocs WHERE 1 = CONTAINS(TextBody, 'STEMMED FORM OF "values are associated"') ;

結果:
every text value is associated with a specific language.

語幹が同じもの、あるいは語尾変化に影響されない探索を行う。この例では複数形「values」だけでなく単数形「value」は探索対象になる。

概念探索:
SELECT * FROM MyDocs WHERE 1 = CONTAINS(TextBody, 'IS ABOUT "every value is associated with a specific language"') ;

概念探索は、比較値と良く似たものを探す。一種のあいまい検索だが、その基準は実装にまかされている。

ランキング:
SELECT * FROM MyDocs WHERE 1.2 < RANK(TextBody, '"specific"') ;

RANK関数は、比較値の出現頻度順を返却するなどの目的に使用されることを意図しているが、その具体的な目的と基準は、実装に任せられている。


<参考>

 IBMのUDBには、オブジェクトリレーショナル機能を使用して、文章を検索するテキストエキステンダー、静止画データを検索するイメージエキステンダー、音声データを検索するオーディオエキステンダー、ビデオデータを検索するビデオエキステンダー、地理情報を検索するスペーシャルエキステンダーという関連製品がある(スペーシャルエキステンダーを除いて日本で発表済み)。
 そのうちUDBテキスト・エキストテンダーは、データベースやファイルに格納された文字テキストを多様かつ高機能な方法で高速検索するツールである。検索可能なデータ格納先は、表のCHAR型、VARCHAR型、CLOB型、GRAPHIC型、VARGRAPHIC型、DBCLOB型または外部ファイルである。またデータは、フラットなASCIIテキストに加えて、ワード文書やアミプロ文書のようなワープロ文書、およびHTMLやXMLのような構造化文書が検索可能である。ここでは特に日本語にも適用できる機能をご紹介する。

■ファジー探索
 文字列が一致しているものだけでなく、文字の並びが似ているものも探索することができる。この機能は、OCRや音声入力など誤字入力の発生しやすいテキストデータを対象にした検索に威力を発揮する。FUZZY FORM OFオプションによってファジー探索であることを示し、一致度合いを約20%から約90%の5段階で指定する。次の例は、「マルチ・メディア」の文字列に似ているものを探す検索の例である。

SELECT * FROM MyDocs
WHERE 1 = CONTAINS(TextBody,'FUZZY FORM OF 5 "マルチ・メディア"') ;

 「FUZZY FORM OF 5」 (一致率約90%)の場合には、上記のSQL文の結果として、全角のマルチ・メディアか、半角のマルチ・メディアと書かれた文字列にしか一致しない。一方、「 FUZZY FORM OF 1」 (一致率約20%)の場合の結果では、全角半角の文字はもちろん、中黒の入らない「マルチメディア」や、空白を含む「マルチ メディア」といった文字列にも一致する。

■シソーラス探索(類義語探索)
 類義語をあらかじめ登録しておくことによって、文字列が一致しなければ、その類義語の中から一致するものを探索することができる。例えば、シソーラスは次のような類義語の関連のことで、これをあらかじめ辞書に登録しておく。

図38 シソーラスに登録する類義語の関係

検索1:
SELECT * FROM MyDocs WHERE DB2TX.CONTAINS(TextBody, 'THESAURUS "\udbwork\thesau" COUNT "2" TERM OF "球技")=1 ;

検索2:
SELECT * FROM MyDocs WHERE DB2TX.CONTAINS(TextBody, 'THESAURUS "\udbwork\thesau" COUNT "1" TERM OF "テニス")=1 ;

検索3:
SELECT * FROM MyDocs WHERE DB2TX.CONTAINS(TextBody, 'THESAURUS "\udbwork\thesau" COUNT "2" TERM OF "ラケット")=1 ;

 ここで、THESAURUSは、類義語探索を行うことを指定し、\udbwork\thesauは、類義語辞書が登録されているパスを指定し、COUNTは類義語を探す範囲を示す。

 検索1は、「球技」から同義語(シノニム)を含めて2つ下の類義語までを探す。検索2は、「テニス」から同義語と一つ下の類義語を探すが、兄弟関係にある野球などの類義語は探索範囲外である。検索3は、「ラケット」から親と兄弟関係の類義語が探索範囲である。このようにそれぞれのアプリケーション分野に対応した適切な類義語辞書が提供されれば、独自の文献検索への応用が可能となるだろう。

 


■SQL/MM地理情報(スペーシャル)

 SQL/マルチメディア・地理情報(SQL/Multimedia Spacial、SQL/MMスペーシャル)は、もともとOpen GISコンソーシアムという業界団体が開発した仕様をベースにして、SQL99の標準化に合わせて、今年国際標準になった規格である。二次元の地理情報を表現する技術的な方法はすでに確立していて、地理情報を検索する製品は市場に出ているのだが、流通性や拡張性に欠けるという問題があった。そこでSQL99で可能になったラージオブジェクト型、ユーザー定義構造型、およびユーザー定義関数を応用して、すなわち新しいオブジェクトリレーショナルの機能を駆使して二次元の地理情報オブジェクトを対象に検索する基盤を標準化したのがこの規格である。そしてこの標準規格に基づいたアプリケーションのクラスライブラリの流通性を向上させることを目指している。

 たとえば、流通業のチェーン店を想定して、販売促進のための宣伝を効果的に打つために役立つ次のような照会を行うことができる。

照会1:
「距離が1000メートル以内の店舗と顧客を選び出せ」
SELECT * FROM 店舗表 s, 顧客表 c WHERE distance ( c.所在地, s.所在地 ) < 1000 ;

照会2:
「店舗の所在地から半径1000メートル以内に存在する顧客を選び出せ」 関数の中に別の関数を入れ子にすることもできる。
SELECT * FROM 店舗表 s, 顧客表 c WHERE within( c.所在地, circle ( s.所在地, 1000) )=1 ;

照会3:
「各店舗が担当している商圏内に住んでいるか、または店舗から2000メートル以内に住んでいる顧客を選び出せ。」

  照会3の例を図39に示した。顧客表と店舗表の所在地列と商圏列が構造型のgeometry型によって定義されている。位置列には地図上の点位置情報が格納されていて、店舗表の商圏列には地図上の面(領域)情報が格納されている。そしてSELECT文ではdistance関数によって店舗の所在地(点)と顧客の所在地(点)との距離を計算し、within関数によって各店舗の商圏(多角形)内に顧客の所在地(点)が存在するかどうかを調べている。

図39 SQL/MM地理情報検索の例

 このように、地理情報オブジェクトの位置関係を検査する関数を利用して、さまざまな照会を行うことができる。


とびら 新しい業界標準「SQL99」詳細解説

第一章 高度なデータ操作

SQL99の背景と特徴
SQL99の主な機能強化
  スキーマ定義の新機能
  データ操作と演算子の新機能
  整合性の新機能
  セキュリティ(機密保護)の新機能
  トランザクション管理の新機能
  クライアント/サーバの新機能
高度なリレーショナル操作
  共通表式 WITH句
  再帰SQL
OLAPによる分析手順
  ROLLUP
  CUBE
  GROUPING SETS
ユニオン(UNION)経由の更新
  結合(JOIN)経由の更新


第二章 柔軟さを増したデータ構造

ユーザー定義可能な新しいデータ
  新しい組込みデータ型
  真理値型(BOOLEAN型)
  配列型(ARRAY型)
LOBとは
  LOBデータ型の定義
  LOBデータ型の取り扱い
  LOBロケータの使用
  HOLD LOCATORとFREE LOCATOR
  LOBの挿入(更新)と検索方法の拡張
ユーザー定義型
  ユーザー定義DISTINCT型
ユーザー定義関数
関数のオーバーロード

オブジェクトリレーショナル
  ユーザー定義構造型と列オブジェクト
  ユーザー定義構造型と行オブジェクト
副表(サブテーブル)と継承(インヘリタンス)
  副型を持つ列オブジェクト
  行オブジェクトと経路式
オブジェクトビュー
トリガ


第三章 ストアドプロシージャとSQLJ

クライアント/サーバ環境のための機能強化
  ストアドプロシージャ
  新しいプロシージャ言語
静的埋め込みSQLを実現する「SQLJ」
  パフォーマンスの向上と移植性
  SQLJのコンパイル
  SQLJの記述方法
  SQLJ 対 JDBC
  イテレータの使用
  Javaを使用したストアドプロシージャとUDF
  SQLデータ型としてのJavaクラス
オブジェクトリレーショナル機能の応用例
  SQL/MM全文検索(フルテキスト)
  SQL/MM地理情報(スペーシャル)
今後のSQL標準化動向
  コレクション型の拡張
  オブジェクトリレーショナル機能の拡張
  SQL/MED
  OLAP機能の拡張
  WINDOW句
  自由度が高まるデータアクセス



「Master of IP Network総合インデックス」


Master of IP Network フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Master of IP Network 記事ランキング

本日 月間