首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Marklogic 7:语义搜索

Marklogic 7:语义搜索
EN

Stack Overflow用户
提问于 2013-11-19 14:03:07
回答 2查看 908关注 0票数 6

我一直试图探索RDF、Triple Store、特性和语义搜索、Marklogic 7的功能,然后使用SPARQL进行查询。我能够执行一些基本操作,例如:

代码语言:javascript
复制
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查询它:

代码语言:javascript
复制
PREFIX ab: <http://example.org/ns/people#>
PREFIX ac: <http://example.com/ns/person#>
SELECT ?Name
WHERE
{ ab:m ac:firstName ?Name . }

作为结果检索Sam。编辑:在我的用例中,我有一个由分隔的文件(结构化数据),它有10亿条记录,我使用MLCP将这些记录存储在ML中,例如,如下所示:

代码语言:javascript
复制
<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>所示),假设这是一种正确的方法

代码语言:javascript
复制
  <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查询?还是有别的办法我应该这么做?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-19 17:53:06

就像Michael说的,你有很多方法可以这样做。这是因为MarkLogic 7非常灵活-您可以将信息表示为三元组或XML (或JSON或.)以及混合“n”匹配数据模型和查询语言

首先要弄清楚的是--你想要实现什么?如果您只想被MarkLogic的XML和三元组混合使用,下面是我的建议:

  1. 如前所述,摄入XML文档。如果您有一些文本繁重的东西,如帐户的描述或自由文本注释,那么更好。
  2. 使用XQuery或XSLT,在每个代表城市的文档中添加一个三重,例如,对于您发布的示例文档,添加 -本文件uri-纽约唯一/uri/地点

  1. 从web导入三元组,将城市名称映射到州和邮政编码(例如,从geonames)
  2. 现在,使用SPARQL和XQuery的混合,您可以在某些邮政编码中搜索每个帐户的当前余额(即使您的文档不包含邮政编码)。

这些文档很好地描述了如何使用mlcp从外部源加载三元组。

请参阅http://docs.marklogic.com/guide/semantics/setup

有关加载三元组的更多细节,请参见http://docs.marklogic.com/guide/semantics/loading

还请注意,您现在可以直接从http://your-host:8000/qconsole/的查询控制台运行http://your-host:8000/qconsole/或SPARQL (或SQL)查询。

票数 3
EN

Stack Overflow用户

发布于 2013-11-19 15:07:58

由你决定。如果希望对某些事实使用XML,而对其他事实使用三元组,则可以将选定的事实从XML转换为三元组,并将它们合并到相同的文档中。对于您介绍的XML,这就是我要开始的方式。当您以原始XML格式插入或更新每个文档时,通过添加新三元组的XQuery传递它。我会将这些新的三元组与原始XML放在同一个文档中。

您可以使用CPF:http://docs.marklogic.com/guide/cpf -或者使用像http://marklogic.github.io/recordloader/及其XccModuleContentFactory类这样的工具来完成这一任务。

但是,如果您想完全摆脱原始的XML格式,您可以这样做。然后将XML转换为三元组,并吸收这些三元组,而不是原始XML。或者,您也可以在同一个数据库中拥有纯XML文档和纯三元文档。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20073587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档