benestar/asparagus

PHP 的 SPARQL 抽象层

0.4.2 2016-01-21 17:22 UTC

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::newSubgraphQueryBuilder::newSubqueryGraphBuilder支持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::selectQueryBuilder::selectDistinctQueryBuilder::selectReduced现在抛出RuntimeException

0.3.1 (2015-09-06)

  • 添加了对选择中本地值的支持

0.3 (2015-06-22)

  • 将先前包私有的QueryConditionBuilder重命名为GraphBuilder
  • 删除了QueryBuilder::hasSubquery
  • 添加了QueryBuilder::getSelects
  • 添加了QueryBuilder::selectDistinctQueryBuilder::selectReduced
  • 添加了QueryBuilder::optional
  • 添加了QueryBuilder::filterQueryBuilder::filterExistsQueryBuilder::filterNotExists
  • 添加了QueryBuilder::union
  • 添加了QueryBuilder::newSubgraph
  • QueryBuilder::selectQueryBuilder::groupBy现在需要将函数括在括号内
  • QueryBuilder::groupBy现在接受多个参数
  • QueryBuilder::whereQueryBuilder::also现在支持谓词中的属性路径

0.2.1 (2015-06-19)

  • 修复了README.md,使其在QueryBuilder::select中使用前缀变量

0.2 (2015-06-18)

  • QueryBuilder::plus重命名为QueryBuilder::also
  • QueryBuilder::selectQueryBuilder::groupByQueryBuilder::orderBy 现在期望使用前缀变量而不是仅变量名
  • 移除了 QueryBuilder::prefix,因为前缀应该在构造函数中定义
  • 增加了对变量和前缀的更多验证。如果验证失败,QueryBuilder::getSPARQL 将抛出 RangeException
    • 检测到在条件中未出现的变量
    • 检测到未声明的前缀
    • 变量名和 IRIs 现在必须匹配正确的格式
    • 添加了支持的功能列表,并增加了检查括号是否匹配的功能

0.1 (2015-06-17)

这是带有这些功能的初始版本

  • 一个具有生成 SPARQL 查询基本功能的 QueryBuilder
  • 一个 QueryFormatter,可以将 SPARQL 查询转换为人类可读的格式
  • 一个 QueryExecuter,可以向 SPARQL 端点发送查询并解析结果

许可证

Asparagus 根据 GNU 通用公共许可证版本 2 许可。许可证的副本可以在 LICENSE 文件 中找到。