BIBFRAME 总览
- 美国国会图书馆基于BIBFRAME编目,开源了很多相关生态的基础组件,我在这里梳理、总结一下整个美国国会图书馆的开源组件生态,尝试将主要的开源组件把玩一下,测试一下其组件基础的能力,并尝试集成一下各组件,验证能否形成一个完整的业务生态闭环。
BIBFRAME编辑器
使用方法:
- 执行以下shell脚本,编译运行
1 | git clone https://github.com/lcnetdev/marva-quartz.git |
编辑器后端服务
- 地址:ttps://github.com/lcnetdev/marva-backend
核心后端服务组件
util(Util Service)- 角色: 业务管家
- 功能:
- 不仅是“胶水层”,它更像是整个应用的大脑。
- 负责处理复杂的业务动作,比如“发布”(将数据从暂存区推送到正式区或外部系统)。
- 提供辅助功能,如 MARC 格式预览、Git 数据同步。
- 关键点: 它直接连接数据库,并协调其他服务。
ldpjs-staging(Staging Data Service)- 角色: 草稿箱存储服务
- 功能:
- 专门负责存储正在编辑中、未完成的编目数据。
- 数据存放在
resourcesStaging集合中。 - 允许频繁的读写操作,主要服务于编辑器的“保存草稿”功能。
ldpjs-production(Production Data Service)- 角色: 正式库存储服务
- 功能:
- 专门负责存储已发布、生效的编目数据。
- 数据存放在
resourcesProduction集合中。 - 作为数据的“最终归宿”,供查询和对外发布使用。
scriptshifter(Translation Service)- 角色: 多语言转写助手
- 功能:
- 在编目过程中,实时将非拉丁语系文字(如中文标题)转写为拉丁字母拼音。
- 是一个纯粹的工具服务,无状态。
dctap-dancer(Profile Editor Backend)- 角色: 规则模板管理器
- 功能:
- 管理“编目规则”(Profile)。
- 编目员通过它来定义:在录入某类书时,哪些字段是必填的,哪些字段需要下拉菜单。
- 这些规则定义了
ldpjs中数据的形状。
database(MongoDB)- 角色: 数据中心
- 功能:
- 物理存储所有数据,包括:草稿数据 (
resourcesStaging)、正式数据 (resourcesProduction)、用户信息、配置信息等。
- 物理存储所有数据,包括:草稿数据 (
reverse(Nginx Gateway)- 角色: 前台接待
- 功能:
- 统一入口,根据请求类型将用户引导到不同的服务窗口(是存草稿?还是查正式记录?还是修改模板?)。
组件关系图解

详细启动步骤:
步骤一:初始化代码仓库
由于项目依赖多个 Git 子模块 (ldpjs, scriptshifter, dctap-dancer),首次启动前必须初始化它们,否则构建会失败。
1 | git submodule update --init --recursive |
步骤二:配置环境变量 (.env)
项目根目录缺少 .env 文件,这是启动必须的。请在项目根目录 (d:\repo\marva-backend\) 创建一个名为 .env 的文件,并填入以下配置(根据 server.js 和 docker-compose.yml 分析得出):
1 | # --- 数据库配置 --- |
注意:上述
your_...和http://example.com/...是占位符。如果您没有真实的后端凭据,本地启动可能无法连接外部 API,但容器本身应该能成功运行。
步骤三:启动服务
在项目根目录下运行 Docker Compose 命令构建并启动所有服务:
1 | docker-compose up --build -d |
--build: 强制重新构建镜像(确保子模块代码被正确打包)。-d: 后台运行。
4. 验证与访问
启动完成后,您可以通过以下方式验证:
检查容器状态:
1
docker-compose ps
确保所有容器(尤其是
reverse,util,database)的状态为Up。访问应用:
项目通过 Nginx 暴露在 9400 端口。- 主页/编辑器: http://localhost:4444/bfe2/quartz/
- Util API: http://localhost:9400/util/
