【问题标题】:How to query Marklogic triples using SPARQL?如何使用 SPARQL 查询 Marklogic 三元组?
【发布时间】:2016-12-05 06:02:58
【问题描述】:

我使用 Node.js API 插入了一个测试文档:

  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 控制台 webapp 上通过 SPARQL 查询它:

SELECT ?s ?p ?o
  WHERE { ?s ?p ?o }

上面的查询工作正常,它检索到我在上面插入的测试三元组

但是,如果我想按字面值“Paris”进行过滤,我尝试了以下方法:

PREFIX loc: <http://example.com/location/>

SELECT ?s ?p 
  WHERE { ?s ?p loc:Paris }

但在这种情况下,我得到的结果为零。这个语法不正确吗?我只是关注https://docs.marklogic.com/guide/semantics/semantic-searches中的查询的样子@

正确的做法是什么?

【问题讨论】:

    标签: sparql marklogic


    【解决方案1】:

    您参考了这篇博文: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!

    【讨论】:

    • 优秀。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    相关资源
    最近更新 更多