我一直在尝试探索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")
它创建一个三元组,然后使用以下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中,例如:
<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进行查询?或者还有其他方法可以让我这么做吗?
这取决于您。如果您想对某些事实使用XML,对其他事实使用三元组,那么可以将选定的事实从XML转换为三元组,并将它们组合在同一文档中。对于您介绍的XML,我将从这里开始。在以原始XML格式插入或更新每个文档时,通过XQuery传递它,XQuery会添加新的三元组。我会将这些新的三元组与原始XML保存在同一文档中。
您可以使用CPF:http://docs.marklogic.com/guide/cpf-或使用类似工具http://marklogic.github.io/recordloader/及其CCD_ 2类。
但是,如果您想完全摆脱原始的XML格式,您可以这样做。然后将XML转换为三元组,并吸收这些三元组而不是原始XML。或者,您也可以在同一数据库中拥有纯XML文档和纯三重文档。
正如Michael所说,有很多方法可以实现。这是因为MarkLogic7非常灵活——您可以将信息表示为三元组或XML(或JSON或…),并混合"匹配"数据模型和查询语言
首先要弄清楚的是——你想实现什么?如果你只想对MarkLogic的XML和三元组的混合感到满意,我建议你:
-
如上所述摄取您的XML文档。如果你有一些文本很重的东西,比如账户描述或免费文本注释,那就更好了。
-
使用XQuery或XSLT,为每个表示城市的文档添加一个三元组例如,对于您张贴的样本文档,请添加
--此文档URI--unique/uri/位置纽约
-
从网络导入三元组,将城市名称映射到州和邮政编码(例如,从地名)
-
现在,使用SPARQL和XQuery的混合,您可以在某些邮政编码中搜索例如每个帐户的当前余额(即使您的文档不包含邮政编码)。
该文档很好地描述了使用mlcp从外部源加载三元组。
请参阅http://docs.marklogic.com/guide/semantics/setup
有关加载三元组的更多详细信息,请参阅http://docs.marklogic.com/guide/semantics/loading
还要注意的是,您现在可以直接从http://your-host:8000/qconsole/
的查询控制台运行XQuery或SPARQL(或SQL)查询