将MARC21分类记录在MARC/XML转换为SKOS/RDF
项目描述
Python脚本,用于将MARC 21分类和MARC 21权威记录(序列化为MARCXML)转换为SKOS概念。
最初开发用于支持“Dewey十进分类联合术语”项目,用于转换Dewey十进制分类(DDC)记录。欢迎提出一般化和改进的问题和建议!
以下为MARC21分类映射方案和MARC21权威。
安装
可以通过命令行使用pip安装版本。
$ pip install --upgrade mc2skos # with virtualenv or as root
$ pip install --upgrade --user mc2skos # install to ~/.local
兼容Python 2.7和3.4+。有关测试的Python版本详细信息,请参阅Travis。
如果Windows上安装lxml失败,请尝试从PyPI下载的Windows安装程序。
如果Unix上安装lxml失败,请安装系统软件包python-dev和libxml2-dev
确保Python脚本文件夹已添加到您的PATH。
要直接使用源代码存储库中的版本
$ git clone https://github.com/scriptotek/mc2skos.git
$ cd mc2skos
$ pip install -e .
用法
mc2skos infile.xml outfile.ttl # from file to file
mc2skos infile.xml > outfile.ttl # from file to standard output
运行 mc2skos --help 或 mc2skos -h 以获取选项。
URI
对于已知的概念方案,会自动生成URI,分类记录从084 $a识别,权威记录从008[11]或040 $f识别。要列出已知的概念方案
$ mc2skos -l
要添加更多词汇表,您可以编辑vocabularies.yml。欢迎提交添加更多词汇表的拉取请求!
也可以通过指定选项--uri中的URI模板即时生成URI。以下模板参数被识别:
{control_number}是001、010或016的控制号。当前方法是如果定义了010或016,则使用010或016,否则使用001。如果您发现这种方法失败,请将其添加到[问题42](https://github.com/scriptotek/mc2skos/issues/42)。
{collection}是“分类”、“表格”或“方案”
{object}是分类方案的一部分,也是{collection}的成员,例如特定的分类或表格。URI中的空格被替换为连字符或其他由选项–whitespace配置的字符。
{edition}来自084 $c(去除语言代码)
要向所有记录添加skos:inScheme语句,可以使用选项--scheme指定URI模板。否则,如果已知概念方案,它将从默认模板派生。
要向表格记录添加额外的skos:inScheme语句,可以使用选项--table_scheme指定URI模板。否则,如果已知概念方案,它将从默认模板派生。
以下示例是从DDC表格记录生成的
<http://dewey.info/class/6--982/e21/> a skos:Concept ;
skos:inScheme <http://dewey.info/scheme/edition/e21/>,
<http://dewey.info/table/6/e21/> ;
skos:notation "T6--982" ;
skos:prefLabel "Chibchan and Paezan languages"@en .
MARC21分类的映射方案
只有MARC21分类数据模型的一小部分被转换,并且转换采用了一种相当实用的方法,例如将7XX字段映射到skos:altLabel。
MARC21XML |
RDF |
---|---|
001 控制号(见上面关于001、010和016的说明) |
dcterms:identifier |
005 最后一次事务的日期和时间 |
dcterms:modified |
008[0:6] 文件中输入的日期 |
dcterms:created |
008[8]="d"或"e" 分类有效性 |
owl:deprecated |
010 控制号(见上面关于001、010和016的说明) |
dcterms:identifier |
016 控制号(见上面关于001、010和016的说明) |
dcterms:identifier |
153 $a、$c、$z 分类号 |
skos:notation |
153 $j 标题 |
skos:prefLabel |
153 $e、$f、$z 分类号层次结构 |
skos:broader |
253 复杂参见参考 |
skos:editorialNote |
353 复杂参见参考 |
skos:editorialNote |
680 范围说明 |
skos:scopeNote |
683 应用说明 |
skos:editorialNote |
684 辅助说明 |
skos:editorialNote |
685 历史说明 |
skos:historyNote |
700 索引术语-个人名称 |
skos:altLabel |
710 索引术语-公司名称 |
skos:altLabel |
711 索引术语-会议名称 |
skos:altLabel |
730 索引术语-统一标题 |
skos:altLabel |
748 索引术语-时间顺序 |
skos:altLabel |
750 索引术语-主题 |
skos:altLabel |
751 索引术语-地理名称 |
skos:altLabel |
753 索引术语-非受控 |
skos:altLabel |
765 合成数字组件 |
mads:componentList(见下文) |
合成数字组件
在765字段中显式描述的合成数字组件使用mads:componentList属性表示,为保持组件的顺序,我们使用RDF列表。示例
@prefix mads: <http://www.loc.gov/mads/rdf/v1#> .
<http://dewey.info/class/001.30973/e23/> a skos:Concept ;
mads:componentList (
<http://dewey.info/class/001.3/e23/>
<http://dewey.info/class/1--09/e23/>
<http://dewey.info/class/2--73/e23/>
) ;
skos:notation "001.30973" .
按顺序检索列表成员是令人惊讶地困难,按顺序检索成对元素是我目前想出的最佳解决方案
PREFIX mads: <http://www.loc.gov/mads/rdf/v1#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT ?c1_notation ?c1_label ?c2_notation ?c2_label
WHERE { GRAPH <http://localhost/ddc23no> {
<http://dewey.info/class/001.30973/e23/> mads:componentList ?l .
?l rdf:rest* ?sl .
?sl rdf:first ?e1 .
?sl rdf:rest ?sln .
?sln rdf:first ?e2 .
?e1 skos:notation ?c1_notation .
?e2 skos:notation ?c2_notation .
OPTIONAL {
?e1 skos:prefLabel ?c1_label .
}
OPTIONAL {
?e2 skos:prefLabel ?c2_label .
}
}}
c1_notation |
c1_label |
c2_notation |
c2_label |
---|---|---|---|
“001.3” |
“Humaniora”@nb |
“T1–09” |
“Historie, geografisk behandling, biografier”@nb |
“T1–09” |
“Historie, geografisk behandling, biografier”@nb |
“T2–73” |
“USA”@nb |
WebDewey数据的附加转换规则
该脚本包含一些额外的规则,用于区分WebDewey记录中不同类型的注释并从中提取实体。实体提取规则(以下标记为[*])使用非标准命名空间,默认情况下不启用。指定--webdewey标志以使用它们。
MARC21XML |
RDF |
---|---|
680 having $9 ess=ndf 定义注释 |
skos:definition |
680 having $9 ess=nvn 变体名称注释 |
wd:variantName [*] 对于每个子字段 $t |
680 having $9 ess=nch 类别在此注释 |
wd:classHere [*] 对于每个子字段 $t |
680 having $9 ess=nin 包含注释 |
wd:including [*] 对于每个子字段 $t |
680 having $9 ess=nph 前标题 |
wd:formerHeading [*] 对于每个子字段 $t |
694 having $9 ess=nml ??? |
SKOS.editorialNote |
7XX having $9 ess=isCaption 作为标题使用的相关索引词 |
skos:prefLabel |
目前尚未以任何特殊方式处理的注释
253 having $9 ess=nsx 不使用。
253 having $9 ess=nce 类别-其他
253 having $9 ess=ncw 类别-其他手册
253 having $9 ess=nse 见。
253 having $9 ess=nsw 见手册。
353 having $9 ess=nsa 参考资料同样
683 having $9 ess=nbu 首选注释
683 having $9 ess=nop 选项注释
683 having $9 ess=non 选项注释
684 having $9 ess=nsm 手册注释
685 having $9 ess=ndp 停止部分
685 having $9 ess=nrp 重新定位
689 having $9 ess=nru 最后使用在…
项目详细信息
mc2skos-0.12.0.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 9ce73ca4f1018ff3a104e874fb8b11c762548558f67ef4beba21c062884e6f55 |
|
MD5 | 8859023eeea60fdaeae531f421312019 |
|
BLAKE2b-256 | a604a1066d8c2a345f005cb43d46496951422b49b1e7ec8b2bb9ada6574a81ac |