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;