heres the XML parsing from the TaxonomyImporter class in core.
if ($xml) {
$taxon = $xml->Taxon;
// Get the genus and species from the xml.
$parent = (string) $taxon->ParentTaxId;
$rank = (string) $taxon->Rank;
$sci_name = (string) $taxon->ScientificName;
//$this->logMessage(' - Importing @sci_name', array('@sci_name' => $sci_name));
// If we don't have an organism record provided then see if there
// is one provided by Chado, if not, the try to add one.
if (!$organism) {
$organism = $this->findOrganism($taxid, $sci_name);
if (!$organism) {
$organism = $this->addOrganism($sci_name, $rank);
if (!$organism) {
throw new Exception(t('Cannot add organism: @sci_name', array('@sci_name' => $sci_name)));
}
}
}
// Associate the Dbxref with the organism.
$this->addDbxref($organism->organism_id, $taxid);
// Get properties for this organism.
$lineage = (string) $taxon->Lineage;
$genetic_code = (string) $taxon->GeneticCode->GCId;
$genetic_code_name = (string) $taxon->GeneticCode->GCName;
$mito_genetic_code = (string) $taxon->MitoGeneticCode->MGCId;
$mito_genetic_code_name = (string) $taxon->MitoGeneticCode->MGCName;
$division = (string) $taxon->Division;
// Add in the organism properties.
$this->addProperty($organism->organism_id, 'division', $division);
$this->addProperty($organism->organism_id, 'mitochondrial_genetic_code_name', $mito_genetic_code_name);
$this->addProperty($organism->organism_id, 'mitochondrial_genetic_code', $mito_genetic_code);
$this->addProperty($organism->organism_id, 'genetic_code_name', $genetic_code_name);
$this->addProperty($organism->organism_id, 'lineage', $lineage);
$this->addProperty($organism->organism_id, 'genetic_code', $genetic_code);
$name_ranks = array();
if ($taxon->OtherNames->children) {
foreach ($taxon->OtherNames->children() as $child) {
$type = $child->getName();
$name = (string) $child;
if (!array_key_exists($type, $name_ranks)) {
$name_ranks[$type] = 0;
}
switch ($type) {
case 'GenbankCommonName':
$this->addProperty($organism->organism_id, 'genbank_common_name', $name, $name_ranks[$type]);
break;
case 'Synonym':
case 'GenbankSynonym':
$this->addProperty($organism->organism_id, 'synonym', $name, $name_ranks[$type]);
break;
case 'CommonName':
// If we had to add the organism then include the commone name too.
if ($adds_organism) {
$organism->common_name = $name;
$values = array('organism_id' => $organism->id);
chado_update_record('organism', $values, $organism);
}
case 'Includes':
$this->addProperty($organism->organism_id, 'other_name', $name, $name_ranks[$type]);
break;
case 'EquivalentName':
$this->addProperty($organism->organism_id, 'equivalent_name', $name, $name_ranks[$type]);
break;
case 'Anamorph':
$this->addProperty($organism->organism_id, 'anamorph', $name, $name_ranks[$type]);
break;
case 'Name':
// skip the Name stanza
break;
default:
print "NOTICE: Skipping unrecognzed name type: $type\n";
// do nothing for unrecognized types
}
$name_ranks[$type]++;
}
}
heres the XML parsing from the
TaxonomyImporter
class in core.