<?xml version=“1.0” encoding=“UTF-8”?> <xs:schema xmlns:xs=“www.w3.org/2001/XMLSchema” xmlns:sawsdl=“www.w3.org/ns/sawsdl

targetNamespace="http://www.nexml.org/2009" xmlns="http://www.nexml.org/2009"
elementFormDefault="qualified">
<xs:annotation>
    <xs:documentation>
        This module defines abstract superclasses for tree components.
        Nexml defines trees as a sequence of nodes, zero or one root edge
        and a sequence of edges. There are different concrete instances
        of edges, namely those with lengths formatted as integers, and
        lengths formatted as floating point numbers.
        <br/><br/>
        In addition, there are different types of trees: those where nodes
        have an in-degree of 1 - true trees - and those with in-degree that
        can exceed 1 - networks.
    </xs:documentation>
</xs:annotation>

<xs:include schemaLocation="../abstract.xsd"/>

<xs:complexType name="AbstractNode" abstract="true"
    sawsdl:modelReference="http://evolutionaryontology-dev.nescent.org/cdao.owl#Node">
    <xs:annotation>
        <xs:documentation>
            The AbstractNode superclass is what concrete nodes inherit
            from by restriction. It represents a node element much like
            that of GraphML, i.e. an element that is connected into a 
            tree by edge elements.
        </xs:documentation>
    </xs:annotation>
    <xs:complexContent>
        <xs:extension base="OptionalTaxonLinked">
            <xs:attribute name="root" type="xs:boolean" default="false" use="optional"/>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

<xs:complexType name="AbstractEdge" abstract="true"
    sawsdl:modelReference="http://evolutionaryontology-dev.nescent.org/cdao.owl#Edge">
    <xs:annotation>
        <xs:documentation>
            The AbstractEdge superclass is what concrete edges inherit
            from by restriction. It represents an edge element much like
            that of GraphML, i.e. an element that connects node elements.
        </xs:documentation>
        <xs:appinfo>Edge</xs:appinfo>
    </xs:annotation>
    <xs:complexContent>
        <xs:extension base="IDTagged">
            <xs:attribute name="source" type="xs:IDREF" use="required"/>
            <xs:attribute name="target" type="xs:IDREF" use="required"/>
            <xs:attribute name="length" type="xs:anySimpleType" use="optional"/>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

<xs:complexType name="AbstractRootEdge" abstract="true">
    <xs:annotation>
        <xs:documentation>
            The AbstractRootEdge complex type is a superclass for the
            edge that leads into a root, i.e. an edge with only a target
            attribute, but no source attribute. This type of edge is
            used for coalescent trees, where the initial lineage has
            a certain length before things start splitting up.
        </xs:documentation>
    </xs:annotation>
    <xs:complexContent>
        <xs:extension base="IDTagged">
            <xs:attribute name="target" type="xs:IDREF" use="required"/>
            <xs:attribute name="length" type="xs:anySimpleType" use="optional"/>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

<xs:complexType name="AbstractTree" abstract="true"
    sawsdl:modelReference="http://evolutionaryontology-dev.nescent.org/cdao.owl#Tree">
    <xs:annotation>
        <xs:documentation>
            The AbstractTree superclass is what a concrete tree inherits
            from.
        </xs:documentation>
    </xs:annotation>
    <xs:complexContent mixed="true">
        <xs:extension base="IDTagged">
            <xs:sequence minOccurs="1" maxOccurs="1">
                <xs:element name="node" type="AbstractNode" minOccurs="1" maxOccurs="unbounded"/>
                <xs:element name="rootedge" type="AbstractRootEdge" minOccurs="0" maxOccurs="1"/>
                <xs:element name="edge" type="AbstractEdge" minOccurs="1" maxOccurs="unbounded"
                />
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

<xs:complexType name="AbstractNetwork" abstract="true"
    sawsdl:modelReference="http://evolutionaryontology-dev.nescent.org/cdao.owl#Network">
    <xs:annotation>
        <xs:documentation>
            The AbstractNetwork superclass is what a concrete network inherits
            from.
        </xs:documentation>
    </xs:annotation>
    <xs:complexContent mixed="true">
        <xs:extension base="IDTagged">
            <xs:sequence minOccurs="1" maxOccurs="1">
                <xs:element name="node" type="AbstractNode" minOccurs="1" maxOccurs="unbounded"/>
                <xs:element name="edge" type="AbstractEdge" minOccurs="1" maxOccurs="unbounded"
                />
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

<xs:complexType name="AbstractTrees" abstract="true">
    <xs:annotation>
        <xs:documentation>
            The AbstractTrees superclass is what concrete trees inherit
            from.
        </xs:documentation>
    </xs:annotation>
    <xs:complexContent mixed="true">
        <xs:extension base="IDTagged">
            <xs:sequence minOccurs="1" maxOccurs="1">
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                    <xs:element name="network" type="AbstractNetwork" minOccurs="1"
                        maxOccurs="unbounded"/>
                    <xs:element name="tree" type="AbstractTree" minOccurs="1"
                        maxOccurs="unbounded"/>
                </xs:choice>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

</xs:schema>