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形式で抽出します。