PDBx/mmCIF Syntax
原文链接:PDBx/mmCIF Syntax (wwpdb.org)
mmCIF数据文件和字典中使用的语法来自STAR(Self-defining Text Archive and Retrieval)语法。在其最简单的形式中,mmCIF文件看起来像一个成对的数据项名称和值的集合。例如,在下面这个为单元格常数赋值的例子中,对语法的解释是直接的。
#
_cell.entry_id 4HHB
_cell.length_a 63.150
_cell.length_b 83.590
_cell.length_c 53.800
_cell.angle_alpha 90.00
_cell.angle_beta 99.34
_cell.angle_gamma 90.00
_cell.Z_PDB 4
mmCIF的数据项目名称是由前面的下划线字符来识别。下划线后面是一个文本字符串,在mmCIF中被解释为包含一个类别名称和一个关键词名称,用句号分开。名称中的关键字部分是该类别中数据项的唯一标识符。在上面的例子中,所有的数据项都属于CELL
类别。上面的例子也说明了项目名称和项目值之间需要一对一的对应关系。数据类别和数据项的名称不区分大小写。
下一个例子说明了文本字符串如何在mmCIF中表达。短的文字串可以用单引号或双引号括起来。跨越多行的文本字符串用分号括起来,分号放置在该行的第一个字符位置。有两个特殊字符作为mmCIF项目值的占位符,由于某些原因不能明确分配。问号(?
)用于标记一个项目值为缺失。句号(.
)可用于识别该项目没有合适的值,或一个值被有意省略。
_entity_src_gen.entity_id 1
_entity_src_gen.pdbx_gene_src_gene 'MT3707, MTCY07H7B.20, panC, Rv3602c'
_entity_src_gen.pdbx_gene_src_scientific_name 'Mycobacterium tuberculosis'
_entity_src_gen.pdbx_gene_src_ncbi_taxonomy_id 1773
_entity_src_gen.pdbx_host_org_scientific_name 'Escherichia coli'
_entity_src_gen.pdbx_host_org_ncbi_taxonomy_id 562
_entity_src_gen.pdbx_host_org_vector_type plasmid
_entity_src_gen.pdbx_host_org_tissue ?
_entity_src_gen.pdbx_host_org_vector ?
_entity_src_gen.plasmid_name pET30a
_struct_ref.id 1
_struct_ref.db_name UNP
_struct_ref.db_code PANC_MYCTU
_struct_ref.pdbx_db_accession P0A5R0
_struct_ref.entity_id 1
_struct_ref.biol_id .
_struct_ref.pdbx_seq_one_letter_code
;MTIPAFHPGELNVYSAPGDVADVSRALRLTGRRVMLVPTMGALHEGHLALVRAAKRVPGS
VVVVSIFVNPMQFGAGEDLDAYPRTPDDDLAQLRAEGVEIAFTPTTAAMYPDGLRTTVQP
GPLAAELEGGPRPTHFAGVLTVVLKLLQIVRPDRVFFGEKDYQQLVLIRQLVADFNLDVA
VVGVPTVREADGLAMSSRNRYLDPAQRAAAVALSAALTAAAHAATAGAQAALDAARAVLD
AAPGVAVDYLELRDIGLGPMPLNGSGRLLVAARLGTTRLLDNIAIEIGTFAGTDRPDGYR
;
矢量和表格的数据可以用loop_
指令在mmCIF中进行编码。要建立一个表格,与表格列相对应的数据项名称前面要有loop_
指令,后面要有相应的数据行。下面的例子建立了一个作者姓名的表格。
#
loop_
_citation_author.citation_id
_citation_author.name
_citation_author.ordinal
primary 'Fermi, G.' 1
primary 'Perutz, M.F.' 2
primary 'Shaanan, B.' 3
primary 'Fourme, R.' 4
1 'Perutz, M.F.' 5
1 'Hasnain, S.S.' 6
1 'Duke, P.J.' 7
1 'Sessler, J.L.' 8
1 'Hahn, J.E.' 9
2 'Fermi, G.' 10
2 'Perutz, M.F.' 11
3 'Perutz, M.F.' 12
4 'Teneyck, L.F.' 13
4 'Arnone, A.' 14
5 'Fermi, G.' 15
6 'Muirhead, H.' 16
6 'Greer, J.' 17
#
在mmCIF中使用loop_
指令有几个限制。首先,要求循环内的所有数据项都属于同一个mmCIF类别。其次,循环后的数据值的数量必须是数据项名称数量的精确倍数。最后,mmCIF禁止对loop_
指令进行嵌套。
mmCIF使用数据块来组织相关信息和数据。一个数据块是一个数据文件或字典的逻辑分区,是用data_
指令创建的。一个数据块可以通过在data_
指令后附加一个文本字符串来命名,一个数据块可以由另一个data_
指令或文件的结尾来终止。下面的例子显示了一个非常简单的例子,即一对缩写的数据块。
#
# --- Lines beginning with # are treated as comments
#
data_X987A
_entry.id X987A
_exptl_crystal.id 'Crystal A'
_exptl_crystal.colour 'pale yellow'
_exptl_crystal.density_diffrn 1.113
_exptl_crystal.density_Matthews 1.01
_cell.entry_id X987A
_cell.length_a 95.39
_cell.length_a_esd 0.05
_cell.length_b 48.80
_cell.length_b_esd 0.12
_cell.length_c 56.27
_cell.length_c_esd 0.06
# Second data block
data_T100A
_entry.id T100A
_exptl_crystal.id 'Crystal B'
_exptl_crystal.colour 'orange'
_exptl_crystal.density_diffrn 1.156
_exptl_crystal.density_Matthews 1.06
_cell.entry_id T100A
_cell.length_a 68.39
_cell.length_a_esd 0.05
_cell.length_b 88.70
_cell.length_b_esd 0.12
_cell.length_c 76.27
_cell.length_c_esd 0.06
上面的例子说明了如何使用数据块来分离与不同结构有关的类似信息。这种分离是必要的,因为mmCIF的语法禁止在同一数据块中的多个地方重复相同的类别。因此,将上述两个数据块的内容简单串联成一个数据块在语法上是不正确的。
合并上述例子中的数据块会引起一些与mmCIF数据模型和这些特定类别的结构相关的额外问题。在上面的例子中,通过使用loop_
指令重组EXPTL_CRYSTAL
类别,可以将该类别的信息合并为一个数据块。然而,某些mmCIF类别如CELL
和ENTRY
在数据块中可能只包含一个值,因此不能循环。这些类别中的数据项的单值属性是这两个类别中关键项定义的结果。CELL
类别的关键项,_cell.entry_id
,被定义为_entry.id
的一个子定义。这个项目被定义为数据块的标识符,因此可以只承担一个值。
mmCIF字典中的定义被封装在命名的保存框中。一个保存框架以save_
指令开始,以另一个save_
指令结束。保存框的命名方式是在save_
标记上附加一个文本字符串。在mmCIF字典中,保存框被用来封装项目和类别的定义。mmCIF字典由一个包含数千个保存框的数据块组成,每个保存框包含一个不同的定义。保存框只能出现在mmCIF字典中,它们不能被嵌套。下面的例子显示了包含数据项_exptl.details
定义的保存框。
save__exptl.details
_item_description.description
; Any special information about the experimental work prior to the
intensity measurement. See also _exptl_crystal.preparation.
;
_item.name '_exptl.details'
_item.category_id exptl
_item.mandatory_code no
_item_aliases.alias_name '_exptl_special_details'
_item_aliases.dictionary cif_core.dic
_item_aliases.version 2.0.1
_item_type.code text
save_
保存框架在STAR中的作用比在mmCIF中重要得多。在一个STAR文件应用中,如NMR-STAR,保存框架作为一个可重复使用的信息单元,可以在文件中引用和扩展。在STAR文件中,保存框架的参考方法是在保存框架的名称前加上一个美元符号。mmCIF中保存框架的使用仅限于其提供的组织和范围功能。 mmCIF不支持对保存框架的引用,也不支持为封装字典定义以外的目的使用保存框架。