DigitalPlatform / dp2

Integrated Library System / 图书馆集成系统
http://digitalplatform.github.io/dp2
Apache License 2.0
105 stars 54 forks source link

MARC 校验和格式转换功能 #1188

Open DigitalPlatform opened 2 months ago

DigitalPlatform commented 2 months ago

dp2circulation 最新版改进了原有的 MARC 校验功能。新增加了 MARC 格式转换功能。

下面介绍这两种功能的使用方法:

准备工作

1) 要利用内务的系统管理窗的“内核”属性页,为相关的书目库增配一些配置文件。

如果要启用 MARC 校验功能,需要为书目库增配一对配置文件,名为 dp2circulation_marc_verify.cs 和 dp2circulation_marc_verify.cs.ref。

如果要启用 MARC 格式转换功能,需要为书目库增配一对配置文件,名为 dp2circulation_marc_conver.cs 和 dp2circulation_marc_convert.cs.ref。

增配的方法:在系统管理窗的“内核”属性页,展开相关书目库节点,展开其下的 cfgs 节点,然后用上下文菜单为 cfgs 子目录上传配置文件。配置文件可以先准备到本地的一个临时目录中,文件名正好是要创建的服务器一端的文件名,注意(文本)文件编码方式应当为 UTF-8。

一旦配置文件增配好以后,想要修改其内容,可以用上下文菜单中的“修改配置文件”命令进行编辑修改。

2) 一条书目记录,可以使用多种编目规则中的一种或者多种。

如果一条书目记录中存在 998$c 子字段,则它自己定义了自己的编目规则。这样,同一个书目库中,不同的书目记录可以定义不同的编目规则,比较灵活。

而如果想让一个书目库里面的全部书目记录都默认同一种编目规则,那么可以为书目库定义一个编目规则角色。这样,这个书目库中的书目记录即便没有 998$c 子字段,也默认了特定的编目规则。

(定义书目库角色的方法:打开一个系统管理窗,在“数据库”属性页,利用上下文菜单打开修改数据库的对话框,在里面可以看到“角色”文本框。在里面增加一个 cr:xxx 子参数即可。注意子参数之间要用西文逗号间隔,xxx 代表编目规则名字。例如 cr:NLC)

上述两种方法,如果书目库定义了编目规则角色,并且书目记录中也有 998$c 子字段,则优先认 998$c 子字段。

在种册窗中使用 MARC 格式校验和 MARC 格式转换功能

种册窗的工具条上有一个“校”字按钮,功能即是 MARC 格式校验。 在 MARC 编辑器中,可以用 Ctrl+Y 触发这个功能。

在这个按钮的右侧,有一个向下的小箭头,点它可以出现一个下拉菜单,里面列出了针对当前 MARC 记录的可用的全部 MARC 格式校验命令和 MARC 格式转换命令。

注意,脚本中是可以定义多种动作的,对应多种编目规则。比如可能会同时提供 NLC 和 CALIS 两种动作。那么校验和格式转换加起来就会有四种动作。

(上述下拉菜单中)针对当前 MARC 记录可用的命令,会用粗体文字表示。比如,当前 MARC 记录通过其 998$c 表明它采用了 NLC 的编目规则,那么上述下拉菜单中,“校验 NLC”命令和“转换到 CALIS”就会加粗显示,表示这两个命令是最可能用到的命令。

那为啥不把非加粗字体的命令干脆 disable 禁用呢?这是因为近期需要进行一些测试,还会用到这些非加粗字体的命令。

校验和格式转换功能执行完成后,固定面板区的“校验”属性页会显示校验过程中发现的问题描述文字。然后会弹出来一个对话框,对照显示当前 MARC 记录被修改前和修改后的内容。

点这个对话框上的“接纳修改后的内容”按钮,如果是校验功能,会把右侧的修改后的内容装入替换到当前种册窗的 MARC 编辑器中;如果是格式转换功能,则会打开一个新的种册窗并把右侧的修改后的内容装入这个新开的种册窗的 MARC 编辑器。

种册窗工具条上相关按钮的补充说明

上述“校”字按钮右侧的下拉菜单中的几项命令,可能会随着 MARC 编辑器中的内容改变,或者种册窗“书目记录路径”输入框中的内容变化,而发生改变。 因为 MARC 编辑器中的 998$c 子字段内容变化,可能会导致当前 MARC 记录的编目规则发生变化,另外不同的书目库其默认的编目规则可能会不同。

如果修改了相关书目库中的四个相关的配置文件,要注意用内务框架窗口的主菜单上的“功能/清除缓存/清除配置文件本地缓存”命令来清除本地缓存的一些信息,这样对配置文件的修改才能反映到前端。

在书目查询窗中使用批处理校验和格式转换功能

批处理校验

在书目查询窗中装入一批想要进行 MARC 格式校验的记录,在列表中全选这些记录,然后用上下文菜单的“功能/校验书目记录”可以启动批处理校验。

接下来程序会根据每一条书目记录的 998$t 子字段结合所属书目库定义的相关脚本,探知当前校验的 MARC 记录的编目规则,然后利用这个编目规则进行校验。如果可用编目规则多于一个,会自动出现一个对话框提醒操作者进行选择。

校验的结果会显示到右侧固定面板区的“操作历史”属性页。当某些浏览行被校验过程修改了 MARC 记录的情况下,用鼠标左键点选这些浏览行,右侧固定面板区的“属性”属性页可以看到修改前后的对照显示。

批处理格式转换

在书目查询窗浏览列表的上下文菜单“功能/格式转换书目记录”可以启动批处理格式转换。

格式转换开始后,会弹出一个对话框询问转换后的书目记录打算存入的目标书目库。注意,转换以后的书目记录并不会覆盖保存到列表中的原有记录上,而是另外追加到某个书目库,成为新增的书目记录。

接下来程序会根据目标书目库定义的相关脚本,探知一共有几种编目规则,然后自动选择一种和当前正在转换的 MARC 记录的编目规则不同的编目规则,作为目标编目规则。如果目标编目规则多于一个,会自动出现一个对话框提醒操作者进行选择。

这里举例说明一下:假设目标书目库通过相关脚本定义了两个可用的编目规则:NLC 和 CALIS。并且当前等待转换的 MARC 记录中存在一个 998$c 表明编目规则是 CALIS。那么程序会自动把 NLC 当作目标编目规则。由于只有这一个明确的目标编目规则,所以程序就自动决定了,不会弹出对话框询问。

等转换批处理完成以后,书目查询窗的列表中有一些行会显示特殊的背景色,表示它被修改过了。用鼠标左键点选这些浏览行,在右侧固定面板区的“属性”属性页会看到修改前后的对照显示。可以用上下文菜单“批处理/保存全部修改”,把这些修改后的记录保存到目标书目库中。注意,是追加方式保存,不会覆盖发起转换时候的源书目记录。

DigitalPlatform commented 2 months ago

dp2circulation_marc_verify.cs

dp2circulation_marc_verify.cs

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.Xml;
using System.Diagnostics;
using System.Threading;
using System.IO;
using System.Reflection;
using System.Threading.Tasks;
using System.Web;
using System.Text;
using System.Data;

using dp2Circulation;

public class MyVerifyHost : VerifyHost
{
        // 进行校验
        public override VerifyResult Verify(string action, string marc)
        {
            return new VerifyResult
            {
                Value = -1,
                ErrorInfo = "尚未实现"
            };
        }

        // 获得校验动作列表
        public override List<string> GetActions(string marc)
        {
            return new List<string>(){"NLC", "CALIS"};
        }
}

dp2circulation_marc_verify.cs.ref

<?xml version="1.0" encoding="utf-8"?>
<root>
  <ref>system.web.dll</ref>
</root>
DigitalPlatform commented 2 months ago

dp2circulation_marc_verify.fltx

...

DigitalPlatform commented 2 months ago

dp2circulation_marc_convert.cs

...

...