///|
/// SeqXML demo - XML-based sequence exchange format.
///
/// Run: moon run examples/seqxml_demo
fn main {
println("=== SeqXML Demo ===")
println("XML format for sequence data exchange")
println("Reference: BioPython Bio.SeqIO.SeqXmlIO")
println("")
// ------------------------------------------------------------------
// 1. Create a sample SeqXML document
// ------------------------------------------------------------------
println("=== 1. Create sample SeqXML document ===")
let doc = @bio.seqxml_sample_document()
println("Created sample SeqXML document")
println("")
// ------------------------------------------------------------------
// 2. Print document info (n_entries, species_name, source_db)
// ------------------------------------------------------------------
println("=== 2. Document info ===")
println("n_entries: \{doc.n_entries()}")
println("species_name: \{doc.species_name()}")
println("source_db: \{doc.source_db()}")
println("")
// ------------------------------------------------------------------
// 3. Show all entries (id, type, description, sequence)
// ------------------------------------------------------------------
println("=== 3. All entries ===")
let entries = doc.entries()
for e in entries {
let type_desc = @bio.SeqXmlType::description(e.seq_type())
println(" id: \{e.id()}")
println(" type: \{type_desc}")
println(" description: \{e.description()}")
println(" sequence: \{e.sequence()}")
}
println("")
// ------------------------------------------------------------------
// 4. Parse a SeqXML string and show results
// ------------------------------------------------------------------
println("=== 4. Parse SeqXML string ===")
let xml_str = "\n\n \n \n \n GGGATCCC\n \n \n MKLV\n \n\n"
let parsed = @bio.seqxml_parse(xml_str)
println("Parsed \{parsed.n_entries()} entries")
println("species_name: \{parsed.species_name()}")
println("source_db: \{parsed.source_db()}")
for e in parsed.entries() {
let type_desc = @bio.SeqXmlType::description(e.seq_type())
println(" \{e.id()} [\{type_desc}]: \{e.sequence()}")
}
println("")
// ------------------------------------------------------------------
// 5. Write document back to XML and print
// ------------------------------------------------------------------
println("=== 5. Write document back to XML ===")
let xml_out = @bio.seqxml_to_xml(doc)
println(xml_out)
// ------------------------------------------------------------------
// 6. Convert to SeqRecord array and show details
// ------------------------------------------------------------------
println("=== 6. Convert to SeqRecord array ===")
let seq_records = @bio.seqxml_to_seq_records(doc)
println("Converted to \{seq_records.length()} SeqRecord(s)")
for rec in seq_records {
println(" \{rec.repr()}")
}
println("")
// ------------------------------------------------------------------
// 7. Create from SeqRecord array and verify round-trip
// ------------------------------------------------------------------
println("=== 7. Create from SeqRecord array (round-trip) ===")
let rebuilt = @bio.seqxml_from_seq_records(seq_records)
println("Rebuilt document n_entries: \{rebuilt.n_entries()}")
for e in rebuilt.entries() {
let type_desc = @bio.SeqXmlType::description(e.seq_type())
println(" \{e.id()} [\{type_desc}]: \{e.sequence()}")
}
println("")
println("=== Demo complete ===")
}