benestar / asparagus
PHP 的 SPARQL 抽象层
Requires
- php: >=5.3.0
This package is not auto-updated.
Last update: 2024-09-14 18:04:08 UTC
README
[] (http://travis-ci.org/Benestar/asparagus) [
] (https://scrutinizer-ci.com/g/Benestar/asparagus/?branch=master) [
] (https://scrutinizer-ci.com/g/Benestar/asparagus/?branch=master) [
] (https://packagist.org.cn/packages/benestar/asparagus) [
] (https://packagist.org.cn/packages/benestar/asparagus) [
] (//packagist.org.cn/packages/benestar/asparagus)
[] (https://packagist.org.cn/packages/benestar/asparagus) [
] (//packagist.org.cn/packages/benestar/asparagus)
Asparagus 是一个用于 PHP 的 SPARQL 抽象层。它的设计灵感来源于 DBAL 查询构建器。
安装
您可以使用Composer下载并安装此包及其依赖项。或者,您可以简单地克隆git存储库并自行处理加载。
Composer
要将此包添加为本地项目依赖项,只需在项目的composer.json
文件中添加对benestar/asparagus
的依赖项。以下是一个定义了对Asparagus 0.3的依赖项的最小composer.json
文件示例
{ "require": { "benestar/asparagus": "~0.4" } }
手动
获取Asparagus代码,无论是通过git还是其他方式。还要获取所有依赖项。您可以在composer.json
文件的"require"部分找到依赖项列表。此文件的"autoload"部分指定了如何加载该库提供的资源。
用法
大多数QueryBuilder
中的方法都返回构建器实例,因此您可以逐个调用方法来构建查询。目前,QueryBuilder
支持管理前缀、选择变量、添加基本的三元条件并将它们按主题和谓词分组,并完全支持SPARQL提供的所有查询修饰符。
可以将QueryBuilder
实例传递给QueryExecuter
,或者使用getSPARQL
直接获取SPARQL,或者使用format
格式化。
基本功能
以下示例生成一个简单的SPARQL查询,询问数据库中存储了姓名和电子邮件地址的所有人员。
use Asparagus\QueryBuilder; $prefixes = array( 'test' => 'http://www.example.com/test#' ); $queryBuilder = new QueryBuilder( $prefixes ); $queryBuilder->select( '?name', '?email' ) ->where( '?person', 'test:name', '?name' ) ->also( 'test:email', '?email' ) ->limit( 10 ); echo $queryBuilder->format();
生成的查询如下所示
PREFIX test: <http://www.example.com/test#> SELECT ?name ?email WHERE { ?person test:name ?name ; test:email ?email . } LIMIT 10
可选和过滤器
以下片段创建了一个更复杂的查询,使用可选值和过滤器。仅显示没有在数据库中存储电子邮件地址的人员。
use Asparagus\QueryBuilder; $prefixes = array( 'test' => 'http://www.example.com/test#' ); $queryBuilder = new QueryBuilder( $prefixes ); $queryBuilder->select( '?name' ) ->where( '?person', 'test:name', '?name' ) ->optional( '?person', 'test:email', '?email' ) ->filter( '!BOUND (?email)' ); echo $queryBuilder->format();
生成的查询如下所示
PREFIX test: <http://www.example.com/test#> SELECT ?name WHERE { ?person test:name ?name . OPTIONAL { ?person test:email ?email . } FILTER (!BOUND (?email)) }
并集
可以通过使用子图或子查询来构建更复杂的查询。要创建新的子图或子查询,可以调用QueryBuilder::newSubgraph
或QueryBuilder::newSubquery
。GraphBuilder
支持QueryBuilder
支持的几乎所有图函数,并返回自身。如果需要匹配替代条件,可以使用QueryBuilder::union
指定几个允许的图模式。
以下查询返回使用Dublin Core属性从版本1.0或版本1.1记录的书籍的标题和作者。
use Asparagus\QueryBuilder; $prefixes = array( 'dc10' => 'http://purl.org/dc/elements/1.0/', 'dc11' => 'http://purl.org/dc/elements/1.1/' ); $queryBuilder = new QueryBuilder( $prefixes ); $queryBuilder->select( '?title', '?author' ) ->union( $queryBuilder->newSubgraph() ->where( '?book', 'dc10:title', '?title' ) ->also( 'dc10:creator', '?author' ), $queryBuilder->newSubgraph() ->where( '?book', 'dc11:title', '?title' ) ->also( 'dc11:creator', '?author' ) ); echo $queryBuilder->format();
生成的查询如下所示
PREFIX dc10: <http://purl.org/dc/elements/1.0/> PREFIX dc11: <http://purl.org/dc/elements/1.1/> SELECT ?title ?author WHERE { { ?book dc10:title ?title ; dc10:creator ?author . } UNION { ?book dc11:title ?title ; dc11:creator ?author . } }
测试
此库附带了一个设置PHPUnit测试,覆盖了所有非平凡代码。您可以使用根目录中找到的PHPUnit配置文件运行这些测试。这些测试也可以通过TravisCI运行,因为根目录中也提供了一个TravisCI配置文件。
发行说明
0.4.2 (2016-01-21)
- 修复了
QueryExecuter
中的不兼容更改
0.4.1 (2016-01-21)
- 修复了
QueryExecuter::execute
的返回值
0.4 (2015-10-01)
- 添加了
QueryBuilder::describe
QueryBuilder::select
、QueryBuilder::selectDistinct
和QueryBuilder::selectReduced
现在抛出RuntimeException
0.3.1 (2015-09-06)
- 添加了对选择中本地值的支持
0.3 (2015-06-22)
- 将先前包私有的
QueryConditionBuilder
重命名为GraphBuilder
- 删除了
QueryBuilder::hasSubquery
- 添加了
QueryBuilder::getSelects
- 添加了
QueryBuilder::selectDistinct
和QueryBuilder::selectReduced
- 添加了
QueryBuilder::optional
- 添加了
QueryBuilder::filter
、QueryBuilder::filterExists
和QueryBuilder::filterNotExists
- 添加了
QueryBuilder::union
- 添加了
QueryBuilder::newSubgraph
QueryBuilder::select
和QueryBuilder::groupBy
现在需要将函数括在括号内QueryBuilder::groupBy
现在接受多个参数QueryBuilder::where
和QueryBuilder::also
现在支持谓词中的属性路径
0.2.1 (2015-06-19)
- 修复了README.md,使其在
QueryBuilder::select
中使用前缀变量
0.2 (2015-06-18)
- 将
QueryBuilder::plus
重命名为QueryBuilder::also
QueryBuilder::select
、QueryBuilder::groupBy
和QueryBuilder::orderBy
现在期望使用前缀变量而不是仅变量名- 移除了
QueryBuilder::prefix
,因为前缀应该在构造函数中定义 - 增加了对变量和前缀的更多验证。如果验证失败,
QueryBuilder::getSPARQL
将抛出RangeException
- 检测到在条件中未出现的变量
- 检测到未声明的前缀
- 变量名和 IRIs 现在必须匹配正确的格式
- 添加了支持的功能列表,并增加了检查括号是否匹配的功能
0.1 (2015-06-17)
这是带有这些功能的初始版本
- 一个具有生成 SPARQL 查询基本功能的
QueryBuilder
- 一个
QueryFormatter
,可以将 SPARQL 查询转换为人类可读的格式 - 一个
QueryExecuter
,可以向 SPARQL 端点发送查询并解析结果
许可证
Asparagus 根据 GNU 通用公共许可证版本 2 许可。许可证的副本可以在 LICENSE 文件 中找到。