2016-12-05 17 views
0

Iは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"); 
    }); 

そしてIは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

これを行う正しい方法は何ですか?

答えて

4

あなたはこのブログ記事を参照: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プロパティを使用することにより、あなたはないIRIとして、値としてそれを読むためにMarkLogicを教えてください。だから、あなたの例であなたがすべき使用のいずれか:

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!

+0

優れています。ありがとう! –

関連する問題