我試圖使用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)你似乎有一個額外的換行符在結束標記'sem:subject'之前2)你怎麼知道它不工作?查詢完成後文檔中包含什麼內容? –
我刪除了額外的換行符,它仍然不會改變任何內容,我也更新了該文章,請仔細閱讀它。 –
1)數據庫上啓用了三重索引嗎? 2)文件**中的**是什麼? (當你使用'doc()'或'// sem:triples'來查看XML元素本身) –