对于arangodb,我知道它自己的查询语言AQL,据我所知,还有一个附加组件,允许使用Gremlin进行图遍历等。
在我的一个项目中,我们强烈使用SPARQL,因此:是否可以使用SPARQL作为arangodb的查询语言?
最好的问候,Stefan
SPARLQ是为在RDF之上工作而量身定制的一种语言,因此我们首先需要比较数据存储:
虽然两者都将其实体称为“文档”,但它们在许多方面都存在差异。尽管RDF强制使用schemata even with custom data types,但ArangoDB是无模式的,仅支持json特定的数据类型。对于这些数据类型,RDF使用从XML命名空间派生的构造。这些名称空间可以嵌套。有一些将RDF存储在SQL数据库中的实现。显然,RDF语法必须转换为ArangoDB集合(类似于这些RDF / SQL事物)。 Foxx服务层可以提供抽象实现这些附加数据类型;将一个名称空间映射到一个集合可能会导致许多集合包含很少的文档。
As the Wikipedia describes it in its article over the Resource Description Framework:
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将产生大量开销;许多具有许多非常简单文档的集合,没有索引很容易实现。
虽然您可以将一组基本的SPARQLs WHERE
-子句映射到Foxx服务中的AQL FILTER
-语句(并且可能会联接到其他集合中),但using a readily available SPARQL javascript parser可能是不可言喻的,但可能不会产生正确的结果。
[我还尝试了some of the javascript RDF parsers to parse some of the publicaly available RDF datasets将其导入ArangoDB,但似乎这些js解析器尚未准备好迎接黄金时间。
虽然RDF + SPARQL和ArangoDB + AQL之间有重叠,但是也有很多空白需要填补。尽管我们会支持其他人填补这些空白,但我们目前无法专注于此。为了提供ArangoDB令人满意的体验,最终将依靠RDF模式的手动转换,这很可能无法通过自动转换的SPARQL来查询。
可以采取的步骤:
Here描述了如何在ArangoDB中记录三重RDF。然后,您需要编写适当的适配器SPARQL→AQL,或者等待它完成并由某人发布。