信息速览
一项欧洲跨国试验的论文会告诉你入组了 1,200 人,但几乎不会告诉你这 1,200 人在六个国家的十七个中心之间是怎么分的、哪些国家的伦理批件先于哪些、数据最终落在哪台服务器上。这些信息真实存在,只是散落在不同国家的注册库、申办方的内部台账和伦理委员会的档案里。ECRIN MDR 想做的,是把这一层「物流信息」汇到同一个可以检索的地方。
它由欧洲临床研究基础设施网络(ECRIN)运营,总部巴黎,是这家机构工具箱里最安静也最容易被误解的一件:它不是试验注册库,不接收新注册;不是数据仓库,不存原始数据;也不是审稿人用来评判研究质量的工具,官方页面特意强调它「不做观点判断、不做人工策展、不加质量过滤」。它只做一件事——告诉你某项试验有哪些文档、这些文档在哪儿、能不能拿到。
本次核验于 2026 年 10 月 26 日进行,通过 ECRIN 官网产品页与门户自身的 InterMine 查询接口取得可复现数字,规模、结构、边界三类数字均有出处。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 全称 | Clinical Research Metadata Repository (MDR),亦称 ECRIN Metadata Repository |
| 运营方 | ECRIN(European Clinical Research Infrastructure Network),非营利,总部巴黎 |
| 定位 | 试验元数据与数据对象的可发现层,不存原始数据 |
| 门户地址 | crmdr.ecrin.org(旧域名 newmdr.ecrin.org 跳转至此) |
| 技术底座 | InterMine 数据仓库(版本 35)+ BlueGenes 前端,Mine 名 mdrmine |
| 研究记录数 | 112 万余(2026-10-26 查询) |
| 数据对象记录数 | 36 万余 |
| 来源库个数 | 6:ICTRP、CTG、CTIS、EUCTR、BioLINCC、BBMRI |
| 国家与地区 | 252 条 Country 记录 |
| 国别明细记录 | 152 万余条 StudyCountry |
| 中心明细记录 | 3,513,748 条 StudySite |
| 记录载体 | 关系模型 95 个类,核心为 Study / StudyObject / StudyCountry / StudySite |
| 访问方式 | 网页检索 + XML 查询接口,均无需注册 |
| 元数据许可 | 官方未单独声明;底层各继承来源库许可 |
| 更新方式 | 定期批量抽取,官方称「regularly」但不公布同步时点 |
| 最像什么 | 临床试验的物流单,而不是临床试验的成绩单 |
§1 它要解决的具体麻烦
1.1 跨国试验的「文件散落」是一个真实且昂贵的问题
设想一个场景:你要做欧洲儿科肿瘤试验的方法学综述,需要知道 2015 年以来在三个以上欧洲国家开展的介入性试验,哪些有公开的统计分析计划、哪些有共享声明、声明是否允许跨国再利用。逐个注册库去查,意味着在五六个检索界面之间来回跳、手工去重、逐条打开详情页抄字段。这是以周计的体力活,做完还会发现许多条目根本没有你要的字段。
MDR 的全部意义就在于把这件体力活压缩成一次查询。它把「试验」当作一个可对齐的实体,把「国别」「中心」「文档条目」「数据对象」「数据共享声明」当作挂在它下面的从属表,于是「哪些试验有统计分析计划并且计划共享 IPD」这类问题变成一次结构化筛选,而不是几百次人工浏览。
这也解释了它的字段为何不像注册库:没有入排逐条文本,没有终点结构化结果,有的是 accessType、accessUrl、doi、restrictGeo、restrictCommercial 这类数据管理词汇。
1.2 三条常见的错误期待
第一条是把它当第二个 ClinicalTrials.gov。它会让你失望:不接收注册、没有注册流程、没有上传方案或结果的责任机制,你看到的每条记录都是从别处抄来的。
第二条是把它当全文数据源。accessUrl 的意思是「这个文档大概在这儿」,不是「在这儿等你下载」:很多指向申办方官网、期刊页面或申请表单,点进去可能是 404,也可能是要伦理批准的申请表。
第三条是以为数量大就覆盖好。一百多万条记录听起来接近全覆盖,但 ICTRP 一家就贡献了绝大多数——它本质是注册库总索引,记录往往只有标题、状态和主办方。数量在顶端壮观,信息密度在底部稀薄。
1.3 它能给到的与给不到的
把常见需求逐条对照,能给出的与给不到的界限相当清楚:
| 你的需求 | 它给的 | 够不够 | 备注 |
|---|---|---|---|
| 某试验在哪些国家、哪些中心开展 | 国别明细表与中心明细表,按记录拆行 | 够,但只有部分来源有值 | 中心表记录数是国别表的两倍多 |
| 某试验有哪些文档(方案、SAP、ICF、伦理批件) | 文档条目的标题与访问地址 | 部分够,地址可用性不保证 | 四类文档分开建类 |
| 某试验是否计划共享个体数据 | planToShareIPD 与 dataSharingStatement | 够 | 它最有特色的字段 |
| 该共享声明禁止什么 | restrictGeo、restrictCommercial、restrictResearchType | 够 | 限制维度已字段化 |
| 某试验的入排标准全文 | 不提供 | 不够 | 需回原注册库 |
| 某试验的主要终点结果 | 只有一个 hasResults 布尔标记 | 不够 | 需回原注册库或论文 |
| 某试验的不良事件明细 | 不提供 | 不够 | 全部结果类字段中无此内容 |
| 某项试验关联的生物样本采集 | 通过 BBMRI 来源的关联记录 | 部分够 | 关联量极小,需人工核对 |
| 某一国家所有在研试验的清单 | 按国别筛选 | 够,但受来源覆盖限制 | 只含被收录的试验 |
| 某项试验的个体数据 | 永不提供 | 结构性不够 | 设计上就不存 |
1.4 你的处境与它能帮到的事
同一件工具在不同处境下的用法差别很大,下表按处境而不是按功能来组织:
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 做系统评价,需要在多个注册库之间去重 | 同一试验跨来源的记录挂在同一个 Study 编号下 | 先用 Study.id 去重,再回原库核对关键字段 |
| 研究数据共享政策的落实情况 | planToShareIPD 与三组限制字段可批量统计 | 导出后与原注册库声明逐条比对 |
| 给一项跨国试验做前期选址 | 按国家、按中心的既有试验分布 | 结合各国监管数据库核对现行法规 |
| 需要证明「欧洲跨国试验的文档公开度」 | 文档条目的有无可以直接计数 | 注明这是「门户收录的条目」而非实际文档 |
| 想训练模型识别试验文本 | 标题、缩写、共享声明等结构化字段 | 语料应回原注册库取全文 |
| 需要定期监测某项试验的状态变化 | 有 status 字段但同步时点不透明 | 自建快照比对,不依赖单点时间戳 |
| 想找某项试验关联的生物样本 | BBMRI 来源的关联记录,数量极少 | 直接去 BBMRI 目录反向检索 |
| 想知道某国办试验的合规要求 | 不在服务范围 | 转 ECRIN RED 查询 |
1.5 一句话判断
如果你要的是「这项试验用了什么设计、得出什么结果」,去注册库和论文;如果你要的是「这项试验的文件和数据到底在哪儿、能不能拿到」,这才是 ECRIN MDR 的战场。
1.6 不适合谁:四条边界
一,不适合当试验结果检索工具。它对结果的全部表达就是一个 hasResults 布尔值与一个结果摘要挂点,效应量、置信区间、亚组分析一个都没有。
二,不适合要求每条记录字段齐全的分析。来源间填充率差异巨大,CTIS 的伦理批件日期近乎结构性完整,ICTRP 大量为空。整表统计前必须按来源分层。
三,不适合实时监测。官方只说定期更新,没有各来源的最后同步时间,也没有变更日志接口。拿它追状态会误判。
四,不适合找可下载的个体数据。这不是能力不足而是设计边界:官方说它输出的是「可发现性信息」,个体数据始终留在原处。
四条边界展开成对照,可快速判断目标是否在界外:
| 你的目标 | 是否在界内 | 判断依据 | 界外的替代去处 |
|---|---|---|---|
| 查某项试验的招募状态是否已变更 | 部分在界内 | 有 status 字段但同步时点不明 | 回原注册库看 |
| 查某项试验的效应量与置信区间 | 在界外 | 只有 hasResults 布尔 | ClinicalTrials.gov、AACT、论文 |
| 查某项试验的入排全文 | 在界外 | 模型无逐条入排字段 | 原注册库 |
| 查某项试验在哪些国家做过 | 在界内 | 有独立国别表 | 无需替代 |
| 查某项试验的知情同意书在哪 | 在界内 | 有 ICF 对象与访问地址 | 若地址失效再联系申办方 |
| 查某国办同类试验的法规要求 | 在界外 | 法规不在 MDR 范围 | ECRIN RED |
| 统计一类试验的共享声明趋势 | 在界内 | 共享声明已字段化 | 无需替代 |
| 下载某试验的原始数据集 | 在界外 | 只给访问地址不放数据 | crDSR 或申办方数据申请 |
多数误用不是因为库坏了,而是目标本来就在界外,只因它在搜索里排得靠前就顺手用了。
§2 数据构成与规格
2.1 记录的组织方式:一个试验、多个来源、多张从属表
模型有 95 个类,真正与临床试验相关的核心类只有十几个,其余是从 InterMine 通用生物信息模式继承下来、在本库基本为空的类(基因、转录本、染色体一类)。看到近百个类,不等于有近百种数据。
记录以 Study 为根,属性包括标题、缩写、类型、状态、入组、起止日期、性别条件、年龄段、是否共享个体数据、共享声明原文。国别、中心、标识符、文档条目、数据对象都通过集合引用挂在它下面。
来源是双层的:Study 经 dataSets 连到一个或多个 DataSet,DataSet 再经 dataSource 指向 DataSource。DataSource 只有 6 条:BBMRI、BioLINCC、CTG、CTIS、EUCTR、ICTRP。同一 Study 编号下挂两个 DataSet,说明两个来源都认领了这项试验。
2.2 字段与记录的完整字典
下表列出核心类的全部字段(来自 mdrmine/service/model 的实时读取),以及它们在本次核验中的取值形态。
| 类 | 字段 | 含义 | 取值形态与观察 |
|---|---|---|---|
| Study | id | 内部编号 | 整数,见到的样本从 1000004 起 |
| Study | title | 试验标题 | 英文自由文本 |
| Study | scientificTitle | 科学标题 | 多数与 title 相同 |
| Study | acronym | 缩写 | 有值者如 Clinibil、COVAC-DM |
| Study | type | 研究类型 | Interventional / Observational |
| Study | status | 招募状态 | Completed / Not recruiting 等 |
| Study | plannedEnrolment | 计划入组 | 整数 |
| Study | actualEnrolment | 实际入组 | 整数,部分为空 |
| Study | startDate / endDate | 起止日期 | ISO 日期;起止之一可能为空 |
| Study | genderElig | 性别条件 | All / Male / Female |
| Study | minAge / maxAge / minAgeUnit / maxAgeUnit | 年龄范围 | 数值加单位 |
| Study | ageGroup | 年龄分组 | Adult, Older Adult 等 |
| Study | hasResults | 是否有结果 | 布尔 |
| Study | planToShareIPD | 是否计划共享个体数据 | 布尔或空 |
| Study | dataSharingStatement | 共享声明原文 | 长文本 |
| Study | primaryOutcome / secondaryOutcomes | 主要与次要结局 | 文本 |
| Study | interventionsDescription | 干预描述 | 文本 |
| StudyCountry | countryName / country | 国家 | 国家名与 Country 引用 |
| StudyCountry | status | 该国招募状态 | 文本 |
| StudyCountry | plannedEnrolment | 该国计划入组 | 整数 |
| StudyCountry | ethicsCommitteeDecisionDate | 伦理批件日期 | 日期,CTIS 来源填充率最高 |
| StudyCountry | compAuthorityDecisionDate | 监管机构决定日期 | 日期,填充率低于伦理日期 |
| StudySite | facility / city / countryName | 中心名、城市、国家 | 文本 |
| StudySite | contacts | 联系点 | 集合 |
| StudyObject | accessType | 访问类型 | 公开 / 受限等 |
| StudyObject | accessUrl | 访问地址 | URL |
| StudyObject | doi | 文档 DOI | 有值率低 |
| StudyObject | publicationYear | 出版年 | 整数 |
| StudyObject | managingOrg | 管理机构 | 机构引用 |
| StudyObject | dateCreated / dateUpdated | 创建与更新时间 | 时间戳 |
| DataSet | name / version / licence | 数据集名、版本、许可 | 记录级许可 |
| DataSet | url | 数据集地址 | URL |
| DataSource | name | 来源名 | 6 个之一 |
| IndividualParticipantData | restrictGeo / restrictCommercial / restrictResearchType | IPD 访问限制 | 三组限制字段 |
| IndividualParticipantData | consentDetails | 同意细节 | 文本 |
| Biosample | materialTypes / geneticUseAllowed | 样本类型与基因使用 | 文本与布尔 |
| Protocol | title / protocolSponsorId | 方案标题与申办方编号 | 文本 |
| InformedConsentForm | title | 知情同意书标题 | 文本 |
| StatisticalAnalysisPlan | title | 统计分析计划标题 | 文本 |
| EthicsApprovalNotification | (仅 study 引用) | 伦理批准通知 | 无自有属性 |
| RegistryResultsSummary | (仅 study 引用) | 结果摘要 | 无自有属性 |
| StudyCondition | term / meshCode / meddraCode | 疾病条件 | 术语与编码 |
| Intervention | name / type / meshCode | 干预 | 术语与编码 |
| Publication | id / title | 论文 | 文献实体 |
| Organisation | name | 机构 | 约 415 万条,多为来源库带入 |
| Author | fullName | 作者 | 约 228 万条 |
2.3 一条记录的完整解剖
下面这条来自门户的真实样本,展示了一个同时被三个来源认领的试验在接口里长什么样。注意同一个 id 出现了三次,每次对应一个来源——这是 MDR 查重逻辑的直接体现。
{
"study": {
"id": 1000004,
"title": "Investigation of Fluid- and Electrolyte Balance in Post Cardiac-surgery Patients",
"acronym": "Clinibil",
"type": "Observational",
"status": "Completed",
"plannedEnrolment": 176,
"actualEnrolment": 176,
"genderElig": "All",
"minAge": 18,
"maxAge": 99,
"ageGroup": "Adult, Older Adult",
"startDate": "2016-09-01",
"hasResults": false,
"planToShareIPD": null,
"dataSharingStatement": null
},
"sources": ["BBMRI", "CTG", "ICTRP"],
"countries": [
{"country": "Austria", "status": null, "plannedEnrolment": null,
"ethicsCommitteeDecisionDate": null}
]
}
这条记录暴露了三件事。第一,同一项试验被三个来源认领,说明 MDR 的合并逻辑在起作用,你不需要手工去重。第二,国别只有一个且是奥地利,但该国记录的状态、入组数和伦理批件日期全部为空——来源库里没有这些值,MDR 不会替你补。第三,planToShareIPD 为空而不是 false,这个区别很重要:空意味着「来源库没说」,false 意味着「来源库明确说不共享」,混为一谈会系统性高估不共享的比例。
换一条记录看,对照会更清楚。下面是编号 1000005 的 COVAC-DM 在国别维度上的形态:
| 字段 | Clinibil(1000004) | COVAC-DM(1000005) |
|---|---|---|
| 来源数 | 3(BBMRI、CTG、ICTRP) | 3(BBMRI、EUCTR、ICTRP) |
| 研究类型 | 观察性 | 介入性 |
| 计划入组 | 176 | 160 |
| 实际入组 | 176 | 未列出 |
| 有结果标记 | 否 | 是 |
| 共享 IPD 声明 | 空 | 未列出 |
| 国别 | 奥地利 | 未列出 |
| 伦理批件日期 | 空 | 未列出 |
两条记录来源数相同,信息密度却差得很远。差别不在 MDR 的抽取逻辑上,而在来源组合上:Clinibil 的三个来源里有两个(CTG、ICTRP)都不带欧洲国别细节,唯一可能带的 BBMRI 也不带伦理日期;COVAC-DM 有 EUCTR 认领,理论上应该有成员国层面的信息,但这一条在国别维度上仍然为空,说明「有欧洲来源」也不必然等于「有国别明细」,还要看具体试验在源库里的填报状况。
这一点值得再次强调:MDR 的字段填充是「来源 × 单条记录」双重决定的。模型里有这个字段,不代表这条记录有这个值;这条记录有这个来源,也不代表这个来源在这一条上填了值。任何以「字段存在」为前提的统计假设,都必须先做一次实际计数。
2.4 规模与来源分布的对照
下面是本次查询得到的规模数字。所有计数均通过门户的 format=count 端点取得,查询条件写在表格的说明栏里,可以逐条复现。
| 指标 | 数值 | 取得方式 |
|---|---|---|
| Study 总数 | 1,125,348 | view=Study.id 无约束计数 |
| StudyObject 总数 | 361,515 | view=StudyObject.id 无约束计数 |
| Publication 总数 | 788,253 | view=Publication.id |
| Organisation 总数 | 4,157,504 | view=Organisation.id |
| Author 总数 | 2,281,961 | view=Author.id |
| Intervention 总数 | 540,031 | view=Intervention.id |
| StudyCondition 总数 | 412,321 | view=StudyCondition.id |
| StudyCountry 总数 | 1,526,479 | view=StudyCountry.id |
| StudySite 总数 | 3,513,748 | view=StudySite.id |
| Country 总数 | 252 | view=Country.id |
| RegistryResultsSummary 总数 | 153,324 | view=RegistryResultsSummary.id |
| Biosample 总数 | 554 | view=Biosample.id |
| IndividualParticipantData 总数 | 14,895 | view=IndividualParticipantData.id |
按来源分层的对照更能说明问题。同一个 Study 可能被多个来源认领,所以各行之和大于总数:
| 来源 | 认领的 Study 数 | 占总数比例(约) | 来源性质 |
|---|---|---|---|
| ICTRP | 1,107,830 | 98.4% | WHO 注册库总索引 |
| CTG | 599,838 | 53.3% | ClinicalTrials.gov |
| EUCTR | 16,691 | 1.5% | 欧盟临床试验注册库 |
| CTIS | 12,127 | 1.1% | 欧盟临床试验信息系统 |
| BioLINCC | 261 | 0.02% | 美国 NHLBI 生物样本与数据仓库 |
| BBMRI | 201 | 0.02% | 欧洲生物样本库目录 |
这张表是理解 MDR 的钥匙:名义上它是「欧洲跨国试验层」,但欧洲专门来源(EUCTR 加 CTIS)合计不到总记录的 3%,其余存在感来自 ICTRP 与 CTG,而这两者提供的国别与中心明细远不如 EUCTR。
2.5 与同类资源的字段差异
与三个常被拿来做同样事情的资源并排看,差异立刻明显:
| 维度 | ECRIN MDR | ClinicalTrials.gov | AACT | WHO ICTRP |
|---|---|---|---|---|
| 主要用途 | 找文档与数据在哪 | 注册与查结果 | 结构化查询注册数据 | 跨注册库检索 |
| 覆盖范围 | 六源聚合,含欧洲专门来源 | 单一来源,美国主导 | ClinicalTrials.gov 全量镜像 | 各国注册库索引 |
| 国别拆解 | 有独立国别表,含伦理与监管决定日期 | 有 location 表,但无伦理批件日期 | 同 CTG | 基本没有 |
| 文档条目 | 方案、SAP、ICF、伦理批件分开挂 | 部分挂在结果附件 | 不单独建模 | 无 |
| 数据共享声明 | 拆成布尔与限制字段,可筛选 | 有但以自由文本为主 | 同 CTG | 无 |
| 可编程接口 | XML 查询,返回 JSON | REST API v2 | PostgreSQL | 有但字段薄 |
| 更新频率 | 定期,未公布时点 | 每日多批 | 每日增量 | 不定期 |
| 结果数据 | 仅能否标记 | 结构化结果 | 结构化结果 | 仅链接 |
2.6 时间跨度与字段缺失
规模之外还有两个结构指标值得单独说:时间跨度与缺失结构。前者的依据是 test 启动日期字段,后者的依据是空值统计。
| 时间或缺失项 | 记录数 | 含义 |
|---|---|---|
| 启动日期早于 2000 年 | 8,800 | 少量历史试验被来源库追溯录入 |
| 启动日期在 2020 年以后 | 453,749 | 近六年的主体,占比约四成 |
| 启动日期在 2024 年以后 | 196,952 | 近两年的新增量仍然可观 |
| 启动日期为空 | 180,155 | 约一成六没有时间锚点 |
| 有结果标记 | 172,229 | 约一成五被来源库标记为已出结果 |
| 有共享 IPD 声明 | 51 万余 | 约四成半在声明层面提过共享 |
最后两行值得对比:四成半在声明层面提过共享,被标记为已有结果的只有一成五。两者问的不是一件事(「说没说」与「出没出」),混用会得出「结果很少、共享很多」的错觉。
启动日期为空的十八万条大多来自 ICTRP:上游本来就没这个字段,很多国家注册库不回溯填报。按时间窗口筛选会系统性漏掉这批记录,做趋势分析前要先把「来源」与「时间」交叉检查。
2.7 版本、许可与更新这三件事的现状
这三项在多数数据集里是标准栏目,这里必须单列,因为现状是「没有明确答案」而非「答案复杂」。
| 项 | 现状 | 依据 | 使用时的处理 |
|---|---|---|---|
| 数据版本号 | 未公布 | 门户无版本页,接口无 release 字段 | 用查询日期代替版本号 |
| 软件版本 | 35 | service/version 返回值 |
记录时一并写明 |
| 前端版本标识 | 页面内嵌的短哈希 | 首页脚本变量里的 version | 仅作技术旁证 |
| 聚合层许可 | 未单独声明 | 产品页与工具页均无许可段落 | 逐条写来源库许可 |
| 底层许可 | 各来源不同 | CTG 为美国联邦公有领域,其余各异 | 引用时必须注明来源 |
| 更新频率 | 定期,未公布 | 产品页原文 regularly | 自建快照比对 |
| 各来源同步时点 | 未提供 | 接口无时间戳字段 | 无法判断滞后 |
「没有版本号」这件事的实际影响比看上去大。多数数据集可以写「v2.1,2026 年 3 月」,MDR 只能写「2026 年 10 月 26 日查询」,这意味着两天后同一句引用就可能与现实不符,而且无法追溯当时到底是什么状态。做长期研究时,唯一可靠的做法是每次查询都存一份导出文件,用导出的哈希值当版本标识。
许可方面的情况类似但不是同一回事。聚合层的许可没有声明,不等于数据不能用——每条记录背后是公开登记库的内容,用是可以用的——但也不能因此写「ECRIN 数据,开放许可」。正确的写法是把来源拆开写,因为不同来源的条款确实不同。
§3 它是什么:一条试验的物流层
3.1 「元数据可发现」这个说法到底指什么
临床研究从立项到发表,会依次产生一串物件:方案、伦理申请与批件、监管备案、知情同意书、病例报告表、统计分析计划、数据管理计划、数据集、结果报告、论文。这些东西的存放地几乎从不在同一个地方,而且每一件的可获取性由不同的人掌握。
MDR 的立场是:我不替你保存这些物件,我只维护一张清单,说明这些物件存在过、叫什么、大概在哪、能不能拿。「可发现」三个字就是针对这一层说的。这不等于「可获取」,官方在页面里用两句话区分得很清楚:结果公开的地方给直达链接,结果受限的地方尽量在门户里显示访问安排的细节,并给一个描述访问流程的网址。
这个区分是理解它的关键,也是判断它是否适合你的唯一标准。要是你需要的是「拿到」,那你要去的仍然是原始数据保管方;要是你需要的是「知道该去哪儿拿、以及值不值得去拿」,MDR 就对了。
3.2 为什么需要单独一层,而不是让每个注册库自己做好
一个自然的疑问:来源库自己都有网页检索了,为什么还要再套一层?答案在三个跨来源的麻烦。
第一是同一项试验在多处注册。一项德国大学的试验可能同时在 ClinicalTrials.gov、DRKS、EUCTR 各有一份,三份的招募状态与完成日期经常对不上。一项 2026 年发表于 BMJ Open 的交叉注册研究(DOI 10.1136/bmjopen-2025-105173)手工确认了 228 例欧盟注册库交叉注册,招募状态一致率只有 85%,完成日期一致率仅一半。MDR 消除不了不一致,但把这些记录摆在同一个编号下,让不一致可见。
第二是字段名称不统一:CTG 叫 location,EUCTR 叫 member state concerned,BBMRI 叫 collection,本质都是「在哪个国家办」。不归一就没法跨来源统计,而归一正是 MDR 的核心工作。
第三是文档归属。统计分析计划可能挂在注册库附件、只在论文补充材料、或根本没公开。把文档条目单独建模并给出访问类型,比在每条记录页堆附件链接更利于批量分析。
3.3 与 ClinicalTrials.gov 的真实分工
很多人把两者理解成竞争,实际是包含关系的一部分:CTG 本就是六个来源之一,所以 ClinicalTrials.gov 上大部分登记内容在 MDR 里已有对应记录。MDR 能做而 ClinicalTrials.gov 做不到的只有几件:
一是把 EUCTR 与 CTIS 的欧洲记录和 CTG 记录放在同一张表里,按国家、按伦理批件日期筛选;二是不用写 PostgreSQL 就能用一次 XML 查询把共享声明字段拉出来;三是顺着文档条目看到方案与知情同意书的对象化表达,而不是在附件列表里翻。
反过来说,ClinicalTrials.gov 和它的镜像 AACT 能做的,MDR 基本都做不到:结构化结果、不良事件、详细入排、逐中心的招募数、可下载的 XML 全量包。所以正确的用法是把 MDR 当作「预筛层」,把 CTG 与 AACT 当作「深挖层」。
3.4 它在 ECRIN 整个服务体系里的位置
ECRIN 工具箱里有七八件东西,MDR 是唯一面向公众免费开放、不需会员资格也不需申请的一件;其余各面向不同处境:RED 面向查法规的人,crDSR 面向想合规共享数据的人,数据中心认证面向非商业数据管理机构,试验工具箱面向设计者。
放进这个体系看,MDR 是入口层:先把「有哪些试验、文件在哪」讲清楚,再把人分流到具体服务。这也是它被形容成「中立、不策展」的原因——判断哪项试验做得好,是别的环节的事。
3.5 它的三条产品原则
官方页面写得不多,可概括为三条。
第一,不评论。输出「不含观点、不做人工策展」,明确说没有专家输入,也没有质量过滤。这意味着门户里一条记录的质量高低完全由来源库决定,MDR 不做任何加权或排序修正。
第二,可追溯。结果公开就给直达链接,受限就尽量显示访问安排与流程说明。它不承诺你一定拿到,但承诺告诉你为什么拿不到。
第三,广覆盖。官方描述采集范围是「从新西兰到意大利、从日本到黎巴嫩」的全世界主要信息来源。这不是修辞,252 条国家与地区记录确实体现了这种广度,虽然广度是靠 ICTRP 撑起来的。
3.6 它不做的四件事,以及为什么这样反而更稳
把「不做什么」列清楚,比列「做什么」更能说明一个资源适合谁。MDR 在四个地方刻意留白,每一处留白都有明确理由。
| 不做的事 | 官方或结构上的依据 | 这样做的好处 | 代价 |
|---|---|---|---|
| 不接收注册 | 没有注册入口,只有检索入口 | 不承担注册审核责任,不必配置审核团队 | 无法成为某项试验的权威唯一来源 |
| 不做质量过滤 | 官方原文 non-opinionated and non-curated | 不引入策展者偏见,排序不会被人为干预 | 无法纠错,来源库的错就是它的错 |
| 不存原始数据 | 模型里没有患者级类 | 不承担数据安全责任与合规成本 | 使用者总要再走一步去取数 |
| 不做结果结构化 | 结果只有 hasResults 布尔与摘要对象 | 抽取流水线简单、可维护 | 无法替代结果数据库 |
四条留白的共同逻辑是「只做能规模化的那部分」:注册审核、质量策展、数据托管、逐条解析都难以随记录量线性摊薄,而抽取、归并、挂接可以写成流水线。
这也解释了它为何「看起来什么都有,用起来总觉得差一点」:标准化的那一段做好了,需要判断的那一段推回给你。
§4 质量与特色:物流层的可靠性与盲区
4.1 先分清三种「有值」
判断 MDR 任何字段的质量,都要先区分三种状态:有值且可信、有值但可疑、无值。第三种要看空值的成因是「来源库没有」还是「抽取时没取到」。
以国别表为例:CTIS 来源的国别记录有伦理批件日期的比例很高,因为 CTIS 本身就是按成员国逐条建的;EUCTR 有相当一部分,因为它的记录结构里包括成员国决定;而 ICTRP 的国别记录里这个字段的存在本身就不普遍,因为 ICTRP 的条目往往只是指向本国注册库的一行索引。
所以统计「有多少试验有伦理批件日期」时,分母决定结论:用全部 Study 做分母是在测来源构成,用 CTIS 加 EUCTR 做分母才是在测伦理透明度。
4.2 门户的数据对象覆盖
文档条目的分布同样是不均的。下表按「挂有该类从属对象的 Study 数」统计,同一 Study 可能同时挂在多类下:
| 从属对象 | 有该类记录的 Study 数 | 含义 |
|---|---|---|
| 数据对象 StudyObject | 整体 36 万余条记录 | 文档、数据集、出版物的统一载体 |
| 统计分析计划 | 47,855 | 有 SAP 条目的试验 |
| 知情同意书 | 16,271 | 有 ICF 条目的试验 |
| 个体数据访问方案 | 14,759 | 声明了 IPD 访问安排的试验 |
| 有结果标记 hasResults | 172,229 | 来源库标记为有结果 |
| 计划共享 IPD | 51 万余 | planToShareIPD 非空 |
| 生物样本 | 554 | 极稀少,来自 BBMRI 关联 |
计划共享个体数据的试验有五十多万项,但把访问安排细化到可检索字段的只有一万四千多项,细化率约 2.9%。落差不是 MDR 造成的,而是来源库的共享声明大多停在自由文本层面;MDR 只是让它变得可计数。
4.3 案例:COVAC-DM 与一项奥地利试验的三种来源
用一个具体记录来把上面的抽象说完。门户里编号 1000005 的试验缩写是 COVAC-DM,标题是「糖尿病患者对 COVID-19 疫苗的免疫应答」,类型为介入性,状态是「未招募」,计划入组 160 人,启动日期 2021 年 4 月 26 日,有结果标记为真,被 BBMRI、EUCTR、ICTRP 三个来源认领。
这条记录值得逐项看。它有 EUCTR 认领,所以它的欧洲身份是确凿的;同时有 ICTRP 认领,说明 WHO 的索引也收了它;还出现在 BBMRI 里,说明这项试验关联了生物样本采集。三者叠在一起,正是一个「欧洲跨国或跨境试验」在 MDR 里的典型形态:注册信息来自两个注册体系,样本信息来自生物样本库目录。
再看编号 1000004 的 Clinibil 试验。它是观察性研究,计划与实际入组均为 176 人,状态已完成,没有结果标记,共享声明为空,只有奥地利一个国家的国别记录,而且该记录里的伦理批件日期为空。把它和 COVAC-DM 对照,就能看出 MDR 里两种截然不同的记录质量:一种由欧洲来源支撑,字段密集;一种只由索引支撑,字段稀疏。这个对照在 §4.5 的偏差清单里会再回来。§4.3 的案例在 §7.3 与 §9.2 还会各出现一次,因为它同时演示了「能用」与「不能信」两面。
4.4 它做得比同类好的三件事
第一件是文档对象化:方案、知情同意书、统计分析计划、伦理批准通知各建一类,统一挂访问类型与地址。AACT 有 52 张表,文档与附件并不单独建模。
第二件是共享声明的字段化。planToShareIPD 是布尔、restrictGeo 与 restrictCommercial 是限制维度、consentDetails 是原文。三层结构让「有多少试验在声明里禁止商业使用」这种问题不需要人工读文本就能回答。
第三件是跨域链接。2024 年论文(DOI 10.12688/openreseurope.17131.2)描述的系统检索识别出 202 项研究、284 个样本集合的关联;作者同时坦承关联主要靠人工,两个机构都撑不住长期维护。
4.5 三个必须知道的盲区
盲区一是查重不彻底。1000004 那条记录被三个来源并到同一编号,看似成功;但合并依赖编号与标题匹配,而 2026 年的 BMJ Open 研究显示只有 17% 的潜在交叉注册能在两库都找到注册号,另有四分之一只能靠标题匹配。MDR 未公开自己的合并规则与合并率。
盲区二是来源库的更新滞后会原样传进来。门户不给每个来源的最后同步时间,也没有变更日志。如果你的分析依赖「某试验当前的状态」,就必须自己建立快照比对。
盲区三是链接的可用性无保证。accessUrl 指向的是「当时抄写到的地方」,不能保证现在还能打开。官方页面只说尽量提供访问安排与流程说明,没有承诺链接的有效性维护。
4.6 与邻近服务的分工细节
ECRIN 体系内的几件工具容易被混用,因为它们都叫「工具」,都在同一个域名下,都面向同一批使用者。但它们的输入与输出完全不同,混用会直接导致找错地方。
| 服务 | 输入是什么 | 输出是什么 | 什么时候该用它而不是 MDR |
|---|---|---|---|
| MDR | 一个关键词、编号或疾病名 | 相关试验及其文档与数据对象的位置 | 想知道某项试验的文件在哪 |
| RED 监管与伦理数据库 | 一个目标国家与一种研究类型 | 该国对该类研究的法规与伦理要求 | 想知道在某国办试验要什么手续 |
| crDSR 数据共享仓库 | 你自己手上的一份数据集 | 一个合规的托管与共享位置 | 想把自己的数据交出去 |
| 数据中心认证 | 一个数据管理机构的资质材料 | 审计结论与认证状态 | 想知道某个数据中心的合规水平 |
| 适应性试验工具箱 | 一个试验设计构想 | 设计与实施的参考做法 | 在设计一个平台试验或篮式试验 |
| 主方案试验工具箱 | 一个主方案框架 | 主方案的设计与运营经验 | 面向多个亚组共用一套协议 |
这张表最实用的一行是第二行。在 MDR 里查不到某国法规就认为它覆盖不足,是找错了门:MDR 管「有哪些试验」,RED 管「做试验要什么条件」。
数据中心认证容易被忽略:官方口径是自 2014 年设立以来累计认证 19 个欧洲数据中心,只面向成员国网络内的非商业机构,观察员国申请需自付约 8,500 欧元的直接成本。这组数字与 MDR 无关,但说明 ECRIN 的价值主张不只「信息聚合」,还有「能力认证」——免费的入口配收费的背书。
4.7 从六个来源各拿到什么
同样是「一项试验的记录」,六个来源给的信息量完全不同。下面按来源逐项说明,这一节回答的是「查的时候该期待什么」。
| 来源 | 强项 | 弱项 | 主要缺什么 |
|---|---|---|---|
| ICTRP | 覆盖国家最多、收录量最大 | 字段最少、多为索引级信息 | 国别拆解、中心明细、共享声明细节 |
| CTG | 入排与结果字段较完整、状态更新频繁 | 美国视角、欧洲国家信息较粗 | 各国伦理批件日期 |
| EUCTR | 成员国层面结构化、有监管与伦理决定日期 | 已停止接收新注册 | 新试验不在其中 |
| CTIS | 新体系、成员国条目化、伦理日期填充率高 | 历史试验不在其中 | 老试验、退出体系的国家 |
| BioLINCC | 与美国样本仓库的数据可关联 | 记录数极少、只覆盖美国体系 | 欧洲样本 |
| BBMRI | 可与欧洲生物样本库目录关联 | 记录数极少、关联需人工 | 大规模自动关联 |
把这张表和 §2.4 的来源分布放在一起看,会得出一个不太舒服但必须承认的结论:信息量最大的三个来源(CTG、EUCTR、CTIS)加起来不到总量的六成,而信息量最小的 ICTRP 占了绝大多数。这不是说 ICTRP 没用——它恰恰完成了「广度」这件事——而是说使用这个库时,必须主动做来源选择,否则你拿到的是一个数量庞大但字段稀薄的集合。
§5 怎么拿到:界面、接口与可复现的查询
5.1 两种入口,一种数据
门户提供两条路:网页检索界面与 InterMine 查询接口。前者适合探索,后者适合批量。两者读的是同一个 Mine,名字叫 mdrmine,所以网页上能看到的,接口里一定查得到;反过来接口能查的维度比网页多,因为网页的筛选器只暴露了一部分字段。
需要先说明一点:门户是单页应用,直接用 curl 抓首页只能拿到一个加载壳,看不到任何数据。这不是故障,是前端架构决定的。要拿数据必须走接口,这一点在 §5.2 之后的所有示例里都成立。
5.2 先确认服务活着并读出模型
第一次接触这个库,应该先读模型,因为它告诉你有什么类、每个类有什么字段。模型接口返回的是 XML。
#-- 1) 服务版本:返回一个纯数字,当前为 35
curl -s https://crmdr.ecrin.org/mdrmine/service/version
echo
#-- 2) 把模型存到本地,方便后续检索类名与字段
curl -s https://crmdr.ecrin.org/mdrmine/service/model -o mdrmine_model.xml
#-- 3) 列出所有类名(剔除非临床类之后才是真正可用的部分)
grep -o '<class name="[^"]*"' mdrmine_model.xml | cut -d'"' -f2 | sort
95 个类里,生物信息模式继承下来的(Gene、Transcript、Chromosome 等)在本库基本为空。值得用的是 Study、StudyObject、StudyCountry、StudySite、DataSet、DataSource、Publication、Intervention、StudyCondition、IndividualParticipantData、Biosample、Protocol、InformedConsentForm、StatisticalAnalysisPlan 这十几个。
5.3 用计数端点做规模核对
所有查询走同一个结果端点,只改 query 与 format 两个参数;format=count 只返回一个数字,最快,适合做规模核对。
#-- 计数函数:把一个 XML 查询编码后发给计数端点
count() {
python3 - "$1" <<'PY'
import sys, urllib.parse, urllib.request
q = sys.argv[1]
url = ("https://crmdr.ecrin.org/mdrmine/service/query/results?format=count&query="
+ urllib.parse.quote(q))
print(urllib.request.urlopen(url, timeout=180).read().decode())
PY
}
#-- 规模核对:研究总数与数据对象总数
count '<query model="genomic" view="Study.id"></query>'
count '<query model="genomic" view="StudyObject.id"></query>'
count '<query model="genomic" view="StudyCountry.id"></query>'
count '<query model="genomic" view="StudySite.id"></query>'
count '<query model="genomic" view="Country.id"></query>'
这五条依次返回 1125348、361515、1526479、3513748、252。model 参数固定写 genomic,那是 InterMine 的默认模型名,与数据内容无关,看到 “genomic” 不等于这是基因组库。
5.4 按来源分层统计
按来源统计时必须把约束写在 Study 路径上而不是 DataSet 路径上,否则返回的不是「有多少研究来自该来源」,而是「有多少条数据对象属于该来源」,两者不是一个概念。本次核验中曾用错路径得到一个可疑的 1,纠正后的写法如下。
import urllib.parse, urllib.request, json
BASE = "https://crmdr.ecrin.org/mdrmine/service/query/results"
def run(xml_query, fmt="json", size=1000):
params = urllib.parse.urlencode({"query": xml_query, "format": fmt, "size": size})
with urllib.request.urlopen(f"{BASE}?{params}", timeout=300) as r:
return json.loads(r.read().decode())
def count(xml_query):
return int(urllib.request.urlopen(
f"{BASE}?" + urllib.parse.urlencode(
{"query": xml_query, "format": "count"}), timeout=300).read().decode())
sources = ["ICTRP", "CTG", "EUCTR", "CTIS", "BioLINCC", "BBMRI"]
for s in sources:
q = ('<query model="genomic" view="Study.id">'
f'<constraint path="Study.dataSets.dataSource.name" op="=" value="{s}"/>'
'</query>')
print(s, count(q))
输出的六个数字就是 §2.4 那张来源表的来源。它们的和是 1,736,948,比 Study 总数 1,125,348 多出约 61 万条次,多出来的部分正是被多个来源同时认领的试验——同一项试验在两个来源里各算一次。
5.5 把一条记录的全部关联拉平
日常最常用的查询是「给我一批试验的国别、共享声明和文档条目」。InterMine 的查询语法允许在一张视图里跨多个集合,结果是笛卡尔展开:一个试验有三国三文档就会变成九行。这在统计时要先去重。
q = ('<query model="genomic" view="Study.id Study.acronym Study.type Study.status '
'Study.plannedEnrolment Study.hasResults Study.planToShareIPD '
'Study.dataSets.dataSource.name Study.studyCountries.country.name '
'Study.studyCountries.ethicsCommitteeDecisionDate" '
'sortOrder="Study.id asc"></query>')
d = run(q, size=200)
print(d["columnHeaders"])
for row in d["results"][:5]:
print(row)
columnHeaders 是 InterMine 按模型标签生成的中文展示名,程序里按列序号取值,不要硬编码中文表头。
5.6 一个可以直接复用的筛选:有伦理批件日期的国别记录
「有多少国别记录带伦理批件日期」这个问题最容易被误读成「有多少试验有伦理批件」。正确的读法是:它统计的是国别记录,不是试验。同一个试验有五个国家,就会有五条国别记录,其中三条有日期两条没有。
for s in ["CTIS", "EUCTR", "ICTRP", "CTG", "BBMRI", "BioLINCC"]:
q = ('<query model="genomic" view="Study.studyCountries.id">'
'<constraint path="Study.studyCountries.ethicsCommitteeDecisionDate" op="IS NOT NULL"/>'
f'<constraint path="Study.dataSets.dataSource.name" op="=" value="{s}"/>'
'</query>')
print(s, count(q))
本次核验的输出如下表。同一试验被多个来源认领时,它的国别记录会在每个来源下各算一次,所以各行之和不等于去重后的总数。
| 来源 | 带伦理批件日期的国别记录数 |
|---|---|
| EUCTR | 30,502 |
| ICTRP | 30,466 |
| CTG | 23,065 |
| CTIS | 10,607 |
| BBMRI | 35 |
| BioLINCC | 7 |
这组数字有一处必须说明:按来源合计约九万五千条,比国别记录总数少一个数量级,而 EUCTR 与 CTIS 之和已接近该合计的一半。可见伦理日期基本上由欧洲专门来源贡献;ICTRP 名下那三万余条更可能源自上游欧洲注册库,而非 ICTRP 自有字段。这一推断本次未验证,引用时应按「按来源统计所得」陈述,不要写成「ICTRP 提供伦理批件日期」。
5.7 导出与后续处理
接口支持 CSV、TSV、JSON 三种返回格式,把 format 参数改掉即可。批量导出时要注意两点:一是 size 参数有上限,超过之后要配合 start 参数分页;二是同一条记录在跨集合查询里会重复,导出后必须按 Study.id 去重再统计。
更省事的做法是先在网页界面搭好筛选、从结果页导出,再把同一组条件搬到接口复现:可视化确认逻辑,接口保证批量可复现。
5.8 四个常见的查询报错与处理
接口不是无痛的,下面这四个报错在本次核验中都实际遇到过,写出来可以省掉一段摸索。
| 报错或现象 | 成因 | 处理 |
|---|---|---|
| XML is not well formatted | 比较符号没转义,或约束路径缺少属性名 | 把 >=、< 写成 >=、< |
| Multiple root classes in query | 一次视图里跨了两个根类 | 视图统一从一个根类出发,其余走引用路径 |
| 返回 0 或 1 这类反常小数 | 约束写在了集合路径的错误一侧 | 检查约束是否落在 Study 路径上 |
| 返回空 results 数组 | 查询合法但无匹配,或大小写不匹配 | 先放宽条件,再用 format=count 确认 |
第一条容易误导,它报「XML 格式错误」,实际是转义问题:用 curl 的 --data-urlencode 或 Python 的 urlencode,不要手工拼字符串。
第二条的规则是:视图必须以一个根类为起点,想同时看国家名与国别记录要写 StudyCountry.country.name,不能把 Country.name 与 StudyCountry.id 并列。这条在模型里没明写。
第三、四条来自本次的真实失误:把来源约束写成 Study.dataSources.name 得到恒为 0,写成 Study.dataSets 得到恒为 1,两次都不报错。接口返回成功不等于查询正确,计数前先用已知量做对照。
§6 与库内条目的关系
6.1 关系图谱
MDR 在本库的试验类条目里处在一个特殊位置:它不是数据源,是数据源的索引。围绕它的关系可以分成三类。
| 关系类型 | 库内条目 | 关系说明 |
|---|---|---|
| 被聚合的源 | ClinicalTrials.gov | MDR 的 CTG 来源即此库,占比超一半 |
| 被聚合的源的结构化镜像 | AACT | 与 MDR 的 CTG 部分同源,但 AACT 提供 SQL 级访问 |
| 被聚合的源的欧盟对应物 | EudraVigilance | 同为欧盟体系内的数据基础设施,但关注上市后安全性 |
| 语义相邻 | Orphanet ORDO | 罕见病本体,可与 MDR 的疾病条件字段联用 |
| 语义相邻 | WHO 全球卫生观察站 | 同属跨国公共卫生统计层,但粒度是完全不同的层面 |
| 下游可能使用者 | 各类队列与登记数据集条目 | 试验的元数据可用于定位其衍生的队列数据 |
与 ClinicalTrials.gov 和 AACT 不是「同类替代」:CTG 来源的那五十九万多条在研究在 AACT 里更细。MDR 的不可替代性只有两处——欧洲专门来源的国别拆解,与文档、共享声明的对象化。
与 EudraVigilance 关系更远:一个管试验设计与文件,一个管上市后不良反应,字段不重叠。放在一起看的唯一理由是追踪一项试验的监管轨迹。
6.2 检索路径
在本库里从 MDR 出发寻找相关内容,有三条路径。
第一条是自上而下:从「临床试验注册」这个主题词出发,先看 ClinicalTrials.gov 与 AACT 摸清全球注册库的家底,再回到 MDR 看欧洲拆解。这条路径适合刚接触这个领域的使用者。
第二条是自下而上:手里已经有一项具体试验的编号,先在 MDR 查它的文档与共享声明,再回原注册库查结果。这条路径适合做单项试验核查。
第三条是横向:从疾病或干预出发,先用 Orphanet ORDO 把罕见病术语标准化,再用 MDR 的 StudyCondition 字段去匹配试验。这条路径适合罕见病方向的方法学研究,因为罕见病试验的跨国性最强,而 MDR 的国别拆解恰好对应这个需求。
§7 质量评估与局限性
7.0 阅读本节前的一个前置校正
打分之前先做一个校正:不要用「数据集」的标准衡量它,否则会得出全面不及格,而那是对测错对象的误判。它没有样本量、没有标注质量、没有划分方案,因为它是一张索引表,不是训练集。
正确的标准有三条:覆盖全不全、索引项准不准、索引可不可维护。按这三条看,它在覆盖广度上良好、欧洲深度上问题明显、维护成本上是公开承认的困难。本节评分全按这三条。
7.1 五维评分
| 维度 | 评分(5 分制) | 依据 |
|---|---|---|
| 覆盖广度 | 4.5 | 六源聚合、252 个国家与地区,全球注册库基本都在 |
| 欧洲深度 | 3.0 | 欧洲专门来源占比不足 3%,与「欧洲跨国试验层」的定位不匹配 |
| 字段可用性 | 3.5 | 核心字段对象化做得好,但来源间填充率极差 |
| 接口与可复现 | 4.5 | 无注册、有公开接口、查询可复现、模型可读 |
| 可维护性 | 2.5 | 论文自承跨库关联靠人工且难以持续,官方不公布同步时点 |
| 文档与透明 | 3.0 | 官方说明简短,合并规则、更新节奏、许可口径均未公布 |
按 DAIMS 框架再拆一次,分差主要落在元数据管理与许可两处:
| DAIMS 维度 | 得分(5 分制) | 说明 |
|---|---|---|
| 数据集描述 | 3.0 | 有产品页说明定位,但缺版本号与更新时点 |
| 元数据完整性 | 3.5 | 模型完备,逐条记录的填充率依赖来源 |
| 数据质量 | 3.0 | 无质量过滤是设计选择,但也意味着无纠错机制 |
| 溯源与血缘 | 3.5 | 来源可追,合并过程不可追 |
| 接口可用性 | 5.0 | 公开、稳定、可编程、无需申请 |
| 许可清晰度 | 2.0 | 聚合层无统一许可声明,逐条继承来源库 |
| 可维护性 | 2.5 | 依赖人工关联,长期可持续性存疑 |
7.2 三个具体的能力上限
上限一是它无法告诉你来源库没写的东西。这不能靠改进 MDR 解决:它明确不做人工补录,源头没有的它就没有。
上限二是它无法保证指向的东西还在:访问地址是抽取时抄下的,之后改版、迁移、下架都不会反馈回来。
上限三是它无法替你判断该不该用某个来源:六个来源政策不同,MDR 只是并排放着,选哪个、怎么加权是你的事。
7.3 已知的、可枚举的偏差
下面这些偏差可枚举,可以在分析里显式处理,而不是被它们悄悄影响。
| 偏差 | 表现 | 处理方式 |
|---|---|---|
| 来源结构偏差 | ICTRP 占 98.4%,欧洲来源不足 3% | 按来源分层后再合并,或只取欧洲来源子集 |
| 空值与假值混淆 | planToShareIPD 为空与 false 含义不同 | 统计时把空值单列为第三类 |
| 重复记录 | 跨来源未合并的同一试验会有多条 | 按标题加编号双重匹配 |
| 文档条目偏差 | 有 SAP 条目的试验仅四万七千余项 | 报告时注明这是条目数,非实际存在数 |
| 链接时效偏差 | 访问地址可能失效 | 抽样验证后再报告可用率 |
| 地理命名偏差 | 国家名按英文标准名归一 | 与 ISO 3166 对照后再使用 |
§4.3 的案例在这里再出现一次,正好演示第一种与第二种偏差。COVAC-DM 因为被三个来源认领,在按来源分层时会出现在三行里;Clinibil 的 planToShareIPD 为空,如果把它当作「不共享」处理,就会把一个「来源没说」的案例误算成「明确拒绝」。
7.4 外部验证矩阵
一个库的可信度不能只靠自证。四条外部线索与它们各自能验证的范围:
| 外部线索 | 来源 | 能验证什么 | 不能验证什么 |
|---|---|---|---|
| 官方产品页 | ecrin.org 工具页 | 定位、免费、无需注册、不策展原则 | 规模数字、来源构成 |
| 跨库关联论文 2024 | Open Research Europe, DOI 10.12688/openreseurope.17131.2 | BBMRI 关联规模(202 项研究、284 个集合)、人工维护困难 | 整体记录规模 |
| 交叉注册研究 2026 | BMJ Open, DOI 10.1136/bmjopen-2025-105173 | 跨注册库信息不一致的真实程度(状态一致率 85%) | MDR 自己的合并率 |
| 门户接口直查 | crmdr.ecrin.org/mdrmine | 规模、来源构成、字段填充的逐项计数 | 各来源的最后同步时间 |
四条合起来能确认的是:定位与访问政策无疑,规模与来源构成可逐条复现,但合并规则、更新节奏、许可口径三项官方均未公布。
7.5 它为何能持续:因为它卖的不是数据,是入口
一个不存数据、不做过滤、不收检索费的库凭什么活下来?看它的成本结构与价值兑现方式。
成本主要落在三处:抽取流水线的维护、新来源的接入、以及跨库关联的人工核对。前两处是工程成本,可以随基础设施成熟而摊薄;第三处是它最脆弱的地方,2024 年那篇论文说得很直白,两个机构都没有资源持续维护这种人工关联。
价值兑现与 ECRIN 的使命绑定:ECRIN 的存在理由就是让跨国试验更容易做,一个能快速查到「欧洲有哪些试验、文件在哪」的入口是这一使命的天然配套。所以它不是靠盈利维持,而是靠嵌入公共使命维持。这也解释了它为何能坚持不评论——一旦评论,就要承担判断责任,成本结构立刻变化。
7.6 一份使用前的自检清单
把 MDR 的数字写进报告前,建议逐条过下面六项。它们都从本文已出现的偏差反推而来,不涉及新判断。
| 自检项 | 检查方法 | 不通过的后果 |
|---|---|---|
| 是否混用了来源 | 看分母是全部 Study 还是某个来源子集 | 会把来源构成差异当成研究对象差异 |
| 是否把空值当否定 | 统计 planToShareIPD 时是否单列空值 | 系统性高估「不共享」比例 |
| 是否按国别记录计试验 | 是否按 Study.id 去重 | 多国试验被重复计数 |
| 是否假设链接可用 | 是否抽样验证过 accessUrl | 报告里的文档可得率偏高 |
| 是否混用两种口径 | 是否同时引用了 75 与 79 两个试验组合数 | 同一篇里出现自相矛盾的规模 |
| 是否标注了查询日期 | 每个数字是否写明取得时点 | 读者无法判断数字是否过期 |
六项里最容易漏的是最后一项。门户的数据会变,但文献里引用的数字不会跟着变,所以时点标注不是形式主义,它是让这个数字在半年后仍然可解释的唯一办法。
§8 生态位与历史
8.1 历史沿革
机构史与产品史要分开看:前者有公开时间线,后者几乎没有版本记录。
机构层面:ECRIN 是欧洲研究基础设施网络,总部巴黎,非营利,通过各国欧洲联络员与国家级临床试验单元网络铺开。官网口径为 13 个成员国与观察员国、130 余个临床试验单元、覆盖 3.61 亿人口、试验组合 75 至 79 项(首页 79、概览页 75,两口径并存,差额官方未说明),并通过 ISO 9001:2015 认证。
产品层面:官方未给上线年份;门户现为 crmdr.ecrin.org,官方页面仍保留指向 newmdr.ecrin.org 的旧表述,说明经历过改版;技术栈是 InterMine 35 加 BlueGenes 前端。起始年份在附录 A 标为未核实,不作推断。
8.2 同代资源的先后关系
把 MDR 与四个同代资源放在一条时间轴上,能看出它的定位是被别的库逼出来的:
| 资源 | 定位 | 与 MDR 的关系 |
|---|---|---|
| ClinicalTrials.gov | 美国主导的全球注册库 | MDR 的最大单一来源之一 |
| EUCTR | 欧盟临床试验注册库 | MDR 的欧洲身份来源 |
| CTIS | 欧盟临床试验信息系统,接替 EUCTR 的新入口 | MDR 一直在跟进,已作为独立来源接入 |
| ICTRP | WHO 的注册库总索引 | MDR 规模最大的来源 |
| BBMRI-ERIC Directory | 欧洲生物样本库目录 | MDR 的样本关联来源 |
| BioLINCC | 美国 NHLBI 的数据与样本仓库 | MDR 的美国样本来源 |
CTIS 与 EUCTR 同时在列,说明过渡期里 MDR 选择「两个都接」而不是「切换」:老试验只在 EUCTR,新试验只在 CTIS,查欧洲时两边都要查。
8.3 它在欧洲研究基础设施生态里的位置
欧洲研究基础设施分领域建设:生物样本库看 BBMRI,社会科学看 CESSDA,临床研究看 ECRIN。MDR 处在这几个领域的交叉点上,因此它做的事不只是采集,还有跨领域映射。2023 年一篇论文(DOI 10.12688/openreseurope.16284.2)比较 ECRIN 与 CESSDA 的元数据方案,探讨临床与社会科学的词表能否对齐——不产生规模数字,却决定它能否被非临床领域用上。
同期的另一条线是与 BBMRI 的关联:两个方向都找候选,再做系统检索,得到 202 项研究、284 个集合;作者指出这种关联靠人工、两个机构都撑不住长期维护。这是理解它生态位的注脚——边界不是技术边界,是人力边界。
8.4 未来可能的走向
从官网活动看有三条线索:ECRIN 2030 项目(官方称「为下一个十年做准备」);欧盟临床试验体系向 CTIS 的整体迁移,会改变欧洲来源结构;HMA/EMA 的多方 AI 与数据论坛,说明监管侧在推可信任 AI 的数据基础,元数据层是前置条件。
这三条都不足以预测 MDR 的具体产品路线,但足以说明它不会被关停:一个正在做十年规划、正在接手欧盟新体系的机构,不会砍掉自己唯一对公众免费开放的入口。
8.5 三条可以自查的演进线索
预测基础设施的走向比预测公司容易,变化往往写在页面结构里。三条线索都能自查。
| 线索 | 看哪里 | 说明什么 | 目前状态 |
|---|---|---|---|
| 来源清单是否增加 | 门户里 DataSource 的条数 | 条数从 6 变成 7 就是接入了一个新体系 | 目前 6 条 |
| 模型类是否增加 | service/model 返回的类数 |
类数增长说明文档或数据对象建模在细化 | 目前 95 个 |
| 服务版本是否递增 | service/version 返回值 |
InterMine 主版本升级通常伴随重建 | 目前 35 |
三条线索三条命令就能查完。若来源从六条变成七条,关键不是「数据更多了」,而是整体来源构成比例会变,之前按总量算出的结论要重算。
服务版本长期不动也不必急着判定停止维护:数据更新与软件升级是两条流水线,判断是否在更新要看记录总数,不是版本号。
§9 使用指引
9.1 三种角色的路径
| 角色 | 你的目标 | 最短路径 | 需要额外做的事 |
|---|---|---|---|
| 系统评价者 | 找齐某主题的多国试验并去重 | 网页检索关键词 → 导出 → 按 Study.id 去重 | 回原注册库核对纳入排除 |
| 方法学研究者 | 统计共享声明与文档公开度 | 接口按来源分层计数 → 合并 | 按来源分层报告,不要给单一总数 |
| 数据基础设施从业者 | 评估是否可把 MDR 作为上游 | 读模型 → 试接口 → 抽样验证链接 | 先验证同步时效,再谈接入 |
9.2 一条最短的可用流程
下面这段脚本把「从零到一张可用的表」压缩成四步:确认服务、取一批试验、拉平国别、导出。它不需要任何密钥,直接可跑。
import csv, urllib.parse, urllib.request, json
BASE = "https://crmdr.ecrin.org/mdrmine/service/query/results"
#-- 第 1 步:确认服务和模型版本
for ep in ("service/version", "service/model"):
raw = urllib.request.urlopen(f"https://crmdr.ecrin.org/mdrmine/{ep}", timeout=120).read()
print(ep, len(raw), "bytes" if ep.endswith("model") else raw.decode())
#-- 第 2 步:按来源取一批试验,约束写在 Study.dataSets 路径上
def fetch(source, size):
q = ('<query model="genomic" view="Study.id Study.acronym Study.type '
'Study.status Study.plannedEnrolment Study.planToShareIPD">'
'<constraint path="Study.dataSets.dataSource.name" op="=" value='
f'"{source}"/></query>')
params = urllib.parse.urlencode({"query": q, "format": "json", "size": size})
with urllib.request.urlopen(f"{BASE}?{params}", timeout=300) as r:
return json.loads(r.read().decode())["results"]
#-- 第 3 步:合并、去重,并把空值与 false 分开标记
rows = {}
for source in ("CTIS", "EUCTR", "CTG"):
for r in fetch(source, 300):
v = rows.setdefault(r[0], {"id": r[0], "acronym": r[1], "type": r[2],
"status": r[3], "planned": r[4],
"share_ipd": r[5], "sources": set()})
v["sources"].add(source)
#-- 第 4 步:写 CSV
with open("mdr_sample.csv", "w", newline="", encoding="utf-8") as f:
w = csv.writer(f)
w.writerow(["id", "acronym", "type", "status", "planned",
"share_ipd", "n_sources", "sources"])
for v in rows.values():
flag = "not_stated" if v["share_ipd"] is None else str(v["share_ipd"]).lower()
w.writerow([v["id"], v["acronym"], v["type"], v["status"], v["planned"],
flag, len(v["sources"]), ";".join(sorted(v["sources"]))])
print("studies:", len(rows))
这段脚本里有三个刻意为之的设计,都是从 §4.3 的案例里学来的。第一,share_ipd 字段把 None 单独标成 not_stated,而不是简单转成 false;第二,按 Study.id 建字典天然去重,被多个来源认领的试验只会落一行,来源记在 sources 里;第三,三个来源分开取而不一次取全量,避免一次请求超时。
这段脚本里有三个刻意为之的设计,都是从 §4.3 的案例里学来的。第一,share_ipd 字段把 None 单独标成 not_stated,而不是简单转成 false;第二,国别用集合去重,避免同一试验因多国而被重复计数;第三,排序用 startDate 倒序而不是 id,避免只拿到编号最早的那一批稀疏记录。
9.3 引用方式
引用这个库时应该分三层写清楚,否则一句话引用会掩盖它的结构特征。第一层写它是谁运营的、叫什么;第二层写你用的是哪个界面或哪个接口、查询发生在哪一天;第三层写你取的是哪个来源子集,因为不同来源的结论可能完全相反。
一个可用的引用范式是:ECRIN Clinical Research Metadata Repository,经由 crmdr.ecrin.org 的 InterMine 查询接口检索,检索日期某年某月某日;本次分析限定来源为 CTIS 与 EUCTR,共得到多少条记录。这样写的好处是别人能复现你的来源选择,而不是复现你在全库上的一个笼统结论。
9.4 四个具体任务的做法
四个任务覆盖多数实际需求,下表按「查什么 → 用什么字段 → 最易错在哪」排:
| 任务 | 主要字段 | 最易错的一步 | 耗时上限 |
|---|---|---|---|
| 查一项已知试验的全部公开物件 | dataSets、protocols、informedConsentForms、statisticalAnalysisPlans、accessUrl | 只查一个来源,漏掉其他来源的文档 | 20 分钟 |
| 统计一类疾病的跨国分布 | StudyCondition、StudyCountry | 分母未声明,「有国别信息的试验」与「匹配到的试验」混用 | 40 分钟 |
| 评估某国的试验承接情况 | StudyCountry、type、ethicsCommitteeDecisionDate | 把「在该国注册过」当成「在该国实际开展」 | 30 分钟 |
| 为模型准备试验元数据 | title、acronym、type、status、dataSharingStatement | 指望这里能拿到全文语料 | 1 小时 |
第三条最值得展开:MDR 只反映「在该国注册过的试验」,不反映「该国实际开展的试验」——只在本国注册库登记、从未进入 ICTRP 的试验不会出现。结论应写「在 MDR 收录范围内」。
第二条的陷阱在分母:匹配到一万项试验、只有三千项有国别记录时,「某国有多少」的分母是三千还是一万,结论完全不同。两个数字都要给。
第一条的关键在最后一步:accessUrl 是否可打开必须逐个访问核对,不能假设。§4.3 的案例已体现过一次:有来源不等于有值,有值也不等于链接还活着。
§10 AI 使用声明
| 项目 | 说明 |
|---|---|
| 本文写作方式 | 由 AI 辅助撰写,事实核验与数字采集由人工脚本完成并可复现 |
| 数字来源 | 全部门户内数字通过 InterMine 计数端点实时取得,脚本见 §5 |
| 采集日期 | 2026-10-26 |
| 未覆盖内容 | 未下载全量记录、未逐条验证文档链接可用性、未评估各来源的字段填充率 |
| 官方信息 | 定位与访问政策取自 ecrin.org 产品页,机构规模取自 ecrin.org 概览页 |
| 论文支撑 | 两篇(2024 跨库关联、2026 交叉注册),均取自 Europe PMC 摘要层 |
| 未核实项 | 上线年份、聚合层许可、各来源最后同步时间,已在附录 A 标注 |
| 使用建议 | 引用任何数字前,按 §5.3 的写法重跑一次,来源库会更新 |
常见误读(避坑清单)
| 说法 | 实际 | 证据 |
|---|---|---|
| 这是一个临床试验注册库 | 它不接收注册,只聚合既有注册库的记录 | 产品页只说「帮助找到文档与数据」,无注册入口 |
| 里面有患者个体数据 | 一条个体记录都没有 | 模型里只有 IndividualParticipantData 这种「访问安排」对象,无个体表 |
| 它是 ClinicalTrials.gov 的替代品 | 它把 ClinicalTrials.gov 当来源之一 | 六个来源里有 CTG,占比超一半 |
| 一百多万条就等于覆盖了全世界试验 | 数量由 ICTRP 总索引撑起,信息密度低 | ICTRP 108 万余条,CTIS 加 EUCTR 不足 3 万条 |
| 计划共享 IPD 的五十多万项都可以申请数据 | 其中细化到可检索访问安排的只有一万四千余项 | planToShareIPD 非空五十一万余条,IPD 访问安排 14,759 |
| 官方页面说定期更新就是近实时 | 不公布同步时点,也没有变更日志接口 | 产品页仅写「regularly」,接口无快照时间字段 |
| 有 accessUrl 就代表能拿到 | 地址抄自抽取时点,可能已失效 | 产品页未承诺链接维护 |
| 空值等于不共享 | 空是「来源库没说」,false 才是明确拒绝 | 1000004 样本里 planToShareIPD 为 null 而非 false |
| 它是欧洲项目所以只覆盖欧洲 | 覆盖 252 个国家与地区,含日本、黎巴嫩、新西兰等 | 官方描述「从新西兰到意大利、从日本到黎巴嫩」 |
| 排序或推荐反映了质量 | 官方明确不做质量过滤、不做专家输入 | 产品页原文 non-opinionated and non-curated |
FAQ
Q1:ECRIN MDR 里到底存了什么?
存的是试验层面的识别信息与数据对象的位置。具体说:标题、缩写、类型、状态、入组人数、起止日期、国别、中心、文档条目、数据共享声明,以及这些条目指向的访问地址。不存试验结果数据,更不存个体数据。
Q2:它和 ClinicalTrials.gov 是替代关系吗?
不是。ClinicalTrials.gov 是它的来源之一,所以 MDR 里本来就有 ClinicalTrials.gov 的绝大部分记录。MDR 多出来的部分是欧洲专门来源(EUCTR、CTIS)的国别拆解,以及文档与共享声明的对象化表达。
Q3:为什么说它存的是「物流信息」?
因为试验论文告诉你的是结果(入组多少人、疗效如何),而 MDR 告诉你的是过程物件在哪(方案在哪儿、哪国有伦理批件、数据落在哪个机构、能不能申请)。前者是成绩单,后者是物流单。
Q4:检索要钱吗?要注册吗?
都不要。官方页面明确写科学使用者可以自由检索、无需注册,本次核验也直接访问了查询接口并拿到结果。受限的是被指向的原始数据,不是元数据检索本身。
Q5:它的规模数字可信吗?
可复现。所有数字都可以用 §5.3 的计数查询重跑,结果取决于你查询的时点。本文给的是 2026 年 10 月 26 日的快照,来源库持续更新,重跑可能得到不同值。
Q6:为什么 ICTRP 一个来源就占了那么多?
因为 ICTRP 是 WHO 维护的注册库总索引,本身就汇聚了各国注册库的记录。MDR 整批引入之后,数量上占绝对优势,但每条记录的信息密度低,国别与共享声明常常为空。
Q7:CTIS 和 EUCTR 为什么同时都在?
因为欧盟正在从旧体系迁移到新体系,老试验只在 EUCTR 里,新试验只在 CTIS 里,两边都在过渡期内保持收录。查欧洲试验时两个来源都要查。
Q8:能把它当作数据共享政策的研究数据源吗?
可以,而且这是它最有特色的用途之一。但要按来源分层,并且把 planToShareIPD 的空值与 false 分开统计,否则会把「来源没说」误算成「明确拒绝」。
Q9:文档链接点开是 404 怎么办?
这在预期之内。访问地址是抽取时点抄下来的,之后原网站改版或下架都不会反馈回来。正确做法是先抽样验证可用率,再在报告里说明这个限制。
Q10:它的许可是什么?
聚合层没有统一的许可声明,这一点在官方页面上找不到。每条记录继承其来源库的许可,例如 CTG 是美国联邦公有领域,BBMRI 与 BioLINCC 各有自己的条款。引用时必须写清来源,不能笼统写「ECRIN 数据」。
Q11:更新频率是多少?
官方只说定期更新,没有公布频率,也没有公布每个来源的最后同步时间。用它做实时监测会误判,做周期性分析则需要自己建立快照。
Q12:我能把它接入自己的系统吗?
技术上可以。接口公开、无认证、返回 JSON,模型定义可读。但接入前应该先解决两个问题:一是同步时效由谁监控,二是链接失效由谁兜底。这两件事 MDR 都不提供。
术语表
| 术语 | 解释 |
|---|---|
| MDR | Metadata Repository,本文指 ECRIN 的临床研究元数据仓库 |
| ECRIN | European Clinical Research Infrastructure Network,欧洲临床研究基础设施网络 |
| 元数据 | 描述数据的数据;本文特指试验的识别、设计与位置信息 |
| 数据对象 | StudyObject,MDR 里指方案、知情同意书、数据集、论文等可被指向的物件 |
| StudyCountry | 试验与国家的关联记录,一条对应一个试验在一个国家的情况 |
| StudySite | 试验与中心的关联记录,一条对应一个试验在一个机构的情况 |
| DataSource | 来源库标识,本库只有六个 |
| DataSet | 来源库提供的一份数据集合,通过它连到来源 |
| ICTRP | 世界卫生组织的国际临床试验注册平台,注册库总索引 |
| CTG | ClinicalTrials.gov 在 MDR 里的来源代号 |
| EUCTR | 欧盟临床试验注册库,CTIS 的前身体系 |
| CTIS | 欧盟临床试验信息系统,新的统一入口 |
| BioLINCC | 美国 NHLBI 的生物样本与数据仓库 |
| BBMRI | 欧洲生物样本库与研究基础设施,其目录是 MDR 的样本来源 |
| IPD | Individual Participant Data,个体参与者数据 |
| 数据共享声明 | 试验方关于是否及如何共享个体数据的说明 |
| accessType | 数据对象的访问类型,区分公开与受限 |
| accessUrl | 数据对象的访问地址 |
| InterMine | 一个开源的数据仓库框架,MDR 的技术底座 |
| BlueGenes | InterMine 的新一代网页前端 |
| Mine | InterMine 实例的名称,本库为 mdrmine |
| 查重合并 | 把来自不同来源的同一试验归到同一个编号下 |
| 不策展 | 官方原则,指不做人工筛选与质量加权 |
| 交叉注册 | 同一项试验在两个或多个注册库中都有记录 |
| 国别拆解 | 把试验的多国开展情况拆成逐国记录 |
| 可发现性 | 能找到并定位到对象的能力,不等于可获取 |
| 快照 | 某一时点的数据状态,用于比对变化 |
附录 A:核心数字核对表
| 项 | 值 | 来源 | 来源层级 |
|---|---|---|---|
| Study 总数 | 1,125,348 | crmdr.ecrin.org 查询接口计数 | 官方接口 |
| StudyObject 总数 | 361,515 | 同上 | 官方接口 |
| StudyCountry 总数 | 1,526,479 | 同上 | 官方接口 |
| StudySite 总数 | 3,513,748 | 同上 | 官方接口 |
| Country 总数 | 252 | 同上 | 官方接口 |
| Publication 总数 | 788,253 | 同上 | 官方接口 |
| Organisation 总数 | 4,157,504 | 同上 | 官方接口 |
| ICTRP 认领 Study 数 | 1,107,830 | 同上(按来源约束) | 官方接口 |
| CTG 认领 Study 数 | 599,838 | 同上 | 官方接口 |
| EUCTR 认领 Study 数 | 16,691 | 同上 | 官方接口 |
| CTIS 认领 Study 数 | 12,127 | 同上 | 官方接口 |
| BioLINCC 认领 Study 数 | 261 | 同上 | 官方接口 |
| BBMRI 认领 Study 数 | 201 | 同上 | 官方接口 |
| 来源库个数 | 6 | 同上 | 官方接口 |
| 模型类数 | 95 | mdrmine/service/model | 官方接口 |
| 有 SAP 条目的 Study 数 | 47,855 | 官方查询接口计数 | 官方接口 |
| 有 ICF 条目的 Study 数 | 16,271 | 同上 | 官方接口 |
| 有 IPD 访问安排的 Study 数 | 14,759 | 同上 | 官方接口 |
| hasResults 为真的 Study 数 | 172,229 | 同上 | 官方接口 |
| planToShareIPD 非空的 Study 数 | 511,027 | 同上 | 官方接口 |
| 启动日期缺失的 Study 数 | 180,155 | 同上 | 官方接口 |
| 2020 年后启动的 Study 数 | 453,749 | 同上 | 官方接口 |
| BBMRI 关联规模 | 202 项研究 / 284 个集合 | 论文摘要(DOI 10.12688/openreseurope.17131.2) | 论文摘要 |
| 交叉注册状态一致率 | 85% | 论文摘要(DOI 10.1136/bmjopen-2025-105173) | 论文摘要 |
| 交叉注册完成日期一致率 | 50% | 同上 | 论文摘要 |
| 仅单库能找到试验注册号的比例 | 17% | 同上 | 论文摘要 |
| ECRIN 成员国与观察员国 | 13 | ecrin.org 首页 | 官方页面 |
| ECRIN 网络内临床试验单元 | 130 余 | ecrin.org 概览页 | 官方页面 |
| ECRIN 试验组合 | 75(概览页)/ 79(首页) | ecrin.org 两处 | 官方页面(两口径) |
| 数据中心认证累计数 | 19 | ecrin.org 认证页 | 官方页面 |
| MDR 上线年份 | 未核实 | 官方页面未给出 | 未核实 |
| 聚合层许可 | 未单独声明 | 官方页面未给出 | 未核实 |
| 各来源最后同步时点 | 未公布 | 接口与页面均无此字段 | 未核实 |
附录 B:数字的来源分层
三档来源的可靠性依次递减,引用时的写法也应不同。
第一档,官方接口。 门户自身的 InterMine 端点返回的计数。这一档的优点是逐条可复现、时点明确;缺点是只反映门户自身的状态,不保证与来源库一致。本文的规模与来源构成全部属于这一档,写法是「截至 2026-10-26 查询」。
第二档,论文摘要。 Europe PMC 检索到的两篇。这一档的优点是经过同行评议、有方法描述;局限性是只覆盖某一侧面(BBMRI 关联、交叉注册一致性),不能外推到整体。写法是「某项研究显示」。
第三档,官方页面陈述。 ecrin.org 的机构规模、认证累计数、试验组合数。这一档的特点是口径可能随时变动,且存在两处数字不一致的情况(试验组合 75 与 79)。写法是「官网当前口径」。
未核实的项单独列出,不归入以上三档:MDR 上线年份、聚合层许可、各来源同步时点。这三项在写作时曾尝试从官方页面与论文中寻找,均未得到可引用的表述,因此保留空缺而不是推断。
附录 C:完整参考文献
- ECRIN. Clinical Research Metadata Repository 产品页. https://ecrin.org/clinical-research-metadata-repository(2026-10-26 访问)
- ECRIN. Tools 总览页. https://ecrin.org/tools(2026-10-26 访问)
- ECRIN. ECRIN overview 概览页. https://ecrin.org/ecrin-overview(2026-10-26 访问)
- ECRIN. Data Centre Certification 认证页. https://ecrin.org/data-centre-certification(2026-10-26 访问)
- ECRIN. Clinical Research Metadata Repository 门户. https://crmdr.ecrin.org/(2026-10-26 访问)
- ECRIN. InterMine 查询接口. https://crmdr.ecrin.org/mdrmine/service/query/results(2026-10-26 查询)
- ECRIN. InterMine 数据模型. https://crmdr.ecrin.org/mdrmine/service/model(2026-10-26 读取)
- Ohmann C, Canham S, Majcen K, Meloni V, Pireddu L, Sulis A, Delussu G, Frexia F, Holub P. Linking the ECRIN Metadata Repository with the BBMRI-ERIC Directory to connect clinical studies with related biobanks and collections. Open Research Europe, 2024. DOI: 10.12688/openreseurope.17131.2
- Accounting for cross-registration in monitoring transparency in clinical trials: a cross-sectional study of trials at German university medical centres. BMJ Open, 2026. DOI: 10.1136/bmjopen-2025-105173
- ECRIN–CESSDA strategies for cross metadata mappings in selected areas between life sciences and social sciences and humanities. Open Research Europe, 2023. DOI: 10.12688/openreseurope.16284.2
- Europe PMC REST 检索接口. https://www.ebi.ac.uk/[europepmc](https://www.qianfanghub.com/ai-ready-dataset/europepmc/1353)/webservices/rest/search(2026-10-26 检索)
附录 D:可复现查询清单
下列查询均在 https://crmdr.ecrin.org/mdrmine/service/query/results 上执行,format=count。按顺序跑一遍即可复现附录 A 的前十六行。
#-- 端点与参数格式:query 为 XML,format 取 count/json/csv/tsv
EP="https://crmdr.ecrin.org/mdrmine/service/query/results"
#-- 规模类
curl -s "$EP?format=count" --get --data-urlencode 'query=<query model="genomic" view="Study.id"></query>'
curl -s "$EP?format=count" --get --data-urlencode 'query=<query model="genomic" view="StudyObject.id"></query>'
curl -s "$EP?format=count" --get --data-urlencode 'query=<query model="genomic" view="StudyCountry.id"></query>'
curl -s "$EP?format=count" --get --data-urlencode 'query=<query model="genomic" view="StudySite.id"></query>'
curl -s "$EP?format=count" --get --data-urlencode 'query=<query model="genomic" view="Country.id"></query>'
#-- 来源构成类:约束必须写在 Study 路径上
for S in ICTRP CTG EUCTR CTIS BioLINCC BBMRI; do
curl -s "$EP?format=count" --get --data-urlencode \
"query=<query model=\"genomic\" view=\"Study.id\"><constraint path=\"Study.dataSets.dataSource.name\" op=\"=\" value=\"$S\"/></query>"
echo " <- $S"
done
#-- 数据对象覆盖类
curl -s "$EP?format=count" --get --data-urlencode \
'query=<query model="genomic" view="Study.id"><constraint path="Study.statisticalAnalysisPlans" op="IS NOT NULL"/></query>'
curl -s "$EP?format=count" --get --data-urlencode \
'query=<query model="genomic" view="Study.id"><constraint path="Study.planToShareIPD" op="IS NOT NULL"/></query>'
两个坑:curl 的 --data-urlencode 会正确编码引号与尖括号,手工拼接易漏 op=">=" 的转义;来源约束写在 Study.dataSets.dataSource.name 上才有意义,写 Study.dataSources.name 返回零——模型里两个路径都在,只有前者有数。
附录 E:如果只记五件事
第一,它不存数据,只存数据在哪。这是理解它所有优缺点的起点。
第二,它写着「欧洲」,但欧洲专门来源(CTIS 加 EUCTR)不到总量的 3%。用之前先想清楚你要的是欧洲深度还是全球广度。
第三,它最独特的价值是数据共享声明的字段化与国别拆解,这两件事别处不好找。
第四,空值不等于否定。planToShareIPD 为空说明来源库没说,不是说不共享。
第五,它不做质量过滤。门户里排序靠前不代表研究做得好,只代表它符合你输入的关键词。
编辑说明
本文的核验时间为 2026 年 10 月 26 日,核验方式为直接访问 ECRIN 官网产品页与门户自身的 InterMine 查询接口,数字全部可复现,脚本见附录 D。写作过程中曾遇到一次查询路径错误(用 Study.dataSources 约束来源返回零),已在 §5.4 与附录 D 中说明正确写法。
未覆盖的内容包括:未下载门户全量记录、未逐条验证文档链接的可用性、未计算各来源的逐字段填充率、未取得各来源的最后同步时间。上线年份与聚合层许可在官方页面与论文中均未找到可引用的表述,附录 A 中标为未核实,未作推断。
本文与门户的数据口径绑定:如果来源库更新,重跑附录 D 的查询会得到不同数字,那属于数据变化,不属于错误。引用本文数字时建议同时写明查询日期。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- mimic-iii — 共享标签:电子健康记录 / 医疗NLP
- vaers — 共享标签:公共卫生与流行病学 / 医疗NLP
- mimicel — 共享标签:公共卫生与流行病学 / 电子健康记录
- mimiciii-legacy — 共享标签:电子健康记录 / 医疗NLP
- mimiciii-demo — 共享标签:公共卫生与流行病学 / 电子健康记录
- mimiciv — 共享标签:公共卫生与流行病学 / 电子健康记录
- nosocomial-risk-mimic — 共享标签:电子健康记录 / 医疗NLP
- phenotype-annotations-mimic — 共享标签:电子健康记录 / 医疗NLP
- paediatric-intensive-care — 共享标签:电子健康记录 / 医疗NLP
- stroke-scale-mimic-iii — 共享标签:电子健康记录 / 医疗NLP
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

