Marklogic 7:语义搜索

Shr*_*vam 6 rdf semantic-web marklogic triplestore

我一直在尝试探索Marklogic 7的RDF三重存储功能和语义搜索功能,然后使用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")
Run Code Online (Sandbox Code Playgroud)

创建一个三元组,然后使用以下SPARQL查询它:

PREFIX ab: <http://example.org/ns/people#>
PREFIX ac: <http://example.com/ns/person#>
SELECT ?Name
WHERE
{ ab:m ac:firstName ?Name . }
Run Code Online (Sandbox Code Playgroud)

它会检索Sam作为结果. 编辑:在我的用例中,我有一个带有10亿条记录的分隔文件(结构化数据),我使用MLCP将其记录到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>
Run Code Online (Sandbox Code Playgroud)

现在,我想在上面的数据集中使用RDF/Semantic功能.但是,我无法理解是否需要将上述doc转换为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> 
Run Code Online (Sandbox Code Playgroud)

然后使用SPARQL在ML中搜索这些文档并进行搜索,或者我是否只需要摄取我的文档然后单独摄取从外部源获取的三元组,以某种方式(如何... ??)将它们链接到我的文档然后使用SPARQL进行查询?或者还有其他方法我应该这样做吗?

小智 3

正如迈克尔所说,有很多方法可以实现这一点。这是因为 MarkLogic 7 非常灵活 - 您可以将信息表达为三元组或 XML(或 JSON 等),并混合匹配数据模型和查询语言

首先要弄清楚的是——你想要实现什么目标?如果您只是想熟悉 MarkLogic 的 XML 和三元组组合,我的建议如下:

  1. 如上所述获取您的 XML 文档。如果您有一些文本较多的内容,例如帐户描述或自由文本注释,那就更好了。

  2. 使用 XQuery 或 XSLT,向代表城市的每个文档添加一个三元组,例如对于您发布的示例文档,添加

    --本文档 URI-- unique/uri/Location 纽约

  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/