2011-07-07 98 views
5

目前,我正在設計一些糖生物學領域的格式轉換工具。格式轉換涉及從文本文件轉換爲該字段中標準的XML文件。大多數情況下,我們獲得的數據包含以下純文本文件中感興趣的信息。實際的文件包含在一行中。閱讀和分割這些文本以獲取信息是微不足道的(可能不直觀),但XML是問題所在。從純文本中提取信息並使用DOM寫入XML

[][b-D-GlcpNAc] 
    {[(4+1)][b-D-GlcpNAc] 
     {[(4+1)][b-D-Manp] 
      {[(3+1)][a-D-Manp] 
       {[(2+1)][a-D-Manp]{} 
      } 
     [(6+1)][a-D-Manp] 
      {[(3+1)][a-D-Manp]{} 
      [(6+1)][a-D-Manp]{} 
     } 
    } 
} 

如何來解釋這一點:形式

  1. 一切的W-W-W +是鏈接到另一個糖。鏈接顯示爲捲曲{。
  2. 4 + 1,3 + 1等等表示一個糖上的哪個碳鍵與另一個糖上的碳鍵相連。所以前一個的第四個碳與後一個的第一個碳相連。
  3. {}這表明沒有額外的糖鏈接到該糖
  4. } curlies剛剛接近該層。

您可以閱讀XML並找出鏈接的工作方式。但是如果你們想要更詳細的解釋,那就問問。

XML的外觀如下所示。

<?xml version="1.0" encoding="UTF-8"?> 
<GlydeII> 
    <molecule subtype="glycan" id="From_GlycoCT_Translation"> 
      <residue subtype="base_type" partid="1" ref="http://www.monosaccharideDB.org/GLYDE-II.jsp?G=b-dglc-HEX-1:5" /> 
      <residue subtype="substituent" partid="2" ref="http://www.monosaccharideDB.org/GLYDE-II.jsp?G=n-acetyl" /> 
      <residue subtype="base_type" partid="3" ref="http://www.monosaccharideDB.org/GLYDE-II.jsp?G=b-dglc-HEX-1:5" /> 
      <residue subtype="substituent" partid="4" ref="http://www.monosaccharideDB.org/GLYDE-II.jsp?G=n-acetyl" /> 
      <residue subtype="base_type" partid="5" ref="http://www.monosaccharideDB.org/GLYDE-II.jsp?G=b-dman-HEX-1:5" /> 
      <residue subtype="base_type" partid="6" ref="http://www.monosaccharideDB.org/GLYDE-II.jsp?G=a-dman-HEX-1:5" /> 
      <residue subtype="base_type" partid="7" ref="http://www.monosaccharideDB.org/GLYDE-II.jsp?G=a-dman-HEX-1:5" /> 
      <residue subtype="base_type" partid="8" ref="http://www.monosaccharideDB.org/GLYDE-II.jsp?G=a-dman-HEX-1:5" /> 
      <residue subtype="base_type" partid="9" ref="http://www.monosaccharideDB.org/GLYDE-II.jsp?G=a-dman-HEX-1:5" /> 
      <residue subtype="base_type" partid="10" ref="http://www.monosaccharideDB.org/GLYDE-II.jsp?G=a-dman-HEX-1:5" /> 
      <residue_link from="2" to="1"> 
       <atom_link from="N1H" to="C2" to_replace="O2" bond_order="1" /> 
      </residue_link> 
      <residue_link from="3" to="1"> 
       <atom_link from="C1" to="O4" from_replace="O1" bond_order="1" /> 
      </residue_link> 
      <residue_link from="4" to="3"> 
       <atom_link from="N1H" to="C2" to_replace="O2" bond_order="1" /> 
      </residue_link> 
      <residue_link from="5" to="3"> 
       <atom_link from="C1" to="O4" from_replace="O1" bond_order="1" /> 
      </residue_link> 
      <residue_link from="6" to="5"> 
       <atom_link from="C1" to="O3" from_replace="O1" bond_order="1" /> 
      </residue_link> 
      <residue_link from="7" to="6"> 
       <atom_link from="C1" to="O2" from_replace="O1" bond_order="1" /> 
      </residue_link> 
      <residue_link from="8" to="5"> 
       <atom_link from="C1" to="O6" from_replace="O1" bond_order="1" /> 
      </residue_link> 
      <residue_link from="9" to="8"> 
       <atom_link from="C1" to="O3" from_replace="O1" bond_order="1" /> 
      </residue_link> 
      <residue_link from="10" to="8"> 
       <atom_link from="C1" to="O6" from_replace="O1" bond_order="1" /> 
      </residue_link> 
    </molecule> 
</GlydeII> 

到目前爲止,我已經平凡抽到所有的殘留物領域,並將其寫入XML。但是即使爲residual_link字段編寫僞代碼,我也遇到了麻煩。即使我可以得到關於如何在xml中添加鏈接信息的幫助和想法,我將不勝感激。

+0

我想你錯過了一個大括號。你可以使用代碼格式,新行和縮進來更好地對源文本進行視覺解釋嗎? – Udi

+0

[]代表什麼? – Udi

+0

當然,我爲眼睛疼痛道歉。 – arkestra

回答

1

好吧!很酷的問題,它以一種很好的方式傷害了我的大腦。

首先...我的理智我標籤的原始數據轉換成一種方式,是有道理的:

[][b-D-GlcpNAc] { 
    [(4+1)][b-D-GlcpNAc] { 
     [(4+1)][b-D-Manp] { 
      [(3+1)][a-D-Manp] { 
       [(2+1)][a-D-Manp] { } 
      } 
      [(6+1)][a-D-Manp] { 
       [(3+1)][a-D-Manp] { } 
       [(6+1)][a-D-Manp] { } 
      } 
     } 
    } 

我認爲關鍵,這是搞清楚對是什麼,你希望以編程方式弄清楚你在什麼級別。

僞代碼:

hierarchy = 0 
nextChar = getNextChar() 
while (Parsing): 
    if (nextChar = "{"): 
     hierarchy += 1 
    elif (nextChar = "}"): 
     hierarchy -= 1 
    if (nextChar = "["): 
     storeSugar(hierarchy) 

你想也想跟蹤它的糖是以前的「母體」糖。

+0

hm ...所以我有這樣的設置。讓我更多地考慮你的建議。我應該能夠找出一種方法來實現這一點。謝謝。 – arkestra