XML即可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言,用户可以根据需求自定义标签来描述各类数据,具备良好的跨平台兼容性和可读性。化学标记语言CML是基于XML规范设计的化学领域专用标记语言,专门用于描述分子、反应、光谱等各类化学数据,让化学信息能够以结构化的形式被计算机解析和处理。

XML的核心特性
XML的语法规则简单且严格,所有标签都需要成对出现,支持自定义标签名称,通过嵌套结构来体现数据的层级关系。它的核心作用是将数据与展示样式分离,让数据可以在不同系统之间自由传输和解析,不需要依赖特定的软件环境。
一个基础的XML文档结构如下:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<element attribute="value">内容</element>
</root>
CML的定义与设计目标
CML全称为Chemical Markup Language,是XML在化学领域的垂直应用,由化学信息学研究者设计开发。它的设计目标是统一化学数据的描述格式,解决不同化学软件之间数据不互通的问题,让分子结构、反应过程、实验数据等化学信息可以被标准化存储和交换。
CML的标签都是针对化学领域概念定义的,比如<molecule>表示分子,<atom>表示原子,<bond>表示化学键,这些标签的含义是固定的,所有支持CML的程序都能正确解析这些标签对应的化学信息。
用CML表示分子的具体方式
CML表示分子时,会以<molecule>作为根标签,内部嵌套<atomArray>存储所有原子的信息,嵌套<bondArray>存储所有化学键的信息,每个原子和化学键都有对应的属性来描述其特征。
原子信息的表示
每个<atom>标签会包含原子的唯一标识id、元素符号elementType、坐标x3、y3、z3等属性,用来描述原子的类型和空间位置。如果是带电荷或者有特殊同位素属性的原子,还可以添加formalCharge、isotopeNumber等属性。
化学键信息的表示
每个<bond>标签会包含化学键的唯一标识id、连接的原子id atomRefs2、键的类型order等属性,order属性可以取值1、2、3分别对应单键、双键、三键,也可以取值部分特殊值表示配位键等其他类型的化学键。
CML表示水分子的完整示例
以下是一个表示水分子H₂O的CML文档示例,包含了两个氢原子和一个氧原子的信息,以及对应的两个O-H单键的信息:
<?xml version="1.0" encoding="UTF-8"?>
<molecule xmlns="http://www.xml-cml.org/schema">
<atomArray>
<atom id="a1" elementType="O" x3="0.0" y3="0.0" z3="0.0"/>
<atom id="a2" elementType="H" x3="0.957" y3="0.0" z3="0.0"/>
<atom id="a3" elementType="H" x3="-0.239" y3="0.927" z3="0.0"/>
<atomArray>
<bondArray>
<bond id="b1" atomRefs2="a1 a2" order="1"/>
<bond id="b2" atomRefs2="a1 a3" order="1"/>
</bondArray>
</molecule>
CML的优势与应用场景
CML作为标准化的化学数据格式,相比自定义的文本格式或者二进制格式,具备更好的可读性和可扩展性。它可以被各类化学信息学软件、化学数据库直接解析,常用于化学数据的存储、化学文献中的结构化数据嵌入、化学计算程序的数据输入输出等场景。
需要注意的是,CML的标签和属性都有对应的规范定义,编写CML文档时需要遵循官方的schema约束,才能保证文档被正确解析。如果需要表示更复杂的分子,比如带有环结构、手性中心的分子,只需要在基础的原子和化学键信息上添加对应的属性即可,不需要改变整体的结构框架。