RDF存储库现在发生了什么?

语义网和链接数据类似于近太空:生命不存在。 到那里去或多或少要一段时间...好吧,我不知道他们在童年时代对您说过“我想成为一名宇航员”时告诉了您什么。 但是您可以观察到地球上正在发生的事情。 成为业余天文学家甚至是专业人士要容易得多。


本文将重点介绍RDF存储库领域中的最新趋势,但不超过几个月。 第一段中的隐喻灵感来自于这张史诗般的广告图片。


目录内容


I. GraphQL访问RDF
二。 MongoDB的适配器
三, OLTP与 OLAP
IV。 岩石数据库
V.LPG支持
V.1。 资料模型
V.1.1。 辛格尔顿物业
V.1.2。 修改正确
V.1.3。 其他方法
V.2。 查询语言
VI。 更严格的许可证


I. GraphQL访问RDF


他们说 GraphQL声称是访问数据库的通用语言。 使用GraphQL访问RDF的功能怎么样?


开箱即用,此机会由以下人员提供:



如果存储库没有提供这样的机会,则可以通过编写相应的解析器来独立实现。 例如,这是在法国项目DataTourisme中完成的 。 或者您已经什么也没写,只需要使用HyperGraphQL即可


从语义Web和链接数据的正统追随者的角度来看,所有这一切当然是可悲的,因为它似乎是针对基于常规数据孤岛构建的集成,而不适合该平台(当然是RDF存储)。


比较GraphQL和SPARQL的印象是双重的。


  • 一方面,GraphQL看起来像是SPARQL的遥远亲戚:它解决了REST特定的重新获取和查询多重性的问题-如果没有它们,可能就算是对于Web而言,也不可能被视为一种查询语言,并且名称中带有“ -QL”;
  • 另一方面,GraphQL的僵化电路不安。 因此,与RDF的完全反射性相比,它的“自省性”似乎非常有限。 而且没有类似属性的路径,因此不清楚为什么它是“ Graph-”。

二。 MongoDB的适配器


与前一个趋势互补的趋势。


  • 在Stardog中,现在可以 -尤其是同一GraphQL上的所有内容-配置MongoDB数据到虚拟RDF图的映射。
  • 最近 Ontotext GraphDB 允许您在MongoDB Query上将片段插入SPARQL。

从广义上讲,关于允许或多或少“即时”将JSON表示为RDF的JSON源适配器,值得回顾一下已经存在很久的SPARQL Generate ,例如可以将其附加到Apache Jena。


总结前两个趋势,可以说RDF存储在“多变量存储”(多语言持久性)条件下展示了它们为集成和运行做好充分准备。 但是,众所周知,后者早已过时,并且多模型将替代它。 那么在RDF存储领域中的多模型呢?


总之,没有办法。 我想专门针对多模型DBMS主题发表文章。 同时,您会注意到没有多模型DBMS,其中的主模型将是图(RDF),现在已经不多了。 第五部分将讨论一些小的多模型化-RDF存储库对替代LPG图模型的支持


三, OLTP与 OLAP


但是,同一位Gartner 写道 ,多模型化主要是针对操作 DBMS的必要条件。 可以理解:在“多元存储”的情况下,主要问题与交易性有关。


但是OLTP-OLAP规模的RDF存储库在哪里? 我会这样回答:无论是那里还是这里。 为了表明它们的目的,需要一些第三缩写。 或者,我建议使用OLIP-在线智能处理。


但是,仍然:


  • 用MongoDB实现的GraphDB集成机制并非旨在避免写性能问题;
  • Stardog走得更远,完全重写了引擎,再次以提高录制性能为目标。

现在,让我向市场介绍一个新玩家。 来自IBM Netezza和Amazon Redshift- AnzoGraph的创建者。 来自产品广告的图像基于该图像放置在文章的开头。 AnzoGraph将自己定位为GOLAP解决方案。 您如何喜欢带有窗口功能的SPARQL? --


SELECT ?month (COUNT(?event) OVER (PARTITION BY ?month) AS ?events) WHERE { … } 

IV。 岩石数据库


上面已经有一个指向 Stardog 7 Beta的公告的链接 ,该公告称Stardog将使用RocksDB作为底层存储系统-键值存储,即Google LevelDB的Facebook分叉。 为什么值得谈论某种趋势?


首先,根据Wikipedia文章判断,不仅RDF存储库被转移到RocksDB。 在ArangoDB,MongoDB,MySQL和MariaDB,Cassandra中,有一些将RocksDB用作存储引擎的项目。


其次,RocksDB正在制定相应主题的项目(即不是产品)。


例如,eBay在平台上将RocksDB用于其“知识图”。 顺便说一句,读起来很有趣: 查询语言开始是一种本土格式,但是最近它已经过渡到更像SPARQL了 。 就像在开玩笑:无论我们做多少知识图,我们仍然会得到RDF。


另一个示例是几个月前出现的Wikidata History Query Service 。 在出现之前,Wikidata必须通过MWAPI访问标准Mediawiki API。 现在,在纯SPARQL上有很多可能。 “内幕”下还有RocksDB。 顺便说一句,似乎WDHQS确实是将Freebase导入Go​​ogle Knowledge Graph的人。


V.LPG支持


让我提醒您LPG图和RDF图之间的主要区别。


在LPG中,标量属性可以挂在边缘实例上,而在RDF中,它们只能挂在边缘的“类型”上(不仅标量属性,而且还可以是规则关系)。 与LPG相比,RDF的这一局限性通过各种建模技术得以克服 。 与RDF相比,LPG的局限性更难克服,但是LPG图比RDF图大,类似于Harari教科书中的图片,因此人们希望使用它们。


显然,LPG支持任务分为两个部分:


  1. 对RDF模型进行更改,从而可以在其中模拟LPG构造;
  2. 对RDF查询语言进行更改,以使其可以访问此修改后的模型中的数据,或者实现使用流行的LPG查询语言对该模型进行查询的功能。

V.1。 资料模型


有几种可能的方法。


V.1.1。 辛格尔顿物业


协调RDF和LPG的最直接方法可能是单例属性


  • 相反,例如使用:isMarriedTo ,则使用谓词:isMarriedTo1 ,等等。
  • 然后这些谓词成为新的三元组的主题:: :isMarriedTo1 :since "2013-09-13"^^xsd:date等。
  • 这些谓词实例与一个通用谓词之间的关系由以下形式的三元组建立:isMarriedTo1 rdf:singletonPropertyOf :isMarriedTo
  • 显然, rdf:singletonPropertyOf rdfs:subPropertyOf rdf:type ,但请考虑一下为什么不应该简单地编写:isMarriedTo1 rdf:type :isMarriedTo

支持LPG的任务在RDFS级别上已解决。 这种解决方案需要包含在相关标准中 。 支持附加效果的RDF存储库可能需要进行一些更改,但是目前,可以将Singleton属性简单地视为另一种建模技术。


V.1.2。 修改正确


较不幼稚的方法源于认识到属性实例是由三元组实例化的。 有机会谈谈三胞胎,我们有机会讨论属性实例。


这些方法中最可靠的方法是RDF * (又名RDR),它诞生于Blazegraph的肠子中。 从一开始,AnzoGraph就亲自选择了他 。 该方法的坚固性取决于以下事实:在RDF语义提出了相应的更改。 但是,这一点非常简单。 在Turtle序列化中,现在可以将RDF编写如下:


 <<:bob :isMarriedTo :alice>> :since "2013-09-13"^^xsd:date . 

V.1.3。 其他方法


您不必理会形式语义,而只需假设三胞胎具有某些标识符,这些标识符当然就是URI,并用这些URI组成新的三胞胎。 剩下的就是允许访问SPARQL中的这些URI。 这就是 Stardog所做的。


Allegrograph采取一种中间方式。 众所周知,Allegrograph中存在三元组标识符,但是在实现三元属性时,它们不会突出显示。 但是,形式语义非常遥远。 值得注意的是,triplet的属性不是URI,这些属性的值也只能是文字。 液化石油气的拥护者获得了他们想要的东西。 在特别发明的NQX格式中,类似于上述RDF *的示例如下所示:


 :bob :marriedTo :alice {"since" : "2013-09-13"} 

V.2。 查询语言


在模型级别以一种或多种方式支持LPG之后,您需要有机会对这种模型进行数据请求。


  • Blazegraph用于RDF *查询支持SPARQL *Gremlin 。 SPARQL *的查询如下所示:

  SELECT * { <<:bob :isMarriedTo ?wife>> :since ?since } 

  • Anzograph还支持SPARQL *,并将支持Neo4j中的查询语言Cypher
  • Stardog支持自己的SPARQL 扩展,并支持Gremlin。 您可以使用以下方法在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版本中却停止了。


VI。 更严格的许可证


最近,在“选择的三重存储”和“开源三重存储”集的交集上没有添加任何内容。 新的开源RDF存储库远非是日常使用的理想选择,并且我们要使用的新三元器(相同的AnzoGraph)的源代码已关闭。 相反,我们可以谈论减少...


当然,以前的开放源代码不会关闭,但是某些开放源代码存储库逐渐不再被认为是值得选择的。 我认为具有开源版本的Virtuoso淹没了bug。 Blazegraph被AWS收购,并形成了Amazon Neptune的基础。 现在尚不清楚是否还会再发布至少一个版本。 剩下的就是耶拿...


如果开源不是很重要,但是您只想尝试,那么一切都比以前少了。 例如:


  • Stardog 停止分发免费版本(但是,它已将常规版本的试用期延长了一倍);
  • GraphDB Cloud (以前可以在其中选择免费的基本计划)中,新用户的注册被暂停。

通常,对于一般的IT外行来说,空间变得越来越不可访问;它的发展成为许多公司的选择。

Source: https://habr.com/ru/post/zh-CN451206/


All Articles