SBML是基于XML的生化模型编码标准,非映射语言;其XML结构严格对应生物学组件,如、等,属性与嵌套规则由规范强制定义,手写易出错,推荐用建模工具或libsbml API生成。
SBML 不是“映射语言”,它本身就是一个基于 XML 的模型编码标准,其核心作用是把生化反应网络(物种、反应、参数、动力学规则等)按固定结构转成 XML 文本,供不同软件读取和解析。所谓“映射”,其实是把生物学概念→SBML 元素→XML 标签的逐层落实过程。
SBML 的 XML 结构怎么对应生物学组件?
SBML Level 3(当前主流)用 为根,内部按语义分块: 描述分子(如 ATP、Glc-6-P), 描述转化过程(含 子节点写速率公式), 定义常数或变量。每个元素都带必需属性,比如 id(唯一标识)、name(可读名)、compartment(所属区室)。这些不是自由发挥的字段,而是 SBML 规范强制定义的。
例如一个简单反应:ATP + Glc ⇌ ADP + Glc-6-P,在 SBML 中必须拆解为:
-
→ 含和 -
内用(MathML)写v = k1 * ATP * Glc - k2 * ADP * Glc6P
为什么不能直接手写 SBML XML?常见错误有哪些?
SBML XML 看似是普通 XML,但实际约束极严:标签嵌套顺序、属性是否必需、ID 命名规则(不能含空格/特殊字符)、MathML 表达式语法、单位一致性检查等,全靠 XSD Schema 和验证规则约束。手写极易触发以下错误:
- 漏掉
metaid或spatialSizeUnits(Level 3 某些包要求非空) - 在
中用了^表示幂——SBML 要求用元素 - 反应物列表里写了不存在的
speciesid,导致解析失败但无明确报错 - 混用 Level 2 和 Level 3 的语法(如 Level 2 的
fast属性在 Level 3 中已废弃)
几乎所有主流工具(COPASI、libRoadRunner、Tellurium)都会在加载时做严格校验,遇到不合规 XML 直接拒绝,不会尝试“容错修复”。