首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sparql VS XQuery (MarkLogic)

Sparql VS XQuery (MarkLogic)
EN

Stack Overflow用户
提问于 2019-03-11 14:02:37
回答 2查看 262关注 0票数 1

在使用MarkLogic之后,我意识到可以通过几种方式获得三元组的结果,例如,完全使用Xquery或SPARQL。所以问题是,与XQuery相比,使用SPARQL有什么优势吗?有没有一些索引使得SPARQL比搜索某个特定的语义查询更快?

例如,如果我们正在检索具有谓词"/like“的所有语义文档。

SPARQL

代码语言:javascript
复制
SELECT *
WHERE {
  ?s </like> ?o
}

XQuery

代码语言:javascript
复制
cts:search(fn:doc(), cts:element-query(xs:QName("sem:predicate"), "/like"))

因此,这两者在效率上有什么区别吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-11 16:18:09

是的,这肯定是有区别的。然而,XQuery或SPARQL哪一个是最有效的完全取决于您试图解决的问题。XQuery最擅长查询和处理文档数据,而SPARQL确实允许您轻松地对RDF数据进行推理。

的确,RDF数据在MarkLogic中被序列化为XML,您可以对其进行全文搜索,如果愿意,甚至可以在其上建立范围索引,但是RDF数据已经在三元组索引中进行了索引,这将比上面的全文搜索提供更准确的结果。

还要注意,SPARQL允许您遵循谓词路径,这涉及到大量连接。如果通过SPARQL完成,这将比通过XQuery高效得多,因为它主要是通过三元组索引解决的。想象一个类似下面这样的SPARQL查询:

代码语言:javascript
复制
PREFIX pers: <http://my.persons/>;
PREFIX topic: <http://my.topics/>;
PREFIX pred: <http://my.predicates/>;
SELECT DISTINCT *
WHERE {
  ?person pred:likes topic:Chocolate;
          pred:friendOf+ ?friend.
  FILTER( ?friend = (pres:WhiteSolstice) )
  FILTER( ?friend != ?person )
}

它试图找到所有喜欢巧克力的直接和间接朋友。我不会用XQuery写这样的东西。

不过,还有一些事情在XQuery中很容易,而在SPARQL中几乎是不可能的。有时最有效的方法是将两者结合起来,从XQuery内部执行一个sem:sparql,并使用结果来指导XQuery中的进一步处理。它有时也会归结为您的数据的形式。

哈!

票数 3
EN

Stack Overflow用户

发布于 2019-03-12 01:03:40

这里有一点细微的区别:搜索就是搜索文档。除非每个文档有一个三元组,否则仅从文档中的一组中提取匹配的三元组将涉及从磁盘中提取整个文档(尽管它可能在缓存中)。SPARQL是从三元组索引中选择三元组数据,这可能涉及较少的磁盘IO。当然,如果您要做的不是简单的获取简单的三元模式,那么您将需要理解SPARQL为您提供的关系。

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

https://stackoverflow.com/questions/55096025

复制
相关文章

相似问题

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