Обновление встроенных троек с использованием 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
  }

1 ответ

Решение

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

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

Другие вопросы по тегам