对于arangodb,我知道它自己的查询语言AQL,据我所知,还有一个附加组件,允许使用Gremlin进行图遍历等。
在我的一个项目中,我们强烈使用SPARQL,因此:
有没有办法使用 SPARQL 作为 arangodb 的查询语言?
此致,
斯特凡
最佳答案
SPARQL 和 RDF 如何与 AQL 和 ArangoDB 相关联?
SPARLQ 是一种为在 RDF 之上工作而量身定制的语言,因此我们首先需要比较数据存储:
RDFVS。 ArangoDB 集合
虽然两者都将它们的实体称为“文档”,但它们在很多方面都不同。
RDF 强制执行模式 even with custom data types ,而 ArangoDB 是无模式的,仅支持 json 特定数据类型。
对于这些数据类型,RDF 使用从 XML 命名空间派生的构造。这些命名空间可以嵌套。有在 SQL 数据库中存储 RDF 的实现。
显然,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“相似”,则 namespace 将成为一个集合,每个文档都是该 namespace 中的一个实体:
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
虽然您可以将一组基本的 SPARQL
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 查询。
可以采取的步骤:
关于ArangoDB 的 Sparql 接口(interface),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34015945/