<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:temporal:v3.2.0">temporal.xsd</appinfo>
        <documentation>see GML 14.2</documentation>
    </annotation>
    <include schemaLocation="gmlBase.xsd"/>
    <element name="AbstractTimeObject" type="gml:AbstractTimeObjectType" abstract="true" substitutionGroup="gml:AbstractGML" nillable="false"/>
    <complexType name="AbstractTimeObjectType" abstract="true" mixed="false">
        <complexContent>
            <extension base="gml:AbstractGMLType"/>
        </complexContent>
    </complexType>
    <element name="AbstractTimePrimitive" type="gml:AbstractTimePrimitiveType" abstract="true" substitutionGroup="gml:AbstractTimeObject" nillable="false"/>
    <complexType name="AbstractTimePrimitiveType" abstract="true" mixed="false">
        <complexContent>
            <extension base="gml:AbstractTimeObjectType">
                <sequence minOccurs="1" maxOccurs="1">
                    <element name="relatedTime" type="gml:RelatedTimeType" minOccurs="0" maxOccurs="unbounded" nillable="false"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>
    <complexType name="TimePrimitivePropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:AbstractTimePrimitive" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
        <attributeGroup ref="gml:OwnershipAttributeGroup"/>
    </complexType>
    <element name="validTime" type="gml:TimePrimitivePropertyType" nillable="false" abstract="false"/>
    <complexType name="RelatedTimeType" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:TimePrimitivePropertyType">
                <attribute name="relativePosition" use="optional">
                    <simpleType>
                        <restriction base="string">
                            <enumeration value="Before"/>
                            <enumeration value="After"/>
                            <enumeration value="Begins"/>
                            <enumeration value="Ends"/>
                            <enumeration value="During"/>
                            <enumeration value="Equals"/>
                            <enumeration value="Contains"/>
                            <enumeration value="Overlaps"/>
                            <enumeration value="Meets"/>
                            <enumeration value="OverlappedBy"/>
                            <enumeration value="MetBy"/>
                            <enumeration value="BegunBy"/>
                            <enumeration value="EndedBy"/>
                        </restriction>
                    </simpleType>
                </attribute>
            </extension>
        </complexContent>
    </complexType>
    <element name="AbstractTimeComplex" type="gml:AbstractTimeComplexType" abstract="true" substitutionGroup="gml:AbstractTimeObject" nillable="false"/>
    <complexType name="AbstractTimeComplexType" abstract="true" mixed="false">
        <complexContent>
            <extension base="gml:AbstractTimeObjectType"/>
        </complexContent>
    </complexType>
    <element name="AbstractTimeGeometricPrimitive" type="gml:AbstractTimeGeometricPrimitiveType" abstract="true" substitutionGroup="gml:AbstractTimePrimitive" nillable="false"/>
    <complexType name="AbstractTimeGeometricPrimitiveType" abstract="true" mixed="false">
        <complexContent>
            <extension base="gml:AbstractTimePrimitiveType">
                <attribute name="frame" type="anyURI" default="#ISO-8601" use="optional"/>
            </extension>
        </complexContent>
    </complexType>
    <element name="TimeInstant" type="gml:TimeInstantType" substitutionGroup="gml:AbstractTimeGeometricPrimitive" nillable="false" abstract="false"/>
    <complexType name="TimeInstantType" final="#all" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:AbstractTimeGeometricPrimitiveType">
                <sequence minOccurs="1" maxOccurs="1">
                    <element ref="gml:timePosition" minOccurs="1" maxOccurs="1" nillable="false"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>
    <complexType name="TimeInstantPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:TimeInstant" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
        <attributeGroup ref="gml:OwnershipAttributeGroup"/>
    </complexType>
    <element name="TimePeriod" type="gml:TimePeriodType" substitutionGroup="gml:AbstractTimeGeometricPrimitive" nillable="false" abstract="false"/>
    <complexType name="TimePeriodType" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:AbstractTimeGeometricPrimitiveType">
                <sequence minOccurs="1" maxOccurs="1">
                    <choice minOccurs="1" maxOccurs="1">
                        <element name="beginPosition" type="gml:TimePositionType" minOccurs="1" maxOccurs="1" nillable="false"/>
                        <element name="begin" type="gml:TimeInstantPropertyType" minOccurs="1" maxOccurs="1" nillable="false"/>
                    </choice>
                    <choice minOccurs="1" maxOccurs="1">
                        <element name="endPosition" type="gml:TimePositionType" minOccurs="1" maxOccurs="1" nillable="false"/>
                        <element name="end" type="gml:TimeInstantPropertyType" minOccurs="1" maxOccurs="1" nillable="false"/>
                    </choice>
                    <group ref="gml:timeLength" minOccurs="0" maxOccurs="1"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>
    <complexType name="TimePeriodPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:TimePeriod" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
        <attributeGroup ref="gml:OwnershipAttributeGroup"/>
    </complexType>
    <complexType name="TimePositionType" final="#all" mixed="false" abstract="false">
        <simpleContent>
            <extension base="gml:TimePositionUnion">
                <attribute name="frame" type="anyURI" default="#ISO-8601" use="optional"/>
                <attribute name="calendarEraName" type="string" use="optional"/>
                <attribute name="indeterminatePosition" type="gml:TimeIndeterminateValueType" use="optional"/>
            </extension>
        </simpleContent>
    </complexType>
    <simpleType name="TimeIndeterminateValueType">
        <restriction base="string">
            <enumeration value="after"/>
            <enumeration value="before"/>
            <enumeration value="now"/>
            <enumeration value="unknown"/>
        </restriction>
    </simpleType>
    <simpleType name="TimePositionUnion">
        <union memberTypes="gml:CalDate time dateTime anyURI decimal"/>
    </simpleType>
    <simpleType name="CalDate">
        <union memberTypes="date gYearMonth gYear"/>
    </simpleType>
    <element name="timePosition" type="gml:TimePositionType" nillable="false" abstract="false"/>
    <group name="timeLength">
        <choice>
            <element ref="gml:duration" minOccurs="1" maxOccurs="1" nillable="false"/>
            <element ref="gml:timeInterval" minOccurs="1" maxOccurs="1" nillable="false"/>
        </choice>
    </group>
    <element name="duration" type="duration" nillable="false" abstract="false"/>
    <element name="timeInterval" type="gml:TimeIntervalLengthType" nillable="false" abstract="false"/>
    <complexType name="TimeIntervalLengthType" final="#all" mixed="false" abstract="false">
        <simpleContent>
            <extension base="decimal">
                <attribute name="unit" type="gml:TimeUnitType" use="required"/>
                <attribute name="radix" type="positiveInteger" use="optional"/>
                <attribute name="factor" type="integer" use="optional"/>
            </extension>
        </simpleContent>
    </complexType>
    <simpleType name="TimeUnitType">
        <union>
            <simpleType>
                <restriction base="string">
                    <enumeration value="year"/>
                    <enumeration value="month"/>
                    <enumeration value="day"/>
                    <enumeration value="hour"/>
                    <enumeration value="minute"/>
                    <enumeration value="second"/>
                </restriction>
            </simpleType>
            <simpleType>
                <restriction base="string">
                    <pattern value="other:\w{2,}"/>
                </restriction>
            </simpleType>
        </union>
    </simpleType>
</schema>