甜RDF / SPARQL客户端
0.6.2
2023-09-01 15:26 UTC
Requires
- php: >=8.0
- guzzlehttp/guzzle: ^7.2
- halaxa/json-machine: ^1.1.3
- psr/http-client: ^1.0
- psr/http-factory: ^1.0
- sweetrdf/rdf-helpers: ^1.0.2
- sweetrdf/rdf-interface: ^1.0.0 | ^2.0.0-RC1
Requires (Dev)
- http-interop/http-factory-guzzle: ^1.0
- php-coveralls/php-coveralls: ^2.4
- phpstan/phpstan: *
- phpunit/phpunit: ^10
- sweetrdf/quick-rdf: ^1.0.0 | ^2.0.0-RC1
Suggests
This package is auto-updated.
Last update: 2024-08-30 01:28:58 UTC
README
一个SPARQL客户端库,用于rdfInterface生态系统,API灵感来源于PDO。
- 它可以与任何符合PSR-17/PSR-18的HTTP库一起工作。
- 它可以处理大量查询结果。
响应以懒加载方式作为流进行解析(只有当您尝试读取时才会解析下一行)。这确保在迭代结果时不会在数组中累积它们,从而具有可忽略的内存占用。
安装
- 获取Composer
- 运行
composer require sweetrdf/sparql-client
- 运行
composer require guzzlehttp/guzzle
来安装HTTP客户端(但您可以使用任何支持PSR-18的客户端)。 - 运行
composer require http-interop/http-factory-guzzle
来安装Guzzle的PSR-17绑定(但您可以使用任何PSR-17实现)。 - 运行
composer require sweetrdf/quick-rdf
来安装RDF术语工厂(您可以使用任何与rdfInterface兼容的术语工厂)。
自动生成的文档
https://sweetrdf.github.io/sparqlClient/namespaces/sparqlclient.html
它非常不完整,但总比没有好。
包含RdfInterface文档,它提供了术语(表示RDF命名节点的对象、字面量等)的文档。
使用方法
include 'vendor/autoload.php'; $connection = new \sparqlClient\StandardConnection('https://query.wikidata.org/sparql', new \quickRdf\DataFactory()); $results = $connection->query('select * where {?a ?b ?c} limit 10'); foreach ($results as $i) { print_r($i); }
参数化查询
StandardConnection
类提供了一个类似PDO的API,用于参数化查询(也称为预处理语句)。参数化查询
- 是确保SPARQL查询中所有命名节点/空白节点/字面量/四元组等正确转义的正确方式。
- 保护免受SPARQL注入攻击。
- 不会提供任何速度提升(与SQL参数化查询相反)。
include 'vendor/autoload.php'; $factory = new \quickRdf\DataFactory(); $connection = new \sparqlClient\StandardConnection('https://query.wikidata.org/sparql', $factory); // pass parameters using execute() // the single `?` is a positional parameter while the `:sf` is a named parameter $query = $connection->prepare('SELECT * WHERE {?a ? ?c . ?a :sf ?d .} LIMIT 10'); $query->execute([ $factory::namedNode('http://creativecommons.org/ns#license'), 'sf' => $factory::namedNode('http://schema.org/softwareVersion'), ]); foreach ($query as $i) { print_r($i); } // bind a (positional) parameter to a variable $query = $connection->prepare('SELECT * WHERE {?a ? ?c .} LIMIT 2'); $value = $factory::namedNode('http://creativecommons.org/ns#license'); $query->bindParam(0, $value); $query->execute(); foreach ($query as $i) { print_r($i); } $value = $factory::namedNode('http://schema.org/softwareVersion'); $query->execute(); foreach ($query as $i) { print_r($i); }
与PDO API有一些不同
- 在一个查询中混合位置参数和命名参数是允许的(见上面的示例)。
- 混合
bindParam()
/bindValue()
并通过execute()
传递(一些或所有)参数是允许的。- 唯一的约束是所有参数都必须设置。
- 传递给
execute()
的参数将覆盖使用bindParam()
/bindValue()
设置的参数。
- 由于使用强类型,参数值必须是
rdfInterface\Term
类型。- 这使得在
bindParam()
/bindvalue()
中指定类型变得不必要。
- 这使得在
高级使用
- 您还可以向
\sparqlClient\StandardConnection
构造函数提供任何PSR-18 HTTP客户端和/或PSR-17 HTTP请求工厂。例如,假设您的SPARQL端点需要授权,并且您想利用Guzzle连接来设置全局请求选项$connection = new \sparqlClient\StandardConnection( 'https://query.wikidata.org/sparql', new \quickRdf\DataFactory(), new \GuzzleHttp\Client(['auth' => ['login', 'pswd']]) );
- 如果您的SPARQL端点不遵循接受SPARQL查询作为
query
请求参数的事实标准,您可以使用\sparqlClient\Connection
类,该类接受PSR-7请求而不是查询字符串,并允许您使用所需的任何特定HTTP请求。
常见问题解答
- 关于INSERT/UPDATE/DELETE查询与\rdfInterface\Dataset或\rdfInterface\QuadIterator的集成怎么办?
将在将来添加。