wikibase/internal-serialization

为 Wikibase 存储库的数据访问层提供序列化和反序列化程序

2.10.0 2020-01-24 12:24 UTC

README

包含为 Wikibase 存储库的数据访问层提供序列化和反序列化程序的库。

Build Status Code Coverage Scrutinizer Quality Score

Packagist 上: 最新稳定版本 下载次数

安装

使用此库的推荐方式是通过 Composer

Composer

要将此包添加为项目依赖,只需在项目的 composer.json 文件中添加对 wikibase/internal-serialization 的依赖即可。以下是一个定义了对此包 2.x 版本依赖的最小 composer.json 文件示例

{
    "require": {
        "wikibase/internal-serialization": "~2.0"
    }
}

手动

通过 git 或其他方式获取此包的代码,并获取所有依赖项。您可以在 composer.json 文件的 "require" 部分找到依赖项列表。然后负责在 src 目录中自动加载定义的类。

库使用

通过适当的工厂构造您需要的反序列化器或序列化器实例。

use Wikibase\InternalSerialization\DeserializerFactory;

$deserializerFactory = new DeserializerFactory( /* ... */ );
$entityDeserializer = $deserializerFactory->newEntityDeserializer();

使用 deserialize 或 serialize 方法。

$entity = $entityDeserializer->deserialize( $myEntitySerialization );

在反序列化过程中,防止失败是良好的实践。因此,通常更好的做法是使用稍微更冗长的 try-catch 方法。

try {
	$entity = $entityDeserializer->deserialize( $myEntitySerialization );
}
catch ( DeserializationException $ex ) {
	// Handling of the exception
}

通过 SerializerFactoryDeserializerFactory 访问此库提供的服务。其余代码是实现细节,用户不允许了解。

库结构

所有 Wikibase DataModel 对象都可以序列化为一个通用格式,该格式可以从中重新构造对象。这是通过实现 Serializers\Serializer 接口的对象集来完成的。这些对象将例如 Claim 对象转换为只包含原始类型和数组的结构化数据。因此,该结构化数据可以轻松地输入 json_encodeserialize 或类似工具。从这种序列化中重新构造对象的流程由实现 Deserializers\Deserializer 接口的对象提供。

可以通过 SerializerFactory 实例获取序列化器,可以通过 DeserializerFactory 实例获取反序列化器。不允许直接构造这些序列化器和反序列化器或了解它们(即类型提示)。这些对象是序列化内部的,可能会随时更改名称或结构。在调用 $serializerFactory->newEntitySerializer() 时,您所知道的是返回的是一个 Serializers\Serializer 实例。

该库包含处理旧版内部序列化格式的反序列化器。这些反序列化器位于Wikibase\InternalSerialization\Deserializers,并且都以“Legacy”开头。该命名空间中剩余的反序列化器不特定于任何格式。它们检测所使用的格式,并将其转发到适当的反序列化器。因此,这些反序列化器可以处理旧版遗产格式和新的序列化格式。

DeserializerFactory只返回可以处理旧版和新格式的反序列化器。

测试

该库附带了一组PHPUnit测试,覆盖了所有非平凡代码。您可以使用根目录中的PHPUnit配置文件运行这些测试。测试也可以通过TravisCI运行,因为根目录中提供了一个TravisCI配置文件。

作者

Wikibase 内部序列化由Jeroen De Dauw编写,部分作为Wikimedia Germany的雇员,为Wikidata项目工作。

链接

另请参阅