Обновление встроенных троек с использованием 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
элемент не является корневым элементом документа, в котором он появляется.