我尝试插入以下测试文档:
db.documents.write(
{
uri: "/test/doc1.json",
contentType: "application/json",
collections: "test",
content: {
name : "Peter",
hobby: "Sleeping",
other: "Some other info",
"triple": {
"subject": {
"datatype": "http://example.com/name/",
"value": "Peter"
},
"predicate": {
"datatype": "http://example.com/relation/",
"value": "livesin"
},
"object": {
"datatype": "http://example.com/location/",
"value": "Paris"
}
}
}
}
).
result(function(response){
console.log("Done loading");
});
然后我查询如下:
var query = [
'SELECT ?s ?p ?o' ,
'WHERE { ?s ?p ?o }' ,
];
db.graphs.sparql('application/sparql-results+json', query.join('\n')
).result(function (result) {
console.log(JSON.stringify(result, null, 2));
}, function(error) {
console.log(JSON.stringify(error, null, 2));
});
结果向我显示了三元组的值,但是如果我还想获取嵌入三元组的整个文档怎么办?是否也可以按文档中的其他字段进行过滤?
最佳答案
没有办法检索包含 SPARQL 查询结果的文档,因为这些结果可能不是特定文档中存在的三元组(相反,它返回由 1 个或多个值组成的“解决方案”)。
如果您知道您正在寻找特定的三元组,并且您想要包含该三元组的文档,我通常会说使用 cts:triple-range-query ;但是,我没有找到通过 Node.js API(或通过 REST)来做到这一点的方法。考虑到这一点,我看到两个选择:
- 插入一个包含文档 URI 作为主语或客体的三元组,然后对该文档发出请求(如 @grtjn 建议)
- 创建一个 REST API 扩展(使用 JavaScript 或 XQuery),调用 cts:search,并将 cts:triple-range-query 作为查询的一部分;从 Node 调用该扩展
关于node.js - Marklogic Node.js API : How to get the document where an embedded triple lives?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40968519/