2013-11-19 3 views
6

Я пытался исследовать RDF Тройной магазин функцию и Семантический поиск возможности MarkLogic 7, а затем запрос с использованием SPARQL. Я был в состоянии выполнять некоторые основные операции, такие как:MarkLogic 7: семантический поиск

xquery version "1.0-ml"; 
import module namespace sem = "http://marklogic.com/semantics"at"/MarkLogic/semantics.xqy"; 
sem:rdf-insert(sem:triple(sem:iri("http://example.org/ns/people#m"), 
sem:iri("http://example.com/ns/person#firstName"), "Sam"),(),(),"my collection") 

, который создает тройную, а затем запросить его с помощью следующей SPARQL:

PREFIX ab: <http://example.org/ns/people#> 
PREFIX ac: <http://example.com/ns/person#> 
SELECT ?Name 
WHERE 
{ ab:m ac:firstName ?Name . } 

, который извлекает Сэм как результат. Отредактировано: В моем случае использования, у меня есть разделителей файл (Structured данные) имея 1 миллиард записей, которые я заглатывание в ML с помощью МЛКПА, которая хранится в ML, например, как:

<root> 
<ID>1000-000-000--000</ID> 
<ACCOUNT_NUM>9999</ACCOUNT_NUM> 
<NAME>Vronik</NAME> 
<ADD1>D7-701</ADD1> 
<ADD2>B-Valentine</ADD2> 
<ADD3>Street 4</ADD3> 
<ADD4>Fifth Avenue</ADD4> 
<CITY>New York</CITY> 
<STATE>NY</STATE> 
<HOMPHONE>0002600000</HOMPHONE> 
<BASEPHONE>12345</BASEPHONE> 
<CELLPHONE>54321</CELLPHONE> 
<EMAIL_ADDR>[email protected]</EMAIL_ADDR> 
<CURRENT_BALANCE>10000</CURRENT_BALANCE> 
<OWNERSHIP>JOINT</OWNERSHIP> 
</root> 

Теперь я хочу использовать функцию RDF/Semantic для моего набора данных выше. Однако, я не могу понять, нужно ли мне, чтобы преобразовать выше документ в RDF, как показано ниже (как показано на <NAME>) при условии, что это правильный путь:

<sem:triple> 
    <sem:subject>unique/uri/Person 
    </sem:subject> 
    <sem:predicate>unique/uri/Name 
    </sem:predicate> 
    <sem:object datatype="http://www.w3.org/2001/XMLSchema#string" 
    xml:lang="en">Vronik 
    </sem:object> 
    </sem:triple> 

, а затем глотают эти документы в ML и поиск с использованием SPARQL, или мне нужно просто глотать мои документы, а затем отдельно проглатывать тройки, полученные из внешних источников и как-то (как .. ??) связывать их с моими документами, а затем запрашивать с помощью SPARQL? Или есть другой способ, которым я должен это сделать?

+0

Я d ожидайте, что XML на основе документа станет чем-то более похожим: ': id" 1000-000-000--000 "; : accountNum "9999" ^^ xsd: int; : название «Vronik»; : add1 "D7-701"; ...; : собственность: JOINT .' –

+0

Это значит быть XML, Джошуа? Это больше похоже на N3. Шрей опубликовал свой пример в схеме «sem: triple», так как MarkLogic хранит тройки. Он может читать RDF-XML, NTriple, N3 и т. Д. Через http://docs.marklogic.com/sem:rdf-parse - но неясно, что Шрей нуждается в этом. – mblakele

+0

@mblakele @Joshua Tayler: обновил мой qn. В основном у меня есть файл с разделителями **, который я проглатываю через ML. 'sem: triple' - это мое понимание, верно ли это, что мой исходный документ должен быть _ преобразован в_, а затем проглочен? Я хотел бы выполнить массовую загрузку/преобразование, поскольку у меня около миллиарда записей. –

ответ

3

Как говорит Майкл, есть много способов, которыми вы могли бы пойти с этим. Это потому, что MarkLogic 7 настолько гибкий - вы можете выразить информацию как тройки или как XML (или как JSON или ...), так и модели данных mix'n'match и языки запросов

Первое, что нужно выяснить - чего вы пытаетесь достичь? Если вы просто хотите, чтобы ваши ноги мокрые от смеси MarkLogic о XML и троек, вот что я предлагаю:

  1. глотают свои XML-документы, как указано выше. Если у вас есть что-то тяжелое, например описание учетной записи или аннотации свободного текста, тем лучше.

  2. Использование XQuery или XSLT, добавьте тройку к каждому документу, который представляет город , например. для образца документа вы публикуемые, добавьте

    --this документ URI-- уникальных/URI/Расположение Нью-Йорк

  3. импорт тройки из Интернета, которые отображают название городов в штаты и почтовых индексы (например, от geonames)

  4. теперь со смесью SPARQL и XQuery вы можете искать, например текущий баланс каждой учетной записи в каком-либо почтовом индексе (даже если ваши документы не содержат почтовых индексов).

Документация дает хорошее описание загрузочных троек из внешних источников с использованием mlcp.

См http://docs.marklogic.com/guide/semantics/setup

и для более детальной информации о загрузке троек см http://docs.marklogic.com/guide/semantics/loading

Примечание также, что теперь вы можете запускать либо XQuery или SPARQL (или SQL) запросы непосредственно из консоли запросов на http://your-host:8000/qconsole/

+0

thnx.clears несколько вещей. Однако, обновленный в qn, у меня есть файл с разделителями, который я глотаю через MLCP. Мне интересно, как я могу реализовать _point 2_, что вы упомянули, где я должен добавить тройку к каждому документу?Должен ли я выполнять некоторую ** предварительную обработку ** (используя специальный код или есть некоторые полезные инструменты преобразования с открытым исходным кодом) на весь мой набор данных, а затем на _update_ мои документы. При чтении через Sematic Guide я понял, что «sem: rdf-insert и т. Д.» Обновляют функциональные возможности, но подходят ли они для массового обновления в миллиардах? Кроме того, если мой DB DB DDF и doc DB будут разделены или тройной индекс может существовать в документе DB? –

4

Это зависит от вас. Если вы хотите использовать XML для некоторых фактов и троек для других, вы можете преобразовать выбранные факты из XML в тройки и объединить их в те же документы. Для XML, который вы представили, так я начинаю. Когда вы вставляете или обновляете каждый документ в исходном формате XML, передайте его через XQuery, который добавляет новые троек. Я бы сохранил эти новые тройки в одном документе с оригинальным XML.

Вы можете сделать это, используя CPF: http://docs.marklogic.com/guide/cpf - или с помощью инструмента, например http://marklogic.github.io/recordloader/, и его класс XccModuleContentFactory.

Но если вы хотите полностью уйти от исходного формата XML, вы можете это сделать. Затем вы переводите свой XML в тройки и глотаете эти тройки вместо исходного XML. Или вы также можете иметь чистые XML-документы и чистые трехмерные документы в одной базе данных.

+0

. Что было ранее неясно, мой источник является структурированным файлом _delmited, который я глотаю в ML, используя MLCP. Я хочу связать этот набор данных с RDF и использовать семантические возможности ML 7. Я не знаю, что такое самая лучшая практика и как правильно это сделать и как? cpf, который сказал, не могли бы вы также рассказать о том, как я могу использовать его, чтобы у меня было хорошее начало! –

+0

Похоже, что вы хотите что-то по линии трубопровода обогащения CPF или конвейера XSLT, но настроены для вашего прецедента. XSLT-праймер на http://developer.marklogic.com/blog/the-royal-road-to-auto-applying-xslt может помочь вам начать работу, но будет задействовано множество пользовательских кодов. Вы также можете посмотреть на RecordLoader: вы можете найти более простым для работы. – mblakele

+0

recordloader, похоже, похож на MLCP. Как этот инструмент можно использовать для этого случая в конкретном? Также нет способов, по которым мне не нужно переходить на преобразование XSLT? Кроме того, как я могу добавить тройку к каждому документу с помощью Java, не могли бы вы объяснить его со ссылкой на мой пример. Я смотрел на точки, упомянутые @SBuxton, но я застрял в точке 2. Он говорит, чтобы глотать мои документы, как есть, а затем добавить троек к нему. В противном случае я глотал geonames rdf и искал решение для первого. ELH !!! –

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