Python API,用于查询SPARQL端点
项目描述
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.IRI
、sparql.Literal
和sparql.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)保护。所有权利保留。
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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | aacb89e5ffe92fa6a00a2758728c24b2c7e897f57fad76343bc4d6d8c64d95a4 |
|
MD5 | f09db9d83320dd84f7be7fbdca6f16d1 |
|
BLAKE2b-256 | 0d33e91a33bdb637cbf20035885de5a4e3d6439055ec8d950d06b466e3e379b6 |