acdh-oeaw/acdh-repo

此包已被弃用且不再维护。作者建议使用achd-oeaw/arche-core包。

ARCHE仓库后端


README

Latest Stable Version Build status Coverage Status License

ARCHE仓库解决方案的核心组件,负责CRUD操作和事务支持。

安装

composer require acdh-oeaw/arche-core

部署

https://github.com/acdh-oeaw/arche-docker

开发环境

允许你在主机系统上编辑代码,并在docker容器中运行所有测试的环境。

  • 克隆此仓库并进入它
    git clone https://github.com/acdh-oeaw/arche-core.git
    cd arche-core
  • 获取所有依赖
    composer update
  • 使用运行时环境构建docker镜像
    docker build -t arche-dev build/docker
  • 运行运行时环境,将仓库目录挂载到其中,等待它准备就绪
    docker run --name arche-dev -v `pwd`:/var/www/html -e USER_UID=`id -u` -e USER_GID=`id -g` -d arche-dev
    docker logs -f arche-dev
    等待直到看到(时间戳将会有所不同)
    2020-06-04 14:06:52,309 INFO success: apache2 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
    2020-06-04 14:06:52,309 INFO success: postgresql entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
    2020-06-04 14:06:52,309 INFO success: rabbitmq entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
    2020-06-04 14:06:52,309 INFO success: tika entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
    
    然后按CTRL+c
  • 进入docker容器并在其中运行测试
    docker exec -ti -u www-data arche-dev /bin/bash
    然后在容器内部
    XDEBUG_MODE=coverage vendor/bin/phpunit

备注

  • 默认情况下,开发环境以Apache mod_php模块配置PHP运行,但它也准备好以FPM运行PHP。要调整配置,请运行(在主机系统上)
    docker exec arche-dev a2dissite mod_php
    docker exec arche-dev a2ensite php_fpm
    docker exec -w /root arche-dev supervisorctl restart apache2
    同样,要回到mod_php配置
    docker exec arche-dev a2dissite php_fpm
    docker exec arche-dev a2ensite mod_php
    docker exec -w /root arche-dev supervisorctl restart apache2

REST API文档

架构

architecture

数据库结构

主表是resources表。它存储了所有仓库资源的列表,这些资源通过它们的内部仓库ID(id列)标识,以及处理相关数据(列transaction_idstate)。

元数据根据对其应用的完整性检查分为三个表。

  • identifiers表存储资源标识符(假设每个资源可能有多个)。该表强制实施全局标识符的唯一性。存储标识符的RDF属性隐式来自仓库的config.yaml$.schema.id),并且未显式存储在数据库中。
  • relations表存储所有具有URI作为对象的RDF三元组。它通过外键检查强制实施RDF三元组指向的仓库资源的存在。
  • metadata表存储所有其他RDF三元组。此表不对数据进行约束。三元组以RDF类似的方式存储 - 表中的每一行代表一个单一的三元组。
    • 对于看起来像有效数字/日期的三元组值,value_n/value_t列存储转换为数字/时间戳的值。这允许进行正确的比较,否则将失败针对字符串值。
    • 仅在值的第一个1000个字符上设置了对value列的索引。这既是技术原因也是性能原因。一个重要的后果是,如果您想从值列的索引搜索中受益,您应该将条件声明为substring(value, 1, 1000) = 'yourValue'

辅助表包括

  • 存储待处理事务信息的transactions表。
  • 存储元数据修改历史的metadata_history表。它通过在identifiersrelationsmetadata表上使用触发器自动填充。
  • 存储在分词元数据值和资源文本内容上的 GIST 索引的 full_text_search 表,允许全文搜索(见Postgresql 文档)。
  • 存储作为 PostGIS 地理的向量空间数据的 spatial_search 表,允许进行空间搜索(见PostGIS 文档)。
  • 仅用于从先前 ACDH-CH 存储库解决方案进行数据迁移的 raw 表。

辅助函数和视图

  • metadata_view 收集来自 identifiersrelationsmetadata 表的三元组。
  • get_relatives() 函数允许轻松找到与给定资源相关的资源,并使用给定的 RDF 属性。它内部使用递归查询,这可能很难自己正确编写。
  • get_neighbors_metadata()get_relatives_metadata() 函数允许轻松获取给定资源和与其相关的资源的元数据三元组。可以通过任何单跳 RDF 属性(get_neighbors_metadata())或通过选择任何数量的一个元数据属性的多跳(get_relatives_metadata())来实现。