我一直在研究这里的例子:https://docs.marklogic.com/guide/semantics/tde#id_25531
我有一组文档,这些文档由父名称和具有自己名称的子节点数组构成。我想创建一个模板,生成格式为#34的三元组; name1是-2-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 =' xs:string(儿童/名称)'返回TDE-BADVALEXPRESSION:无效的val表达式:XDMP-CAST :(错误:FORG0001)无效的强制转换:(fn:doc(" /test/tde.json")/ content / array-node(&#34) ; children")/ object-node()[1] / text(" name"),fn:doc(" /test/tde.json")/ content / array -node(" children")/ object-node()[2] / text(" name"))强制转换为xs:string?
将数组节点提取到三元组的正确语法是什么?
第二个有点相关的问题:说我也想要形式三元组" child1 is-sibling-of child2"。对于上面的例子,它将是" Bob Child是Sue Child的兄弟姐妹"。这个的正确语法是什么?我甚至不确定如何从这个开始。
TDE甚至可以去这里吗?或者以编程方式执行此操作会更好吗?即在文件摄取时,直接在文档中生成这些三元组?
(如果相关,则使用的ML版本为9.)
答案 0 :(得分:3)
更改模板的上下文以匹配每个子项,然后从每个子项而不是父项中投影三元组。
上下文为-L/usr/local/cuda-9.0/lib64 -lcudart -lcufft
,对象val为children
,然后为了选择它的父级,将相对于子级的主题val的选择调整为xs:string(name)
。
xs:string(../../name)