5 ドキュメントのセマンティク索引付け

情報エクストラクタは、構造化されていないドキュメントから意味のある情報を検索して抽出します。この抽出された情報に基づいてドキュメントを検索する機能は、全文検索エンジンでサポートされるキーワード・ベースの検索より大幅に優れています。

ドキュメントのセマンティク索引付けによって、情報エクストラクタおよびアノテータを使用して、リレーショナル表に格納されているドキュメントにセマンティクに索引付けできる索引タイプが導入されます。セマンティクに索引付けされたドキュメントは、標準のSQL問合せ内でSEM_CONTAINS演算子を使用して検索できます。これらのドキュメントの検索条件は、次の例に示すとおり、ドキュメントから抽出された情報に基づいて機能するSPARQL問合せパターンを使用して表現されます。

SELECT docId
FROM   Newsfeed
WHERE  SEM_CONTAINS (article, 
     ' { ?org    rdf:type            typ:Organization  . 
         ?org    pred:hasCategory    cat:BusinessFinance } ', ..) = 1

Oracle Databaseのドキュメントのセマンティク索引付けを容易にする主要コンポーネントは、次のとおりです。

  • 拡張可能な情報エクストラクタ・フレームワーク: サードパーティの情報エクストラクタをデータベースにプラグインできます。

  • SEM_CONTAINS演算子: 標準のSQL問合せを使用して、抽出された情報に基づいて目的のドキュメントを識別します。

  • SEM_CONTAINS_SELECT補助演算子: SEM_CONTAINS演算子を使用して識別されたドキュメントの関連情報を戻します。

  • SemContext索引タイプ: 情報エクストラクタと対話して索引構造のドキュメント・セットから抽出された情報を管理し、ドキュメントに対するセマンティクに意味のある検索を容易にします。

ドキュメントに対して作成されたエクストラクタ・ポリシーおよびセマンティク索引を管理するためのアプリケーション・プログラミング・インタフェース(API)は、SEM_RDFCTX PL/SQLパッケージで提供されます。「SEM_RDFCTXパッケージ・サブプログラム」に、SEM_RDFCTXパッケージのサブプログラムに関するリファレンス情報があります。

5.1 ドキュメントのセマンティク索引付け用の情報エクストラクタ

情報エクストラクタは、通常、オントロジで支援された自然言語処理エンジンを使用して、構造化されていないドキュメントを処理し、そこから意味のある情報を抽出します。

ドキュメントから抽出される情報の品質と完全性は、エクストラクタごとに異なります。一部のエクストラクタは単にエンティティを識別するのみですが(ドキュメントに基づく人、組織および地理的場所の名前など)、他のエクストラクタは識別したエンティティ間の関係やそれらのエンティティの追加記述の識別を試みます。ドキュメントから抽出された情報がセマンティク索引として管理されている場合、大規模なセットから特定のドキュメントを検索できます。

情報エクストラクタを使用して、リレーショナル表の列に格納されたドキュメントに対してセマンティク索引を作成できます。拡張可能なフレームワークによって、データベースからアクセス可能なサードパーティの情報エクストラクタをデータベースにプラグインできます。エクストラクタ用に作成されたオブジェクト型は、抽出ロジックをカプセル化し、エクストラクタを構成してRDF/XML形式の特定のドキュメントから抽出された情報を受信するメソッドを持ちます。

抽象タイプMDSYS.RDFCTX_EXTRACTORは、すべての情報エクストラクタに共通のインタフェースを定義します。この抽象タイプの実装は、特定の情報エクストラクタと対話して特定のドキュメントのRDF/XMLを生成します。このタイプの実装は、データベース・アプリケーションとして使用できるか、ネットワークにインストールされている(Webサービス・コールアウトを使用してアクセスされる)サードパーティの情報エクストラクタにアクセスできます。例5-1に、RDFCTX_EXTRACTOR抽象タイプの定義を示します。

例5-1 RDFCTX_EXTRACTOR抽象タイプの定義

create or replace type rdfctx_extractor authid current_user as object (
  extr_type        VARCHAR2(32),
  member function  getDescription return VARCHAR2,
  member function  rdfReturnType return VARCHAR2,
  member function  getContext(attribute VARCHAR2) return VARCHAR2,
  member procedure startDriver,
  member function  extractRDF(document CLOB,
                              docId    VARCHAR2) return CLOB,
  member function  extractRdf(document CLOB,
                              docId    VARCHAR2,
                              params   VARCHAR2,
                              options  VARCHAR2 default NULL) return CLOB
  member function  batchExtractRdf(docCursor        SYS_REFCURSOR,
                              extracted_info_table  VARCHAR2,
                              params                VARCHAR2,
                              partition_name        VARCHAR2 default NULL,
                              docId                 VARCHAR2 default NULL,
                              preferences           SYS.XMLType default NULL,
                              options               VARCHAR2 default NULL)  
                              return CLOB,
  member procedure closeDriver
) not instantiable not final
/

RDFCTX_EXTRACTORタイプの特定の実装は、extr_type属性にこのエクストラクタ・タイプの識別子を設定し、getDescriptionメソッドを使用してこのエクストラクタ・タイプの短い説明を戻します。この抽象タイプのすべての実装で、抽出情報がRDFトリプルとして戻されます。現在のリリースでは、RDFトリプルはRDF/XML形式でシリアライズされることが期待されるため、rdfReturnTypeメソッドは'RDF/XML'を戻す必要があります。

エクストラクタ・タイプの実装は、extractRDFメソッドを使用して抽出ロジックをカプセル化し(おそらく独自のインタフェースを使用して外部情報エクストラクタを起動することによって)、抽出情報をRDF/XML形式で戻します。サード・パーティのエクストラクタがいくつかの独自のXMLスキーマを使用して抽出情報を取得する場合は、同等のRDF/XMLを生成するためにXMLスタイル・シートを使用できます。startDriverおよびcloseDriverメソッドは、情報エクストラクタに関係するハウスキーピング操作を実行できます。オプションのparamsパラメータを使用すると、エクストラクタが必要な抽出タイプ(たとえば、目的の抽出品質)に関する追加情報を取得できます。

必要に応じて、batchExtractRdfメンバー関数の実装を提供することによって、エクストラクタ・タイプの実装でバッチ・インタフェースをサポートする場合があります。この関数は入力パラメータdocCursorを介してカーソルを受け入れ、通常はそのカーソルを使用して各ドキュメントを取得し、ドキュメントから情報を抽出し、その抽出情報をextracted_info_table表のpartition_nameパーティションで識別される指定されたパーティションに挿入します。preferencesパラメータは、ポリシーに関連付けられたプリファレンス値の取得に使用されます(「外部ドキュメントの索引付け」およびSEM_RDFCTX.CREATE_POLICYのリファレンスの項を参照してください)。

getContextメンバー関数は属性名を受け入れ、その属性の値を戻します。現在、この関数は、バッチ・インタフェースをサポートしているエクストラクタに対してのみ使用されます。属性名と、それに対応する可能な戻り値を次に示します。

  • BATCH_SUPPORT属性: 戻り値は、エクストラクタがバッチ・インタフェースをサポートするかどうかに応じて、YESまたはNOです。

  • DBUSER属性: 戻り値は、カーソル(docCursorパラメータによって識別される)から行を取得するためにデータベースに接続し、表extracted_info_tableに書き込むデータベース・ユーザーの名前です。

この情報は、索引付けされる表および表extracted_info_tableに適切な権限を付与するために使用されます。

startDriverおよびcloseDriverメソッドは、情報エクストラクタに関係するハウスキーピング操作を実行できます。

General Architecture for Text Engineering (GATE)エンジンのエクストラクタ・タイプは、RDFCTX_EXTRACTORタイプのサブタイプとして定義されます。このエクストラクタ・タイプの実装は、TCP接続を介してGATEエンジンにドキュメントを送信し、エンジンによって抽出された注釈をXML形式で受信して、その独自のXMLドキュメントをRDF/XMLドキュメントに変換します。Oracle DatabaseでGATEエンジンを使用する構成の詳細は、「General Architecture for Text Engineering (GATE)の使用」を参照してください。新しい情報エクストラクタを作成する例は、「新たなエクストラクタ・タイプの作成」を参照してください。

Webサービスとしてデプロイされる情報エクストラクタは、RDFCTX_WS_EXTRACTORタイプ(RDFCTX_EXTRACTORタイプのサブタイプ)を拡張することでデータベースから起動できます。RDFCTX_WS_EXTRACTORタイプはextractRDFメソッドでWebサービス・コールアウトをカプセル化します(関連する属性値をタイプ・コンストラクタで設定することによって、ネットワークベースのエクストラクタの特定の実装でこの実装を再利用できます)。

Thomson Reuters Calaisは、Webサービス・コールアウトを使用してアクセスできるネットワーク・ベースの情報エクストラクタの一例です。RDFCTX_WS_EXTRACTORタイプのサブタイプであるCALAIS_EXTRACTORタイプは、Calais抽出ロジックをカプセル化し、それを使用してドキュメントにセマンティクに索引付けできます。CALAIS_EXTRACTORタイプをセマンティク索引の作成に使用するには、「CALAIS_EXTRACTORタイプの構成」の説明のとおりに、事前にこのタイプをデータベース・インスタンスに対して構成する必要があります。

5.2 エクストラクタ・ポリシー

エクストラクタ・ポリシーは、ポリシーを使用して作成されたセマンティク索引の特性を決定する名前付きのディクショナリ・エンティティです。

各エクストラクタ・ポリシーは、直接的または間接的にエクストラクタ・タイプのインスタンスを参照します。エクストラクタ・タイプのインスタンスを直接参照するエクストラクタ・ポリシーは、オントロジの追加のRDFモデルを含む他のエクストラクタ・ポリシーを構成するために使用できます。

次の例では、GATEエクストラクタ・タイプを使用して作成される基本エクストラクタ・ポリシーを作成しています。

begin
  sem_rdfctx.create_policy (policy_name => 'SEM_EXTR',
                            extractor   => mdsys.gatenlp_extractor());
end;
/

次の例では、前の例のポリシーによって抽出されたメタデータを、geo_ontologyという名前のユーザー定義のRDFモデルと組み合せる依存エクストラクタ・ポリシーを作成します。

begin
  sem_rdfctx.create_policy (policy_name => 'SEM_EXTR_PLUS_GEOONT',
                            base_policy => 'SEM_EXTR',
                            user_models => SEM_MODELS ('geo_ontology'));
end;
/

エクストラクタ・ポリシーを使用して、構造化されていないドキュメントを格納する列に1つ以上のセマンティク索引を作成できます(「ドキュメントに対するセマンティクな索引付け」を参照)。

5.3 セマンティクに索引付けされたドキュメント

リレーショナル表のCLOBまたはVARCHAR2列に格納されたテキスト・ドキュメントは、セマンティクに意味のある検索を容易にするため、MDSYS.SEMCONTEXT索引タイプを使用して索引付けできます。

索引の作成時に指定されたエクストラクタ・ポリシーによって、ドキュメントのセマンティク索引付けに使用される情報エクストラクタが決定されます。ドキュメントごとにRDFトリプルのセットとして取得された抽出情報は、セマンティク・データ・ストアで管理されます。セマンティク索引の各インスタンスは、対応するドキュメントから抽出されたRDFトリプルを保持するシステム生成のRDFモデルに関連付けられます。

次の例は、SEM_EXTRという名前のエクストラクタ・ポリシーを使用して、NEWSFEED表のARTICLE列のテキスト・ドキュメントでArticleIndexという名前のセマンティク索引を作成します。

CREATE INDEX ArticleIndex on Newsfeed (article)
   INDEXTYPE IS mdsys.SemContext PARAMETERS ('SEM_EXTR');

索引に対して作成されたRDFモデルは、内部的に管理され、アプリケーション表には関連付けられません。このようなモデルに格納されているトリプルは、表の列に格納されたドキュメントを変更(更新、挿入、削除など)するために自動的に管理されます。1つのRDFモデルを使用して、表の列に格納されたすべてのドキュメントが索引付けされますが、モデルに格納されたトリプルは、抽出元のドキュメントに対する参照を管理するため、特定のドキュメントから抽出されたすべてのトリプルによって、RDFモデル内の個々のグラフが構成されます。セマンティクに索引付けされたドキュメントは、ドキュメントから抽出されたトリプルを処理するSPARQL問合せパターンを使用して検索できます。

ドキュメントのセマンティク索引を作成する場合、1つ以上のユーザー定義のRDFモデルを含むことが可能な基本エクストラクタ・ポリシーまたは依存ポリシーを使用できます。依存エクストラクタ・ポリシーで索引を作成する場合、SPARQLを使用して指定されたドキュメント検索パターンは、ドキュメントから抽出されたトリプルとユーザー定義モデルで定義されたトリプルを対象とすることができます。

複数のエクストラクタ・ポリシーを使用して1つの索引を作成できますが、その場合は、対応するエクストラクタによって抽出されたトリプルが異なるRDFモデルに別々に保持されます。このような索引を使用したドキュメント検索問合せでは、問合せへの応答に使用する特定のポリシーを選択することができます。たとえば、指定されたドキュメントから都市の名前を抽出する場合にCITY_EXTRという名前のエクストラクタ・ポリシーを作成し、次の例に示すように、このエクストラクタ・ポリシーをSEM_EXTRポリシーと組み合せて使用して、セマンティク索引を作成することができます。

CREATE INDEX ArticleIndex on Newsfeed (article)
   INDEXTYPE IS mdsys.SemContext PARAMETERS ('SEM_EXTR CITY_EXTR');

PARAMETERSリストの最初のエクストラクタ・ポリシーは、問合せが特定のポリシーを参照していない場合、デフォルト・ポリシーとみなされますが、次の例のようにSEM_RDFCTX.SET_DEFAULT_POLICYプロシージャを使用することでセマンティク索引のデフォルトのエクストラクタ・ポリシーを変更できます。

begin
  sem_rdfctx.set_default_policy (index_name => 'ArticleIndex',
                                 policy_name => 'CITY_EXTR');
end;
/

5.4 SEM_CONTAINSと補助演算子

標準のSQL文でSEM_CONTAINS演算子を使用して、リレーショナル表に格納されているドキュメントまたはドキュメント参照を検索できます。

この演算子の構文は次のとおりです。

SEM_CONTAINS(
  column   VARCHAR2 / CLOB,
  sparql   VARCHAR2,
  policy   VARCHAR2,
  aliases  SEM_ALIASES,
  index_status  NUMBER,
  ancoper  NUMBER
 ) RETURN NUMBER;

columnおよびsparql属性は必須です。その他の属性はオプションです(それぞれNULL値を指定できます)。

column属性は、セマンティクに索引付けされるドキュメントまたはドキュメントへの参照を格納する、リレーショナル表内のVARCHAR2またはCLOB列を示します。タイプMDSYS.SEMCONTEXTの索引は、SEM_CONTAINS演算子が使用するこの列で定義される必要があります。

sparql属性はドキュメント検索条件を定義する文字列リテラルであり、SPARQL形式で表現されます。

オプションのpolicy属性はエクストラクタ・ポリシーの名前を指定します(通常は、デフォルトのポリシーをオーバーライドするためです)。セマンティク・ドキュメント索引では、索引作成時に1つ以上のエクストラクタ・ポリシーを指定可能で、これらのポリシーの1つがデフォルトとなり、SEM_CONTAINSへのコールでpolicy属性がnullの場合に使用されます。

オプションのaliases属性は、問合せパターンの修飾名の拡張に使用される1つ以上の名前空間(デフォルトの名前空間を含む)を示します。そのデータ型は、TABLE OF SEM_ALIASという定義を持つSEM_ALIASESです。各SEM_ALIAS要素により、名前空間IDと名前空間値が識別されます。SEM_ALIASデータ型は、(namespace_id VARCHAR2(30), namespace_val VARCHAR2(4000))という定義を持ちます。

オプションのindex_status属性は、1つ以上の伴意を含む依存ポリシーがSEM_CONTAINSの起動に使用されている時のみ関係します。index_status値は、伴意の必要最小限の有効性ステータスを識別します。可能な値は、0(VALID(デフォルト))、1(INCOMPLETE)および2(INVALID)です。

オプションのancoper属性は、問合せでこの演算子とともにSEM_CONTAINS_SELECT補助演算子を使用する際に、使用されるバインディングとして数値を指定します。ancoper属性に指定した数値は、SEM_CONTAINS_SELECT補助演算子のoperbind属性に指定した数値と同じである必要があります。

SEM_CONTAINS演算子は、指定した検索条件に一致するドキュメント・インスタンスごとに1を戻し、他のすべての場合は0を戻します。

SEM_CONTAINS演算子の詳細とその例は、「「SPARQL問合せパターンを使用したドキュメントの検索」」を参照してください。

5.4.1 SEM_CONTAINS_SELECT補助演算子

SEM_CONTAINS_SELECT補助演算子を使用すると、いくつかの検索条件と一致する各ドキュメントの追加情報を戻すことができます。この補助演算子は、単一の数値属性(operbind)を持ち、この属性はバインディングに同じ値を使用することで、SEM_CONTAINS_SELECT補助演算子のインスタンスをSEM_CONTAINS演算子と関連付けます。この補助演算子は、一致ドキュメントからの追加情報を含むCLOB型のオブジェクトを、SPARQL Query Results XML形式で書式設定された状態で戻します。

SEM_CONTAINS_SELECT補助演算子の構文は次のとおりです。

SEM_CONTAINS_SELECT(
  operbind  NUMBER
 ) RETURN CLOB;

SEM_CONTAINS_SELECT補助演算子の詳細とその例は、「ドキュメント内サブグラフの照合でのSPARQL変数に対するバインディング(SEM_CONTAINS_SELECT補助演算子)」を参照してください。

5.4.2 SEM_CONTAINS_COUNT補助演算子

SEM_CONTAINS演算子の起動にSEM_CONTAINS_COUNT補助演算子を使用できます。一致したドキュメントごとに、SEM_CONTAINSの起動で指定されたSPARQLグラフ・パターンの一致サブグラフの数が戻されます。

SEM_CONTAINS_COUNT補助演算子の構文は次のとおりです。

SEM_CONTAINS_COUNT(
  operbind  NUMBER
 ) RETURN NUMBER;

次の抜粋例は、SEM_CONTAINS_COUNT補助演算子を使用して、一致したドキュメントごとに一致サブグラフの数を戻す方法を示しています。

SELECT docId, SEM_CONTAINS_COUNT(1) as matching_subgraph_count
FROM   Newsfeed
WHERE  SEM_CONTAINS (article, 
  '{ ?org   rdf:type          class:Organization  . 
     ?org   pred:hasCategory  cat:BusinessFinance }', .., 
   1)= 1;

5.5 SPARQL問合せパターンを使用したドキュメントの検索

セマンティクに索引付けされたドキュメント(mdsys.SemContext索引タイプを使用して索引付けされたドキュメント)は、標準のSQL問合せ内でSEM_CONTAINS演算子を使用して検索できます。

問合せで、SEM_CONTAINS演算子は2つ以上のパラメータを持つ必要があります(次の例のように、最初のパラメータはドキュメントが格納される列を指定するもので、2番目のパラメータはSPARQL問合せパターンとして表現されるドキュメント検索条件を指定するものです)。

SELECT docId FROM Newsfeed
WHERE  SEM_CONTAINS (article, 
  '{ ?org  rdf:type  <http://www.example.com/classes/Organization>  . 
     ?org  <http://example.com/pred/hasCategory>  
             <http://www.example.com/category/BusinessFinance> }'
           )= 1;

SEM_CONTAINS演算子で指定するSPARQL問合せパターンは、各ドキュメントに対応する個々のグラフに対して照合され、対応するグラフからのトリプルがこの問合せパターンを満たす場合に、ドキュメントは検索条件と一致するとみなされます。前の例のSPARQL問合せパターンは、BusinessFinanceカテゴリに属するOrganizationを参照する個々のグラフ(つまりドキュメント)を識別します。このSQL問合せは、一致ドキュメントに対応する行を結果セットに戻します。前の例は、問合せで使用されるURIが基礎となるエクストラクタによって生成されること、(ドキュメントを検索しているユーザーが)使用中のエクストラクタによって生成されるプロパティおよび語句を把握していることを前提としています。

1つ以上のユーザー定義のRDFモデルを含む依存エクストラクタ・ポリシーを使用して索引を作成した場合、ユーザー・モデルで表明されるトリプルはすべてのドキュメントに共通であるとみなされます。このようなポリシーを含むドキュメント検索では、ドキュメントに対応する個々のグラフ内のトリプルに対して(ユーザー・モデル内のトリプルと組み合せて)検索条件がテストされます。たとえば、次の問合せは、都市を州にマップする地理オントロジ(前の例のgeo_ontology RDFモデル)を使用してニューハンプシャー州の組織に関するすべての記事を特定します。

SELECT docId FROM   Newsfeed
WHERE  SEM_CONTAINS (article, 
        '{ ?org     rdf:type          class:Organization  . 
           ?org     pred:hasLocation  ?city . 
           ?city    geo:hasState      state:NewHampshire }', 
        'SEM_EXTR_PLUS_GEOONT', 
               sem_aliases(                              
                  sem_alias('class', 'http://www.myorg.com/classes/'),
                  sem_alias('pred', 'http://www.myorg.com/pred/'),
                  sem_alias('geo', 'http://geoont.org/rel/'),
                  sem_alias('state', 'http://geoont.org/state/'))) = 1;

前の問合せでは、エクストラクタ・ポリシーSEM_EXTR_PLUS_GEOONT (「エクストラクタ・ポリシー」の例で作成)への参照を使用して、索引付きドキュメントから抽出されたトリプルと、一致ドキュメントを検索するためのユーザー・モデル内のトリプルを組み合せています。この例で、エクストラクタ・ポリシーの名前は、対応する索引がこのポリシーで作成されている場合、またはこれが索引のデフォルトのエクストラクタ・ポリシーの場合はオプションです。問合せパターンで修飾名を使用する場合、SEM_CONTAINS演算子のオプション・パラメータでは、修飾名を拡張するために使用する名前空間を指定できます。

SPARQLベースのドキュメント検索では、SEM_MATCH問合せを通じてサポートされるSPARQL構文を使用できます。

5.6 ドキュメント内の一致サブグラフでのSPARQL変数のバインディング(SEM_CONTAINS_SELECT補助演算子)

SEM_CONTAINS_SELECT補助演算子を使用すると、SEM_CONTAINS演算子を使用して照合された各ドキュメントの追加情報を戻すことができます。

具体的には、この演算子を使用して、SPARQLベースのドキュメント検索条件で使用される変数のバインディングを戻すことができます。この演算子は、SEM_CONTAINS演算子を補助するもので、次の例のように、この演算子の引数としてリテラル数値が使用され、SEM_CONTAINS演算子の特定のインスタンスに関連付けられます。

SELECT docId, SEM_CONTAINS_SELECT(1) as result
FROM   Newsfeed
WHERE  SEM_CONTAINS (article, 
  '{ ?org   rdf:type          class:Organization  . 
     ?org   pred:hasCategory  cat:BusinessFinance }', .., 
   1)= 1;

SEM_CONTAINS_SELECT補助演算子によって、CLOBデータとしてSPARQL Query Results XML形式で変数のバインディングが戻されます。変数は、単一のドキュメントから複数のデータ・インスタンスにバインドされることがあり、その場合は変数のすべてのバインディングが戻されます。次の例は、前述の問合せの出力からの抜粋です(指定した検索条件に一致するドキュメントに対してSEM_CONTAINS_SELECT補助演算子によって戻された値)。

<results>
  <result> 
     <binding name="ORG">
        <uri>http://newscorp.com/Org/AcmeCorp</uri>
     </binding>
  </result> 
  <result>
     <binding name="ORG">
       <uri>http://newscorp.com/Org/ABCCorp</uri>
     </binding>
  </result>
</results>

SEM_CONTAINS_SELECT補助演算子によって戻されるCLOB値に対してXMLTypeのインスタンスを作成し、属性値に基づいて結果をソートするXPath式を適用することで、検索結果をランク付けできます。

デフォルトでは、SEM_CONTAINS_SELECT補助演算子によって、SPARQLベースのドキュメント検索条件で使用されているすべての変数のバインディングが戻されます。ただし、変数のサブセットのみの値が検索に適切な場合、次の例のように、値を戻す必要のある変数の空白区切りのリストを持つSELECT句をSPARQLパターンに含めることができます。

SELECT docId, SEM_CONTAINS_SELECT(1) as result
FROM   Newsfeed
WHERE  SEM_CONTAINS (article, 
        'SELECT ?org  ?city 
         WHERE { ?org     rdf:type          class:Organization  . 
                 ?org     pred:hasLocation  ?city . 
                 ?city    geo:hasState      state:NewHampshire }', .., 
         1) = 1;

5.7 ドキュメント検索操作の品質向上

ドキュメント検索操作の品質は、ドキュメントの索引付けに使用されるエクストラクタによって生成される情報の品質に応じて変化します。抽出される情報が不完全の場合、ドキュメントに注釈を追加できます。

次の例に示すとおり、検索の品質を向上するため、SEM_RDFCTX.MAINTAIN_TRIPLESプロシージャを使用してRDFトリプルの形式で特定のドキュメントに注釈を追加できます。

begin
  sem_rdfctx.maintain_triples(
     index_name      => 'ArticleIndex',
     where_clause    => 'docid in (1,15,20)',  
     rdfxml_content => sys.xmltype(
      '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
                xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
                xmlns:pred="http://example.com/pred/">
       <rdf:Description rdf:about=" http://newscorp.com/Org/ExampleCorp">
         <pred:hasShortName 
               rdf:datatype="http://www.w3.org/2001/XMLSchema#string">
             Example
         </pred:hasShortName>
     </rdf:Description> 
    </rdf:RDF>'));
end;
/

前述の例に指定されている索引名とWHERE句によって、注釈が指定されたドキュメントの特定のインスタンスが識別され、渡されたRDF/XMLコンテンツが使用されて、それらのドキュメントに対応する個々のグラフに他のトリプルが追加されます。これによって、ドメイン・エキスパートとユーザー・コミュニティは、関連するトリプルを追加して一部のドキュメントに注釈を指定することで、検索の品質を向上できます。

5.8 外部ドキュメントの索引付け

ファイル・システムまたはネットワークに格納されているドキュメントに対してセマンティク索引付けを使用できます。この場合、表の列に外部ドキュメントへの参照を格納し、適切なエクストラクタ・ポリシーを使用してその列にセマンティク索引を作成します。

外部ドキュメントに索引を付けるには、次の例に示すように、SEM_RDFCTX.CREATE_POLICYプロシージャのpreferencesパラメータに割り当てるXMLドキュメントを使用して、適切なプリファレンスでエクストラクタ・ポリシーを定義します。

begin
  sem_rdfctx.create_policy (
       policy_name => 'SEM_EXTR_FROM_FILE',
       extractor   => mdsys.gatenlp_extractor()),
       preferences => sys.xmltype('<RDFCTXPreferences>
                                     <Datastore type="FILE"> 
                                        <Path>EXTFILES_DIR</Path>
                                     </Datastore>
                                   </RDFCTXPreferences>')); 
end;
/

プリファレンス・ドキュメントの<Datastore>要素は、索引付けされるドキュメントに使用されているリポジトリのタイプを指定します。type属性の値にFILEを設定した場合、<Path>要素はデータベース内のディレクトリ・オブジェクト(SQL文CREATE DIRECTORYを使用して作成)を識別します。指定したエクストラクタ・ポリシーを使用して索引付けされる表の列には、次の例に示すように、そのディレクトリ・オブジェクト内の個々のファイルへの相対パスが含まれることが期待されます。

CREATE TABLE newsfeed (docid       number, 
                       articleLoc  VARCHAR2(100)); 
INSERT INTO into newsfeed (docid, articleLoc) values
                     (1, 'article1.txt'); 
INSERT INTO newsfeed (docid, articleLoc) values
                     (2, 'folder/article2.txt'); 
 
CREATE INDEX ArticleIndex on newsfeed (articleLoc)
   INDEXTYPE IS mdsys.SemContext PARAMETERS ('SEM_EXTR_FROM_FILE');

HTTPプロトコルを使用してアクセスされるドキュメントに索引を付けるには、次の抜粋に示すとおり、<Datastore>要素のtype属性にURLが設定され、<Path>要素に1つ以上のホストがリストされたプリファレンスを持つエクストラクタ・ポリシーを作成します。

<RDFCTXPreferences>
   <Datastore type="URL"> 
       <Path>http://cnn.com</Path>
       <Path>http://abc.com</Path>
   </Datastore>
</RDFCTXPreferences>

外部ドキュメントのセマンティク索引が作成されるスキーマは、次の例に示すとおり、外部オブジェクトへのアクセスに必要な権限(ファイアウォール外部のドキュメントにアクセスするために使用されるプロキシ・サーバーへのアクセス権限など)を持っている必要があります。

-- Grant read access to the directory object for FILE data store -- 
grant read on directory EXTFILES_DIR to SEMUSR;
 
-- Grant connect access to set of hosts for URL data store -- 
begin
  dbms_network_acl_admin.create_acl (
                acl          => 'network_docs.xml',
                description  => 'Normal Access',
                principal    => 'SEMUSR',
                is_grant     => TRUE,
                privilege    => 'connect');
end;
/
 
begin
  dbms_network_acl_admin.assign_acl (
               acl        => 'network_docs.xml',
               host       =>  'cnn.com',
               lower_port => 1,
               upper_port => 10000);
end;
/

データベースでセマンティクに索引付けされた外部ドキュメントは、Microsoft Word、RTF、PDFなどの一般的な形式のいずれかである場合があります。この場合、Oracle Text機能を利用して、書式設定されたドキュメントからフィルタを通じてプレーン・テキスト・バージョンを抽出します(『Oracle Textリファレンス』でCTX_DOC.POLICY_FILTERプロシージャを参照してください)。書式設定されたドキュメントにセマンティクに索引を付けるには、次の抜粋に示すとおり、エクストラクタ・プリファレンスにCTXポリシーの名前を指定する必要があります。

<RDFCTXPreferences>
   <Datastore type="FILE" filter="CTX_FILTER_POLICY"> 
       <Path>EXTFILES_DIR</Path>
   </Datastore>
</RDFCTXPreferences>

前の例では、CTX_FILTER_POLICYポリシー(CTX_DDL.CREATE_POLICYプロシージャを使用して作成)が、スキーマ内に存在する必要があります。このプリファレンス・ドキュメントを使用してセマンティクに索引付けされる表の列には、書式設定されたドキュメントへのパスを格納できます(そこから、指定されたCTXポリシーを使用してプレーン・テキストが抽出されます)。その後、エクストラクタ・ポリシーに関連付けられている情報エクストラクタが、プレーン・テキストをさらに処理して、セマンティクをRDF/XML形式で抽出します。

5.9 Calaisエクストラクタ・タイプの構成

CALAIS_EXTRACTORタイプ(RDFCTX_WS_EXTRACTORタイプのサブタイプ)を使用すると、ネットワーク(パブリックにアクセス可能なものを含む(OpenCalais.com))上の任意の場所のWebサービス・エンド・ポイントにアクセスできます。

そのためには、次の例に示すように、SYSTEM (SYS … AS SYSDBAではなく)またはDBAロールを持つ別の非SYSユーザーとして接続し、対応するパラメータを設定してCalaisエクストラクタ・タイプのWebサービス・エンド・ポイント、SOAPアクションおよびライセンス・キーを構成する必要があります。

begin
  sem_rdfctx.set_extractor_param (
     param_key   => 'CALAIS_WS_ENDPOINT',
     param_value => 'http://api1.opencalais.com/enlighten/calais.asmx',
     param_desc  => 'Calais web service end-point');
       
  sem_rdfctx.set_extractor_param (
     param_key   => 'CALAIS_KEY',
     param_value => '<Calais license key goes here>',
     param_desc  => 'Calais extractor license key');
 
  sem_rdfctx.set_extractor_param (
     param_key   => 'CALAIS_WS_SOAPACTION',
     param_value => 'http://clearforest.com/Enlighten',
     param_desc  => 'Calais web service SOAP Action');
end;

ファイアウォール外部のWebサービスへのアクセスを可能にするには、次の例のようにプロキシ・ホストのパラメータも設定する必要があります。

begin
  sem_rdfctx.set_extractor_param (
      param_key   => 'HTTP_PROXY',
      param_value => 'www-proxy.example.com',
      param_desc  => 'Proxy server');
end;

5.10 General Architecture for Text Engineering (GATE)の使用

General Architecture for Text Engineering (GATE)は、オープン・ソースの自然言語プロセッサおよび情報エクストラクタです。

GATEの詳細は、http://gate.ac.ukを参照してください。

GATEを使用すると、データベースに格納されているドキュメントのセマンティク索引付けを実行できます。エクストラクタ・タイプmdsys.gatenlp_extractorは、RDFCTX_EXTRACTORタイプのサブタイプとして定義されます。このエクストラクタ・タイプの実装は、構造化されていないドキュメントをTCP接続でGATEエンジンに送信し、対応する注釈を受信し、ユーザー指定のXMLスタイル・シートに従ってRDFに変換します。

情報抽出のリクエストはサーバー・ソケット実装によって処理されます(これは、GATEコンポーネントをインスタンス化し、事前に決定されているポートで抽出リクエストをリスニングします)。使用するmdsys.gatenlp_extractorタイプのすべてのインスタンスに対して、次の例に示すように、GATEリスナーのホストおよびポストがデータベースに記録されます。

begin 
  sem_rdfctx.set_extractor_param (
     param_key   => 'GATE_NLP_HOST',
     param_value => 'gateserver.example.com',
     param_desc  => 'Host for GATE NLP Listener ');
       
  sem_rdfctx.set_extractor_param (
     param_key   => 'GATE_NLP_PORT',
     param_value => '7687',
     param_desc  => 'Port for Gate NLP Listener');
end;

サーバー・ソケット・アプリケーションは構造化されていないドキュメントを受信し、目的のタイプの注釈で注釈セットを構築します。入力ドキュメントおよびいくつかのドメイン固有の特性からの関連フレーズなど、このセット内の各注釈は、追加の特性を含むようにカスタマイズできます。結果の注釈セットは(gate.corpora.DocumentXmlUtils JavaパッケージのannotationSetToXmlメソッドを使用して) XMLにシリアライズされ、ソケット・クライアントに戻されます。

GATEリスナーのサンプルJava実装は、OTNのコード・サンプルおよび使用例のページからダウンロードできます(このページの詳細は、「セマンティク・データの例(PL/SQLとJava)」を参照してください)。

データベース内のmdsys.gatenlp_extractor実装は、XMLでエンコードされる注釈セットを受信し、XMLスタイル・シートを使用してそれをRDF/XMLに変換します。タイプをインスタンス化する際に、mdsys.gatenlp_extractor実装で使用されるデフォルト・スタイル・シート(「GATEエクストラクタの出力で使用されるデフォルトのスタイル・シート」を参照)を、カスタム・スタイル・シートと置き換えることができます。

次の例では、カスタム・スタイル・シートを使用するエクストラクタ・ポリシーを作成して、GATEエクストラクタによって生成された注釈セットからRDFを生成しています。

begin
  sem_rdfctx.create_policy (policy_name => 'GATE_EXTR',
                            extractor   => mdsys.gatenlp_extractor(
      sys.XMLType('<?xml version="1.0"?> 
                 <xsl:stylesheet version="2.0" 
                    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
                   ..
                 </xsl:stylesheet>')));
end;
/

5.11 新たなエクストラクタ・タイプの作成

RDFCTX_EXTRACTORまたはRDFCTX_WS_EXTRACTORエクストラクタ・タイプを拡張して新しいエクストラクタ・タイプを作成できます。

拡張されるエクストラクタ・タイプには、Webサービス・コールを使用してアクセスできる必要があります。新しいエクストラクタ・タイプが作成されるスキーマには、サブタイプを作成できるように追加の権限を付与する必要があります。たとえば、新しいエクストラクタ・タイプがスキーマRDFCTXUに作成される場合、次のコマンドを入力してそのスキーマにUNDERおよびRDFCTX_ADMIN権限を付与する必要があります。

GRANT under ON mdsys.rdfctx_extractor TO rdfctxu;
GRANT rdfctx_admin TO rdfctxu;

たとえば、情報エクストラクタで受信ドキュメントを処理し、抽出された情報を含むXMLドキュメントを戻すことができると仮定します。PL/SQLラッパーを使用して情報エクストラクタを起動できるようにするには、次の例のように、対応するエクストラクタ・タイプの実装を作成します。

create or replace type rdfctxu.info_extractor under rdfctx_extractor (
  xsl_trans   sys.XMLtype,
  constructor function info_extractor (
                 xsl_trans  sys.XMLType ) return self as result,
  overriding member function getDescription return VARCHAR2,
  overriding member function rdfReturnType return VARCHAR2,
  overriding member function extractRDF(document CLOB,
                                        docId    VARCHAR2) return CLOB
)
/
 
create or replace type body rdfctxu.info_extractor as 
  constructor function info_extractor (
                 xsl_trans  sys.XMLType ) return self as result is
  begin
    self.extr_type := 'Info Extractor Inc.'; 
    -- XML style sheet to generate RDF/XML from proprietary XML documents
    self.xsl_trans := xsl_trans; 
    return;
  end info_extractor; 
 
  overriding member function getDescription return VARCHAR2 is
  begin
    return 'Extactor by Info Extractor Inc.';
  end getDescription;
 
  overriding member function rdfReturnType return VARCHAR2 is
  begin
    return 'RDF/XML';
  end rdfReturnType;
 
  overriding member function extractRDF(document CLOB,
                                        docId    VARCHAR2) return CLOB is
    ce_xmlt  sys.xmltype;
  begin
    EXECUTE IMMEDIATE 
      'begin :1 = info_extract_xml(doc => :2); end;'
       USING IN OUT ce_xmlt, IN document;
 
    -- Now pass the ce_xmlt through RDF/XML transformation -- 
    return ce_xmlt.transform(self.xsl_trans).getClobVal();
  end extractRdf;
 
end;

前述の例は、次のとおりです。

  • 作成されたinfo_extractorエクストラクタ・タイプの実装は、基礎となる情報エクストラクタによって使用される独自のXMLスキーマからRDF/XMLを生成するために、XMLスタイル・シート(コンストラクタで設定される)に依存します。

  • extractRDF関数は、info_extract_xml関数が目的の情報エクストラクタに連絡し、渡されたドキュメントから抽出された情報を含むXMLドキュメントを戻すことを前提とします。

  • XMLスタイル・シートは同等のRDF/XMLを生成するためにXMLドキュメントに適用されます(extractRDF関数から戻されます)。

5.12 レンジ・パーティション表に対するローカル・セマンティク索引の作成

ローカル索引を、レンジ・パーティション表のVARCHAR2またはCLOB列に対して作成できます。

そのためには、次の構文を使用します。

CREATE INDEX <index-name> … LOCAL;

次の例では、レンジ・パーティション表とその表に対するローカル・セマンティク索引を作成しています。

CREATE TABLE part_newsfeed (
  docid number, article CLOB, cdate DATE) 
partition by range (cdate)
(partition p1 values less than (to_date('01-Jan-2001')),
 partition p2 values less than (to_date('01-Jan-2004')),
 partition p3 values less than (to_date('01-Jan-2008')),
 partition p4 values less than (to_date('01-Jan-2012'))
);
 
CREATE INDEX ArticleLocalIndex on part_newsfeed (article)
   INDEXTYPE IS mdsys.SemContext PARAMETERS ('SEM_EXTR')
LOCAL;

ローカル・セマンティク索引のすべてのパーティションに、同じポリシー・セットに対して生成された内容が含まれることに注意してください。ローカル索引にALTER INDEX文を使用して、セマンティク索引パーティションに関連付けられたポリシーを追加または削除する場合、各パーティションに関連付けられた同じポリシー・セットを維持する必要があります。この結果を得るには、パーティションのセットを反復するループでALTER INDEX文を使用します。(セマンティク索引の変更に関する詳細は、「セマンティク索引の変更」を参照してください。)

5.13 セマンティク索引の変更

ALTER INDEX文をセマンティク索引とともに使用できます。

ローカル・セマンティク索引では、ALTER INDEX文は指定したパーティションに適用されます。セマンティク索引のALTER INDEXコマンドの一般的な構文は、次のとおりです。

ALTER INDEX <index-name> REBUILD [PARTITION <index-partition-name>]
  [PARAMETERS ('-<action_for_policy> <policy-name>')];

5.13.1 セマンティク索引内にあるすべての既存ポリシーに対する内容の再構築

PARAMETERS句がALTER INDEX文に含まれない場合、セマンティク索引(または索引パーティション)の内容は、索引に現在関連付けられているすべてのポリシーに対して再構築されます。次に2つの例を示します。

ALTER INDEX ArticleIndex REBUILD;
ALTER INDEX ArticleLocalIndex REBUILD PARTITION p1;

5.13.2 セマンティク索引に新しいポリシーに関する内容を追加するための再構築

<action_for_policy>add_policyを使用すると、新しいベース・ポリシーまたは依存ポリシーの内容をセマンティク索引(または索引パーティション)に追加できます。依存ポリシーが追加されている場合、およびそのベース・ポリシーがまだ索引の一部ではない場合は、ベース・ポリシーの内容も暗黙的に追加されます(ベース・ポリシー定義の一部として指定されるエクストラクタを起動することによって行います)。次に、例を示します。

ALTER INDEX ArticleIndex REBUILD PARAMETERS ('-add_policy MY_POLICY');

5.13.3 既存ポリシーに関する内容のセマンティク索引からの再構築

<action_for_policy>rebuild_policyを使用すると、現在索引に関連付けられている既存ポリシーのセマンティク索引(または索引パーティション)の内容を再構築できます。次に、例を示します。

ALTER INDEX ArticleIndex REBUILD PARAMETERS ('-rebuild_policy MY_POLICY');

5.13.4 セマンティク索引から既存ポリシーに関する内容を削除するための再構築

<action_for_policy>drop_policyを使用すると、セマンティク索引(または索引パーティション)から既存のベース・ポリシーまたは依存ポリシーに対応する内容を削除できます。ベース・ポリシーが索引(または索引パーティション)の唯一のポリシーの場合、またはベース・ポリシーがこの索引(または索引パーティション)に関連付けられた依存ポリシーによって使用される場合、ベース・ポリシーの内容の削除は失敗することに注意してください。

次の例では、索引からポリシーの内容を削除しています。

ALTER INDEX ArticleIndex REBUILD PARAMETERS ('-drop_policy MY_POLICY');

5.14 CREATE INDEXおよびALTER INDEXによるエクストラクタに固有なパラメータの引渡し

CREATE INDEXおよびALTER INDEX文では、エクストラクタが必要とするパラメータを引渡しできます。

これらのパラメータは、extractRdfおよびbatchExtractRdfメソッドのparamsパラメータを使用して、エクストラクタに渡されます。次の2つの例にその使用方法を示します。

CREATE INDEX ArticleIndex on Newsfeed (article)
  INDEXTYPE IS mdsys.SemContext PARAMETERS ('SEM_EXTR=(NE_ONLY)');

ALTER INDEX ArticleIndex REBUILD 
  PARAMETERS ('-add_policy MY_POLICY=(NE_ONLY)');

5.15 ドキュメントを中心にした推論の実行

ドキュメント中心の推論とは、各ドキュメントから個々に推論する機能です。

2つの異なるドキュメントから抽出されたトリプルを、一緒に推論に使用することはできません。一般的なコーパス中心の推論の場合は、これとは対照的に、複数のドキュメントから抽出されたトリプルの組合せから新しいトリプルを推論できます。

検索結果にドキュメントが含まれることは、そのドキュメントのみを対象に抽出または推論された(あるいはその両方が行われた)トリプルに基づくため(コーパスの他のドキュメントから抽出または推論された(あるいはその両方が行われた)トリプルは、そのドキュメントの選択に何の役割も果たさないため)、ドキュメント中心の推論はドキュメント検索アプリケーションに適しています。(たとえば、データの信頼性またはドキュメント作成者のバイアスに違いがあるためにドキュメント間に一貫性がない場合、ドキュメント中心の推論が推奨されることがあります。)

ドキュメント中心の推論を実行するには、SEM_APIS.CREATE_ENTAILMENTプロシージャへのコールでoptions => 'LOCAL_NG_INF=T'を指定して、名前付きグラフをベースにしたローカル推論(「名前付きグラフをベースにしたローカル推論(NGLI)」を参照)を使用します。

ドキュメント中心の推論を通じて作成された伴意をセマンティク索引の内容として含めるには、例5-2に示すとおり、依存ポリシーを作成してそのポリシーをセマンティク索引に追加します。

例5-2 ドキュメント中心の推論の使用

-- Create entailment 'extr_data_inf' using document-centric inference
-- assuming:
--   model_name for semantic index based on base policy: 'RDFCTX_MOD_1'
--    (model name is available from the RDFCTX_INDEX_POLICIES view; 
--     see RDFCTX_INDEX_POLICIES View)
--   ontology: dataOntology
--   rulebase: OWL2RL
-- options: 'LOCAL_NG_INF=T' (for document-centric inference)
BEGIN
sem_apis.create_entailment('extr_data_inf',
  models_in    => sem_models('RDFCTX_MOD_1', 'dataOntology'),
  rulebases_in => sem_rulebases('OWL2RL'),
  options      => 'LOCAL_NG_INF=T');
END;
/
-- Create a dependent policy to augment data extracted using base policy
-- with content of entailment extr_data_inf (computed in previous statement)
BEGIN
sem_rdfctx.create_policy (
  policy_name => 'SEM_EXTR_PLUS_DATA_INF',
  base_policy => 'SEM_EXTR',
  user_models => NULL,
  user_entailments => sem_models('extr_data_inf'));
END;
/
-- Add the dependent policy to the ARTICLEINDEX index.
EXECUTE sem_rdfctx.add_dependent_policy('ARTICLEINDEX','SEM_EXTR_PLUS_DATA_INF');

5.16 セマンティク索引付に関するメタデータのビュー

この項では、セマンティク索引付けのメタデータを含むビューについて説明します

5.16.1 MDSYS.RDFCTX_POLICIESビュー

現在のスキーマで定義されるエクストラクタ・ポリシーに関する情報は、MDSYS.RDFCTX_POLICIESビューに保持されます(表5-1に示す列、およびエクストラクタ・ポリシーごとに1つの行が含まれます)。

表5-1 MDSYS.RDFCTX_POLICIESビューの列

列名 データ型 説明

POLICY_OWNER

VARCHAR2(32)

エクストラクタ・ポリシーの所有者

POLICY_NAME

VARCHAR2(32)

エクストラクタ・ポリシーの名前

EXTRACTOR

MDSYS.RDFCTX_EXTRACTOR

エクストラクタ・タイプのインスタンス

IS_DEPENDENT

VARCHAR2(3)

エクストラクタ・ポリシーがベース・ポリシーに依存する場合はYESを含み、エクストラクタ・ポリシーがベース・ポリシーに依存しない場合はNOを含みます。

BASE_POLICY

VARCHAR2(32)

依存ポリシーの場合、ベース・ポリシーの名前

USER_MODELS

MDSYS.RDF_MODELS

依存ポリシーの場合、そのポリシーに含まれるRDFモデルのリスト

5.16.2 RDFCTX_INDEX_POLICIESビュー

現在のスキーマで定義されたセマンティク索引、および索引の作成に使用されたエクストラクタ・ポリシーに関する情報は、MDSYS.RDFCTX_POLICIESビューに保持されます(表5-2に示す列、およびセマンティク索引およびエクストラクタ・ポリシーの組合せごとに1つの行が含まれます)。

表5-2 MDSYS.RDFCTX_INDEX_POLICIESビューの列

列名 データ型 説明

INDEX_OWNER

VARCHAR2(32)

セマンティク索引の所有者

INDEX_NAME

VARCHAR2(32)

セマンティク索引の名前

INDEX_PARTITION

VARCHAR2(32)

索引パーティションの名前(LOCAL索引のみ)

POLICY_NAME

VARCHAR2(32)

エクストラクタ・ポリシーの名前

EXTR_PARAMETERS

VARCHAR2(100)

エクストラクタに指定されたパラメータ

IS_DEFAULT

VARCHAR2(3)

POLICY_NAMEが索引のデフォルトのエクストラクタ・ポリシーの場合はYESを含み、POLICY_NAMEが索引のデフォルトのエクストラクタ・ポリシーではない場合はNOを含みます。

STATUS

VARCHAR2(10)

VALID(索引が有効の場合)、INPROGRESS(索引が作成中の場合)またはFAILED(索引の作成中にシステム障害が発生した場合)が含まれます。

RDF_MODEL

VARCHAR2(32)

索引データを保持するRDFモデルの名前

5.16.3 RDFCTX_INDEX_EXCEPTIONSビュー

現在のスキーマでセマンティク索引を作成または保持する間に発生した例外に関する情報は、MDSYS.RDFCTX_INDEX_EXCEPTIONSビューに保持されます(表5-3に示す列、および例外ごとに1つの行が含まれます)。

表5-3 MDSYS.RDFCTX_INDEX_EXCEPTIONSビューの列

列名 データ型 説明

INDEX_OWNER

VARCHAR2(32)

例外に関連付けられたセマンティク索引の所有者

INDEX_NAME

VARCHAR2(32)

例外に関連付けられたセマンティク索引の名前

POLICY_NAME

VARCHAR2(32)

例外に関連付けられたエクストラクタ・ポリシーの名前

DOC_IDENTIFIER

VARCHAR2(38)

例外に関連付けられたドキュメントの行識別子(ROWID)

EXCEPTION_TYPE

VARCHAR2(13)

例外のタイプ

EXCEPTION_CODE

NUMBER

例外に関連付けられたエラー・コード

EXCEPTION_TEXT

CLOB

例外に関連付けられたテキスト

EXTRACTED_AT

TIMESTAMP

例外が発生した時刻

5.17 GATEエクストラクタの出力で使用されるデフォルトのスタイル・シート

この項では、mdsys.gatenlp_extractor実装が注釈セット(XMLでエンコード済)をRDF/XMLに変換するために使用するデフォルトのXMLスタイル・シートをリストします。

(このエキストラクタの説明は、「General Architecture for Text Engineering (GATE)の使用」に記載されています。)

<?xml version="1.0"?> 
  <xsl:stylesheet version="2.0" 
                   xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > 
     <xsl:output encoding="utf-8" indent="yes"/> 
     <xsl:param name="docbase">http://xmlns.oracle.com/rdfctx/</xsl:param>
     <xsl:param name="docident">0</xsl:param>
     <xsl:param name="classpfx">
       <xsl:value-of select="$docbase"/>
       <xsl:text>class/</xsl:text> 
     </xsl:param>
     <xsl:template match="/">
        <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
                 xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
                 xmlns:owl="http://www.w3.org/2002/07/owl#" 
                 xmlns:prop="http://xmlns.oracle.com/rdfctx/property/">  
        <xsl:for-each select="AnnotationSet/Annotation"> 
          <rdf:Description> 
            <xsl:attribute name="rdf:about"> 
              <xsl:value-of select="$docbase"/>
              <xsl:text>docref/</xsl:text>
              <xsl:value-of select="$docident"/>
              <xsl:text>/</xsl:text>
              <xsl:value-of select="@Id"/>
            </xsl:attribute>
            <xsl:for-each select="./Feature"> 
              <xsl:choose>
                <xsl:when test="./Name[text()='majorType']"> 
                  <rdf:type> 
                    <xsl:attribute name="rdf:resource"> 
                       <xsl:value-of select="$classpfx"/>
                       <xsl:text>major/</xsl:text>
                       <xsl:value-of select="translate(./Value/text(),
                                                       ' ', '#')"/>
                    </xsl:attribute>  
                  </rdf:type>
                </xsl:when>
                <xsl:when test="./Name[text()='minorType']"> 
                  <xsl:element name="prop:hasMinorType"> 
                    <xsl:attribute name="rdf:resource"> 
                       <xsl:value-of select="$docbase"/>
                       <xsl:text>minorType/</xsl:text>
                       <xsl:value-of select="translate(./Value/text(),
                                                       ' ', '#')"/>
                    </xsl:attribute>  
                  </xsl:element> 
                </xsl:when>
                <xsl:when test="./Name[text()='kind']"> 
                  <xsl:element name="prop:hasKind"> 
                    <xsl:attribute name="rdf:resource"> 
                       <xsl:value-of select="$docbase"/>
                       <xsl:text>kind/</xsl:text>
                       <xsl:value-of select="translate(./Value/text(),
                                                       ' ', '#')"/>
                    </xsl:attribute>  
                  </xsl:element> 
                </xsl:when>
                <xsl:when test="./Name[text()='locType']"> 
                  <xsl:element name="prop:hasLocType"> 
                    <xsl:attribute name="rdf:resource"> 
                       <xsl:value-of select="$docbase"/>
                       <xsl:text>locType/</xsl:text>
                       <xsl:value-of select="translate(./Value/text(),
                                                       ' ', '#')"/>
                    </xsl:attribute>  
                  </xsl:element> 
                </xsl:when>
                <xsl:when test="./Name[text()='entityValue']"> 
                  <xsl:element name="prop:hasEntityValue"> 
                    <xsl:attribute name="rdf:datatype"> 
                      <xsl:text>
                         http://www.w3.org/2001/XMLSchema#string
                      </xsl:text>
                    </xsl:attribute> 
                    <xsl:value-of select="./Value/text()"/>
                  </xsl:element> 
                </xsl:when>
                <xsl:otherwise> 
                  <xsl:element name="prop:has{translate(
                                        substring(./Name/text(),1,1),
                                        'abcdefghijklmnopqrstuvwxyz',
                                        'ABCDEFGHIJKLMNOPQRSTUVWXYZ')}{
                                      substring(./Name/text(),2)}"> 
                     <xsl:attribute name="rdf:datatype"> 
                        <xsl:text>
                          http://www.w3.org/2001/XMLSchema#string
                        </xsl:text> 
                     </xsl:attribute> 
                    <xsl:value-of select="./Value/text()"/>
                  </xsl:element> 
                </xsl:otherwise> 
              </xsl:choose>
            </xsl:for-each> 
          </rdf:Description> 
        </xsl:for-each>
        </rdf:RDF> 
      </xsl:template>
   </xsl:stylesheet>