Обновление встроенных троек с помощью xquery в MarkLogic

Я попытался обновить встроенные тройки в marklogic с помощью xquery, но, похоже, он не работает для встроенных троек, однако тот же запрос работает для других троек. Можете ли вы сказать мне, есть ли какой-либо другой параметр, который необходимо указать при выполнении обновления для встроенных троек? . Код, который я использовал,

  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
  }

person Ankita Bhowmik    schedule 24.06.2015    source источник
comment
1) кажется, у вас есть лишний символ новой строки перед закрывающим тегом sem:subject 2) откуда вы знаете, что он не работает? Что находится в документе после завершения запроса?   -  person Florent Georges    schedule 24.06.2015
comment
Я удалил лишнюю новую строку, это все равно ничего не меняет, также я обновил сообщение, пожалуйста, загляните в него.   -  person Ankita Bhowmik    schedule 24.06.2015
comment
1) включен ли тройной индекс в вашей базе данных? 2) что в документе? (когда вы используете doc() или //sem:triples для просмотра самих элементов XML)   -  person Florent Georges    schedule 24.06.2015


Ответы (1)


Вам нужно добавить опцию 'all', когда вы запрашиваете узлы базы данных, поддерживающие тройку: sem:database-nodes($triple, 'all').

Честно говоря, я не уверен на 100%, почему, но я думаю, что это потому, что ваш элемент sem:triples не является корневым элементом документа, в котором он появляется.

person Florent Georges    schedule 24.06.2015