ArangoDB的SPARQL接口

13

关于Arangodb,我知道它有自己的查询语言AQL,据我所知还有一个插件可以使用Gremlin进行图遍历等操作。

在我的一个项目中,我们强烈使用SPARQL,所以: 有没有一种方法可以将SPARQL作为Arangodb的查询语言使用?

最好的问候, 斯特凡


这里描述了如何在ArangoDB中优雅地记录RDF三元组。然后,您需要编写适当的适配器SPARQL → AQL,或者等待有人完成并发布它。 - Андрей Хубутия
1个回答

21

SPARQL和RDF如何与AQL和ArangoDB相关联?

SPARQL是一种专门用于在RDF上工作的语言,因此我们首先需要比较数据存储:

RDF VS. ArangoDB集合

虽然两者都将它们的实体称为“文档”,但它们在许多方面不同。 尽管RDF强制执行模式即使使用自定义数据类型,但ArangoDB是无模式的并且仅支持特定于json的数据类型。 RDF使用从XML命名空间派生的构造来表示这些数据类型。这些命名空间可以嵌套。有一些实现将RDF存储在SQL数据库中。 显然,必须将RDF语法转换为ArangoDB集合(类似于这些RDF / SQL事物)。 Foxx服务层可以提供一个抽象层, 实现这些额外的数据类型; 将一个命名空间映射到一个集合可能会导致许多具有非常少文档的集合。

正如维基百科在其资源描述框架文章中所描述的那样

For example, one way to represent the notion "The sky has the color blue"
in RDF is as the triple: a subject denoting "the sky",
a predicate denoting "has",
and an object denoting "the color blue". Therefore, RDF swaps object 
for subject that would be used in the classical notation of an
entity–attribute–value model within object-oriented design;
Entity (sky), attribute (color) and value (blue).
RDF is an abstract model with several serialization formats
(i.e., file formats),
and so the particular way in which a resource or triple is encoded
varies from format to format.

尽管RDF采用三元模型,但ArangoDB更倾向于使用面向对象设计。因此,我们在RDF中有这样的源模型:
sky -hasColor-> blue

让我们尝试将这个模型映射到ArangoDB:

如果我们将其模拟为类似于RDF,那么命名空间将变成一个集合,每个文档都是该命名空间中的实体:

Collection "Objects":
Document "sky": {_key: "Sky"}

Collection "Colors":
Document "blue": {_key: "blue"}

EdgeCollection "hasColor"
Edge {_from: "Objects/sky", _to: "Colors/blue"}

面向对象的方法是ArangoDB的本地特性(因此使其具有最佳的可扩展性),大致翻译为以下内容:

Collection "Object":
{
  _key: "sky"
  "hasColor": "blue"
}

第二种方法利用您已经对数据有了相当清晰的了解,而不是将数据视为元数据。您可以指定索引(即在hasColor上)以获得更好的查询性能。虽然第一种方法是将RDF平面映射到ArangoDB中,但会产生很多开销;许多集合包含许多非常简单的文档,难以轻松创建索引。
SPARQL与AQL:
在Foxx服务中,您可以将基本的SPARQL WHERE子句映射到AQL FILTER语句中(可能还包括其他集合中的连接)。使用现成的SPARQL javascript解析器可能是不可避免的,但可能不能产生正确的结果。我还尝试过使用一些javascript RDF解析器来解析一些公共可用的RDF数据集并将其导入到ArangoDB中,但似乎这些js解析器还没有准备好进行主流应用。
结论:
虽然RDF + SPARQL和ArangoDB + AQL之间存在重叠,但也存在显著的差距需要填补。虽然我们支持其他人填补这些空白,但我们目前无法专注于此。为了提供令人满意的ArangoDB体验,最终需要依靠RDF模式的手动转换,然后很可能无法通过自动翻译的SPARQL进行查询。
可以采取以下步骤:
- 找到/修复RDF解析器 - 找到比上述草案更智能的方法,将RDF模式自动转换为与ArangoDB良好扩展的集合模式。 - 使用解析器解析SPARQL,并将其适应于上述模式,并从中构建AQL。
ArangoDB文档详细讨论了如何将RDF数据映射到图形中

我看到SPARQL支持可以为ArangoDB打开语义用例......那里的人经常不会寻找不支持它的数据库替代品 :-) - augustin-s
1
和:啊,调查?不知道它,但现在在您的起始页上找到并完成了它 :-) - augustin-s
1
我在RDF三元组存储方面没有实际经验,因此我不知道数据量和关系数量,这对于聪明的数据库布局是必要的。与此同时,我曾与一位人士有过真实接触,他解释得比维基百科更好。但我真的很想看看这种数据模型转换的现实情况如何 - 让我们保持联系! - dothebart
一个简单的回答:“这并不存在或不被支持”就足够了。这篇长篇大论试图推销其他特性,但问题只是:“它能做SPARQL吗?”,还是感谢你的努力... - serverhorror
SPARQL的问题在于一个问题域是否可以用ArangoDB来解决。正如文章所指出的那样,答案实际上是肯定的。 - dothebart
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接