<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:gml="http://www.opengis.net/gml" targetNamespace="http://www.opengis.net/gml" elementFormDefault="qualified" version="3.2.0" finalDefault="" blockDefault="" attributeFormDefault="unqualified">
    <annotation>
        <appinfo source="urn:opengis:specification:gml:schema-xsd:temporalTopology:v3.2.0">temporalTopology.xsd</appinfo>
        <documentation>see GML 14.3</documentation>
    </annotation>
    <include schemaLocation="temporal.xsd"/>
    <element name="AbstractTimeTopologyPrimitive" type="gml:AbstractTimeTopologyPrimitiveType" abstract="true" substitutionGroup="gml:AbstractTimePrimitive" nillable="false"/>
    <complexType name="AbstractTimeTopologyPrimitiveType" abstract="true" mixed="false">
        <complexContent>
            <extension base="gml:AbstractTimePrimitiveType">
                <sequence minOccurs="1" maxOccurs="1">
                    <element name="complex" type="gml:ReferenceType" minOccurs="0" maxOccurs="1" nillable="false"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>
    <complexType name="TimeTopologyPrimitivePropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:AbstractTimeTopologyPrimitive" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
        <attributeGroup ref="gml:OwnershipAttributeGroup"/>
    </complexType>
    <element name="TimeTopologyComplex" type="gml:TimeTopologyComplexType" substitutionGroup="gml:AbstractTimeComplex" nillable="false" abstract="false"/>
    <complexType name="TimeTopologyComplexType" abstract="true" mixed="false">
        <complexContent>
            <extension base="gml:AbstractTimeComplexType">
                <sequence minOccurs="1" maxOccurs="1">
                    <element name="primitive" type="gml:TimeTopologyPrimitivePropertyType" maxOccurs="unbounded" minOccurs="1" nillable="false"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>
    <complexType name="TimeTopologyComplexPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:TimeTopologyComplex" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
        <attributeGroup ref="gml:OwnershipAttributeGroup"/>
    </complexType>
    <element name="TimeNode" type="gml:TimeNodeType" substitutionGroup="gml:AbstractTimeTopologyPrimitive" nillable="false" abstract="false"/>
    <complexType name="TimeNodeType" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:AbstractTimeTopologyPrimitiveType">
                <sequence minOccurs="1" maxOccurs="1">
                    <element name="previousEdge" type="gml:TimeEdgePropertyType" minOccurs="0" maxOccurs="unbounded" nillable="false"/>
                    <element name="nextEdge" type="gml:TimeEdgePropertyType" minOccurs="0" maxOccurs="unbounded" nillable="false"/>
                    <element name="position" type="gml:TimeInstantPropertyType" minOccurs="0" maxOccurs="1" nillable="false"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>
    <complexType name="TimeNodePropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:TimeNode" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
        <attributeGroup ref="gml:OwnershipAttributeGroup"/>
    </complexType>
    <element name="TimeEdge" type="gml:TimeEdgeType" substitutionGroup="gml:AbstractTimeTopologyPrimitive" nillable="false" abstract="false"/>
    <complexType name="TimeEdgeType" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:AbstractTimeTopologyPrimitiveType">
                <sequence minOccurs="1" maxOccurs="1">
                    <element name="start" type="gml:TimeNodePropertyType" minOccurs="1" maxOccurs="1" nillable="false"/>
                    <element name="end" type="gml:TimeNodePropertyType" minOccurs="1" maxOccurs="1" nillable="false"/>
                    <element name="extent" type="gml:TimePeriodPropertyType" minOccurs="0" maxOccurs="1" nillable="false"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>
    <complexType name="TimeEdgePropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:TimeEdge" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
        <attributeGroup ref="gml:OwnershipAttributeGroup"/>
    </complexType>
    <simpleType name="SuccessionType">
        <restriction base="string">
            <enumeration value="substitution"/>
            <enumeration value="division"/>
            <enumeration value="fusion"/>
            <enumeration value="initiation"/>
        </restriction>
    </simpleType>
</schema>