ArangoDB的Sparql接口
对于arangodb,我知道它自己的查询语言AQL,据我所知,还有一个附加组件,允许使用Gremlin进行图形遍历等 在我的一个项目中,我们强烈使用SPARQL,因此: 有没有办法使用SPARQL作为arangodb的查询语言 致以最良好的祝愿, StefanSPARQL和RDF如何与AQL和ArangoDB相关联? SPARLQ是为在RDF之上工作而定制的语言,因此我们首先需要比较数据存储: RDF与ArangoDB集合 虽然两者都将其实体称为“文档”,但它们在许多方面有所不同。 虽然RDF强制使用模式,但ArangoDB是无模式的,只支持json特定的数据类型。 RDF为这些数据类型使用从XML名称空间派生的构造。这些名称空间可以嵌套。有些实现将RDF存储在SQL数据库中。 显然,RDF语法必须翻译成ArangoDB集合(类似于这些RDF/SQL)。Foxx服务层可以提供抽象 实现这些附加数据类型的;将一个名称空间映射到一个集合可能会导致使用很少文档的多个集合 : RDF有三重模型,ArangoDB使用面向对象的设计 我们在RDF中有一个源模型:ArangoDB的Sparql接口,sparql,arangodb,Sparql,Arangodb,对于arangodb,我知道它自己的查询语言AQL,据我所知,还有一个附加组件,允许使用Gremlin进行图形遍历等 在我的一个项目中,我们强烈使用SPARQL,因此: 有没有办法使用SPARQL作为arangodb的查询语言 致以最良好的祝愿, StefanSPARQL和RDF如何与AQL和ArangoDB相关联? SPARLQ是为在RDF之上工作而定制的语言,因此我们首先需要比较数据存储: 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固有的面向对象的aproach(从而使其具有最佳的可扩展性)将转化为如下内容:
Collection "Object":
{
_key: "sky"
"hasColor": "blue"
}
第二种方法是利用它,而不是对数据进行元视图,您已经有了一个非常清晰的数据图片,
您可以指定索引(即在hascaolor
)以提高查询性能。而第一个方法是RDF到的平面映射
ArangoDB将产生大量开销;许多集合包含许多非常简单的文档,不容易建立索引
SPARQL与AQL
虽然您可以将一组基本的SPARQLsWHERE
-子句映射到AQLFILTER
-但Foxx服务中的语句(也可能连接到其他集合)可能是不可接受的,但可能不会产生适当的结果
我还尝试将它们导入ArangoDB,但这些js解析器似乎还没有准备好进入黄金时段
结论
虽然RDF+SPARQL和ArangoDB+AQL之间存在重叠,但也存在需要填补的重大差距。
虽然我们会支持其他人填补这些空白,但我们目前无法专注于此。
为了在ArangoDB上提供令人满意的体验,最终需要手动翻译RDF模式,而自动翻译的SPARQL很可能无法查询RDF模式
可以采取的步骤:
- 查找/修复RDF解析器
- 找到一种比上面草拟的更智能的(er)方法,自动将RDF模式转换为与ArangoDB良好伸缩的集合模式
- 使用解析器解析SPARQL并将其应用于上述模式,并从中构造AQL
集合“object”
中所示。唯一的区别是,hasColor
也将是与某些RDF名称空间相对应的谓词集合中的一个键,例如,我没有使用RDF TripleStores的实际经验-因此我真的不知道数据量及其关系数-这对于一个聪明的数据库布局来说是必需的。与此同时,我和一个人进行了一些真实的接触,他解释说这比维基百科要好一点。但我真的很想看看这种数据模型转换的实际效果如何——随时通知我们!好奇的是,现在有没有办法直接将RDF和RDF导入ArangoDB?描述如何优雅地在ArangoDB中记录三元组RDF。然后需要编写适当的适配器SPARQL→ AQL,或者等待某人完成并发布。
Collection "Object":
{
_key: "sky"
"hasColor": "blue"
}