BACKGROUND
information that can be interpreted in a phylogenetic context is growing rapidly in both types and quantities, due to the advancement of large-scale studies such as metagenomics and phylogenomics  <cit> .
current formats for describing evolutionary trees are becoming increasingly inappropriate.
the main limitation of present formats is the lack of standardized means to annotate tree nodes and branches with distinct attributes.
in the case of species trees, these attributes are taxonomic names, branch lengths, and often  support values .
gene trees used in comparative genomics and phylogenomics applications additionally require fields for gene identifiers and potentially gene duplication events  <cit> , whereas trees used in phylogeographic  <cit>  applications require fields for geographic data.
while some existing formats such as nexus  <cit>  or nhx   <cit>  allow describing additional information associated with phylogenetic trees, these formats have been shown to be problematic in the extensibility or the interoperability as a standard.
the complexity of the nexus format has led to different parsers that only understand a subset of the format, and different programs that produce poorly formed outputs .
the nhx format, built as an adhoc extension to the newick  standard  <cit>  has limits in the types of information it can incorporate, since it has been developed with one primary use case in mind - representing gene trees with inferred gene duplication events  <cit> .
previous proposals for a xml format for systematic data  <cit>  never gained popularity, possibly due to a lack of supporting software.
here we describe phyloxml, a new standardized format for phylogenetic documents that is based on the formal language of xml  <cit>  and which is inspired by the xml tree representation described in  <cit>  .
implementation
along with the complete schema in xsd that defines the format of phyloxml, a number of tools have been implemented to support the reading and writing of phyloxml.
the java command-line tools "phyloxml_converter" can convert existing formats  into phyloxml, and "decorator" helps the users insert various data types into a phyloxml tree.
there are multiple tree-viewing programs that support the format, including archaeopteryx  <cit>   and treeviewj  <cit> .
furthermore, archaeopteryx allows the user to easily convert phyloxml to nexus, newick/new hampshire, and nhx and vice versa.
so far, phyloxml support has been developed for three open source libraries for computational molecular biology and bioinformatics, namely bioperl  <cit>  , bioruby   <cit> , and biopython   <cit> .
the xsd schema and links to supporting applications, together with more complex examples of phyloxml can be found at .
RESULTS
phyloxml is general, with over  <dig> different elements that encompass an extensive range of information  that could be added to phylogenies.
phyloxml is extensible, containing legitimate grammar for user-defined contents, while it is also easy to expand the vocabulary of the schema without disrupting existing usage.
because the format is defined by a xml schema, phyloxml is also easy to validate and process.
the structure of the document is readily parsed by any existing xml parser, while interpreting the content needs to be implemented depending on the use case.
because of the restrictive nature of the xml schema, unambiguous "well-formed" and "valid" documents will facilitate greater data exchange among users and programs that was not feasible before.
similar to nhx, and unlike nexus, the structure of phyloxml is phylogeny oriented rather than character oriented.
the basic structure of a phyloxml document is a hierarchical cluster of recursive clades.
each clade corresponds to a node, and the set of clades that congregate at the root compose a phylogeny.
each clade element can also enclose nested elements that are annotations to the containing clade.
this kind of hierarchical representation of the phylogeny and its corresponding annotations in each level is not only intuitive, but also naturally suitable for a description by xml.
the following is an example of a phyloxml document describing a simple gene tree with three external nodes .
<phylogeny rooted="true">
<name>alcohol dehydrogenases</name>
<description>contains examples of commonly used elements</description>
<clade>
<events>
<speciations>1</speciations>
</events>
<clade>
<taxonomy>
<id provider = "ncbi">6645</id>
<scientific_name>octopus vulgaris</scientific_name>
</taxonomy>
<sequence>
<accession source="uniprotkb">p81431</accession>
<name>alcohol dehydrogenase class-3</name>
</sequence>
</clade>
<clade>
<confidence type="bootstrap">100</confidence>
<events>
<speciations>1</speciations>
</events>
<clade>
<taxonomy>
<id provider = "ncbi">1423</id>
<scientific_name>bacillus subtilis</scientific_name>
</taxonomy>
<sequence>
<accession source="uniprotkb">p71017</accession>
<name>alcohol dehydrogenase</name>
</sequence>
</clade>
<clade>
<taxonomy>
<id provider = "ncbi">562</id>
<scientific_name>escherichia coli</scientific_name>
</taxonomy>
<sequence>
<accession source="uniprotkb">q46856</accession>
<name>alcohol dehydrogenase</name>
</sequence>
</clade>
</clade>
</clade>
</phylogeny>
application specific data types that are not covered by the schema are supported by phyloxml, explicitly as reserved <property> elements, as well as extensions that can be defined by the user.
<property> provides an interface for custom typed and referenced data.
the <property> elements can be applied to the <phylogeny> itself, the <clade>, or the parent branch inherent in each clade.
the recursive structure has no bound for depth or breadth, and the same element can be attached to a node multiple times with different values as long as it complies with the schema.
for example, phylogenies that are built as a consensus of multiple approaches can have multiple <confidence> elements attached to the same clade to describe the support values resulting from the different methods.
molecular sequence can be easily associated with a certain <clade> by the <sequence> element, and not only the raw sequence data but also complex annotations can be added to the sequence using <annotation>, <sequence_relation>  and <domain architecture>.
table  <dig> describes some of the elements that are supported to annotate evolutionary trees.
representative elements and attributes of phyloxml  are shown.
xml element/attribute names are in bold letters.
while the most straightforward structure of the document is the hierarchy of nested clades that automatically describes the topology of the phylogeny, it is also possible to describe the topology in a flat manner using the attributes id_ref and id_source.
id_source is an optional attribute that assigns a unique id to a <clade>, <taxonomy> or a <sequence>.
elements with an attribute of id_ref will be associated with the specific element that has the same value of id_source identifier.
using id_ref and id_source provides much flexibility in the structure of the document, and allows the representation of network topologies that cannot be represented with a hierarchical structure.
in the following, we compare and contrast key features of the phyloxml standard with those of the nexml format currently being developed  <cit> .
one significant difference between phyloxml and nexml is that phyloxml provides predefined elements for data elements commonly used in phylogenetics, phylogenomics, and comparative genomics .
in contrast, nexml  approaches this by providing meta elements which are intended to be compliant with rdfa recommendations so that they can be expanded to rdf triples by an xsl stylesheet  <cit> .
this mechanism essentially allows expandable key/value attachments for various elements of an evolutionary tree, which are mediated by ontologies and which can be expanded to rdf.
the obvious advantage of such an approach lies in its flexibility and in the fact that it allows representing unforeseen types of data and lends itself well to knowledge integration.
on the other hand, different producers of nexml formatted data might represent common data elements differently, in particular if they rely on different ontologies or if no commonly used ontology has yet been established for the problem domain, thus hampering the stated goal of interoperability for documents containing phylogenetic trees annotated with more than just basic otus /clade names .
due to the fact that phyloxml provides predefined elements, interoperability for documents containing commonly used types of data is guaranteed.
another advantage of explicitly modelling common elements in the xsd schema versus relying on key/value attachments mediated by ontologies is that this approach does not introduce dependencies on additional resources.
to achieve the flexibility to represent data not modelled in the current xsd schema, phyloxml employs a two pronged strategy.
firstly, <property> elements can be used to store data not covered by the current schema.
in fact, the "ref" attribute of <property> elements allows for mediation by ontologies, very similar to the approach used in nexml.
secondly, xml is inherently extensible thus allowing the incorporation of data from other xml languages as well as extension of the phyloxml standard itself .
another difference between phyloxml and nexml is in the structure of data representation.
in nexml, the data associated with the nodes are separated out of the tree into a tabulated structure; while in phyloxml all the data associated with the nodes are within the tree structure itself.
for this reason, the nexml lends itself well to statistical approaches where the user treats the data as a list of samples.
phyloxml is convenient to use in algorithmic procedures where the data associated with the nodes are updated through multiple iterations of tree traversing, e.g.
expectation-maximization across the tree.
this difference is more of interest to the software developer who needs to think of how the data should be structured.
of course, both formats can ultimately be parsed and stored into any type of data structure, but one may be more suited for and easier to handle in certain approaches than the other.
a third key difference between the two formats is that nexml, like nexus, attempts to model all elements associated with phylogenetic inference, such as characters , substitution models, and evolutionary trees.
phyloxml, in contrast, focuses on evolutionary trees with associated data only, thus simplifying the creation of compliant parsers and corresponding data structures.
since phyloxml was not devised as input format for phylogeny inference software, we decided not to provide the means to store multiple sequence alignments as separate elements.
in its current version , phyloxml only allows storing aligned molecular sequences via the <molecular_sequence> sub-element of <sequence> .
due to the extensible nature of xml, it is straightforward to add additional elements and sub-elements in future versions of phyloxml depending on user needs, without running into compatibility issues with existing software implementations.
the complete schema in xsd defining the phyloxml format, as well as software to visualize phyloxml formatted data is available at  under the open source lgpl license.
CONCLUSIONS
we developed phyloxml, an xml language designed to describe phylogenetic trees and associated data.
phyloxml provides elements for commonly used features, such as taxonomic information, gene names and identifiers, branch lengths, support values, and gene duplication and speciation events.
using these standardized elements allows interoperability between various applications and databases.
furthermore, both due to extensible nature of xml itself and the provision of <property> elements by phyloxml, extensibility as well as domain specific applications are ensured.
we also developed a number of software applications to read, write, convert to and from, and visualize phyloxml formatted data.
furthermore, phyloxml is supported by the bioperl  <cit> , bioruby  <cit> , and biopython  <cit>  open source libraries.
in practice, phyloxml has already proven valuable in research on regulatory network evolution  <cit> .
in these studies evolutionary tree nodes were associated with such distinct data fields as taxonomic information, protein names, protein functions, domain-architectures, and gene duplications.
phyloxml provided a convenient and transparent means to store, visualize, and analyze these data in a phylogenetic context, leading to new biological insights.
availability and requirements
• project name: phyloxml
• project home page:
• operating system: platform independent
• programming language: xml, java, perl , python , ruby
• license: gnu lgpl
• any restrictions to use by non-academics: none
list of abbreviations
nhx: new hampshire extended; otu: operational taxonomic unit; rdf: resource description framework; rdfa: resource description framework in attributes; xml: extensible markup language; xsd: xml schema definition; xsl: extensible stylesheet language.
authors' contributions
mvh developed the phyloxml support in bioperl and drafted the manuscript; cmz developed the phyloxml format and its implementation in java and helped to draft the manuscript.
both authors read and approved the final manuscript.
supplementary material
additional file 1
phyloxml examples.
a file containing some simple evolutionary trees demonstrating select phyloxml features .
click here for file
acknowledgements
the authors would like to thank ethalinda cannon, chris fields, adam godzik, hilmar lapp, chris mungall, and rutger vos for their suggestions and discussions; and diana jaunzeikare and eric talevich for implementing phyloxml support in bioruby and biopython, respectively .
funding: cmz was partly supported by p <dig> gm <dig>  from the national institute of general medical sciences .
mvh was supported by google summer of code  <dig> in collaboration with the national evolutionary synthesis center , nsf #ef- <dig>

 information that can be interpreted in a phylogenetic context is growing rapidly in both types and quantities, due to the advancement of large-scale studies such as metagenomics and phylogenomics. current formats for describing evolutionary trees are becoming increasingly inappropriate. the main limitation of present formats is the lack of standardized means to annotate tree nodes and branches with distinct attributes. in the case of species trees, these attributes are taxonomic names, branch lengths, and often support values. gene trees used in comparative genomics and phylogenomics applications additionally require fields for gene identifiers and potentially gene duplication events, whereas trees used in phylogeographic applications require fields for geographic data. while some existing formats such as nexus or nhx allow describing additional information associated with phylogenetic trees, these formats have been shown to be problematic in the extensibility or the interoperability as a standard. the complexity of the nexus format has led to different parsers that only understand a subset of the format, and different programs that produce poorly formed outputs. the nhx format, built as an adhoc extension to the newick standard has limits in the types of information it can incorporate, since it has been developed with one primary use case in mind - representing gene trees with inferred gene duplication events. previous proposals for a xml format for systematic data never gained popularity, possibly due to a lack of supporting software. here we describe phyloxml, a new standardized format for phylogenetic documents that is based on the formal language of xml and which is inspired by the xml tree representation described in. implementation along with the complete schema in xsd that defines the format of phyloxml, a number of tools have been implemented to support the reading and writing of phyloxml. the java command-line tools "phyloxml_converter" can convert existing formats into phyloxml, and "decorator" helps the users insert various data types into a phyloxml tree. there are multiple tree-viewing programs that support the format, including archaeopteryx and treeviewj. furthermore, archaeopteryx allows the user to easily convert phyloxml to nexus, newick/new hampshire, and nhx and vice versa. so far, phyloxml support has been developed for three open source libraries for computational molecular biology and bioinformatics, namely bioperl, bioruby, and biopython. the xsd schema and links to supporting applications, together with more complex examples of phyloxml can be found at.  phyloxml is general, with over different elements that encompass an extensive range of information that could be added to phylogenies. phyloxml is extensible, containing legitimate grammar for user-defined contents, while it is also easy to expand the vocabulary of the schema without disrupting existing usage. because the format is defined by a xml schema, phyloxml is also easy to validate and process. the structure of the document is readily parsed by any existing xml parser, while interpreting the content needs to be implemented depending on the use case. because of the restrictive nature of the xml schema, unambiguous "well-formed" and "valid" documents will facilitate greater data exchange among users and programs that was not feasible before. similar to nhx, and unlike nexus, the structure of phyloxml is phylogeny oriented rather than character oriented. the basic structure of a phyloxml document is a hierarchical cluster of recursive clades. each clade corresponds to a node, and the set of clades that congregate at the root compose a phylogeny. each clade element can also enclose nested elements that are annotations to the containing clade. this kind of hierarchical representation of the phylogeny and its corresponding annotations in each level is not only intuitive, but also naturally suitable for a description by xml. the following is an example of a phyloxml document describing a simple gene tree with three external nodes. <phylogeny rooted="true">    <name>alcohol dehydrogenases</name>    <description>contains examples of commonly used elements</description>    <clade>       <events>          <speciations>1</speciations>       </events>       <clade>          <taxonomy>             <id provider = "ncbi">6645</id>             <scientific_name>octopus vulgaris</scientific_name>          </taxonomy>          <sequence>             <accession source="uniprotkb">p81431</accession>             <name>alcohol dehydrogenase class-3</name>          </sequence>       </clade>       <clade>          <confidence type="bootstrap">100</confidence>          <events>             <speciations>1</speciations>          </events>          <clade>             <taxonomy>                <id provider = "ncbi">1423</id>                <scientific_name>bacillus subtilis</scientific_name>             </taxonomy>             <sequence>                <accession source="uniprotkb">p71017</accession>                <name>alcohol dehydrogenase</name>             </sequence>          </clade>          <clade>             <taxonomy>                <id provider = "ncbi">562</id>                <scientific_name>escherichia coli</scientific_name>             </taxonomy>             <sequence>                <accession source="uniprotkb">q46856</accession>                <name>alcohol dehydrogenase</name>             </sequence>          </clade>       </clade>    </clade> </phylogeny> application specific data types that are not covered by the schema are supported by phyloxml, explicitly as reserved <property> elements, as well as extensions that can be defined by the user. <property> provides an interface for custom typed and referenced data. the <property> elements can be applied to the <phylogeny> itself, the <clade>, or the parent branch inherent in each clade. the recursive structure has no bound for depth or breadth, and the same element can be attached to a node multiple times with different values as long as it complies with the schema. for example, phylogenies that are built as a consensus of multiple approaches can have multiple <confidence> elements attached to the same clade to describe the support values resulting from the different methods. molecular sequence can be easily associated with a certain <clade> by the <sequence> element, and not only the raw sequence data but also complex annotations can be added to the sequence using <annotation>, <sequence_relation> and <domain architecture>. table describes some of the elements that are supported to annotate evolutionary trees. representative elements and attributes of phyloxml are shown. xml element/attribute names are in bold letters. while the most straightforward structure of the document is the hierarchy of nested clades that automatically describes the topology of the phylogeny, it is also possible to describe the topology in a flat manner using the attributes id_ref and id_source. id_source is an optional attribute that assigns a unique id to a <clade>, <taxonomy> or a <sequence>. elements with an attribute of id_ref will be associated with the specific element that has the same value of id_source identifier. using id_ref and id_source provides much flexibility in the structure of the document, and allows the representation of network topologies that cannot be represented with a hierarchical structure. in the following, we compare and contrast key features of the phyloxml standard with those of the nexml format currently being developed. one significant difference between phyloxml and nexml is that phyloxml provides predefined elements for data elements commonly used in phylogenetics, phylogenomics, and comparative genomics. in contrast, nexml approaches this by providing meta elements which are intended to be compliant with rdfa recommendations so that they can be expanded to rdf triples by an xsl stylesheet. this mechanism essentially allows expandable key/value attachments for various elements of an evolutionary tree, which are mediated by ontologies and which can be expanded to rdf. the obvious advantage of such an approach lies in its flexibility and in the fact that it allows representing unforeseen types of data and lends itself well to knowledge integration. on the other hand, different producers of nexml formatted data might represent common data elements differently, in particular if they rely on different ontologies or if no commonly used ontology has yet been established for the problem domain, thus hampering the stated goal of interoperability for documents containing phylogenetic trees annotated with more than just basic otus /clade names. due to the fact that phyloxml provides predefined elements, interoperability for documents containing commonly used types of data is guaranteed. another advantage of explicitly modelling common elements in the xsd schema versus relying on key/value attachments mediated by ontologies is that this approach does not introduce dependencies on additional resources. to achieve the flexibility to represent data not modelled in the current xsd schema, phyloxml employs a two pronged strategy. firstly, <property> elements can be used to store data not covered by the current schema. in fact, the "ref" attribute of <property> elements allows for mediation by ontologies, very similar to the approach used in nexml. secondly, xml is inherently extensible thus allowing the incorporation of data from other xml languages as well as extension of the phyloxml standard itself. another difference between phyloxml and nexml is in the structure of data representation. in nexml, the data associated with the nodes are separated out of the tree into a tabulated structure; while in phyloxml all the data associated with the nodes are within the tree structure itself. for this reason, the nexml lends itself well to statistical approaches where the user treats the data as a list of samples. phyloxml is convenient to use in algorithmic procedures where the data associated with the nodes are updated through multiple iterations of tree traversing, e.g. expectation-maximization across the tree. this difference is more of interest to the software developer who needs to think of how the data should be structured. of course, both formats can ultimately be parsed and stored into any type of data structure, but one may be more suited for and easier to handle in certain approaches than the other. a third key difference between the two formats is that nexml, like nexus, attempts to model all elements associated with phylogenetic inference, such as characters, substitution models, and evolutionary trees. phyloxml, in contrast, focuses on evolutionary trees with associated data only, thus simplifying the creation of compliant parsers and corresponding data structures. since phyloxml was not devised as input format for phylogeny inference software, we decided not to provide the means to store multiple sequence alignments as separate elements. in its current version, phyloxml only allows storing aligned molecular sequences via the <molecular_sequence> sub-element of <sequence>. due to the extensible nature of xml, it is straightforward to add additional elements and sub-elements in future versions of phyloxml depending on user needs, without running into compatibility issues with existing software implementations. the complete schema in xsd defining the phyloxml format, as well as software to visualize phyloxml formatted data is available at under the open source lgpl license.  we developed phyloxml, an xml language designed to describe phylogenetic trees and associated data. phyloxml provides elements for commonly used features, such as taxonomic information, gene names and identifiers, branch lengths, support values, and gene duplication and speciation events. using these standardized elements allows interoperability between various applications and databases. furthermore, both due to extensible nature of xml itself and the provision of <property> elements by phyloxml, extensibility as well as domain specific applications are ensured. we also developed a number of software applications to read, write, convert to and from, and visualize phyloxml formatted data. furthermore, phyloxml is supported by the bioperl, bioruby, and biopython open source libraries. in practice, phyloxml has already proven valuable in research on regulatory network evolution. in these studies evolutionary tree nodes were associated with such distinct data fields as taxonomic information, protein names, protein functions, domain-architectures, and gene duplications. phyloxml provided a convenient and transparent means to store, visualize, and analyze these data in a phylogenetic context, leading to new biological insights. availability and requirements • project name: phyloxml • project home page: • operating system: platform independent • programming language: xml, java, perl, python, ruby • license: gnu lgpl • any restrictions to use by non-academics: none list of abbreviations nhx: new hampshire extended; otu: operational taxonomic unit; rdf: resource description framework; rdfa: resource description framework in attributes; xml: extensible markup language; xsd: xml schema definition; xsl: extensible stylesheet language. authors' contributions mvh developed the phyloxml support in bioperl and drafted the manuscript; cmz developed the phyloxml format and its implementation in java and helped to draft the manuscript. both authors read and approved the final manuscript. supplementary material additional file 1 phyloxml examples. a file containing some simple evolutionary trees demonstrating select phyloxml features. click here for file acknowledgements the authors would like to thank ethalinda cannon, chris fields, adam godzik, hilmar lapp, chris mungall, and rutger vos for their suggestions and discussions; and diana jaunzeikare and eric talevich for implementing phyloxml support in bioruby and biopython, respectively. funding: cmz was partly supported by p gm from the national institute of general medical sciences. mvh was supported by google summer of code in collaboration with the national evolutionary synthesis center, nsf #ef- 
more information about phyloxml itself, the xsd schema, as well as tools implementing and supporting phyloxml, is available at. we developed a xml language, named phyloxml, for describing evolutionary trees, as well as various associated data items. phyloxml is an xml language defined by a complete schema in xsd that allows storing and exchanging the structures of evolutionary trees as well as associated data. gene trees used in comparative genomics or phylogenomics are usually annotated with taxonomic information, genome-related data, such as gene names and functional annotations, as well as events such as gene duplications, speciations, or exon shufflings, combined with information related to the evolutionary tree itself. for example, in studies concerned with organismal relationships, tree nodes are associated with taxonomic names, whereas tree branches have lengths and oftentimes support values. phyloxml provides elements for commonly used items, such as branch lengths, support values, taxonomic names, and gene names and identifiers. evolutionary trees are central to a wide range of biological studies. the data standards currently used for evolutionary trees have limited capacities to incorporate such annotations of different data types.
 evolutionary trees are central to a wide range of biological studies. in many of these studies, tree nodes and branches need to be associated with various attributes. for example, in studies concerned with organismal relationships, tree nodes are associated with taxonomic names, whereas tree branches have lengths and oftentimes support values. gene trees used in comparative genomics or phylogenomics are usually annotated with taxonomic information, genome-related data, such as gene names and functional annotations, as well as events such as gene duplications, speciations, or exon shufflings, combined with information related to the evolutionary tree itself. the data standards currently used for evolutionary trees have limited capacities to incorporate such annotations of different data types.  we developed a xml language, named phyloxml, for describing evolutionary trees, as well as various associated data items. phyloxml provides elements for commonly used items, such as branch lengths, support values, taxonomic names, and gene names and identifiers. by using "property" elements, phyloxml can be adapted to novel and unforeseen use cases. we also developed various software tools for reading, writing, conversion, and visualization of phyloxml formatted data.  phyloxml is an xml language defined by a complete schema in xsd that allows storing and exchanging the structures of evolutionary trees as well as associated data. more information about phyloxml itself, the xsd schema, as well as tools implementing and supporting phyloxml, is available at. 