2016-12-05 2 views
0

я вставил тестовый документ с помощью Node.js API:Как запросить тропы Marklogic с помощью SPARQL?

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

Затем я попытался запрашивая его через SPARQL на консоли веб-приложение MarkLogic:

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 свойство внутри субъекта, предиката и/или объекта, вы говорите 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!

+0

Отлично. Благодаря! –

Смежные вопросы