2011-07-07 4 views
5

Obecnie projektuję niektóre narzędzia do konwersji formatu w dziedzinie glikobiologii. Konwersja formatu polega na przechodzeniu z pliku tekstowego do pliku XML, który jest standardem w tej dziedzinie. W większości przypadków dane, które otrzymujemy, zawierają interesujące informacje w pliku tekstowym, jak poniżej. Rzeczywisty plik zawiera wszystko w jednym wierszu. Czytanie i dzielenie tego tekstu w celu uzyskania informacji jest banalne (prawdopodobnie nie intuicyjne), ale XML jest tam, gdzie jest problem.Wyodrębnianie informacji z zwykłego tekstu i pisanie do XML przy użyciu DOM

[][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]{} 
     } 
    } 
} 

Jak interpretować następująco:

  1. Wszystko formularza W-W-w + jest cukrem, który jest powiązany z innym. Powiązanie jest pokazane przez kręcone {.
  2. 4 + 1, 3 + 1 i tak dalej wskazują, które wiązania węglowe jednego cukru na drugie. Zatem czwarty węgiel na poprzednim łączy się z pierwszym węglem na następnym.
  3. {} Oznacza to brak dodatkowego cukru związanego z tym cukrem
  4. } Lokówki właśnie zamykają ten poziom.

Prawdopodobnie można odczytać kod XML i dowiedzieć się, jak działają powiązania. Ale jeśli wolisz bardziej szczegółowe wyjaśnienie, po prostu zapytaj.

Wygląd XML powinien wyglądać tak, jak pokazano poniżej.

<?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> 

Do tej pory byłem trywialnie w stanie uzyskać wszystkie pola pozostałości i zapisałem je do XML. Ale mam problem nawet przy pisaniu pseudo kodu dla pól residue_link. Nawet jeśli mogę uzyskać pomoc i pomysły dotyczące dodawania informacji o powiązaniach w xml, byłbym wdzięczny.

+0

Chyba brakuje Ci nawiasu klamrowego. Czy możesz użyć formatowania kodu, nowych linii i wcięcia dla lepszego wizualnego wyjaśnienia tekstu źródłowego? – Udi

+0

Co [] oznacza? – Udi

+0

Jasne, przepraszam za ból oczu. – arkestra

Odpowiedz

1

Okay! Fajny problem, to rani mój mózg w dobry sposób.

Pierwszy ... dla mojego zdrowia psychicznego ja zakładkami surowe dane w sposób, który ma sens:

[][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] { } 
      } 
     } 
    } 

Myślę, że kluczem do tego jest dowiedzieć się, jakie są pary, i chcesz programowo dowiedzieć się, na jakim poziomie jesteś.

Pseudokod:

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

Można by też chcą śledzić których cukier jest poprzedni „rodzic” cukier.

+0

hm ... więc mam coś takiego skonfigurowanego. Pozwól, że pomyślę o Twojej sugestii. Powinienem być w stanie znaleźć sposób na wdrożenie tego. Dziękuję Ci. – arkestra