英語原文(wwPDB)

PDBx/mmCIFの書式

mmCIFデータファイルで用いられる書式や辞書は、STAR(Self-defining Text Archive and Retrieval、自己定義テキストアーカイブ・検索)形式の文法に基づいて定められています。データが1セットしかない場合、データ名と値を空白ではさんで各行に記したものになります。次の例はセル定数の値を示したものですが、書式は容易に解釈できるでしょう。

# 
_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データのアイテム名が記されています。 アンダースコアに続く非空白文字列がカテゴリ名とキーワードとして解釈され、両者の間はピリオドで区切られます。キーワード部分は同一カテゴリ内では重複することのない一意な値になっています。上の例では、全てのデータアイテムがCELLカテゴリに属しています。また、アイテム名とその値が1対1に対応していることも分かります。データカテゴリやデータアイテムの名前は大文字小文字を区別しません。

次の例はmmCIFにおいて文字列がどのように記述されるのかを示しています。短い文字列はシングルクォートまたはダブルクォートで囲んでも構いません。文字列が複数行に渡る場合、先頭行の行頭と値の末尾の次行先頭にセミコロンを置いて値を囲みます。なお、何らかの理由で値を明確に指定することができなかった場合に用いられる特殊文字が2つあります。疑問符(?)はそのアイテム値がないことを、ピリオド(.)は、そのアイテムに対する適当な値がないか、または意図的に省略されたことを意味します。

_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 
;

配列や表の形式になっているデータの場合、mmCIFでは loop_ を使って記述します。表を作成するには、表の列に当たるデータアイテム名の前に 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_ を使うに当たって以下のような制約があります。

  • loop内に記述されるデータは全て同一のmmCIFカテゴリに属していること。
  • loopの後に続くデータ値の個数は、データアイテム名の個数のきっちり整数倍であること。
  • mmCIFでは loop_ を入れ子構造にすることはできない。

mmCIFではデータブロックを使って関連する情報やデータをまとめています。データブロックはデータファイルを論理的に分割するもの、あるいは辞書で data_ を使って定義されたものです。データブロック名は data_ の後に文字列を付加したもので、データブロックは別の data_ またはファイルの終端で終わります。以下に、非常に簡単なデータブロックの例を示します。

#
# --- # で始まる行はコメントとして処理されます
#
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

# 2つ目のデータブロック
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の文法ルールで同一データブロック内に同一カテゴリを複数記すことが禁じているからです。そのため、上に記す2つのデータブロックを単につなげて1つのデータブロックにするのは構文として正しくないことになります。

上例のデータブロックをつなげる際、mmCIFデータモデルとこの特定カテゴリの構造に関連する別の問題が生じます。この場合、loop_ を使って、EXPTL_CRYSTAL カテゴリの情報を再構築して1つのデータブロックに統合することができます。しかし CELLENTRYなどデータブロック内に1つしか値がないカテゴリの場合、loopを使うことができません。 The single-valued property of the data items in these categories is a consequence of the definition of the key items in these two categories. したがって、これらのカテゴリに含まれるデータアイテムの単一値属性は、2つのカテゴリ The category key for the CELL category, _cell.entry_id, is a defined as a child definition of _entry.id. This item is defined as the data block identifier and may therefore assume only a single value.

Definitions in the mmCIF dictionary are encapsulated in named save frames. A save frame begins with the save_ directive and is terminated by another save_ directive. Save frames are named by appending a text string to the save_ token. In mmCIF dictionaries, save frames are used to encapsulate item and category definitions. The mmCIF dictionary is composed of a data block containing thousands of save frames, where each save frame contains a different definition. Save frames may only appear in mmCIF dictionaries and they may not be nested. The following example shows the save frame containing the definition of the data item _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_

Save frames play a much more important role in STAR than in mmCIF. In a STAR file application such as NMR-STAR where a save frame acts as a reuseable cell of information which can be referenced and expanded within the file. Save frames are referenced in a STAR file by preceding the save frame name with a dollar sign. The use of save frames in mmCIF has been limited to the organization and scoping features that they provide. mmCIF does not support references to save frames or the use of save frames for purposes other than for encapsulating dictionary definitions.