Skip to main content

Invenio 的 OAIPMH 收割机库。仅用于开发,不用于生产。

项目描述

OARepo OAI-PMH 收割机

适用于 Invenio 3.5+ 的 OAI-PMH 采集库。该库提供了将 OAI-PMH 有效负载初始转换为中间 json 表示的功能,该中间 json 表示随后由特定的转换器转换为 invenio 记录。

由于它们的通用性,这些转换器不是该库的一部分,而是必须由应用程序提供。

在数据库中捕获进度和转换错误。

目前,该库不提供错误通知,但会添加这些通知。哨兵可能用于记录和报告。

安装

poetry add oarepo-oaipmh-harvester

配置

所有配置都在数据库模型OAIHarvesterConfig中。有一个命令行工具可以添加新配置:

invenio oaiharvester add \
  --code nusl \
  --name NUŠL \
  --url "http://invenio.nusl.cz/oai2d/" \
  --set global \
  --prefix marcxml 
  --transformer nusl_oai.transformer.NuslTransformer

这将使用代码“nusl”、它的 url、oai 集和元数据前缀注册一个 oai-pmh 收割机。来自该收割机的记录将在写入存储库之前由 NuslTransformer 进行转换。

选项:

Usage: invenio oaiharvester add [OPTIONS]

Options:
  --code TEXT         OAI server code  [required]
  --name TEXT         OAI server name  [required]
  --url TEXT          OAI base url  [required]
  --set TEXT          OAI set  [required]
  --prefix TEXT       OAI metadata prefix  [required]
  --parser TEXT       OAI metadata parser. If not passed, a prefix-based default is used
  --transformer TEXT  Transformer class  [required]

用法

命令行

在命令行上,调用

oaiharvester harvest nusl <optional list of oai identifiers to harvest>

选项:

  -a, --all-records  Re-harvest all records, not from the last timestamp
  --background       Start Harvest on background (via celery task), return immediately
  --dump-to TEXT     Do not import records, just dump (cache) them to this
                     directory (mostly for debugging)
  --load-from TEXT   Do not contact oai-pmh server but load the records from
                     this directory (created by dump-to option)

芹菜任务

@shared_task
def oai_harvest(
        harvester_id: str, 
        start_from: str, 
        load_from: str = None, 
        dump_to: str = None,
        on_background=False, 
        identifiers=None):
    """
    @param harvester_id: id of the harvester configuration (OAIHarvesterConfig) object
    @param start_from: datestamp (either YYYY-MM-DD or YYYY-MM-DDThh:mm:ss, 
           depends on the OAI endpoint), inclusive
    @param load_from: if set, a path to the directory on the filesystem where 
           the OAI-PMH data are present (in *.json.gz files)
    @param dump_to: if set, harvested metadata will be parsed from xml to json 
           and stored into this directory, not to the repository
    @param on_background: if True, transformation and storage will be started in celery tasks and can run in parallel.
           If false, they will run sequentially inside this task
    @param identifiers: if load_from is set, it is a list of file names within the directory. 
           If load_from is not set, these are oai identifiers for GetRecord. If not set at all, all records from 
           start_from are harvested 
    """

收获情况

每次收获都会在数据库表中创建一行,OAIHarvestRun其中包含第一个和最后一个日期戳和收获状态(正在运行、已完成、出错……)

一次运行被分割成一块记录,每个块都在OAIHarvestRunBatch数据库表中表示。它包含一个块状态(正在运行、已完成、警告、失败……)和一个已收获的标识符列表及其状态(好的,在收获标识符期间发出警告,收获标识符失败)。该表还包含警告/错误的详细信息。

自定义解析器和转换器

输入的 OAI xml 首先通过解析器解析为 json 格式。

开箱即用支持 MARC-XML 和 DC 解析器。如果您需要不同的解析器,请参阅下面的部分

然后通过转换器类将 JSON 转换为 invenio 记录。由于不同的存储库使用不同的字段语义(即使在 MARC 中),这一步不能通用,实现者需要提供他/她自己的转换器类。

变压器

一个简单的转换器,它只转换来自 MARC-XML 输入的标题可能看起来像:

from typing import List
from oarepo_oaipmh_harvester import OAITransformer, OAIRecord, OAIHarvestRunBatch

from my_record.proxies import current_service
from my_record.records.api import MyRecord

class NuslTransformer(OAITransformer):
    oaiidentifier_search_property = 'metadata_systemIdentifiers_identifier'
    # the name of service filter that accesses the record's OAI identifier
    oaiidentifier_search_path = ('metadata', 'systemIdentifiers', 'identifier')
    # path to the oai record identifier inside the record

    # invenio service that will be used to create/update the record
    record_service = current_service
    # invenio record for this record
    record_model = MyRecord 
    

    def transform_single(self, rec: OAIRecord):
        # add all your transformations here
        rec.transformed.update({
            'metadata': {
                'title': rec['24500a']
            }
        })

解析器

解析器负责将 XML 文档转换为中间 JSON。

有关实现细节,请参阅MarcxmlParser

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

oarepo-oai-pmh-harvester-3.1.3.tar.gz (36.0 kB 查看哈希

已上传 source

内置分布

oarepo_oai_pmh_harvester-3.1.3-py3-none-any.whl (64.1 kB 查看哈希

已上传 py3