在 MarkLogic 中使用 xquery 更新嵌入的三元组
Updating embedded triples using xquery in MarkLogic
我尝试使用 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
}
当您请求支持三元组的数据库节点时,您需要添加选项 'all'
:sem:database-nodes($triple, 'all')
。
老实说,我不是 100% 确定原因,但我认为这是因为您的 sem:triples
元素不是它所在文档的根元素。
我尝试使用 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
}
当您请求支持三元组的数据库节点时,您需要添加选项 'all'
:sem:database-nodes($triple, 'all')
。
老实说,我不是 100% 确定原因,但我认为这是因为您的 sem:triples
元素不是它所在文档的根元素。