跳转到主要内容

Python API,用于查询SPARQL端点

项目描述

develop master Release

sparql-client 是一个SPARQL查询库,通过HTTP对SPARQL端点执行SELECT和ASK查询。它将自动将文本转换为相应的Python类型。

基于 SPARQL_JavaScript_Library 的API,由Lee Feigenbaum和Elias Torres创建。受到Juan Manuel Caicedo的SPARQL库的很大影响。

API

首先打开到端点的连接

s = sparql.Service(endpoint, "utf-8", "GET")

然后执行查询

result = s.query(statement)

如果你执行了SELECT查询,则可以使用fetchone()或fetchall()读取结果

for row in result.fetchone():

如果你执行了ASK查询,则可以使用hasresult()读取结果(一个布尔值)

works = result.hasresult()

工作原理

>>> import sparql
>>> q = ('SELECT DISTINCT ?station, ?orbits WHERE { '
...      '?station a <http://dbpedia.org/ontology/SpaceStation> . '
...      '?station <http://dbpedia.org/property/orbits> ?orbits . '
...      'FILTER(?orbits > 50000) } ORDER BY DESC(?orbits)')
>>> result = sparql.query('http://dbpedia.org/sparql', q)
>>> result.variables
[u'station', u'orbits']
>>> for row in result:
...     print 'row:', row
...     values = sparql.unpack_row(row)
...     print values[0], "-", values[1], "orbits"
row: (<IRI <http://dbpedia.org/resource/Mir>>, <Literal "86331"^^<http://www.w3.org/2001/XMLSchema#int>>)
http://dbpedia.org/resource/Mir - 86331 orbits
row: (<IRI <http://dbpedia.org/resource/Salyut_7>>, <Literal "51917"^^<http://www.w3.org/2001/XMLSchema#int>>)
http://dbpedia.org/resource/Salyut_7 - 51917 orbits

SPARQL模块

SPARQL模块可以通过多种方式调用。要快速运行查询,请使用query()。结果封装在_ResultsParser实例中。

>>> result = sparql.query(endpoint, query)
>>> for row in result:
>>>    print row

命令行使用

>>> sparql.py [-i] endpoint
    -i Interactive mode

如果启用了交互模式,程序将从控制台读取查询并执行。使用两个换行符(两个“回车”)来分隔查询。否则,查询将从标准输入读取。

RDF包装类

class sparql.RDFTerm 超类,包含可以重写的方法。sparql.IRIsparql.Literalsparql.BlankNode都继承自sparql.RDFTerm

n3()

返回此项的Notation3表示形式。

class sparql.IRI(value)

一个RDF资源。

class sparql.Literal(value, datatype=None, lang=None)

文字。这些可以接受数据类型或语言代码。

class sparql.BlankNode(value)

空节点。类似于IRI,但没有稳定的标识符。

查询工具

class sparql.Service(endpoint, qs_encoding='utf-8')

这是库的主要入口。用户创建一个Service,然后向其发送查询。如果我们想要持久连接,则在这里打开。

class sparql._ResultsParser(fp)

解析XML结果。

__iter__()

fetchone()的同义词。

fetchall()

遍历结果以构建所有行的列表。模仿DB-API 2.0。

fetchone()

获取查询结果的下一组行,返回一个列表。当没有更多行可用时返回一个空列表。如果查询是一个ASK请求,则返回一个空列表,因为没有可用的行。

hasresult()

ASK查询用于测试查询是否有结果。如果查询是ASK查询,则不会有实际的结果,并且fetchone()将返回空值。相反,可以调用此方法来检查ASK查询的结果。

如果查询是SELECT语句,那么hasresult()的返回值是None,因为XML结果格式不会告诉你结果中是否有行,直到你读取第一行。

sparql.parse_n3_term(src)

将Notation3值解析为RDFTerm对象(IRI或Literal)。

此解析器理解IRI和引号字符串;不支持基本非字符串类型(整数、小数、布尔值等)。

sparql.unpack_row(row, convert=None, convert_type={})

将给定行的值从RDFTerm对象转换为普通Python值:IRI转换为包含IRI值的Unicode字符串;BlankNode转换为包含BNode标识符的Unicode字符串,并且根据其XSD数据类型转换Literal。

库了解常见的XSD类型(STRING变为Unicode,INTEGER和LONG变为int,DOUBLE和FLOAT变为float,DECIMAL变为Decimal,BOOLEAN变为bool)。如果找到python-dateutil库,则DATE、TIME和DATETIME分别转换为日期、时间和datetime。对于其他转换,可以传递额外的参数convert。它应该是一个接受两个参数的可调用对象:序列化的值作为Unicode对象,以及XSD数据类型。

sparql.query(endpoint, query)

执行查询的便捷方法。与

sparql.Service(endpoint).query(query)

数据类型转换

库将自动将类型化文字转换为相应的Python简单类型。如果提供了dateutil库,则日期也会进行转换。

运行单元测试

如果您已安装nose,只需在顶级目录中运行nosetests。一些测试需要python-dateutil(版本1.5)或mock库。在Python 2.4至2.7下进行了测试。

安装sparql-client

《sparql-client》库可在PyPI上获取,且没有依赖。安装过程非常简单,如下所示:

pip install sparql-client

我们还推荐安装《python-dateutil》,以支持从查询结果中解析日期和时间。

许可证

本软件包的内容受Mozilla公共许可证版本1.1(“许可证”)的约束;您只能在本许可证的约束下使用本软件包。您可以在http://www.mozilla.org/MPL/获取许可证副本。

在许可证下分发的软件按“原样”分发,不提供任何形式的保证,无论是明示的还是暗示的。请参阅许可证,了解许可证下管理权利和限制的特定语言。

原始代码是SPARQL客户端版本1.0。

原始代码的初始所有者是欧洲环境局(EEA)。由Eau de Web为EEA创建的部分受欧洲环境局版权(C)保护。所有权利保留。

作者

  • Søren Roug,EEA

  • Alex Morega,Eau de Web

变更日志

3.8 - (2020-06-17)

  • 错误修复:修复了Python3查询执行问题 [alecghica refs #111217]

  • 特性:PEP8和linting [alecghica refs #111217]

3.7 - (2020-06-17)

  • 特性:添加了原来在eionet.europa.eu下找到的文档 [alecghica refs #111217]

3.6 - (2020-03-03)

  • 变更:添加了jenkins徽章 [valentinab25]

3.5 - (2020-02-26)

  • 特性:合并了源代码,现在可以在Python 2和Python 3上运行 [alecghica refs #110159]

  • 特性:更新了Jenkins流水线 [alecghica refs #110159]

3.4 - (2019-01-28)

  • Jenkins:添加sonarqube步骤 [avoinea refs #101552]

3.3 - (2018-12-11)

  • 特性:现在从遵循重定向的端点构建请求时,查询可以正常工作 [alecghica refs #100666]

3.2 - (2018-06-22)

  • 变更:将指向eea.europa.eu的URL更新为https:// [alecghica refs #95849]

3.1 - (2017-12-12)

  • 变更:将eeacms/zptlint替换为eeacms/plone-test:4 zptlint [avoinea refs #90415]

3.0 - (2017-11-14)

  • 变更:添加了SAXParseException的处理程序,并编写了一个测试用例以覆盖此异常 [petchesi-iulian refs #88573]

2.9 - (2017-09-29)

  • 变更:更改了项目的测试结构,以便测试可以正常工作 [petchesi-iulian refs #88509]

2.8 - (2017-08-16)

  • 变更:添加了sparql导出方法格式(xml、xmlschema、json),以便存储和检索缓存中的数据 [zoltan_andras refs #86464]

2.7 - (2017-04-24)

  • 变更:更新了软件包信息 [eduard-fironda]

2.6 - (2016-10-04)

  • 变更:为_get_response添加了超时参数

2.5 - (2016-07-29)

  • 错误修复:安全地从version.txt获取__version__ [voineali refs #74283]

2.4 - (2016-07-29)

  • 错误修复:从version.txt读取__version__ [voineali refs #74283]

2.3 - (2016-07-19)

  • 变更:修复了变更日志标记,并删除了__version__ [alecghica refs #74151]

2.2 - (2016-06-16)

  • 特性:修复了sparql查询中的注释 [lucas refs #72876]

2.1 - (2016-06-02)

  • 错误修复:修复了从服务传递到查询的方法传递问题

2.0 - (2016-04-18)

  • 错误修复:修复了运行查询时的错误报告问题 [alecghica refs #68990]

1.9 - (2016-02-01)

  • 错误修复:现在已迁移到eventlet,修复了超时异常调用问题 [ichim-david refs #17334]

1.8 - (2015-10-05)

  • 错误修复:设置套接字超时以防止Zope实例在外部服务未响应时挂起 [lucas refs #29063]

1.7 - (2015-07-28)

  • 变更:将pycurl2替换为eventlet [david-batranu refs #25721]

1.6 - (2014-09-15)

  • 特性:将默认查询方法从GET更改为POST。 [pasoviul refs #20501]

1.5 - (2013-11-21)

  • 特性:为query()添加了“method”作为参数,现在我们可以使用GET或POST方法 [ghicaale refs #14491]

1.4 - (2013-07-08)

  • 错误修复:使用临时文件进行解析,而不是使用巨大的字符串 [szabozo0 refs #14826]

1.3 - (2013-05-20)

  • 错误修复:修复了HISTORY.txt下的ReST标记 [ghicaale refs #14554]

1.2 - (2013-05-20)

  • 升级步骤
    • 安装系统依赖项libcurl3-dev(Debian/Ubuntu)/ curl-devel(CentOS)

    • [szabozo0 refs #14349]

  • 变更:使用pycurl2代替pycurl [szabozo0 refs #14349]

  • 错误修复:使用pycurl代替urllib2,并添加了超时功能 [szabozo0 refs #14349]

1.1 - (2013-03-15)

  • 特性:移除了sparql错误处理快速修复 [szabozo0 refs #13705]

1.0 - (2013-01-28)

  • 特性:处理sparql错误 [szabozo0 #9608]

0.16 - (2013-01-15)

  • 错误修复:删除了端点URL [szabozo0]

0.15 - (2013-01-10)

  • 打包修复:将version.txt的内容内联 [moregale]

0.14 - (2013-01-10)

  • 错误修复:更新了History.txt [ghicaale]

  • Buf修复:单元测试 [moregale]

0.13 - (2012-09-11)

  • 变更:从HTTP POST更改为GET [roug]

0.12 - (2012-09-11)

  • 无更改

0.11 - (2012-04-15)

  • 功能:在sparql.py中添加版权信息 [roug]

0.10 - (2012-03-05)

  • 功能:将xsd:int类型映射到Python的int类型 [moregale]

0.9 - (2011-10-24)

  • 功能:为unpack_row添加新参数convert_type [moregale]

0.8 - (2011-08-29)

  • PyPI上的第一个版本 [roug, moregale]

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

sparql-client-3.8.zip (28.0 kB 查看哈希值)

上传时间 源代码

由以下组织支持