信息速览
MEROPS 是 EMBL-EBI 维护的肽酶(蛋白酶)及其抑制剂数据库,官方页面写明收录约 4,000 个肽酶与抑制剂,每个都有一个摘要页。它用一套自建的层级编号把酶按序列相似性归入 family、按结构与序列双重证据归入 clan,再把每条已知的切割事件登记到具体编号下。站内统计页给出的当前规模是 277 个家族、64 个 clan、1,142,373 条序列。
绝大多数序列数据库回答的是「这段序列是什么」,MEROPS 回答的是「这把剪刀剪哪里」。它把「谁剪谁、剪在第几个残基、前后各四个位置偏好什么氨基酸」写成表,并给出每次切割的文献出处。这一层信息在其他公共库里没有等价替代品——UniProt 有蛋白酶条目但没有底物切割谱,CutDB 有切割事件但没有分类层级,BRENDA 有动力学参数但不逐位点记残基。
用它的第一步是想清楚自己需要哪一层:要分类编号就查 Summary 页,要切割位点就查 Substrates 页,要批量比对就跑 pepunit.lib。要注意的最重要一件事是版本——当前 Release 12.5 发布于 2023-09-08,下载页提供的仍是 12.4 的 SQL dump,而序列库文件的修改时间停在 2023-02-22。
§1 速览:它到底是什么
1.1 一句话定义
MEROPS 是一个「酶的分类编号 + 切割事件登记」的二合一数据库。
它的记录不是一条序列,而是一个编号。编号下面挂着三类东西:
| 挂什么 | 具体内容 | 对应页面 |
|---|---|---|
| 身份 | 名称、别名、分类层级、holotype、催化类型、EC 号 | Summary(pepsum) |
| 序列 | 各物种同源序列、活性位点、金属配体 | Sequence features(sequence_features) |
| 行为 | 切了哪些底物、切在第几位、前后偏好、被谁抑制 | Substrates / Inhibitors |
三样东西缺一样,这个库就没有存在意义。只有身份,它是又一个分类表;只有序列,它是又一个 FASTA 库;只有行为,它是一堆散落的文献摘录。把三者按同一个编号串起来,才是它不可替代的地方。
1.2 它最不可替代的一件事
不是「有 114 万条序列」——这个量级在 UniProt 面前不值一提。真正不可替代的是:
它是目前唯一把「底物切割位点」按 P4–P4’ 八个位置逐位点记下来、并附上原始文献的公共库。
「P4–P4’」是蛋白酶学界的标准记法:把切割键两侧的残基从切口向两边数,切键左边依次是 P1、P2、P3、P4,右边依次是 P1’、P2’、P3’、P4’。这个记法能直接变成机器学习特征——八个位置、20 种氨基酸,就是一张 8×20 的计数矩阵。
MEROPS 为每个肽酶维护一张这样的矩阵。以 MMP-1(基质金属蛋白酶-1,编号 M10.001)为例,它的矩阵基于 91 次切割统计得出,逐格可读。别处没有同样的东西:CutDB 记事件但聚合不到位点偏好,MEROPS 把它算成了矩阵。
1.3 用一条真实记录把全文串起来
M10.001 · matrix metallopeptidase-1(MMP-1)
分类:Clan MA >> Subclan MA(M) >> Family M10 >> Subfamily A >> M10.001
Holotype:Homo sapiens,Uniprot P03956,肽酶单元 98-276,MERNUM MER0001063
催化类型:Metallo · EC 3.4.24.7 · Peplist PL00154
切割模式:基于 91 次切割 · CutDB 记录 31 次切割
基因:MMP1 / 11q22-q23 / ENSG00000149968 / OMIM 120353
已知抑制剂:TIMP-1(Ki 0.1 nM)、TIMP-3(Ki 0.16 nM)、α-2-巨球蛋白
选它做贯穿案例,因为它把本篇要讲的每一层都占全了:
| 章节 | 看它的哪个侧面 | 回答什么问题 |
|---|---|---|
| §2.2 | 它在 Clan MA 下的位置 | 分类层级是怎么组织的 |
| §3.2 | 91 次切割的 8×20 矩阵 | 位点偏好长什么样、怎么用 |
| §4.3 | 92 行底物记录 | 底物表里到底有什么、有多脏 |
| §5.2 | 12 个 cgi-bin 端点 | 怎么把它取下来 |
| §7.2 | TIMP-1 的 0.1 nM | 抑制剂数据能到什么精度 |
1.4 它不是什么
| 常见误解 | 实际情况 |
|---|---|
| 「是一个序列数据库」 | 序列只是附属。UniProt 才是序列的主库,MEROPS 存的是分类与切割 |
| 「MEROPS 编号 = EC 号」 | 不是。4,423 个标识符里只有 679 个带 EC 号 |
| 「收录所有蛋白酶」 | 只收肽酶(peptidase,即水解肽键的酶),不收单纯水解酯键或糖苷键的酶 |
| 「数据每天更新」 | 当前版本 2023-09-08,已停止常规更新节奏 |
| 「有 REST API」 | 没有。只有 cgi-bin 的 HTML 端点,返回的是网页不是 JSON |
| 「下载就是最新版」 | 下载页给的是 12.4 的 dump,站内声明的是 12.5 |
1.5 三十秒决策卡
| 你的处境 | MEROPS 能帮你什么 |
|---|---|
| 拿到一个未知蛋白酶序列,想归到哪个家族 | 跑 merops_scan.lib 比对,或用站内 BLAST |
| 要预测某蛋白酶会切哪些位点 | 取该编号的切割位点矩阵,作为特征或规则 |
| 在做蛋白酶底物设计或抑制剂改造 | 查 Substrates 与 Inhibitors 两个表,拿真实 Ki 与切割位点 |
| 想按 clan 做同源建模 | 用 Clan 索引拿到同 clan 的全部家族与代表结构 |
| 要一份可导入关系库的完整快照 | 下 12.4 的 MySQL dump(注意版本落后一站) |
| 要 JSON 接口做自动化 | 不能,没有 REST API,只能抓 HTML |
| 要 2024 年以后新发表的切割数据 | 大概率没有,文献处理已积压 |
1.6 不适合谁
如果你要的是原始序列数据,MEROPS 不是首选。它的 pepunit.lib 只含肽酶单元(不是全长),protease.lib 才是全长,两者都是非冗余库,覆盖的是「MEROPS 收录的肽酶」,不是「所有蛋白」。做大规模预训练语料应该去 UniProt。
如果你要的是实时的、2024 年以后的新切割数据,它会让你失望。Release 12.4 的更新说明里,维护者明确写了「我没能像 Alan 那样跟上文献」,并估计「仍有许多数百篇论文需要完整处理」。这不是传言,是作者原文。
如果你需要程序化接口,会很痛苦。整站是 2000 年代风格的 CGI,返回 HTML 表格,没有 JSON、没有 OpenAPI、没有分页参数。要做自动化必须自己写解析器。
如果你把它当作临床或药物决策依据,越界了。它记录的是「文献里报告过的切割事件」,没有证据等级、没有假阳性过滤、没有体外/体内区分。药物相关性字段是一句描述,不是结论。
1.7 与四个近邻的分工
蛋白酶相关的问题不会只落在这一个库上。把四个最常被混淆的资源摆在一起,分工就清楚了:
| 资源 | 回答什么问题 | 与 MEROPS 的关系 |
|---|---|---|
| UniProt | 这条序列是什么蛋白、有哪些注释 | MEROPS 的 holotype 全部指向 UniProt 编号 |
| PDB | 这个酶长什么样、和什么结合 | MEROPS 记录哪些编号有结构(1,206 个) |
| BRENDA | Km、kcat、最适 pH 是多少 | 互补:BRENDA 给动力学,MEROPS 给切割位点 |
| CutDB | 有哪些被报道的切割事件 | 部分重叠:CutDB 记事件,MEROPS 聚合成位点偏好 |
| MEROPS | 这个酶属于哪个家族、切什么、切在哪、被谁抑制 | — |
一个具体例子:研究 MMP-1 在某个疾病里的作用,通常要串四步——
- 从 UniProt 拿 P03956 的序列与结构注释
- 从 MEROPS 拿 M10.001 的切割位点矩阵与底物清单
- 从 BRENDA 拿催化效率参数
- 从 PDB/PDBe 拿 2TCL 的复合物构象
这四步没有一步可以被另一步替代。 反过来,如果只用 MEROPS 就想回答「这个酶在疾病里起什么作用」,会缺掉表达量、定位、底物在体内的可及性等关键信息——这些都不在它的记录范围内。
§2 数据构成:三层编号与一份统计表
2.1 总量:站内统计页自己算得出来
MEROPS 的统计页(statistics_index?type=P)是理解规模最省力的入口。它的首表按催化类型分组,末行给总计:
| 催化类型 | 序列数 | 标识符数 | 带 EC 号的标识符 | 带 PDB 结构的标识符 |
|---|---|---|---|---|
| 天冬氨酸(Aspartic) | 67,812 | 324 | 52 | 72 |
| 半胱氨酸(Cysteine) | 195,594 | 1,059 | 182 | 281 |
| 谷氨酸(Glutamic) | 11,410 | 22 | 8 | 5 |
| 金属(Metallo) | 389,681 | 1,093 | 212 | 351 |
| 天冬酰胺(Asparagine) | 3,817 | 24 | 13 | 24 |
| 混合(Mixed) | 6,573 | 54 | 3 | 9 |
| 丝氨酸(Serine) | 421,588 | 1,728 | 188 | 404 |
| 苏氨酸(Threonine) | 39,415 | 105 | 13 | 51 |
| 未知(Unknown) | 6,483 | 14 | 8 | 9 |
| 总计 | 1,142,373 | 4,423 | 679 | 1,206 |
表格下方紧接两行:Total Families 277、Total clans 64。
这张表本身就有信息量。4,423 个标识符撑起了 114 万条序列,平均一个编号后面挂着 258 条同源序列。而 4,423 个标识符里只有 679 个(15.4%)能对上 EC 号——说明大部分 MEROPS 编号是「序列层面成立、酶学层面还没定论」的条目。
2.2 三层编号:clan → family → identifier
MEROPS 的编号不是一层,是三层,且每层的判定依据不同:
| 层级 | 写法 | 判定依据 | 数量 |
|---|---|---|---|
| Clan | 两个大写字母,如 MA、PA、CA |
三维结构相似性 + 序列证据 | 64 |
| Family | 一个大写字母 + 数字,如 M10、S1、C19 |
氨基酸序列的统计显著相似性 | 277 |
| Subfamily | 家族号 + 大写字母,如 M10A |
家族内部的进一步细分 | 73 |
| Identifier | 家族号 + 点 + 三位数字,如 M10.001 |
单个肽酶实体 | 4,423 |
家族号的首字母就是催化类型,这是 MEROPS 最实用的一个设计:
| 首字母 | 催化类型 | 家族数 |
|---|---|---|
| C | 半胱氨酸(Cysteine) | 101 |
| M | 金属(Metallo) | 73 |
| S | 丝氨酸(Serine) | 54 |
| A | 天冬氨酸(Aspartic) | 17 |
| N | 天冬酰胺(Asparagine) | 10 |
| U | 未知(Unknown) | 8 |
| G | 谷氨酸(Glutamic) | 6 |
| T | 苏氨酸(Threonine) | 6 |
| P | 混合(Mixed) | 2 |
看到 C19 就知道是半胱氨酸蛋白酶,看到 S1 就知道是丝氨酸蛋白酶——不用查表,看首字母就够。
至于 clan 的字母,规则是:clan 名取「该 clan 首个家族的首字母 + 一个顺序字母」。例如 MA 是金属蛋白酶的第 A 个 clan,PA 是混合催化类型的第 A 个 clan。这个规则不完全一致(有些 clan 的第二个字母是催化类型字母的重复),实际使用中应当查表而不是推导。
M10.001 的完整层级读作:
Clan MA >> Subclan MA(M) >> Family M10 >> Subfamily A >> M10.001
Subclan 这一层只在部分 clan 上存在,不是每层都有。M10 恰好有 subclan,所以 M10.001 的路径是五段。
2.3 家族规模极不均匀
277 个家族按序列数排序,前三名吃掉了相当大的比例:
| 家族 | 代表酶 | 序列数 | 标识符数 |
|---|---|---|---|
| S1 | 糜蛋白酶 A(牛型) | 70,936 | 704 |
| S9 | 脯氨酰寡肽酶 | 61,060 | 213 |
| M20 | 谷氨酸羧肽酶 | 47,046 | 48 |
| S8 | 枯草杆菌蛋白酶 Carlsberg | 38,224 | 210 |
| S33 | 脯氨酸氨肽酶 | 33,239 | 151 |
| S12 | D-丙氨酰-D-丙氨酸羧肽酶 B | 29,463 | 33 |
| M16 | pitrilysin | 27,915 | 58 |
| M12 | astacin | 25,443 | 242 |
| C19 | 泛素特异性肽酶 14 | 24,499 | 201 |
| M24 | 甲硫氨酰氨肽酶 1 | 23,277 | 40 |
两个观察值得记住:
序列数与标识符数不成比例。 S1 有 704 个标识符、70,936 条序列(平均每个 100 条);M20 只有 48 个标识符却有 47,046 条序列(平均每个 980 条)。这说明 M20 的每个编号后面堆了大量物种同源序列——这类家族做物种间比较时样本充足,做家族内多样性分析时样本稀疏。
头部集中度不高。 前十名加起来约 37 万条,占 114 万的 32%。剩下 267 个家族分掉 68%,长尾很长。做「按家族分布」的统计时,不能只取头部。
2.4 按界的分布:细菌占了大头
分布页(distribution_index?type=P)是按家族 × 界交叉的矩阵。把 277 个家族的七列分别求和,得到全库的界分布:
| 界 | 序列数 | 占比 |
|---|---|---|
| Bacteria 细菌 | 678,044 | 59.4% |
| Animals 动物 | 283,083 | 24.8% |
| Fungi 真菌 | 74,182 | 6.5% |
| Plants 植物 | 70,562 | 6.2% |
| Archaea 古菌 | 19,100 | 1.7% |
| Protozoa 原生动物 | 16,658 | 1.5% |
| Viruses 病毒 | 7,517 | 0.7% |
| 合计 | 1,149,146 | — |
这个合计(1,149,146)与统计页的总计(1,142,373)差 6,773 条。差额来自两处:分布页把每个家族各界的计数相加,其中包含「未归入任何界」的条目不在七列里;统计页的总计按催化类型汇总,两边的归类口径不完全一致。引用总量时应当说明用的是哪张表。
「细菌占 59.4%」这个数字会影响使用方式:如果你的研究对象是人类蛋白酶,可直接用的只有 24.8% 那一块,而这一块里还要再按家族筛。看起来 114 万条的库,落到具体问题上可能只剩几千条。
2.5 抑制剂是另一套编号
MEROPS 主页侧栏有个「Switch to Inhibitors」按钮,点进去是另一套独立的编号体系:
| 项 | 肽酶侧 | 抑制剂侧 |
|---|---|---|
| 家族号 | A1 / C19 / M10 / S1 |
I1 / I3 / I35 |
| 标识符 | M10.001 |
I35.001 |
| 家族数 | 277 | 88 |
| 标识符数 | 4,423 | 685 |
| 小分子记录 | — | 2,871 条 |
抑制剂家族号统一以 I 开头,后面跟数字。I35 是 TIMP 家族(金属蛋白酶组织抑制剂),I35.001 就是 TIMP-1。I39 是 α-2-巨球蛋白家族。
两侧的编号不能混用,也没有官方的联表键。 要建立「哪个抑制剂抑制哪个肽酶」的关系,只能从肽酶侧的 Inhibitors 页面抓,或者从小分子索引反查。这是一个真实的建模成本。
抑制剂侧还有一个肽酶侧没有的东西:小分子索引。它把化合物结构名与抑制剂系列对应起来,共 2,871 行,条目形如:
| 化合物名 | 所属系列 |
|---|---|
(+)-2-[4-[(-1-acetimidoyl-4-piperidinyl)oxy]- 3-(7-amidino-2-naphthyl)propionic acid |
DX-9065a |
(2S)-5-amino-2-[(2-n-propyl-1H-imidazol-4-yl)methyl]pentanoic acid |
UK-396082 |
(3S,4S)-3-amino-4-mercapto-6-phenyl-hexane-1-sulfonic acid |
同名(无系列名) |
「所属系列」这一列经常与化合物名相同,说明该化合物没有归入某个系列,单独成条。做化合物去重时要按第一列而不是第二列,否则会把同一化合物的不同写法算成多条。
这套编号体系的实际影响是:做抑制剂相关的分析时,MEROPS 只能提供「谁被谁抑制」的清单,提供不了统一的化合物主键。 要接 ChEMBL 或 PubChem,得自己按名称或 SMILES 做模糊匹配。
2.6 三条获取路径
| 路径 | 入口 | 形态 | 适用 |
|---|---|---|---|
| 网页浏览 | www.ebi.ac.uk/merops/ |
HTML 表格 | 单条查阅 |
| cgi-bin 端点 | /merops/cgi-bin/* |
HTML(非 JSON) | 半自动抓取 |
| FTP 批量 | ftp.ebi.ac.uk/pub/databases/merops/current_release/ |
FASTA / SQL / TSV | 全量下载 |
FTP 目录下六个文件的大小与最后修改时间:
| 文件 | 内容 | 大小 | 最后修改 |
|---|---|---|---|
meropsweb121.tar.gz |
MySQL 建库 SQL 全量 dump | 762,724,478 B(约 727 MB) | 2019-05-17 |
protease.lib |
全长序列 FASTA(非冗余) | 867,170,760 B(约 827 MB) | 2023-02-22 |
pepunit.lib |
肽酶单元序列 FASTA(非冗余) | 457,531,072 B(约 436 MB) | 2023-02-22 |
meropsrefs.txt |
文献库的建库 SQL | 34,295,532 B(约 33 MB) | 2019-05-30 |
merops_scan.lib |
批量 BLAST 用子集 | 1,957,603 B(约 1.9 MB) | 2019-05-17 |
dnld_list.txt |
编号清单(Uniprot 号 → 家族 → 标识符) | 2,914,699 B(约 2.8 MB) | 2021-01-05 |
这张表的最后修改时间列比大小列更有用。 dump 与文献库停在 2019,编号清单停在 2021,只有两个 FASTA 库更新到 2023-02-22。也就是说,通过 FTP 全量下载拿到的东西,最老的部分比站内声明的版本落后四年。
merops_scan.lib 的条目格式值得记一下,它把编号、名称、物种、家族、肽酶单元区间、来源全部编进 FASTA 头行:
>MER0000002 - chymotrypsin A (cattle-type) (Bos taurus) [S01.001]#S01A#{peptidase unit: 34-263}~source XP_608091~"
方括号里是标识符,#...# 里是家族 + 亚家族,花括号里是肽酶单元区间,~source ...~ 是序列来源。一行头信息就够建一张对照表,不用额外解析 HTML。
§3 记录层:一条 MEROPS 编号里有什么
3.1 Summary 页的完整字段清单
以 M10.001 为例,Summary 页(pepsum?id=M10.001)实际输出的字段有 25 项,可分为六组:
| 组 | 字段 | M10.001 的取值 |
|---|---|---|
| 名称 | MEROPS Name | matrix metallopeptidase-1 |
| Other names | collagenase 1, interstitial collagenase, matrix metalloproteinase 1, MMP-1, vertebrate collagenase | |
| 分类 | Classification | Clan MA >> Subclan MA(M) >> Family M10 >> Subfamily A >> M10.001 |
| Holotype | matrix metallopeptidase-1 (Homo sapiens), Uniprot P03956, 肽酶单元 98-276, MERNUM MER0001063 | |
| History | Identifier created: Handbook of Proteolytic Enzymes (1998) Academic Press, London | |
| 活性 | Catalytic type | Metallo |
| Peplist | PL00154 | |
| NC-IUBMB | 3.4 >> 3.4.24 >> 3.4.24.7 | |
| Enzymology | BRENDA | |
| Proteolytic events | CutDB(31 cleavages) | |
| 生理 | Physiology | Role in turnover of most types of collagen |
| Pharmaceutical relevance | Drug target for prevention of pathological tissue damage | |
| Pathways | KEGG:Bladder cancer / Pathways in cancer / PPAR signaling / Rheumatoid arthritis | |
| 位点 | Cleavage pattern | -/pa/-/-li/-/-/-(基于 91 次切割) |
| Specificity matrix | 20 氨基酸 × 8 位(P4–P4’) | |
| 遗传 | Gene symbol / Locus / Ensembl / Entrez / OMIM | MMP1 / 11q22-q23 / ENSG00000149968 / 4312 / 120353 |
「History」这一项容易被忽略但很有用:它记录这个编号最初是在哪本书/哪篇文献里建立的。M10.001 的编号建立于 1998 年的《Handbook of Proteolytic Enzymes》——这说明 MEROPS 的编号体系不是从数据库诞生才有的,而是承接了更早的酶学手册传统。
3.2 切割位点偏好矩阵怎么读
Cleavage pattern: -/pa/-/-li/-/-/- 这一串看起来像乱码,其实是位点偏好的紧凑编码。规则是:八个槽位分别对应 P4 到 P4’,每个槽位写该位置最偏好的氨基酸简写,- 表示该位置没有明显偏好。
拆开读:
| 位置 | 编码 | 含义 |
|---|---|---|
| P4 | - |
无强偏好 |
| P3 | pa |
脯氨酸/丙氨酸倾向 |
| P2 | - |
无强偏好 |
| P1 | - |
无强偏好 |
| P1’ | li |
亮氨酸/异亮氨酸强偏好 |
| P2’ | - |
无强偏好 |
| P3’ | - |
无强偏好 |
| P4’ | - |
无强偏好 |
P1’ 这一格的 li 是理解 MMP-1 的关键。 胶原蛋白的重复序列是 Gly-X-Y,MMP-1 切在 Gly-X 之后,切口右侧(P1’)常是亮氨酸或异亮氨酸——这正是胶原三螺旋里疏水残基的位置。这个偏好不是统计噪声,是底物结构决定的。
完整的矩阵(20 行 × 8 列)在页面上以计数形式给出。前几行:
| 氨基酸 | P4 | P3 | P2 | P1 | P1’ | P2’ | P3’ | P4’ |
|---|---|---|---|---|---|---|---|---|
| Gly | 13 | 5 | 3 | 20 | 0 | 4 | 14 | 6 |
| Pro | 3 | 30 | 3 | 3 | 2 | 1 | 2 | 8 |
| Ala | 13 | 22 | 10 | 20 | 7 | 8 | 14 | 10 |
| Val | 3 | 6 | 6 | 6 | 10 | 11 | 9 | 8 |
| Leu | 10 | 7 | 15 | 4 | 27 | 7 | 4 | 4 |
| Ile | 2 | 3 | 2 | 0 | 15 | 3 | 2 | 5 |
| Met | 1 | 1 | 1 | 1 | 6 | 3 | 1 | 1 |
| Phe | 4 | 0 | 1 | 4 | 5 | 3 | 0 | 2 |
| Gln | 6 | 2 | 14 | 3 | 4 | 3 | 4 | 10 |
| Glu | 8 | 1 | 10 | 1 | 1 | 4 | 8 | 4 |
读这张表能看出三件事:
- P3 位置脯氨酸达 30 次,是全表最高单格。 这与胶原的 Gly-Pro-Y 重复一致——P3 恰好落在胶原的 X 位(常为脯氨酸)。
- P1’ 位置亮氨酸 27 次、异亮氨酸 15 次,两者合计 42 次,超过总切割数的一半。这就是
li编码的来源。 - P1 位置甘氨酸 20 次、丙氨酸 20 次,合计 40 次——切口左侧(P1)是甘氨酸,这正是 MMP-1 切在 Gly-Leu / Gly-Ile 之间的直接证据。
注意:矩阵是计数的绝对频次,不是概率。 要做归一化必须自己除以列和。而列和并不相等(P1’ 列合计约 91,但有些格为 0),说明部分切割在某个位置缺失残基信息。
3.3 序列特征页:活性位点与金属配体
sequence_features?mid=M10.001 页给出该编号下所有已收录序列的逐条特征。该页共 224 行,去重后 192 个 MERNUM,覆盖 147 个物种。
每行的六个字段:
| 字段 | 示例(MER0233728) |
|---|---|
| MERNUM | MER0233728 |
| Species | Ailuropoda melanoleuca(大熊猫) |
| Sequence length | 469 |
| Peptidase unit | 98-276 |
| Active site residues | E219 |
| Metal ligands | H218, H222, H228 |
| Source | GENBANK:XP_002922070 |
这组数字本身就是 MMP 家族的「催化签名」:一个谷氨酸(E)作催化碱,三个组氨酸(H)配位锌离子。换任何一个物种,这三个位置的角色不变、绝对编号变——大熊猫是 219/218/222/228,人(P03956)是 276 位肽酶单元里的对应位置。
页面里还有一个值得注意的现象:27 行(占 224 行的 12%)的活性位点是 missing。这些条目往往是短片段或预测序列,序列本身不完整,找不到催化残基。用这个表做「已知活性蛋白酶清单」时,必须过滤掉 missing 行,否则会高估有效条目数。
物种分布也极度不均:大熊猫 6 条、紫海胆 6 条、马 5 条、牛 4 条、羊 4 条——而人类只有 2 条。这不是因为人类研究少,而是因为这个页面列的是「同一编号下的同源序列」,人类的那一条(holotype)已经单独标明,其余是各物种的直系同源物。
3.4 结构与文献:稀疏但精确
结构页(structure?mid=M10.001)对 M10.001 只给出 2 条 PDB:
| PDB | 物种 | 分辨率 | 说明 |
|---|---|---|---|
| 1FBL | Sus scrofa(猪) | 2.50 Å | 成熟酶 |
| 2TCL | Homo sapiens | 2.20 Å | 催化域;与一个异羟肟酸类抑制剂复合 |
2TCL 的复合物配体写得很具体:[[1-[N-hydroxy-acetamidyl]-3-methyl-butyl]-carbonyl-leucinyl]-alanine ethyl ester——一个异羟肟酸锌结合基团 + 亮氨酰 + 丙氨酸乙酯。这正是 MMP 抑制剂的经典设计范式:用异羟肟酸螯合催化锌,用肽链模拟底物占据 S1’–S2’ 口袋。
文献页(refs?id=M10.001)有 215 条带完整引文的长条目,其中 185 条能解析出年份,最早 1959 年、最晚 2025 年。年份分布显示 2020 年最多(23 条),2020 年以后累计 60 条。
最老的三条是 1959–1960 年 Nagai、Sakakibara、Noda 关于胶原酶特异性的工作——MEROPS 的文献层可以一直追溯到学科起点,这在一众现代数据库里不常见。
3.5 三个外部库的交叉引用
Summary 页把几处外部资源作为交叉引用列出,均可取:
| 外部库 | M10.001 对应的值 | 说明 |
|---|---|---|
| BRENDA | 有入口 | 酶动力学参数(Km / kcat) |
| CutDB | 31 cleavages | 切割事件库,与 MEROPS 的 91 次口径不同 |
| KEGG | 4 条通路 | Bladder cancer / Pathways in cancer / PPAR signaling / Rheumatoid arthritis |
| ChEMBL | species = Homo sapiens(靶点 ID 13000) | 化合物活性 |
| Guide to Pharmacology | species = Homo sapiens(靶点 ID 1628) | 药理学靶点 |
| Wikipedia | MMP1 条目 |
百科链接 |
| PDBe / SCOP / CATH / PDBSum / Proteopedia | 逐结构链接 | 结构注释 |
CutDB 31 次 vs MEROPS 91 次这个差异必须记住。 两个库数的是同一件事(MMP-1 的切割事件),但口径不同:MEROPS 的 91 是它自己文献库里能确认的全部切割,CutDB 的 31 是 CutDB 收录的部分。引用「MMP-1 有多少已知切割位点」时,必须说明数据来自哪个库。
3.6 为什么选 MMP-1 当对照样本
换成任何一个家族的代表酶,上面的字段结构都一样,但只有 MMP-1 同时满足下面五个条件,所以它适合当标尺:
| 条件 | MMP-1 的情况 | 为什么重要 |
|---|---|---|
| 有结构 | 2 条 PDB(猪源成熟酶 + 人源复合物) | 能核对活性位点残基是否与结构一致 |
| 有 Ki 级抑制剂 | TIMP-1 0.1 nM、TIMP-3 0.16 nM | 能验证抑制剂表不是只有名字 |
| 有系列化合物 | CB-12181 六个衍生物,跨度 160 倍 | 能看构效关系是否被完整记录 |
| 有多个底物多个位点 | 91 次切割 / 48 个底物 | 能检验去重逻辑 |
| 文献可追溯 | 215 条,最早 1959 年 | 能验证文献层不是只收近十年 |
换一个冷门编号,很多字段会是空的。 例如一个只有预测序列、没有实验切割记录的家族成员,Summary 页照样有分类与 holotype,但 Substrates 页可能只有零行、Inhibitors 页只有抑制剂的通用注释。这种条目在库里占相当比例——这也是为什么「4,423 个标识符」不能等同于「4,423 个有切割数据的酶」。
判断某个编号的信息密度,最省力的办法是看三个页面的行数:substrates 行数 + inhibitors.pl 行数 + structure 里的 PDB 条数。三项都接近零的编号,只能提供分类归属,提供不了行为数据。
§4 关联层:编号怎么把东西连起来
4.1 四条关联路径
MEROPS 的实体关系比表面看起来复杂。从一个编号出发,能走四条路:
| 方向 | 走法 | 得到什么 |
|---|---|---|
| 向下 | 编号 → Substrates | 它切了哪些蛋白、切在第几位 |
| 向下 | 编号 → Inhibitors | 谁抑制它、Ki 多少 |
| 横向 | 编号 → Sequence features | 同源序列、活性位点、物种分布 |
| 向上 | 编号 → Family → Clan | 同家族/同 clan 的其他成员 |
「向上」这条路最容易被低估。 知道 M10.001 属于 Clan MA 之后,就可以把 Clan MA 下所有家族的切割偏好一起拿出来做对比——这才是 MEROPS 分类体系的实际用途,不只是给酶贴标签。
4.2 底物表的结构:一行一次切割
substrates?id=M10.001 页共 92 行(含表头),每行是一次切割事件,15 个字段:
| 字段 | 含义 | 示例 |
|---|---|---|
| Substrate | 底物名 | alpha-synuclein |
| Uniprot | 底物 Uniprot 号 | P37840 |
| Residue range | 底物序列范围 | 1-140 |
| Cleavage Site | 切割位点写法 | peptide-Lys21+Thr-peptide |
| Cleavage type | 切割类型 | P(蛋白水解) |
| Evidence | 证据类型 | Gly / NT / Leu / MS / Ala |
| P4 – P4’ | 八个位置的残基 | Ala / Ala / Glu / Lys / Thr / Lys / Gln / Gly |
| Reference | 文献出处 | Levin etal, 2008 |
| CutDB | CutDB 编号(部分有) | 3208 |
| MERNUM | 执行切割的序列编号(部分有) | — |
切割位点的写法值得单独说。 peptide-Lys21+Thr-peptide 的意思是:底物肽链在 Lys21 和 Thr22 之间断开,+ 号就是切键位置。这种写法把「切在第几个残基之后」写得毫无歧义,比 K21-T22 这类简写更安全。
4.3 底物表有多脏:一次真实清点
92 行、去掉表头是 91 行,但去重后只有 48 个不同的底物名。也就是说平均每个底物被记录了约 1.9 次。
重复最多的三个:
| 底物 | 出现次数 | 原因 |
|---|---|---|
| alpha-synuclein | 12 | 同一篇文献(Levin et al., 2008)报告了 12 个不同切割位点 |
| matrix metallopeptidase-1 precursor | 6 | MMP-1 自切(autolysis)的多个位点 |
| insulin-like growth factor binding protein 3 | 5 | 多个位点 + 可能多篇文献 |
「同一底物出现 12 次」不是数据错误,是正确的建模。 一个底物可以被切在多处,每一处都是一条独立记录。做「MMP-1 有多少个底物」的统计时,必须按底物名去重;做「MMP-1 有多少个已知切割位点」的统计时,才用 91。
还发现了三类数据质量问题,全部为页面原文:
| 问题 | 实例 | 影响 |
|---|---|---|
| 大小写不一致 | aggrecan core protein 与 Aggrecan core protein;alpha-1-peptidase inhibitor 与 Alpha-1-macroglobulin |
按名去重会把同一个底物算成两个 |
| 残留模板标记 | 部分 Reference 字段值形如 <%Sottrup-Jensen & Birkedal-Hansen, 1989[20040511G011]% |
直接入库会污染文献字段 |
| 空字段 | 部分行的 CutDB、MERNUM 为空 | 无法回溯到具体序列 |
第三类问题的比例不低:92 行里 CutDB 列有值的只是少数。指望用 CutDB 编号把 MEROPS 与 CutDB 全量对齐是不现实的。
4.4 抑制剂表:能到 Ki 精度
inhibitors.pl?id=M10.001 共 105 行。字段结构:
| 字段 | 含义 |
|---|---|
| MERID | 抑制剂编号(如 I35.001);纯化合物无编号 |
| Inhibitor | 抑制剂名 |
| Inhibitor name | 具体化合物名(多用于系列化合物) |
| Ki | 抑制常数 |
| Conditions | 实验条件 |
| Reference | 文献 |
MMP-1 的抑制剂分两类。生理性的(有 MEROPS 编号):
| 编号 | 抑制剂 | Ki | 文献 |
|---|---|---|---|
| I35.001 | TIMP-1 | 0.1 nM | Taylor et al., 1996 |
| I35.002 | TIMP-2 | — | — |
| I35.003 | TIMP-3 | 0.16 nM | Zhao et al., 2003 |
| I35.004 | TIMP-4 | — | — |
| I35.005 | TIMP-DM(果蝇) | 31 nM | Wei et al., 2003 |
| I39.001 | α-2-巨球蛋白 | — | Barrett, 1981 |
TIMP-1 的 0.1 nM 和 TIMP-3 的 0.16 nM 是这张表最有价值的两个数字。 它们说明生理条件下 MMP-1 被 TIMP 紧紧压住——这也是为什么 MMP 抑制剂药物开发很难:要抑制的酶本来就被内源性抑制剂控制着,外源抑制剂必须竞争过 0.1 nM 级的亲和力。
合成化合物(无 MEROPS 编号,只有名称与 Ki):
| 化合物系列 | 代表 | Ki |
|---|---|---|
| CB-12181 | compound 1b | 5.3 nM |
| CB-12181 | compound 1a | 8.0 nM |
| CB-12181 | compound 2 | 26 nM |
| CB-12181 | compound 5 | 128 nM |
| CB-12181 | compound 3 | 162 nM |
| CB-12181 | compound 4 | >850 nM |
| 异羟肟酸类 | N-hydroxy-2-[4-(4-phenoxy-benzenesulfonyl)-tetrahydro-pyran-4-yl]-acetamide | 23 nM |
CB-12181 系列的六个数(5.3 / 8.0 / 26 / 128 / 162 / >850 nM)构成一条完整的构效关系曲线,跨度 160 倍。这类「同一骨架、多个衍生物、逐一给出 Ki」的记录,是药物化学里最实用的形态——它告诉你哪个位置能改、改了掉多少活性。
4.5 一个必须自己建的映射
MEROPS 里最容易卡住的地方是:肽酶编号与抑制剂编号之间没有外键。
要回答「TIMP-1 抑制哪些肽酶」,官方没有一张现成的反查表。可行路径只有两条:
import re
import html
import urllib.request
BASE = "https://www.ebi.ac.uk/merops/cgi-bin"
HEADERS = {"User-Agent": "merops-client/1.0 (+research)"}
def ids_of_family(family: str) -> list:
"""从一个编号索引页抽出某家族下的全部标识符,如传入 S01 得到 S01.001 等。"""
req = urllib.request.Request(f"{BASE}/id_index?type=peptidase;action=A",
headers=HEADERS)
with urllib.request.urlopen(req, timeout=120) as r:
page = r.read().decode("utf-8", errors="replace")
body = re.sub(r"(?is)<script.*?</script>", "", page)
return sorted(set(re.findall(rf"\b({family}\.\d{{3}})\b", body)))
def inhibitors_of(mid: str) -> list:
"""取一个肽酶编号的抑制剂列表,返回 MERID 数组。"""
req = urllib.request.Request(f"{BASE}/inhibitors.pl?id={mid}", headers=HEADERS)
with urllib.request.urlopen(req, timeout=90) as r:
page = r.read().decode("utf-8", errors="replace")
body = re.sub(r"(?is)<script.*?</script>", "", page)
rows = re.findall(r"(?is)<tr[^>]*>(.*?)</tr>", body)
out = []
for row in rows:
cells = [html.unescape(re.sub(r"<[^>]+>", "", c)).strip()
for c in re.findall(r"(?is)<t[dh][^>]*>(.*?)</t[dh]>", row)]
cells = [c for c in cells if c]
if cells and re.fullmatch(r"I\d+\.\d+", cells[0]):
out.append(cells[0])
return out
def build_inhibitor_map(family: str) -> dict:
"""反查表:键为抑制剂编号,值为能与之配对的肽酶编号列表。"""
inv = {}
for mid in ids_of_family(family):
for mer in inhibitors_of(mid):
inv.setdefault(mer, []).append(mid)
return inv
if __name__ == "__main__":
m = build_inhibitor_map("M10")
for mer in sorted(m)[:5]:
print(mer, "->", ", ".join(m[mer]))
这条路可行,只是慢。 4,423 次请求、每次约 30 KB,总量约 130 MB、按 1 秒间隔需要 74 分钟。这是可接受的成本——但必须自己写,官方不给。
第二条路是走抑制剂侧的 Summary 页(pepsum?id=I35.001)。页面存在,但没有出现在左侧导航里,且靶点字段的覆盖率未知。
§5 接口层:怎么取
5.1 没有 API,只有 CGI
MEROPS 的「接口」是一组 cgi-bin 脚本,返回 HTML 页面。没有 JSON、没有 OpenAPI 描述、没有分页参数、没有速率说明。
12 个端点的状态:
| 端点 | 参数 | HTTP | 返回大小 | 用途 |
|---|---|---|---|---|
pepsum |
?id=M10.001 |
200 | 27,867 B | 摘要页(最常用) |
substrates |
?id=M10.001 |
200 | 58,923 B | 底物与切割位点 |
inhibitors.pl |
?id=M10.001 |
200 | 35,221 B | 抑制剂与 Ki |
sequence_features |
?mid=M10.001 |
200 | 97,403 B | 同源序列与活性位点 |
refs |
?id=M10.001 |
200 | 154,467 B | 文献列表 |
structure |
?mid=M10.001 |
200 | 31,241 B | PDB 结构 |
pharma |
?mid=M10.001 |
200 | 5,952 B | 外部药靶库链接 |
code_align |
?mid=<编号> |
未测 | — | 序列比对 |
tree |
?mid=<编号> |
未测 | — | 系统树 |
sequence_data |
?mid=M10.001 |
500 | 534 B | 序列数据(当前故障) |
statistics_index |
?type=P |
200 | 129,126 B | 全库统计 |
distribution_index |
?type=P |
200 | 181,751 B | 界分布矩阵 |
family_index |
?type=P |
200 | 98,393 B | 家族索引(含亚家族) |
clan_index |
?type=P |
200 | 88,973 B | clan 索引 |
organism_index |
?type=P;id=A |
200 | 603,997 B | 物种索引(分字母页) |
id_index |
?type=peptidase;action=A |
200 | — | 编号索引 |
sequence_data 返回 500 是一个必须知道的坑。 它出现在 Summary 页的导航条上(「Sequences」),点进去是错误页。要序列就走 FTP 的 pepunit.lib / protease.lib,不要指望这个端点。
5.2 参数名不统一
同一个功能在不同端点上用不同的参数名,这是抓取时最容易踩的坑:
| 端点 | 参数名 |
|---|---|
pepsum |
id |
substrates |
id |
inhibitors.pl |
id |
refs |
id |
sequence_features |
mid |
structure |
mid |
pharma |
mid |
sequence_data |
mid |
规则看起来是「新写的页面用 mid,老页面用 id」,但没有文档说明。猜错参数的后果不是报错,是返回一个默认页面——这比报错更难发现。
5.3 一个可用的抓取脚本
下面这段能跑,把 Summary 页的关键字段抽成字典:
import re
import html
import urllib.request
BASE = "https://www.ebi.ac.uk/merops/cgi-bin"
HEADERS = {"User-Agent": "merops-client/1.0 (+research)"}
def fetch(endpoint: str, **params) -> str:
"""取一个 cgi-bin 页面的 HTML。参数直接拼进 query string。"""
q = "&".join(f"{k}={v}" for k, v in params.items())
req = urllib.request.Request(f"{BASE}/{endpoint}?{q}", headers=HEADERS)
with urllib.request.urlopen(req, timeout=90) as r:
return r.read().decode("utf-8", errors="replace")
def parse_summary(mid: str) -> dict:
"""从 peppsum 页抽出两列表格,压成 dict。"""
page = fetch("pepsum", id=mid)
body = re.sub(r"(?is)<script.*?</script>", "", page)
rows = re.findall(r"(?is)<tr[^>]*>(.*?)</tr>", body)
out = {}
for row in rows:
cells = [
html.unescape(re.sub(r"<[^>]+>", "", c)).strip()
for c in re.findall(r"(?is)<t[dh][^>]*>(.*?)</t[dh]>", row)
]
cells = [re.sub(r"\s+", " ", c) for c in cells if c]
if len(cells) >= 2:
out[cells[0]] = cells[1]
elif cells:
out.setdefault("_section", cells[0])
return out
if __name__ == "__main__":
d = parse_summary("M10.001")
for k in ("MEROPS Name", "Classification", "Holotype",
"Catalytic type", "Cleavage pattern"):
print(f"{k}: {d.get(k)}")
输出:
MEROPS Name: matrix metallopeptidase-1
Classification: Clan MA
Holotype: matrix metallopeptidase-1 (Homo sapiens), Uniprot accession P03956 (peptidase unit: 98-276), MERNUM MER0001063
Catalytic type: Metallo
Cleavage pattern: -/pa/-/-li/-/-/- (based on 91 cleavages)
注意 Classification 只拿到 Clan MA——因为该字段在页面上被拆成了多个单元格(Clan MA / >> / Subclan MA(M) / >> / Family M10 / …)。要拿完整层级必须单独处理这一行,把该行所有单元格拼接。
5.4 底物表的解析
底物表是横向 15 列,比 Summary 页规整,解析更简单:
def parse_substrates(mid: str) -> list:
"""抽底物表。返回每行一个 dict,键为表头。"""
page = fetch("substrates", id=mid)
body = re.sub(r"(?is)<script.*?</script>", "", page)
rows = re.findall(r"(?is)<tr[^>]*>(.*?)</tr>", body)
table, header = [], None
for row in rows:
cells = [
re.sub(r"\s+", " ", html.unescape(re.sub(r"<[^>]+>", "", c))).strip()
for c in re.findall(r"(?is)<t[dh][^>]*>(.*?)</t[dh]>", row)
]
cells = [c for c in cells if c]
if not cells:
continue
if cells[0] == "Substrate":
header = cells
continue
if header and len(cells) >= len(header) - 2:
table.append(dict(zip(header, cells + [""] * (len(header) - len(cells)))))
return table
if __name__ == "__main__":
t = parse_substrates("M10.001")
print(f"行数 {len(t)},去重底物 {len({r['Substrate'].lower() for r in t})}")
输出 行数 91,去重底物 48——与人工清点一致。注意去重时用了 .lower():页面里 aggrecan core protein 与 Aggrecan core protein 是两个不同的字符串,不转小写会把同一个底物算成两个。
5.5 三条抓取纪律
| 纪律 | 理由 |
|---|---|
| 不要在循环里并发 | CGI 脚本是单进程风格,并发高了会超时或 500 |
| 每个编号抓完就落盘 | 一次全量 4,423 个编号约 130 MB,中断重跑代价高 |
| 按编号做幂等键 | 页面内容会随版本变化,重跑时以编号为准覆盖,不要追加 |
§6 使用场景:三类典型工作流
6.1 场景一:给一个未知蛋白酶定性(最常见)
拿到一段氨基酸序列,想知道它是什么酶、属于哪个家族、有什么已知特性。
: 1. 取批量比对用的子集库(1.9 MB,含全部 holotype 的肽酶单元)
curl -O https://ftp.ebi.ac.uk/pub/databases/merops/current_release/merops_scan.lib
: 2. 建 BLAST 索引并比对(需本地有 blast+)
makeblastdb -in merops_scan.lib -dbtype prot -out merops_scan
blastp -query unknown.faa -db merops_scan -outfmt "6 qseqid sseqid pident length evalue" -evalue 1e-5
命中结果的 sseqid 形如 MER0000002,是 MERNUM 不是 MEROPS 编号。要换成 S01.001 这种可读编号,从 FASTA 头行的方括号里取:
grep -A1 "^>MER0000002 " merops_scan.lib | head -1
echo ">MER0000002 - chymotrypsin A (cattle-type) (Bos taurus) [S01.001]#S01A#{peptidase unit: 34-263}~source XP_608091~"
拿到 S01.001 之后再去 pepsum?id=S01.001 读摘要。
6.2 场景二:为底物设计取位点偏好
要做某蛋白酶的底物肽段设计,需要知道 P4–P4’ 各位置偏好什么。
步骤:
- 取
substrates?id=<编号>,得到逐次切割的八位残基 - 自己按位置 × 氨基酸计数,得到矩阵(不要直接抄页面上那张,因为页面的矩阵是按它自己的切割集算的,你的问题可能需要按证据类型筛选)
- 用矩阵给候选肽段打分
为什么建议自己重算:页面矩阵把 Evidence 类型为 NT(未确证)的行也算进去了。M10.001 的 91 行里 NT 有 12 行、MS(质谱)4 行。如果只信实验确证的数据,应当先按 Evidence 列筛掉 NT,再重新计数。
6.3 场景三:取全量快照建本地库
要反复查询、或者要跟自己的数据联表,就该下 dump。
: 1. 下载 MySQL dump(约 727 MB,注意这是 Release 12.4)
curl -O https://ftp.ebi.ac.uk/pub/databases/merops/current_release/meropsweb121.tar.gz
: 2. 解包
tar xzf meropsweb121.tar.gz
: 3. 建库并导入(解包后是若干 .sql)
mysql -u root -p -e "CREATE DATABASE merops CHARACTER SET utf8mb4"
for f in *.sql; do mysql -u root -p merops < "$f"; done
三个必须注意的点:
- 文件名
meropsweb121里的121指的是 Release 12.1,不是 12.4。下载页正文写「Release 12.4」,链接却指向meropsweb121,而文件最后修改时间是 2019-05-17(对应 12.1 发布期)。版本号、页面文案、文件时间三者互相矛盾。 - dump 里不含「Searches 与 BLAST server」功能,官方在下载页明确说明。要 BLAST 得用 FASTA 库。
- 导入后的表结构没有文档。要理解字段得靠猜和对照网页。
§7 质量评估与局限性
7.0 阅读本节前需要知道的一件事
MEROPS 不是「维护得好不好」的问题,而是**「它正在减速」的问题**。
一个由单人维护、文献处理已经积压的库,和一个有专职团队、季度发版的库,评价标准不该一样。前者该看「它留下了什么别人没有的东西」,后者该看「它跟不跟得上」。MEROPS 属于前者——它的价值在于已经把 1993 年以来的分类与切割数据固化下来了,而不在于它现在还在快速长大。
带着这个前提读下面几节。
7.1 优点一:分类体系有理论依据,不是拍脑袋分组
多数数据库的分类是「主题标签」——把东西按用途装进不同的筐。MEROPS 的分类是有判据的:
- Family 按「氨基酸序列的统计显著相似性」划
- Clan 按「推测同源」划,判据是结构相似性 + 序列证据
这套判据来自 Rawlings & Barrett 1993 年的工作,其创新点在于首次大规模使用三维结构而不只是特异性和催化类型来给蛋白酶分组。在此之前,蛋白酶分类主要靠「切什么」「怎么切」,这套体系把「长什么样」也纳入了。
结果是这套编号被领域广泛采用:S1、M10、C19 这些编号在蛋白酶论文里是通用语言。
7.2 优点二:切割位点记到残基级,且带原始文献
这是其他公共库都没有的粒度。以 alpha-synuclein(P37840)为例,MEROPS 记了 12 个 MMP-1 切割位点:
| 位点 | P4 | P3 | P2 | P1 | P1’ | P2’ | P3’ | P4’ |
|---|---|---|---|---|---|---|---|---|
| Lys21+Thr | Ala | Ala | Glu | Lys | Thr | Lys | Gln | Gly |
| Gly41+Ser | Leu | Tyr | Val | Gly | Ser | Lys | Thr | Lys |
| Gly47+Val | Thr | Lys | Glu | Gly | Val | Val | His | Gly |
| Val70+Val | Gly | Gly | Ala | Val | Val | Thr | Gly | Val |
| Val71+Thr | Gly | Ala | Val | Val | Thr | Gly | Val | Thr |
| Ala78+Gln | Thr | Ala | Val | Ala | Gln | Lys | Thr | Val |
| Ala90+Ala | Ser | Ile | Ala | Ala | Ala | Thr | Gly | Phe |
| Lys97+Asp | Phe | Val | Lys | Lys | Asp | Gln | Leu | Gly |
这 12 个位点全部出自同一篇文献(Levin et al., 2008),且每一行都给了完整的八位上下文。这种「一篇文献 → 多个位点 → 逐位点记残基」的登记方式,是 MEROPS 最核心的贡献。它让「MMP-1 在体外切 alpha-synuclein 的哪些位置」这个问题有了可引用的答案。
7.3 优点三:抑制剂数据能到定量精度
前面列过的 TIMP-1(0.1 nM)、TIMP-3(0.16 nM)、CB-12181 系列(5.3 – >850 nM),都是带 Ki 的定量数据。这个精度足够做构效关系分析、足够做分子对接的验证集。
此外小分子索引(smi_index)有 2,871 条记录,把化合物名与抑制剂系列对应起来。DX-9065a、UK-396082 这类已进入临床的化合物都在里面。
7.4 局限性一:版本停在 2023-09-08,且作者说明了原因
这是最硬的一条。What’s New 页原文(Release 12.5):
This release is a data update; there are no new features and only minor changes to the CGI scripts and services. Because of computing issues at EBI, at present the sequence, code and family tables have not yet been updated.
翻译过来:12.5 只更新了数据,没有新功能;由于 EBI 的计算问题,序列表、代码表与家族表尚未更新。
Release 12.4(2021-10-22)的说明更长,直接讲了人的问题:
This is the first new release for the MEROPS database since Alan Barrett passed away in 2020. … I have taken over this role as well as maintaining the website, collecting and analysing the sequence and cleavage data, but I have not been able to keep up with the literature to the extent that Alan did. Alan managed to update all the literature once a fortnight; I am not able to do updates as frequently. … there are many hundreds of papers that still have to be completely processed. The explosion in literature relating to the COVID-19 pandemic has been partly responsible for this.
三个事实可以直接引用:
| 事实 | 数值 |
|---|---|
| 最近一次发布 | 2023-09-08(Release 12.5) |
| 上一版 | 2021-10-22(Release 12.4),间隔近 2 年 |
| 未处理完的论文 | 作者自述「many hundreds」 |
这不是「停止维护」,而是「减速」——但减速的幅度足以让 2024 年以后的切割数据大概率缺失。
7.5 局限性二:下载页与站内声明不同步,三处矛盾
版本混乱不是一个点,是三处:
| 位置 | 说什么 | 对照结果 |
|---|---|---|
| What’s New 页 | 最新是 Release 12.5(2023-09-08) | 页面确认 |
| 下载页正文 | 「MEROPS Release 12.4」 | 页面确认 |
| 下载页链接 | 指向 meropsweb121.tar.gz |
文件名是 12.1 |
| 文件最后修改 | — | 2019-05-17(12.1 时代) |
| 页脚 | Page created 9-January-2017 |
页面确认 |
「12.4 的说明 + 12.1 的文件名 + 2019 的时间戳」三者同时出现在一页上。 想拿「最新版」的人,会在这一步卡住。
同理,两个 FASTA 库的修改时间是 2023-02-22,早于 12.5 的 2023-09-08 近 7 个月。如果 12.5 只改了小部分数据,这个时间差是合理的;但读者无法确认到底差了多少。
7.6 局限性三:没有 API,只有 CGI 网页
整站是 2000 年代 CGI 架构。这意味着:
- 无法程序化发现端点(没有 OpenAPI / 没有
llms.txt) - 返回的是 HTML,要自己解析
- 参数名不统一(
idvsmid),猜错不报错 - 没有速率约定,高并发会 500
- 至少一个端点(
sequence_data)长期 500
对做数据工程的人来说,把 MEROPS 集成进流水线的成本主要在解析层,不在数据层。
7.7 局限性四:数据里有可清点的脏点
前面 §4.3 列过三类:大小写不一致、残留模板标记、空字段。再补两类:
| 类型 | 实例 | 影响面 |
|---|---|---|
| 名称大小写 | aggrecan core protein / Aggrecan core protein |
底物去重 |
| 模板残留 | <%Sottrup-Jensen & Birkedal-Hansen, 1989[20040511G011]% |
文献字段 |
| 空 CutDB / MERNUM | 大量行 | 跨库对齐 |
活性位点 missing |
224 行里 27 行(12%) | 序列特征统计 |
| 物种名重复条目 | 物种索引 2,528 行 → 去重后 1,104 个主名 | 物种计数 |
最后一条值得展开:物种索引页按字母分页,字母 A 页 2,528 行数据,但去重后只有 1,104 个不同的主名(MAIN NAME)。原因是同一个物种被列了多个俗名——African bush elephant / African elephant / African savanna elephant / African savannah elephant 全指向 Loxodonta africana。
做物种统计时必须以 MAIN NAME 列为准,不能用左边那列。
7.8 局限性五:编号与外部体系的映射不完整
| 映射 | 覆盖率 |
|---|---|
| MEROPS 标识符 → EC 号 | 679 / 4,423 = 15.4% |
| MEROPS 标识符 → PDB 结构 | 1,206 / 4,423 = 27.3% |
| MEROPS 编号 → CutDB 切割 | 底物表里只有部分行有 |
| MEROPS 肽酶编号 ↔ 抑制剂编号 | 无外键 |
只有 15.4% 能对上 EC 号,这个数字决定了 MEROPS 无法作为「酶学功能的权威注释」单独使用。要做 GO / EC 富集分析,MEROPS 只能覆盖一小块。
7.9 一个「假设—支持—反对」的写法示范
关于「MEROPS 是否还在有效维护」,有几种说法。把它拆成可检验的形式:
| 假设 | 支持证据 | 反对证据 |
|---|---|---|
| A. 仍在正常维护 | 站内页面 200 可达;页脚版权显示 © 2026 EBI |
What’s New 最新条目停在 2023-09-08;作者自述文献积压 |
| B. 只做数据修补,不再扩功能 | 12.5 说明写「no new features」 | 12.3 曾新增 3 个谷氨酸家族(G4/G5/G6),说明功能扩展曾经发生 |
| C. 已停止维护 | 下载文件时间戳停在 2019–2023 | 站点仍可访问、仍是 EBI 正式资源、仍接受邮件 |
结论强度:B > A > C。 「仍在维护但不扩功能、且文献处理积压」是同时满足全部证据的解释。据此,使用时应当把 MEROPS 视为「一份相对静态的参考数据」,而不是「一个持续更新的活库」。
7.10 DAIMS 24 项数据就绪度评估
DAIMS 是衡量「一份数据能不能被机器直接消费」的框架。用它逐项过一遍 MEROPS,能看出短板集中在哪:
| # | 检查项 | 状态 | 说明 |
|---|---|---|---|
| 1 | 数据集目的明确 | ✅ | About 页写明是肽酶及其底物、抑制剂的信息资源 |
| 2 | 数据来源可溯 | ⚠️ | 每条切割有文献,但序列来源字段格式不一(GENBANK / UNIPROT / Trembl) |
| 3 | 采集方法说明 | ⚠️ | 分类判据写了(序列相似性、结构),但文献采集流程未文档化 |
| 4 | 标注者信息 | ❌ | 没有标注者字段,只有文献引用 |
| 5 | 标注一致性 | ⚠️ | 底物名大小写混用、残留模板标记 |
| 6 | 版本控制 | ⚠️ | 有版本号(12.5)但下载件版本与页面声明不一致 |
| 7 | 许可明确 | ⚠️ | 写 LGPL 但未区分软件与数据,无版本号链接 |
| 8 | 访问方式 | ⚠️ | 网页 + FTP 可用,无 API |
| 9 | 数据格式规范 | ⚠️ | FASTA 与 SQL 规范,网页端无结构化格式 |
| 10 | 机器可读 | ❌ | 网页全是 HTML 表格,无 JSON / RDF / TSV |
| 11 | 术语标准化 | ✅ | 自建 clan/family 体系,内部一致 |
| 12 | 缺失值处理 | ⚠️ | 用 - 与空白表示,missing 与空串含义不同 |
| 13 | 样本量披露 | ✅ | 统计页给出精确到个位的总量 |
| 14 | 偏倚说明 | ❌ | 未讨论物种分布偏斜(细菌 59.4%) |
| 15 | 局限性声明 | ⚠️ | 更新滞后写在 What’s New,非集中声明 |
| 16 | 伦理声明 | ✅ | 不涉及人类受试者数据,无伦理负担 |
| 17 | 隐私保护 | ✅ | 不涉及个人数据 |
| 18 | 使用建议 | ⚠️ | 有 Quick Start 与幻灯片,但无字段字典 |
| 19 | 引用规范 | ⚠️ | 有 Citing 页,但示例域名已 410 |
| 20 | 维护承诺 | ❌ | 作者自述无法跟上文献,无机构级承诺 |
| 21 | 社区治理 | ⚠️ | 有邮件与博客,无公开治理机制 |
| 22 | 错误报告机制 | ✅ | merops@ebi.ac.uk |
| 23 | 下游兼容 | ✅ | UniProt / BRENDA / CutDB / KEGG 均交叉引用 |
| 24 | 可复现性 | ⚠️ | 编号稳定(好),但版本落后且无快照归档 |
评估总结:24 项中 6 项满足、13 项部分满足、5 项不满足。
不满足的五项(4、10、14、20,加上 5 的部分)指向同一个根源:这个库的设计目标是「给人看」,不是「给程序读」。 分类体系是给酶学家用的标签系统,切割表是给做实验的人查的参考——两者都不以机器消费为前提。
这也解释了为什么第 10 项(机器可读)是三态中最严重的一档:没有 JSON 意味着任何自动化都要先写解析器,而解析器的正确性只能靠人工抽查。
§8 版本与生态
8.1 发布史:61 个版本的节奏变化
What’s New 页完整列出了从 Release 4.0 到 12.5 的 61 个版本。近十年的节奏:
| 版本 | 日期 | 内容摘要 |
|---|---|---|
| 12.5 | 2023-09-08 | 数据更新;因 EBI 计算问题,序列/代码/家族表未更新 |
| 12.4 | 2021-10-22 | 数据更新;Alan Barrett 2020 年去世后首个版本;文献积压自述 |
| 12.3 | 2020-09-11 | 新增 3 个谷氨酸肽酶家族(G4 Tiki1 / G5 RCE1 / G6 MARTX 毒素) |
| 12.2 | 2020-06-15 | 数据更新 |
| 12.1 | 2019-04-26 | 序列数增加 220,000+(+21.4%);底物页新增 MERNUM 列 |
| 12.0 | 2017-09-18 | 从 Sanger 迁至 EMBL-EBI,Sanger 站点不再提供 |
节奏对比:12.0(2017)→ 12.1(2019)隔 19 个月 → 12.2(2020-06)→ 12.3(2020-09)→ 12.4(2021-10)→ 12.5(2023-09)。历史页写「每年约四次完整发布」,近六年实际只有 6 个版本。
8.2 为什么存在:解决的是一个分类碎片化问题
1993 年之前,蛋白酶的分类靠特异性和催化类型。这套分法的问题很具体:
- 同一催化类型的酶可能完全无关(都是丝氨酸蛋白酶,但三维结构毫无关系)
- 不同催化类型的酶可能同源(催化残基换了,骨架没换)
- 没有统一编号,每篇论文自己起名
Rawlings & Barrett 1993 的做法是:用一级结构和三级结构把同源蛋白酶聚成 family,把推测同源的 family 聚成 clan。 这一步把「蛋白酶」从一堆按功能取名的酶,变成了一个有谱系关系的家族树。
M10.001 这个编号就是这个体系的产物:它同时说明了「这是金属蛋白酶(M)」「属于第 10 个家族」「是该家族第一个被定义的成员(.001)」。
8.3 一个容易被讲错的名字来源
「MEROPS」不是缩写,是蜂虎的属名。
历史页原文:
The idea of using the terms ‘family’ and ‘clan’ for the groups of peptidases came from a television documentary on bee-eaters, and because of this we chose the generic name of the bee-eater as the name of the database. In Greek mythology, Merops was a Trojan seer who was father-in-law to Priam, the King of Troy. The name was applied by Linnaeus to the European Bee-eater (Merops apiaster) in 1758.
「family」和「clan」这两个术语借自蜂虎的社群结构:白喉蜂虎(Merops bullockoides)在赞比西河岸筑巢,群体分成 family 与 clan,各自占据殖民地的不同区域,且有各自独立的觅食区。
所以这个库名和「蛋白酶」没有任何语义关系。在中文语境里把它译成「肽酶家族数据库」之类的意译,会丢掉这层来源。 它就叫 MEROPS。
8.4 迁移:旧域名已经 Gone
| 域名 | 状态 |
|---|---|
https://merops.sanger.ac.uk/ |
410 Gone(页面标题仍是 “The Wellcome Sanger Institute - Merops”) |
https://www.ebi.ac.uk/merops/ |
200 |
12.0 的发布说明写的是「所有发往 Sanger 站点的请求都会被转发到 EBI 首页」。实际不是转发,是 410。 任何代码里硬编码了 merops.sanger.ac.uk 的地方,现在都会拿到 410 而不是重定向——这不会抛异常,只会让抓取结果为空。
引用页(about/citing.shtml)至今仍写着:
The top-level URL (http://merops.sanger.ac.uk/) may not be sufficient to allow someone to check a specific fact
官方自己的引用指引还在用已经 410 的域名。 这是页面未随迁移更新的直接证据。
8.5 许可证:一个模糊点
可用性页(about/availability.shtml)写:
The MEROPS database is provided under the terms of the GNU Library General Public License and the complete content of the database is referred to as the ‘Library’.
三个问题:
- 「GNU Library General Public License」是 LGPL 的旧名(1999 年被 LGPL 2.1 取代)。指的是 LGPL-2.0,不是 GPL。
- LGPL 是为软件库设计的,用来约束「数据库内容」在法律上是否成立,是有争议的。数据本身在许多司法辖区不受版权保护。
- 页面没有区分「软件」与「数据」,也没给出具体的许可证版本号链接。
实用的读法:当成「可以自由使用,但要保留出处」处理,并在论文里按引用页要求引 Rawlings 等的 NAR 论文 + 注明访问日期 + 给出具体页面 URL。 商用前建议直接发邮件问(merops@ebi.ac.uk)。
8.6 在生态中的位置
| 资源 | 与 MEROPS 的关系 |
|---|---|
| UniProt | 上游序列来源。MEROPS 的 holotype 全部指向 UniProt 编号 |
| PDB / PDBe | 上游结构来源。1,206 个标识符有结构 |
| BRENDA | 互补:BRENDA 给动力学参数,MEROPS 给切割位点 |
| CutDB | 部分重叠:CutDB 记切割事件,MEROPS 把它聚合成位点偏好矩阵 |
| KEGG | 下游:MEROPS 记录每个肽酶参与的 KEGG 通路 |
| ChEMBL / Guide to Pharmacology | 下游:MEROPS 提供靶点链接与 ID |
| NCBI / GenBank | 序列来源之一(sequence_features 页的 Source 列大量指向 GENBANK) |
| Peplist | MEROPS 自有的肽段清单,编号形如 PL00154 |
关键区分:MEROPS 是这些库中间的一层,不是它们的替代品。 序列在 UniProt,结构在 PDB,活性在 ChEMBL,切割在 MEROPS 与 CutDB。做完整分析要串至少三个库。
8.7 它为什么能持续:三个可观察的条件
条件一:编号体系一旦被领域采用,就获得了独立生命。 S1、M10、C19 这些编号在论文里被直接引用,使得 MEROPS 即使更新变慢,也不能被替换——替换意味着全领域的术语重写。
条件二:数据规模小到可以由单人维持。 277 个家族、4,423 个标识符,这个量级的人工策展在一个人力范围内是可能的。对比 UniProt(2.5 亿条序列)必须靠自动化流水线,MEROPS 的「慢」反而保住了「准」。
条件三:它挂在 EMBL-EBI 下。 12.0 从 Sanger 迁到 EBI 之后,基础设施(存储、带宽、长期归档)由机构承担。这解释了为什么作者个人跟不上了、站点却仍然可达——机构承担了「不关站」,个人承担了「不更新」。
判断:这三个条件里前两个仍然成立,第三个取决于 EBI 的政策。所以「MEROPS 短期不会消失,但也不会变快」是最可能的走向。
§9 使用指引
9.1 三种角色的路径
| 角色 | 第一条命令 | 接下来 |
|---|---|---|
| 查一个酶 | pepsum?id=<编号> |
读 Classification 与 Cleavage pattern |
| 做批量比对 | 下 merops_scan.lib |
makeblastdb → blastp → 从 FASTA 头取编号 |
| 建本地库 | 下 meropsweb121.tar.gz |
解包 → 建 MySQL → 注意版本是 12.1/12.4 混合 |
9.2 一个完整的选取流程
目标:拿到「某家族全部成员的切割位点偏好」,用于训练一个位点预测器。
1. clan_index / family_index → 拿到目标家族的全部标识符(如 M10 下有 M10.001..M10.0xx)
2. 对每个标识符取 substrates?id=<编号> → 得到逐行切割记录
3. 按 Evidence 列筛(去掉 NT)
4. 按 (编号, 底物, 位点) 三元组去重
5. 按 P4–P4' 八列计数 → 得到该家族的矩阵
6. 归一化:每列除以该列合计,得到位置特异性打分矩阵(PSSM)
第 4 步不能省。 同一家族的多个成员可能切同一底物的同一位置,如果不去重,会把一个位点算成多次。
9.3 编码时的五个已知陷阱
| 陷阱 | 现象 | 应对 |
|---|---|---|
| 参数名混用 | sequence_features 用 mid,pepsum 用 id |
按 §5.2 的表逐个确认 |
| 猜错参数不报错 | 返回默认页而非错误 | 抓完校验关键字段是否存在 |
sequence_data 500 |
导航条上有链接,点进去报错 | 走 FTP 取序列 |
Classification 被拆成多格 |
只能拿到 Clan MA |
该行全部单元格拼接 |
| 底物名大小写不一 | 去重结果偏多 | .lower() 后再去重 |
9.4 许可证与引用检查清单
- [ ] 引用 Rawlings 等的 NAR 论文(引用页指定的是 2014 年那篇,但更新的是 2018 年 NAR 46:D624-D632,建议两篇都引)
- [ ] 注明访问日期(官方明确要求,理由是「数据库内容可能一夜之间改变」)
- [ ] 给出具体页面 URL,不要只给域名(官方明确写了顶层 URL 不足以核验具体事实)
- [ ] 商用前发邮件确认(
merops@ebi.ac.uk),因为许可证表述不清晰 - [ ] 用到上游资源时同时引用上游(UniProt / PDB / KEGG)
许可证这一段值得多说两句,因为它是这套数据在合规审查里最容易被卡住的地方。官方声明用的是 GNU Library General Public License(简称 LGPL),但这个缩写本身就有歧义:它最初指 1991 年发布的 Library GPL 2.0,后来自由软件基金会把它改名为 Lesser GPL,同时把「库」的适用范围扩展到动态链接场景。MEROPS 页面上写的是旧名,没有标版本号,也没有说明是「2.0 only」还是「2.0 or later」,更没有单独声明数据库内容(而不是代码)适用哪一份许可。数据库和软件在版权法上是两类客体,很多生物数据库会把代码放在开源许可下、把数据放在 CC 系许可下,MEROPS 没有做这个区分。
实践中有三种读法,风险和成本各不相同。
| 读法 | 具体做法 | 适用场景 | 风险 |
|---|---|---|---|
| 按 CC-BY 宽松处理 | 视同可自由使用,只保留署名 | 内部研究、论文方法学描述、教学材料 | 低。即使将来许可被澄清为更严格,已发表的学术使用通常属合理使用范畴 |
| 按 LGPL-2.0 严格处理 | 任何再分发都附带完整许可文本与源码可得性声明 | 打包进商业软件、对外提供 API 服务 | 中。LGPL 的「源码可得」义务在纯数据场景下语义不清 |
| 先问再做 | 发邮件到 merops@ebi.ac.uk 说明用途,取得书面回复 |
商业化产品、大规模再分发、二次建库 | 最低,但需要等待,且 EMBL-EBI 的回复不一定构成法律意见 |
对大多数读者来说,第一种读法足够:写论文时在方法部分写明「蛋白酶分类与切割位点信息取自 MEROPS 12.5(Rawlings et al.),访问日期 2025-XX-XX」,并在参考文献中列出 NAR 论文,就满足了学术共同体的惯例。真正需要走第三条路径的是那些打算把 MEROPS 的切割位点矩阵嵌进商业预测模型、或者把它作为付费产品核心数据源的情况——这类用途值得花两周等一封邮件。
有一点需要提醒:MEROPS 的条目里嵌入了大量来自 UniProt、PDB、KEGG、CutDB 的交叉引用与序列片段。这些上游资源各自有自己的许可条款,MEROPS 的 LGPL 声明不能覆盖它们。如果你的用途涉及再分发序列本身(而不只是编号和分类),需要逐项回溯上游。这在实务中很少被追究,但合同审查时是常见的追问点。
9.5 常见误区与纠正
| 误区 | 纠正 |
|---|---|
| 「MEROPS 编号就是 EC 号」 | 两套体系独立,只有 15.4% 能对上 |
| 「114 万条序列都是全长蛋白」 | pepunit.lib 是肽酶单元,只有 protease.lib 是全长 |
| 「下载就是最新版」 | 下载页给 12.4/12.1 的 dump |
| 「有 API」 | 只有 CGI,返回 HTML |
| 「切割位点数 = 底物数」 | 同一底物可有多个位点,M10.001 是 91 次切割 / 48 个底物 |
| 「MEROPS 和 CutDB 数据一致」 | M10.001 是 91 vs 31,口径不同 |
§10 AI 使用声明
| 项目 | 声明 |
|---|---|
| 性质 | 人工策展的酶分类与切割事件参考库,非测量数据 |
| 适合的用途 | 蛋白酶家族归属、切割位点特征工程、抑制剂构效分析、同源序列检索、底物设计规则提取 |
| 不适合的用途 | 临床决策、药物有效性判断、大规模预训练语料、实时更新的数据源 |
| 关键前提 | 版本 2023-09-08;下载件更旧;无 API;切割数据需按 Evidence 筛 |
| 伦理与合规 | 不涉及人类受试者数据;许可证表述为 LGPL 但未区分软件与数据,商用前需确认 |
| 引用要求 | Rawlings 等 NAR 论文 + 访问日期 + 具体页面 URL |
| 版本标注 | 必须写 Release 12.5 / 2023-09-08;若用下载件,须说明实际拿到的是 12.4 或更早 |
| 数据来源 | EMBL-EBI,原 Wellcome Trust Sanger Institute |
| 页面状态 | published |
常见误读(避坑清单)
| 常见说法 | 实际情况 | 证据 |
|---|---|---|
| 「MEROPS 是一个序列数据库」 | 序列只是附属,核心是分类与切割 | pepunit.lib 仅 436 MB,UniProt 是其数百倍 |
| 「MEROPS 编号 = EC 号」 | 4,423 个标识符中仅 679 个带 EC 号 | 统计页首表末列 |
| 「有 REST API 可以调」 | 只有 cgi-bin HTML 端点,无 JSON |
12 个端点返回均为 text/html |
| 「sequence_data 能取序列」 | 返回 500 Internal Server Error | cgi-bin/sequence_data?mid=M10.001 |
| 「下载的就是最新版」 | 下载页给 12.4 说明 + 12.1 文件名 + 2019 时间戳 | download_list.shtml |
| 「旧域名会重定向到新站」 | merops.sanger.ac.uk 返回 410 Gone,不重定向 |
直接请求该域名 |
| 「数据每年更新四次」 | 历史页这么写,实际近六年只有 6 个版本 | What’s New 页 61 条版本记录 |
| 「切割位点数等于底物数」 | M10.001 是 91 次切割 / 48 个底物 | substrates?id=M10.001 |
| 「MEROPS 与 CutDB 数据一致」 | M10.001:MEROPS 记 91 次,CutDB 记 31 次 | Summary 页与 CutDB 交叉引用 |
| 「MEROPS 是缩写」 | 是蜂虎属名 Merops,非缩写 | 历史页原文 |
| 「家族数量 277 且每家族都有亚家族」 | 亚家族仅 73 个,不是每个家族都有 | family_index?type=P |
| 「抑制剂与肽酶在同一套编号下」 | 两套独立编号(I 开头 vs 字母+数字),无外键 | 抑制剂侧 family_index?type=I |
| 「活性位点字段总是有值」 | sequence_features 页 224 行里 27 行为 missing |
逐行计数 |
| 「物种索引的行数就是物种数」 | 2,528 行去重后仅 1,104 个主名 | 同物异名重复 |
FAQ
Q1:MEROPS 和 UniProt 是什么关系?
UniProt 是序列主库,MEROPS 的 holotype 全部指向 UniProt 编号。MEROPS 在 UniProt 之上加了两样东西:分类层级(family / clan)和切割事件。要序列去 UniProt,要「这个酶切什么」来 MEROPS。
Q2:一共多少条记录?
三个数字分别对应不同层:277 个家族、4,423 个标识符、1,142,373 条序列(统计页口径)。分布页按界求和得到 1,149,146,比统计页多 6,773。引用时要说明用哪个。
Q3:为什么只有 4,423 个编号却有 114 万条序列?
因为一个编号下面挂的是「该酶在各物种的同源序列」。平均每个编号 258 条。S1 家族最夸张,704 个编号后有 70,936 条。
Q4:M10.001 是什么?
基质金属蛋白酶-1(MMP-1,胶原酶 1)。Clan MA >> Subclan MA(M) >> Family M10 >> Subfamily A >> M10.001。holotype 是人源的 P03956,肽酶单元 98-276。
Q5:切割位点里的 P4–P4’ 是什么意思?
切口两侧各四个位置的残基编号。切键左侧由近及远是 P1、P2、P3、P4,右侧是 P1’、P2’、P3’、P4’。MMP-1 的 P1’ 强烈偏好亮氨酸/异亮氨酸。
Q6:-/pa/-/-li/-/-/- 怎么读?
八个槽位对应 P4–P4’,每槽写偏好氨基酸简写,- 表示无强偏好。所以是「P3 偏好脯氨酸/丙氨酸,P1’ 偏好亮氨酸/异亮氨酸,其余无明显偏好」。
Q7:为什么 12.5 之后没有新版本?
官方说明是「EBI 的计算问题导致序列、代码、家族表未更新」,加上前一个版本的说明里提到作者无法跟上文献。没有官方公告说停止维护。
Q8:能拿来做机器学习吗?
可以,切割位点矩阵是天然的监督信号。但要注意:①按 Evidence 列筛掉 NT;②同一底物多个位点要分别计数;③版本固定时要记录版本号,因为数据可能长期不变。
Q9:为什么有些肽酶的活性位点是 missing?
这些条目往往是短片段或预测序列,序列本身不含完整催化域。224 行里 27 行如此(12%)。
Q10:抑制剂和肽酶怎么联表?
官方没给外键。可行做法是遍历肽酶侧 inhibitors.pl?id=<每个编号>,抽 MERID 列,反向建映射。4,423 次请求,约 74 分钟。
Q11:商用需要授权吗?
官方写「GNU Library General Public License」,但没区分软件与数据,也没给版本号。建议发邮件到 merops@ebi.ac.uk 确认。
Q12:为什么叫 MEROPS?
蜂虎的属名。选这个名字是因为 family / clan 这两个术语借自蜂虎的社群结构(白喉蜂虎的巢群分成 family 与 clan)。历史页原文有完整说明。
术语表
| 术语 | 含义 |
|---|---|
| MEROPS | 本文条目,EMBL-EBI 的肽酶数据库;名称来自蜂虎属名 Merops |
| Peptidase | 肽酶,水解肽键的酶。日常也叫 protease / proteinase |
| Clan | 最高层级分类,按结构相似性 + 序列证据推测同源。共 64 个 |
| Family | 第二层,按氨基酸序列的统计显著相似性划分。共 277 个 |
| Subfamily | 家族内细分,写法加字母后缀(如 M10A)。共 73 个 |
| Identifier | 单个肽酶实体,写法 家族号.三位数字(如 M10.001)。共 4,423 个 |
| Holotype | 模式酶,该编号的代表序列,通常人源 |
| MERNUM | 单条序列的编号(如 MER0001063),一个标识符下有多条 |
| Peptidase unit | 肽酶单元,序列中承担催化功能的那一段 |
| P1 / P1’ | 切割键左侧第一位 / 右侧第一位残基 |
| P4–P4’ | 切割位点左右各四个位置,共八位 |
| Scissile bond | 被切开的那个肽键 |
| Catalytic type | 催化类型,按活性位点残基分:Aspartic / Cysteine / Metallo / Serine / Threonine / Glutamic / Asparagine / Mixed |
| TIMP | 金属蛋白酶组织抑制剂(Tissue Inhibitor of Metalloproteinases),家族号 I35 |
| Peplist | MEROPS 自有的肽段清单,编号形如 PL00154 |
| CutDB | 第三方切割事件库,与 MEROPS 部分重叠 |
| BRENDA | 酶动力学参数库,MEROPS 交叉引用 |
| NC-IUBMB | 国际生物化学与分子生物学联合会酶命名委员会,EC 号的来源 |
| HExxH motif | 金属蛋白酶常见的锌结合基序(两个组氨酸夹两个任意残基) |
| Autolysis | 自切,蛋白酶切自己。M10.001 底物表里有 6 条 |
| LGPL | GNU Lesser General Public License,官方声明的许可证 |
附录 A:条目信息速查卡
| 项 | 值 |
|---|---|
| 名称 | MEROPS |
| 全称 | the Peptidase Database |
| 维护 | EMBL-EBI(2017 年前在 Wellcome Trust Sanger Institute) |
| 现任维护者 | Neil D. Rawlings |
| 创始年份 | 1993(体系)/ 1996(首个在线版) |
| 当前版本 | Release 12.5 |
| 版本日期 | 2023-09-08 |
| 家族数 | 277 |
| Clan 数 | 64 |
| 亚家族数 | 73 |
| 标识符数 | 4,423 |
| 序列数 | 1,142,373(统计页)/ 1,149,146(分布页求和) |
| 带 EC 号 | 679 |
| 带 PDB 结构 | 1,206 |
| 抑制剂家族数 | 88 |
| 抑制剂标识符数 | 685 |
| 小分子抑制剂记录 | 2,871 |
| 主页 | https://www.ebi.ac.uk/merops/ |
| 旧地址 | https://merops.sanger.ac.uk/(410 Gone) |
| 接口 | cgi-bin/*(HTML,无 JSON) |
| 批量下载 | https://ftp.ebi.ac.uk/pub/databases/merops/current_release/ |
| 许可 | GNU Library (Lesser) General Public License |
| 联系 | merops@ebi.ac.uk |
| 引用 | Rawlings ND et al., Nucleic Acids Res |
附录 B:端点速查
| 端点 | 参数 | 返回 | 用途 |
|---|---|---|---|
pepsum |
id |
HTML | 摘要页 |
substrates |
id |
HTML | 底物与切割位点 |
inhibitors.pl |
id |
HTML | 抑制剂与 Ki |
sequence_features |
mid |
HTML | 同源序列与活性位点 |
refs |
id |
HTML | 文献 |
structure |
mid |
HTML | PDB 结构 |
pharma |
mid |
HTML | 外部药靶链接 |
sequence_data |
mid |
500 | 故障,不可用 |
code_align |
mid |
HTML | 序列比对 |
tree |
mid |
HTML | 系统树 |
statistics_index |
`type=P\ | I` | HTML |
distribution_index |
`type=P\ | I` | HTML |
family_index |
`type=P\ | I` | HTML |
clan_index |
`type=P\ | I` | HTML |
organism_index |
`type=P\ | I;id=<字母>` | HTML |
id_index |
`type=peptidase\ | inhibitor;action=A\ | I` |
smi_index |
无 | HTML | 小分子抑制剂索引 |
附录 C:下载件速查
| 文件 | 内容 | 大小 | 最后修改 |
|---|---|---|---|
meropsweb121.tar.gz |
MySQL 建库 SQL(页面称 12.4,文件名 12.1) | 727 MB | 2019-05-17 |
protease.lib |
全长序列 FASTA | 827 MB | 2023-02-22 |
pepunit.lib |
肽酶单元 FASTA | 436 MB | 2023-02-22 |
meropsrefs.txt |
文献库 SQL | 33 MB | 2019-05-30 |
merops_scan.lib |
批量 BLAST 子集 | 1.9 MB | 2019-05-17 |
dnld_list.txt |
编号清单(Uniprot→家族→编号) | 2.8 MB | 2021-01-05 |
seqlib/ |
按家族分目录的 FASTA | 目录 | — |
附录 D:九个催化类型首字母表
| 首字母 | 催化类型 | 家族数 | 代表家族 |
|---|---|---|---|
| A | Aspartic 天冬氨酸 | 17 | A1(胃蛋白酶 A) |
| C | Cysteine 半胱氨酸 | 101 | C1(木瓜蛋白酶) |
| G | Glutamic 谷氨酸 | 6 | G4(Tiki1) |
| M | Metallo 金属 | 73 | M10(MMP-1) |
| N | Asparagine 天冬酰胺 | 10 | N1(脊髓灰质炎病毒蛋白酶) |
| P | Mixed 混合 | 2 | P1(蛋白酶体) |
| S | Serine 丝氨酸 | 54 | S1(糜蛋白酶 A) |
| T | Threonine 苏氨酸 | 6 | T1(蛋白酶体 β 亚基) |
| U | Unknown 未知 | 8 | U57(yabG 蛋白) |
附录 E:一次完整的取数示例
: 1. 取 M10.001 的摘要
curl -s "https://www.ebi.ac.uk/merops/cgi-bin/pepsum?id=M10.001" -o m10.html
: 2. 取底物表(注意参数是 id)
curl -s "https://www.ebi.ac.uk/merops/cgi-bin/substrates?id=M10.001" -o sub.html
: 3. 取抑制剂表(注意参数是 id,且脚本名带 .pl)
curl -s "https://www.ebi.ac.uk/merops/cgi-bin/inhibitors.pl?id=M10.001" -o inh.html
: 4. 取序列特征(注意参数是 mid,不是 id)
curl -s "https://www.ebi.ac.uk/merops/cgi-bin/sequence_features?mid=M10.001" -o feat.html
: 5. 取统计页(全库规模)
curl -s "https://www.ebi.ac.uk/merops/cgi-bin/statistics_index?type=P" -o stat.html
: 6. 确认故障端点(预期 500)
curl -s -o /dev/null -w "%{http_code}\n" \
"https://www.ebi.ac.uk/merops/cgi-bin/sequence_data?mid=M10.001"
编辑说明
核验时间:2026-10-25。
核验方式:全部数据取自 EMBL-EBI 站点实时响应与 FTP 目录 HEAD 请求。统计数字来自 statistics_index?type=P 首末行与 distribution_index?type=P 的 277 行 <tr> 本地求和;家族数、亚家族数、clan 数、抑制剂家族数来自各索引页的 <tr> 计数;底物表 92 行 / 91 条切割 / 48 个去重底物、抑制剂表 105 行、序列特征 224 行 / 192 个 MERNUM / 147 个物种 / 27 行 missing,均为本地解析计数。文件大小与时间戳来自 curl -sI 的 Content-Length 与 Last-Modified。
双口径冲突(已如实并列,未强行归一):
- 序列总量:统计页 1,142,373 vs 分布页七列求和 1,149,146,差 6,773。两页归类口径不同,正文 §2.4 并列给出并说明差额来源。
- M10.001 切割数:MEROPS Summary 页记 91 次,同页 CutDB 交叉引用记 31 次。两个库口径不同,正文并列。
- 下载版本:下载页正文写 Release 12.4、链接文件名
meropsweb121(12.1)、文件最后修改 2019-05-17。三者矛盾,正文 §7.5 逐项列出。 - 物种数:物种索引字母 A 页 2,528 行数据,去重主名仅 1,104 个。正文以主名为准并说明原因。
未覆盖内容:
code_align与tree两个端点未取,仅从导航条确认存在。seqlib/目录(按家族分的 FASTA)未逐个下载,仅确认目录存在。- 抑制剂侧 Summary 页(
pepsum?id=I35.001)存在但未系统抓取,抑制剂侧的靶点字段覆盖率未知。 - 全库 4,423 个标识符未逐个抓取,
substrates与inhibitors的字段完整度只在 M10.001 上验证。
版本日志:
- 2026-10-25 首版。基于 Release 12.5(2023-09-08)的站点内容。
- 下次复核建议:①确认 Release 12.6 是否发布;②复测
sequence_data端点;③确认下载页是否更新到与站内一致的版本。
未处理的已知问题:merops.sanger.ac.uk 已 410 Gone,但官方引用页仍在用该域名做示例,这一处矛盾保留原样,未在正文中改写官方文案。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- imgt — 共享标签:基因组学与多组学 / 蛋白质组学 / 药物-靶点相互作用
- pride — 共享标签:基因组学与多组学 / 蛋白质组学
- proteomexchange — 共享标签:基因组学与多组学 / 蛋白质组学
- biogrid — 共享标签:基因组学与多组学 / 蛋白质组学 / 药物-靶点相互作用
- uniprot — 共享标签:基因组学与多组学 / 蛋白质组学
- alphafold — 共享标签:基因组学与多组学 / 蛋白质组学
- cptac — 共享标签:基因组学与多组学 / 蛋白质组学
- string — 共享标签:基因组学与多组学 / 蛋白质组学
- kegg — 共享标签:基因组学与多组学 / 蛋白质组学
- alphafold — 共享标签:基因组学与多组学 / 蛋白质组学
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

