如何实现FilesAndJATS格式jats.xml到METSMODS格式mods.xml的转换?
从JATS XML转换出版元数据到MODS XML的XSLT方案
核心逻辑
XSLT是处理这类XML格式转换的标准方案,JATS和MODS都是学术出版领域通用的元数据格式,完全不需要从零搭建转换逻辑,只要基于两者的规范映射规则编写XSLT模板即可。
具体实施步骤
第一步:梳理元数据映射规则
先对照你手头的JATS和MODS示例文件,明确核心字段的对应关系,常见映射包括:- 标题:JATS的
<article-title>对应MODS的<titleInfo><title> - 个人作者:JATS的
<contrib[@contrib-type='author']>下的<given-names>/<surname>对应MODS的<name type="personal">下的<namePart type="given">/<namePart type="family"> - 出版日期:JATS的
<pub-date>对应MODS的<originInfo><dateIssued> - 期刊来源:JATS的
<journal-title>对应MODS的<relatedItem type="host"><titleInfo><title>
(需根据实际需求补充关键词、摘要、基金信息等其他字段的映射)
- 标题:JATS的
第二步:编写XSLT转换模板
基于XSLT 2.0或3.0编写转换代码,以下是基础框架示例(适配JATS 1.x和MODS v3.x):<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:jats="http://www.ncbi.nlm.nih.gov/JATS1" xmlns:mods="http://www.loc.gov/mods/v3" exclude-result-prefixes="jats"> <!-- 根节点匹配与MODS结构初始化 --> <xsl:template match="/jats:article"> <mods:modsCollection xmlns:mods="http://www.loc.gov/mods/v3"> <mods:mods> <!-- 调用各字段转换模板 --> <xsl:apply-templates select="jats:front/jats:article-meta/jats:title-group/jats:article-title"/> <xsl:apply-templates select="jats:front/jats:article-meta/jats:contrib-group/jats:contrib"/> <xsl:apply-templates select="jats:front/jats:article-meta/jats:pub-date"/> </mods:mods> </mods:modsCollection> </xsl:template> <!-- 标题转换模板 --> <xsl:template match="jats:article-title"> <mods:titleInfo> <mods:title><xsl:value-of select="."/></mods:title> </mods:titleInfo> </xsl:template> <!-- 个人作者转换模板 --> <xsl:template match="jats:contrib[@contrib-type='author']"> <mods:name type="personal"> <mods:namePart type="given"><xsl:value-of select="jats:name/jats:given-names"/></mods:namePart> <mods:namePart type="family"><xsl:value-of select="jats:name/jats:surname"/></mods:namePart> <xsl:if test="jats:email"> <mods:email><xsl:value-of select="jats:email"/></mods:email> </xsl:if> </mods:name> </xsl:template> <!-- 出版日期转换模板(ISO8601格式) --> <xsl:template match="jats:pub-date"> <mods:originInfo> <mods:dateIssued encoding="iso8601"> <xsl:value-of select="concat(jats:year, '-', format-number(jats:month, '00'), '-', format-number(jats:day, '00'))"/> </mods:dateIssued> </mods:originInfo> </xsl:template> </xsl:stylesheet>第三步:执行转换
使用成熟的XSLT处理器(如Saxon、Xalan)运行转换,以Saxon HE为例,命令如下:java -jar saxon-he-12.4.jar -s:your_jats.xml -xsl:jats_to_mods.xsl -o:your_mods.xml
现有资源复用建议
你无需完全从零编写模板:
- 不少学术图书馆、出版社公开了适配通用场景的JATS-MODS转换XSLT,可直接下载后根据你的具体元数据需求修改
- 注意核对JATS和MODS的版本,确保模板中的命名空间、节点结构与你的源文件/目标格式匹配
关键注意事项
- 处理特殊场景:比如机构作者、多语言标题、合著者排序、基金信息等,需要在XSLT中添加条件判断或额外模板
- 验证输出:转换完成后,用MODS官方Schema验证工具检查输出XML是否符合规范
内容的提问来源于stack exchange,提问作者Dominik Kern
相关产品推荐
相关产品推荐

