4

marklogic では、トリプルを既存のドキュメントに埋め込むことができます。cts 検索クエリを使用してドキュメントを返すにはどうすればよいですか。ドキュメントの例は次のとおりです。

<ContentVersion>
  <Name>Testing</Name>
  <Status>Approved</Status>
  <sem:triples xmlns:sem="http://marklogic.com/semantics">
   <sem:triple>
      <sem:subject>http://mycontent/content/Testing</sem:subject>
      <sem:predicate>is</sem:predicate>
      <sem:object>Approved</sem:object>
 </sem:triple>
</sem:triples>
</ContentVersion>

以下のクエリを試す場合

let $query := cts:word-query('Testing',"case-insensitive")
let $sparql := "PREFIX cts: <http://marklogic.com/cts#>
                DESCRIBE ?s 
                WHERE{ 
                   ?s ?p ?o .
                   FILTER cts:contains(?o, cts:word-query('Testing')) 
                }"
let $results := sem:sparql($sparql,(),("default-graph=magician"),($query))  
return(sem:rdf-serialize($results,'rdfxml'))

空の結果が得られます。なぜ何も返されないのかについてのアイデアはありますか? MarkLogic 7 を使用しています

4

1 に答える 1

7

cts:contains は、'Approved' のみを含む ?o にフォーカスされています。これが、cts クエリを間違った方法で使用しているからではなく、sem:sparql が結果を返さない理由です。

(アップデート..)

アプローチが有効であることを確認するために、これを試してみましたが、うまくいきました:

xquery version "1.0-ml";

let $xml := <ContentVersion>
  <Name>Testing</Name>
  <Status>Approved</Status>
  <sem:triples xmlns:sem="http://marklogic.com/semantics">
   <sem:triple>
      <sem:subject>http://mycontent/content/Testing</sem:subject>
      <sem:predicate>is</sem:predicate>
      <sem:object>Approved</sem:object>
 </sem:triple>
</sem:triples>
</ContentVersion>
return xdmp:document-insert("/test.xml", $xml, (), "magician")
;

let $query := cts:word-query('Testing',"case-insensitive")
let $sparql := "PREFIX cts: <http://marklogic.com/cts#>
                DESCRIBE ?s 
                WHERE{ 
                   ?s ?p ?o .
                   FILTER cts:contains(?o, cts:word-query('Approved')) 
                }"
let $results := sem:sparql($sparql,(),("default-graph=magician"),($query))  
return $results

トリプル インデックスが有効になっている任意のデータベースに対して QC でこれを実行します。

コレクション 'magician' を含むドキュメントを挿入してもよろしいですか? これが、MarkLogic を使用して特定のグラフ内に埋め込まれたトリプルを取得する方法です。

チッ!

于 2016-02-04T16:35:39.550 に答える