2015-03-17 2 views
1

Может ли кто-нибудь указать мне на простые примеры семантической маркировки и запроса семантически помеченных документов в MarkLogic?Поиск семантически отмеченных документов в MarkLogic

Я довольно новый в этой области, поэтому некоторые примеры уровня начинающих будут делать.

ответ

3

Когда вы говорите «семантически отмеченные», вы имеете в виду регулярные документы XML, которые имеют в них несколько троек? Обсуждение и примеры в http://docs.marklogic.com/guide/semantics/embedded довольно хороши для этого.

Начните с включения тройного индекса в базе данных. Затем вставьте тестовый документ. Это всего лишь XML, но элемент sem:triple представляет собой семантический факт.

xdmp:document-insert(
    'test.xml', 
    <test> 
    <source>AP Newswire</source> 
    <sem:triple date="1972-02-21" confidence="100"> 
     <sem:subject>http://example.org/news/Nixon</sem:subject> 
     <sem:predicate>http://example.org/wentTo</sem:predicate> 
     <sem:object>China</sem:object> 
    </sem:triple> 
    </test>) 

Затем запросите его. Пример запроса довольно сложный. Чтобы понять, что происходит, я бы вставлял вариации в этот образец документа, используя разные URI, а не только test.xml и посмотрел, как совпадают различные условия запроса. Попробуйте использовать только компонент SPARQL без дополнительного запроса cts. Попробуйте cts:search без SPARQL, только cts:query.

xquery version "1.0-ml"; 
import module namespace sem = "http://marklogic.com/semantics" 
    at "/MarkLogic/semantics.xqy"; 
sem:sparql(' 
    SELECT ?country 
    WHERE { 
<http://example.org/news/Nixon> <http://example.org/wentTo> ?country 
    } 
    ', 
(), 
(), 
cts:and-query((
    cts:path-range-query("//sem:triple/@confidence", ">", 80) , 
    cts:path-range-query("//sem:triple/@date", "<",  xs:date("1974-01-01")), 
    cts:or-query((
    cts:element-value-query(xs:QName("source"), "AP Newswire"), 
    cts:element-value-query(xs:QName("source"), "BBC")))))) 
+0

спасибо. – callow

3

Если вы говорите об обогащении своего контента семантической технологией, которая не предоставляется непосредственно MarkLogic.

Вы можете обогатить свой контент извне, например, вызвав публичную службу, такую ​​как предоставленная OpenCalais, а затем вставьте обогащения в контент перед вставкой.

Вы также можете создавать списки значений поиска, а затем использовать cts: выделить, чтобы отметить такие термины в вашем контенте. Это может быть столь же просто, как:

let $labels := ("MarkLogic", "StackOverflow") 
return 
    cts:highlight($doc, cts:word-query($labels), <b>{$cts:text}</b>) 

Или с более динамичной замены с использованием spraql:

let $labels := map:new() 
let $_ := 
    for $result in sem:sparql(' 
    PREFIX demo: <http://www.marklogic.com/ontologies/demo#> 

    SELECT DISTINCT ?label 
    WHERE { 
     ?s a demo:person. 
     { 
     ?s demo:fullName ?label 
     } UNION { 
     ?s demo:initialsName ?label 
     } UNION { 
     ?s demo:email ?label 
     } 
    } 
    ') 
    return 
    map:put($labels, map:get($result, 'label'), 'person') 
return 
    cts:highlight($doc, cts:word-query(map:keys($labels)), 
    let $result := sem:sparql(concat(' 
     PREFIX demo: <http://www.marklogic.com/ontologies/demo#> 

     SELECT DISTINCT ?s ?p 
     { 
     ?s a demo:', map:get($labels, $cts:text), ' . 
     ?s ?p "', $cts:text, '" . 
     } 
    ')) 
    return 
     if (map:contains($labels, $cts:text)) 
     then 
     element { xs:QName(fn:concat("demo:", map:get($labels, $cts:text))) } { 
      attribute subject { map:get($result, 's') }, 
      attribute predicate { map:get($result, 'p') }, 
      $cts:text 
     } 
     else() 
) 

НТН!

+0

Да, что помогает. – callow

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