2

xqueryを使用してmarklogicの埋め込みトリプルを更新しようとしましたが、埋め込みトリプルでは機能していないようですが、同じクエリが他のトリプルで機能しています埋め込みトリプルで更新を実行するときに指定する必要がある他のオプションがあるかどうか教えてください. 私が使用したコードは

  xquery version "1.0-ml";
  import module namespace sem = "http://marklogic.com/semantics" 
  at "/Marklogic/semantics.xqy";

  let $triples := cts:triples(sem:iri("http://smartlogic.com/document#2012-10-26_DNB.OL_(Citi)_DNB_ASA_(DNB.OL)__Model_Update.61259187.xml"),()())
  for  $triple in  $triples
  let $node := sem:database-nodes($triple)
  let $replace := 
  <sem:triple>
  <sem:subject>http://www.example.com/products/1001_Test
  </sem:subject>
   {$node/sem:predicate, $node/sem:object}
  </sem:triple>

  return $node ! xdmp:node-replace(., $replace)

私のドキュメントには次のトリプルが含まれています

  <sem:triples xmlns:sem="http://marklogic.com/semantics">
  <sem:triple>
  <sem:subject>http://smartlogic.com/document#2012-10-26_DNB.OL_(Citi)_DNB_ASA_(DNB.OL)__Model_Update.61259187.xml</sem:subject>
    <sem:predicate>http://www.smartlogic.com/schemas/docinfo.rdf#cik</sem:predicate>
  <sem:object>datatype="http://www.w3.org/2001/XMLSchema#string</sem:object>
  </sem:triple>
 </sem:triples>

この特定の主題をこのようなものに変えてほしい

  <sem:subject>http://www.example.com/products/1001_Test</sem:subject>

しかし、xquery を使用して更新すると、何も変更されず、ドキュメントに埋め込まれたトリプルは同じままです。結果のいずれかが指定した件名に変更されたかどうかを確認しようとしたときに、結果が返されなかったためです。

次のクエリを使用してテストしました。

  SELECT *
  WHERE {
  <http://www.example.com/products/1001_Test> ?predicate ?object
  }
4

1 に答える 1

1

'all'トリプルをサポートするデータベース ノードを要求するときに、オプションを追加する必要がありますsem:database-nodes($triple, 'all')

正直なところ、理由は 100% わかりませんが、これは、sem:triples要素が表示されるドキュメントのルート要素ではないためだと思います。

于 2015-06-24T10:16:16.127 に答える