如何使用SPARQL查询Marklogic三元组?
问题描述:
我插入使用Node.js的API测试文档:如何使用SPARQL查询Marklogic三元组?
db.documents.write(
{
uri: "/test/doc1.json",
contentType: "application/json",
collections: "test",
content: {
name : "Peter",
"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");
});
然后我试图在Marklogic控制台web应用程序通过SPARQL查询它:
SELECT ?s ?p ?o
WHERE { ?s ?p ?o }
上面的查询工作正常,它检索测试三重我上面插入
但是,如果我想用文字值“巴黎”来过滤,我试过如下:
PREFIX loc: <http://example.com/location/>
SELECT ?s ?p
WHERE { ?s ?p loc:Paris }
但在这种情况下,我得到零结果。这个语法不正确?我只是下面的查询中https://docs.marklogic.com/guide/semantics/semantic-searches
是什么做的正确方法是什么样子?
答
你提到这个博客文章:http://developer.marklogic.com/blog/managed-vs-unmanaged-triples
遗憾的是它没有显示最好的例子。写一个三重的更好的方式是这样的:
{
"triples": [{
"triple": {
"subject": "http://dbpedia.org/resource/Argo_(2012_film)",
"predicate": "http://dbpedia.org/ontology/producer",
"object": "http://dbpedia.org/resource/George_Clooney"
}
}]
}
通过使用内部的主语,谓语和/或对象value
属性,你告诉MarkLogic阅读它作为一个值,而不是作为一个IRI。所以,你的榜样,你要么使用:
SELECT ?s ?p
WHERE {
?s ?p ?o.
FILTER(STR(?o) = "Paris")
}
或更改您的JSON到:
"triple": {
"subject": "http://example.com/name/Peter",
"predicate":http://example.com/relation/livesin",
"object": http://example.com/location/Paris"
}
HTH!
优秀。谢谢! –