Marklogic 7:语义搜索

时间:2013-11-19 14:03:08

标签: rdf semantic-web marklogic triplestore

我一直在尝试探索 Marklogic 7 RDF Triple Store 功能和语义搜索功能,然后使用 SPARQL <查询< / strong>即可。我能够执行一些基本操作,例如:

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

检索 Sam 作为结果。 已编辑 :在我的用例中,我有一个分隔文件(结构化数据),有10亿条记录,我使用MLCP将其记入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>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> 

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

2 个答案:

答案 0 :(得分:4)

这取决于你。如果您希望将XML用于某些事实,而将其他人用于三元组,则可以将选定的事实从XML转换为三元组,并将这些事实组合在同一文档中。对于您提供的XML,我就是这样开始的。当您以原始XML格式插入或更新每个文档时,将其传递给添加新三元组的XQuery。我将这些新的三元组与原始XML保存在同一文档中。

您可以使用CPF执行此操作:http://docs.marklogic.com/guide/cpf - 或使用http://marklogic.github.io/recordloader/及其XccModuleContentFactory类等工具。

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

答案 1 :(得分:3)

正如迈克尔所说,有很多方法可以解决这个问题。 这是因为MarkLogic 7非常灵活 - 您可以将信息表示为三元组或XML(或JSON或......)和mix'n'match数据模型和查询语言

要弄清楚的第一件事是 - 你想要实现什么? 如果你只想了解MarkLogic的XML和三元组合,那么我就建议:

  1. 如上所述摄取XML文档。如果您有大量文字内容,例如帐户描述或自由文本注释,那就更好了。

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

         - 这个文件URI--     独特/ URI /位置     纽约

  3. 从网页导入三元组,将城市名称映射到州和邮政编码(例如来自地理名称)

  4. 现在混合使用SPARQL和XQuery,您可以搜索例如某些邮政编码中每个帐户的当前余额(即使您的文档不包含邮政编码)。

  5. 该文档很好地描述了使用mlcp从外部源加载三元组。

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

    有关加载三元组的详细信息,请参阅http://docs.marklogic.com/guide/semantics/loading

    另请注意,您现在可以直接从http://your-host:8000/qconsole/

    的查询控制台运行XQuery或SPARQL(或SQL)查询