sparrow,通用rdf/sparql数据库api

sparrow的Python项目详细描述


麻雀

简介

sparrow是一个库,它为 RDF数据库。为SPARQL查询提供支持的任何数据库 有一个可以处理上下文的TripleStore可以用作后端。

sparrow的目标是确保所有这些不同的后端行为相同, 使无需更改就可以更改rdf数据库后端 你的密码。

目前支持以下后端:

api支持以下基本功能:

  • Parsing RDF statements from different formats into a contextual database
  • Serializing the RDF statements from a specific context of a database
  • Removing statements from a specific context of a database
  • Performing SPARQL Queries

sparrow不提供图形api,但它可以解析和序列化python。 字典对象。它使用与json序列化相同的格式。 每个TripleStore后端都提供以下格式:

  • RDFXML
  • NTriples
  • Turtle
  • JSON
  • Python dictionaries

安装

sparrow提供了几个数据库的构建配置文件。 这些配置文件将为您安装和设置不同的后端。 你不必使用BuildOut,但我建议你使用它。

要安装,请键入:

> python2.5 bootstrap.py
> ./bin/buildout

这将在bin文件夹中创建一些脚本,比如testrunner和 (取决于您选择的配置文件)用于配置和启动的脚本 不同的后端。

使用量

通常,您只需要导入基本的sparrow模块

>>> import sparrow

大多数数据库后端都无法正常工作。 由于rdflib后端是用python编写并打包在pypi上的, 它总是可用的,并且与sparrow一起安装。

让我们创建内存中的rdflib数据库

>>> db = sparrow.database('rdflib', 'memory')
>>> db
<sparrow.rdflib_backend.RDFLibTripleStore ...>

让我们向数据库中添加一些三元组,我们将为此使用Turtle语法。 我们会举一些例子来说明约翰是一个人, 他的名字叫“约翰”。

>>> data = """@prefix ex: <http://example.org#> .
... ex:john a ex:Person; ex:name "John" ."""

现在我们可以将其添加到数据库中。我们需要告诉数据库 存储数据的上下文。数据本身可以是文件或http 基于uri、数据字符串或类似文件的对象。

所以,让我们把这个添加到persons上下文中。

>>> db.add_turtle(StringIO(data), 'persons')

我们现在可以询问数据库,它有哪些上下文:

>>> db.contexts()
[u'persons']

您可以将数据存储在任意多个不同的上下文中,也可以将所有内容 在单一的背景下。

让我们在数据库

上做一个简单的SPARQL查询
>>> result = db.select('SELECT ?x {?x <http://example.org#name> "John".}')

我们可以把结果作为字典的列表。这是下面的例子 json结果格式。

>>> result
[{u'x': {'type': u'uri', 'value': u'http://example.org#john'}}]

除了查询之外,我们还可以在任何 支持的格式。我们指定所需的格式和上下文 使用。

>>> db.get_ntriples('persons').read()
'<http://example.org#john> ...'

如果数据库后端支持它,可以询问 上下文。

>>> db.count('persons')
2

如果要删除三元组,则需要提供描述 三胞胎要移除。

>>> data = '<http://example.org#john> a <http://example.org#Person>.'
>>> db.remove_turtle(data, 'persons')
>>> db.count('persons')
1

您还可以删除上下文中的所有三元组

>>> db.clear('persons')
>>> db.count('persons')
0

因为“persons”上下文现在是空的,所以它也被删除。

>>> db.contexts()
[]

麻雀的变更日志

麻雀1.0b4(2009-07-20)

  • Picked better default profile

麻雀1.0b3(2009-07-20)

  • Fixed import errors in redland and allegro backend
  • API Changes: removed format method, all stores are supposed to provide ‘ntriples’, ‘rdfxml’ and ‘turtle’ serializations
  • API Changes: renamed IDatabase to ITripleStore, added ISPARQLEndpoint interface, added methods for different formats.
  • Added json and python dict serialization and parser formats for all backends
  • Added configure.zcml with utility registrations
  • Fixed allegro query tests

麻雀1.0b2(2009-07-13)

  • Added Allegro backend
  • More unittests
  • Added Allegro graph buildout profile

麻雀1.0b1(2009-07-12)

  • Refactored Redland/LibRDF, Sesame backends from Metro
  • Added RDFLib backend
  • Added Sesame buildout profile, configure and start scripts
  • Added basic test coverage

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java连接在一个屏幕上成功下载,在第二个屏幕上用几乎相同的代码获得错误   java调用super。超级的方法,跳过超级。方法   使用Web服务连接到sharepoint 2013的Java应用程序   java我无法正确呈现editText   httpurlconnection如何在java中检查url连接状态   java Spring Security可以为同一用户接受多个密码吗?   java如何在PreparedStatement中使用自动生成的@Id?   java每个数组表示一个位模式   java我不确定如何记录鼠标在某个区域被点击的次数   spring如何解决:java。lang.NoSuchMethodError:javax。坚持不懈实体管理器。createStoredProcedureQuery(Ljava/lang/String;)   java如何为blackberry中listfield项内的不同字段触发事件   安卓使用Proguard混淆java代码   java在grails 2中与多个数据源有一个和一个域关联。十、   java在尝试在单击按钮时返回combobox值时一直出错   java我可以在setter中使用@Resource注释而不是字段吗?   java Eclipse调试步进不工作   java比较相同对象的两个表并选择不同的表