对于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 查询。
可以采取的步骤:
  • 查找/修复 RDF 解析器
  • 找到一种比上面起草的更聪明的方法来自动将 RDF 模式转换为与 ArangoDB 很好地扩展的集合模式
  • 使用解析器解析SPARQL并将其采用到上述模式中,并从中构造AQL。
  • 关于ArangoDB 的 Sparql 接口(interface),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34015945/

    10-13 09:35