我想知道 Ruby 目前对语义 Web 技术的支持。有没有好的 RDF 选项?最后一次调查似乎是在 2007 年左右(http://paul-classic.stadig.name/2007/10/26/the-state-of-rdf-support-in-ruby-2007/)。Redland 的 RDF 包装器是获得 RDF 支持的最佳方式吗?在那篇陈旧的文章中提到的所有其他项目似乎都不受支持或被丢弃。如果要从事与语义网络有关的项目,Ruby 可能是一个糟糕的选择吗?
7 回答
嘿,Iaalto,我是你提到的调查文章的作者。我一直在考虑做一个新的调查。
自从我进行最初的调查以来,发生了一些变化,但变化不大。这里有几点需要考虑:
- ActiveRDF 似乎已经走上了成为 JRuby 特定库的道路。他们的一些适配器仅适用于 Java 库。不一定是问题,但需要注意的事情。
- Reddy 只有一个基于内存的图表。同样,不一定是问题。我不会因此而打折 Reddy(过早的优化),但我也不会梦想存储数十亿个三元组。
- 我最近为 Redland 发现了一组新的 Ruby 绑定,称为RedLeaf。不确定它有多成熟,但看起来迈克尔已经研究了大约一年。直到最近我才听说它,因为它是离网的(没有 RubyForge 或 GitHub 项目)。
- 我在 GitHub 上创建了一个名为 RubyRDF (github.com/pjstadig/rubyrdf/tree/master) 的项目。它没有大量文档,但主要是功能性的。它有一个支持事务的芝麻兼容适配器。我仍然对未来的方向有一些想法,并使其功能更加完整,但没有太多的动力去努力。我欢迎任何贡献。
底线:如果 JRuby 对你来说不是问题,那么选择 ActiveRDF,它是最完整和最成熟的。如果基于内存的图不是问题,那么下一个最成熟的可能是 Reddy。
我个人选择了RDF.rb,因为他们的网站有很好的文档,并且很容易开始使用博客教程。
ActiveRDF 似乎是一个更大的项目——但他们的 wiki 已关闭(实际上主页链接到 archive.com 上的 wiki 副本)——所有示例都在讨论 SPARQL 查询。
这是一个简单的三重查找示例,为愚蠢的语法道歉,因为这是我的第一个 Ruby 脚本:
require 'rubygems'
require 'rdf'
require 'rdf/raptor'
scufl2 = RDF::Vocabulary.new("http://ns.taverna.org.uk/2010/scufl2/ontology/")
dc = RDF::Vocabulary.new("http://purl.org/dc/elements/1.1/")
graph = RDF::Graph.load("../resources/workflows/example.ttl")
graph.query([nil, scufl2.workflow, nil]) do |bundle,p,workflow|
graph.query([workflow, scufl2.name, nil]) do |wf,p,workflow_name|
# Should just be one
print workflow_name
end
end
不幸的是,像许多 Ruby 和 Python 依赖项一样,这也需要一些二进制文件才能读取 Turtle 或 RDF/XML。不过,“aptitude install raptor-utils”解决了这个问题。
我刚刚写了一篇关于 Ruby 和 RDF 的新调查文章。我的一些结论是:
- 围绕RDF.rb有大量的活动,其中包含超过分数的数据库适配器、序列化/反序列化插件以及与其他库的接口。大多数最近的对象映射器也是建立在 RDF.rb 之上的。
- 流行的 Redland RDF 库具有Ruby 绑定,并且得到积极维护。
- ActiveRDF是 RDF 的首要对象映射器,但它似乎不再被积极维护。
- 目前唯一最近活跃的对象映射器似乎是Spira。
- 目前还没有一个对象映射器利用ActiveModel。这将非常巧妙,因为它将在 RDF 和 Rails 之间提供更深层次的集成。
RDF.rb 和 Spira 的作者也有一些有趣的后续评论。尤其是 Ben Lavender,对如何将RDF 巧妙地映射到 Ruby 对象上进行了很多思考。
我是Redland的作者,但我自己不使用 Ruby。ruby 绑定可能仍然有效(它们在上一个版本中通过了单元测试),但可能需要对任何新的 ruby 语言更改有所了解。
我认为纯 Ruby 用户已经尝试过Active RDF,它比您建议的其他东西更新,但专注于 Rails。
否则,我建议在 Semantic Web Interest Group IRC 频道上询问 - irc.freenode.net 上的#swig
编辑:如果你环顾四周, 还有 Reddy http://github.com/tommorris/reddy/tree/master和 github 上的其他 ruby rdf 代码。
查看 RDF.rb http://rdf.rubyforge.org/
AllegroGraph (RDF DB) 有一个 Ruby 客户端 - https://github.com/phifty/agraph
有一个 Ruby Sesame 库:http: //github.com/tillsc/ruby-sesame
Sesame 是两个最流行的 Java RDF 框架之一。我们(Ontotext)开发了一个名为 OWLIM 的三重存储 + 内置推理引擎。我们提供了一个名为 SwiftOWLIM 的免费版本。
我们的一些用户通过上面的 Ruby Sesame 库将它与 Ruby 一起使用。