将 Microsoft Word (.docx) 与元数据 (metadata XML) 转换为 JATS / NLM XML 的接口
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /health |
健康检查,返回服务状态。 |
| POST | /api/v1/convert |
上传 docx(可选元数据),返回 JATS XML。 |
| GET | / 或 /docs |
本说明文档。 |
POST/api/v1/convert
Content-Type 使用 multipart/form-data。
| 字段 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
file | 文件 | 是 | - | 待转换的 Word .docx 文件。 |
metadata | 文件 | 否 | - | 元数据 XML 文件(JATS <article-meta> / <journal-meta> 结构)。不传则使用内置 metadata/metadataSample.xml。 |
aggression | 整数 | 否 | 10 | 解析激进程度 0-10,越大启用的分类器越多。 |
clean | 布尔 | 否 | false | 是否输出清理后的最终 XML(对应 -c)。 |
identifiers | 布尔 | 否 | false | 是否为支持的 NLM 元素生成唯一 id(对应 -i)。 |
nolink | 布尔 | 否 | false | 跳过参考文献链接器(对应 --nolink)。 |
nometa | 布尔 | 否 | false | 不合并前置元数据(对应 --nometa)。 |
references | 文件 / 文本 | 否 | - | 给定参考文献(纯文本,每行一条)。提供后用其替换 JATS 的 <back><ref-list>,不再使用 docx 提取结果。可传文件 -F "references=@refs.txt",或直接传文本字段 -F "references=..."。 |
1 / true / yes / on 均视为真,其余视为假。通过 output 参数选择返回类型(也可用 format 或请求头 Accept):
| output | 返回 | Content-Type | 说明 |
|---|---|---|---|
xml(默认) | 纯 JATS XML | application/xml | 只返回正文 XML,不含图片。 |
zip | ZIP 压缩包 | application/zip | 含 article.xml + media/* 图片,推荐用于完整交付。 |
json | JSON | application/json | {"filename","jats"} 结构。 |
ZIP 包内部结构(与 JATS 中 xlink:href="media/xxx" 对齐):
article.xml
media/
image1.png
image2.jpg
JSON 返回结构:
{
"filename": "article.xml",
"jats": "<?xml version=\"1.0\"...>...</article>"
}
| 状态码 | 含义 |
|---|---|
200 | 转换成功,按 output 返回 JATS XML / ZIP / JSON。 |
400 | 缺少 file 字段或文件名为空。 |
500 | 转换失败,返回 stdout/stderr 尾部日志。 |
curl -X POST http://localhost:8000/api/v1/convert \
-F "file=@./tests/Sec004.docx" \
-o result.xml
curl -X POST http://localhost:8000/api/v1/convert \
-F "file=@./my-article.docx" \
-F "metadata=@./metadata/metadataSample.xml" \
-F "aggression=10" \
-F "clean=1" \
-o result.xml
# references.txt:每行一条参考文献
curl -X POST "http://localhost:8000/api/v1/convert?output=zip" \
-F "file=@./my-article.docx" \
-F "references=@./references.txt" \
-o result.zip
# 或直接传文本字段
curl -X POST "http://localhost:8000/api/v1/convert" \
-F "file=@./my-article.docx" \
-F "references=Smith J. Title of paper. Journal. 2020;1(1):1-10."
curl -X POST "http://localhost:8000/api/v1/convert?output=zip" \
-F "file=@./my-article.docx" \
-o result.zip
curl -X POST "http://localhost:8000/api/v1/convert?output=json" \
-F "file=@./my-article.docx" \
-H "Accept: application/json"
curl http://localhost:8000/health
在项目根目录(与 Dockerfile 同级)执行:
# 方式一:docker compose
docker compose up -d --build
# 方式二:手动构建并运行
docker build -t metypeset-api .
docker run -d -p 8000:8000 --name metypeset-api metypeset-api
访问 http://localhost:8000/docs 查看本说明。
.docx → JATS/NLM 的核心转换流程(DOCX→TEI→NLM→合并元数据)。runtime/saxon9.jar)与 Java 运行时,无需额外安装。doc/odt/other 输入与 WMF→PNG 图像转换不可用;API 固定使用 --noimageprocessing。-z)未在 API 中暴露,如需可扩展。