Marklogic 7: семантический поиск

Я пытался изучить возможности RDF Triple Store и возможности семантического поиска в Marklogic 7, а затем запрашивал с помощью SPARQL. Я был в состоянии выполнить некоторые основные операции, такие как:

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 . }

который возвращает Сэма как результат. Отредактировано: в моем случае использования у меня есть файл с разделителями (структурированные данные), содержащий 1 миллиард записей, которые я включил в ML, используя MLCP, который хранится в 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>abc@gmail.com</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? Или есть какой-то другой способ, которым я должен сделать это?

2 ответа

Решение

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

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

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

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

    - этот документ URI-- уникальный /uri/ Местоположение Нью-Йорк

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

  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/

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

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

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

Другие вопросы по тегам