语义网和关联数据就像外太空:那里没有生命。 去那里或多或少长期……我不知道他们小时候对你说什么来回应“我想成为一名宇航员”。 但是你可以在地球上看到正在发生的事情; 成为业余天文学家甚至专业人士要容易得多。
本文将关注 RDF 存储领域最新的、不超过几个月的趋势。 第一段中的比喻灵感来自剪裁下的史诗宣传图片。
一、RDF 访问的 GraphQL
开箱即用,这个机会由:
如果存储库不提供这样的机会,则通过编写适当的“解析器”(resolver)来独立实现。 例如,这是在法国项目中完成的
从语义 Web 和关联数据的正统拥护者的角度来看,所有这一切当然是令人难过的,因为它似乎旨在用于围绕下一个数据孤岛构建的集成,而不是合适的平台(当然,RDF 存储) .
比较 GraphQL 和 SPARQL 的印象是双重的。
- 一方面,GraphQL 看起来像是 SPARQL 的远亲:它解决了 REST 典型的重选和多重查询问题——如果没有这些,可能就无法考虑 查询语言,至少对于网络而言;
- 另一方面,GraphQL 的刚性方案令人不安。 因此,与 RDF 的完全反身性相比,它的“内省性”似乎非常有限。 并且没有属性路径的模拟,所以它甚至不是很清楚为什么它是“Graph-”。
二。 MongoDB 适配器
与前一个趋势互补的趋势。
- 现在在星狗
也许 - 特别是,所有都在同一个 GraphQL 上 - 将 MongoDB 数据的显示配置为虚拟 RDF 图; - Ontotext GraphDB 最近
它允许 插入到 MongoDB 查询的 SPARQL 片段中。
更广泛地说,关于 JSON 源的适配器允许或多或少地“即时”将存储在这些源中的 JSON 表示为 RDF,那么我们也可以在相当长的一段时间内回忆起现有的适配器
总结前两个趋势,我们可以说 RDF 存储库展示了在“多存储”(多语言持久性)条件下集成和运行的充分准备。 然而,众所周知,后者早已过时,取而代之的是
总之,没办法。 我想单独写一篇文章来讨论多模型 DBMS,但是现在你可以看到,现在还没有“基于”图模型(RDF 可以被认为是它的变体)的多模型 DBMS。 关于一些小型多模型——由替代 LPG 图模型的 RDF 存储支持——将在中讨论
三、 OLTP 对比联机处理程序
然而,同一个 Gartner
但是在 OLTP-OLAP 范围内,RDF 存储库在哪里? 我会这样回答:不在那里也不在这里。 为了表明它们的用途,需要一些第三种缩写。 作为一种选择,我建议 联机处理 — 在线智能处理。
然而,仍然:
现在让我介绍市场上的新玩家。 来自 IBM Netezza 和 Amazon Redshift 的创建者 -
SELECT ?month (COUNT(?event) OVER (PARTITION BY ?month) AS ?events) WHERE { … }
四、 岩石数据库
以上已经
首先,通过判断
其次,相应主题的项目(即不是产品)是在RocksDB上做的。
例如,eBay 在中使用 RocksDB
另一个例子——出现在几个月前
五、液化石油气支持
让我提醒您 LPG 图和 RDF 图之间的主要区别。
在 LPG 中,标量属性可以附加到边缘实例,而在 RDF 中,它们只能附加到边缘“类型”(但不仅是标量属性,还包括普通链接)。 与液化石油气相比,RDF 的这种局限性
显然,“支持液化石油气”的任务分为两部分:
- 对 RDF 模型进行更改,使其可以在其中模拟 LPG 构造;
- 对 RDF 查询语言进行更改,使访问此修改后的模型中的数据成为可能,或者实现以流行的 LPG 查询语言查询此模型的能力。
五.1. 数据模型
这里有几种可能的方法。
五.1.1。 单例属性
协调 RDF 和 LPG 的最直接的方法可能是
- 而不是,例如,谓词
:isMarriedTo
使用谓词:isMarriedTo1
,:isMarriedTo2
等等 - 然后这些谓词成为新三元组的主题:
:isMarriedTo1 :since "2013-09-13"^^xsd:date
等等 - 这些谓词实例与一个共同谓词的联系是由以下形式的三元组建立的
:isMarriedTo1 rdf:singletonPropertyOf :isMarriedTo
. - 显然,在
rdf:singletonPropertyOf rdfs:subPropertyOf rdf:type
,但考虑一下为什么你不应该只写:isMarriedTo1 rdf:type :isMarriedTo
.
“LPG 支持”的任务在这里在 RDFS 级别解决。 这样的决定需要包含在相关的
五.1.2。 正确完成具体化
不那么幼稚的方法源于对属性实例由三元组完美实例化的认识。 通过能够讨论三元组,我们也可以讨论属性实例。
这些方法中最可靠的是
<<:bob :isMarriedTo :alice>> :since "2013-09-13"^^xsd:date .
五.1.3。 其他方法
您可以不用理会形式语义,只需考虑三元组有一些标识符,当然是 URI,并用这些 URI 组成新的三元组。 剩下的就是在 SPARQL 中授予对这些 URI 的访问权限。 所以
在快板中
:bob :marriedTo :alice {"since" : "2013-09-13"}
五.2. 查询语言
在模型级别以一种或另一种方式支持 LPG 后,您需要能够在此类模型中查询数据。
SELECT * { <<:bob :isMarriedTo ?wife>> :since ?since }
- Anzograph 还支持
SPARQL* 并将支持暗号 , Neo4j 中的查询语言。 - Stardog 维护自己的
延期 SPARQL 和再次 格林姆林。 您可以使用如下方式在 SPARQL 中获取三元组的 URI 和“元信息”:
SELECT * {
BIND (stardog:identifier(:bob, :isMarriedTo, ?wife) AS ?id)
?id :since ?since
}
- Allegrograph也支持自己的
延期 SPARQL:
SELECT * { ("since" ?since) franz:attributesNameValue ( :bob :marriedTo ?wife ) }
顺便说一下,GraphDB 曾一度支持 Tinkerpop/Gremlin,但不支持 LPG,但在 8.0 或 8.1 版本中停止了。
六。 收紧许可证
最近没有添加到“triplestore of choice”和“open source triplestore”集的交集。 新的开源 RDF 存储远不是日常使用的好选择,我想使用的新三元组存储的源代码(例如 AnzoGraph)已关闭。 相反,我们可以谈论减少......
当然,以前的开源也不是封闭的,只是一些开源的仓库逐渐不被认为是值得选择的了。 在我看来,拥有开源版本的 Virtuoso 充满了错误。 Blazegraph 被 AWS 收购并构成了 Amazon Neptune 的基础; 现在尚不清楚是否至少会再发布一次。 只剩下珍娜了……
如果开源不是很重要,只是想尝试一下,那么一切也没有以前那么美好了。 例如:
总的来说,对于一个普通的 IT 外行来说,空间变得越来越难以接近,它的发展正在成为企业的很多。
来源: habr.com