我一直在研究这里的例子:https ://docs.marklogic.com/guide/semantics/tde#id_25531
我有一组文档,这些文档由父名称和一组具有自己名称的子节点组成。我想创建一个模板来生成“name1 is-a-parent-of name2”形式的三元组。这是我尝试的测试,带有文档结构的示例:
declareUpdate();
xdmp.documentInsert(
'/test/tde.json',
{
content: {
name:'Joe Parent',
children: [
{
name: 'Bob Child'
},
{
name: 'Sue Child'
}
]
}
},
{permissions : xdmp.defaultPermissions(),
collections : ['test']})
cts.doc('/test/tde.json')
var tde = require("/MarkLogic/tde.xqy");
// Load the user template for user profile rows
var template = xdmp.toJSON(
{
"template":{
"context":"content",
"collections": [
"test"
],
"triples":[
{
"subject": {
"val": "xs:string(name)"
},
"predicate": {
"val": "sem:iri('is-parent-of')"
},
"object": {
"val": "xs:string(children/name)"
}
}
]
}
}
);
//tde.validate([template]),
tde.templateInsert("/templates/test.tde", template);
tde.nodeDataExtract(
[cts.doc( '/test/tde.json' )]
)
但是,上面抛出了一个异常:
[javascript] TDE-EVALFAILED: tde.nodeDataExtract([cts.doc("/test/tde.json")]) -- Eval for Object='xs:string(children/name)' 返回 TDE-BADVALEXPRESSION: Invalid val表达式:XDMP-CAST: (err:FORG0001) 无效转换:(fn:doc("/test/tde.json")/content/array-node("children")/object-node()[1]/text ("name"), fn:doc("/test/tde.json")/content/array-node("children")/object-node()[2]/text("name")) 转换为 xs :细绳?
将数组节点提取为三元组的正确语法是什么?
第二个相关的问题:假设我也想要“child1 is-sibling-of child2”形式的三元组。对于上面的示例,它将是“Bob Child is-sibling-of Sue Child”。什么是正确的语法?我什至不知道如何从这个开始。
TDE甚至是去这里的路吗?还是以编程方式执行此操作更好?即在文档摄取时,直接在文档中生成那些三元组?
(如果相关,正在使用的 ML 版本是 9。)