<?xml version="1.0" ?>
<xsd:schema
    xmlns="http://www.garmin.com/xmlschemas/HistoryDatabase/v1"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.garmin.com/xmlschemas/HistoryDatabase/v1"
	xmlns:hd1="http://www.garmin.com/xmlschemas/HistoryDatabase/v1"
    elementFormDefault="qualified">

    <xsd:annotation><xsd:documentation>
    This schema defines the Garmin history file format.
    </xsd:documentation></xsd:annotation>

    <xsd:element name="HistoryDatabase" type="HistoryDatabase_t"/>

    <xsd:complexType name="HistoryDatabase_t">
      <xsd:sequence>
        <xsd:element name="Running" type="Folder_t"/>
        <xsd:element name="Biking" type="Folder_t"/>
        <xsd:element name="Other" type="Folder_t"/>
        <xsd:element name="MultiSport" type="MultiSportFolder_t"/>
      </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="Folder_t">
      <xsd:sequence>
        <xsd:element name="Folder" type="Folder_t" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element name="Run" type="Run_t" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element name="Week" type="Week_t" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element name="Notes" type="xsd:string" minOccurs="0"/>
      </xsd:sequence>
      <xsd:attribute name="Name" type="xsd:string" use="required"/>
    </xsd:complexType>

    <xsd:complexType name="MultiSportFolder_t">
      <xsd:sequence>
        <xsd:element name="Folder" type="MultiSportFolder_t" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element name="MultiSportSession" type="MultiSportSession_t" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element name="Week" type="Week_t" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element name="Notes" type="xsd:string" minOccurs="0"/>
      </xsd:sequence>
      <xsd:attribute name="Name" type="xsd:string" use="required"/>
    </xsd:complexType>

    <xsd:complexType name="Week_t">
      <xsd:sequence>
        <xsd:annotation><xsd:documentation>
        The week is written out only if the notes are present.
        </xsd:documentation></xsd:annotation>
        <xsd:element name="Notes" type="xsd:string" minOccurs="0"/>
      </xsd:sequence>
      <xsd:attribute name="StartDay" type="xsd:date" use="required"/>
    </xsd:complexType>

    <xsd:complexType name="MultiSportSession_t">
      <xsd:sequence>
        <xsd:element name="FirstSport" type="FirstSport_t"/>
        <xsd:element name="NextSport" type="NextSport_t" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element name="Notes" type="xsd:string" minOccurs="0"/>
      </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="FirstSport_t">
      <xsd:sequence>
        <xsd:element name="Run" type="Run_t"/>
      </xsd:sequence>
      <xsd:attribute name="Sport" type="Sport_t" use="required"/>
    </xsd:complexType>

    <xsd:complexType name="NextSport_t">
      <xsd:sequence>
        <xsd:annotation><xsd:documentation>
        Each sport contains an optional transition and a run.
        </xsd:documentation></xsd:annotation>
        <xsd:element name="Transition" type="Lap_t" minOccurs="0"/>
        <xsd:element name="Run" type="Run_t"	/>
      </xsd:sequence>
      <xsd:attribute name="Sport" type="Sport_t" use="required"/>
    </xsd:complexType>

    <xsd:simpleType name="Sport_t">
      <xsd:restriction base="xsd:token">
        <xsd:enumeration value="Running"/>
        <xsd:enumeration value="Biking"/>
        <xsd:enumeration value="Other"/>
      </xsd:restriction>
    </xsd:simpleType>

    <xsd:complexType name="Run_t">
      <xsd:sequence>
        <xsd:element name="Lap" type="Lap_t" maxOccurs="unbounded"/>
        <xsd:element name="Notes" type="xsd:string" minOccurs="0"/>
      </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="Lap_t">
      <xsd:sequence>
        <xsd:element name="TotalTimeSeconds" type="xsd:double"/>
        <xsd:element name="DistanceMeters" type="xsd:double"/>
        <xsd:element name="Calories" type="xsd:unsignedShort" />
        <xsd:element name="AverageHeartRateBpm" type="xsd:unsignedByte" minOccurs="0"/>
        <xsd:element name="Track" type="Track_t" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element name="Notes" type="xsd:string" minOccurs="0"/>
      </xsd:sequence>
      <xsd:attribute name="StartTime" type="xsd:dateTime" use="required"/>
    </xsd:complexType>

    <xsd:complexType name="Track_t">
      <xsd:sequence>
        <xsd:element name="Trackpoint" type="Trackpoint_t" minOccurs="1" maxOccurs="unbounded" />
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="Trackpoint_t">
      <xsd:sequence>
        <xsd:element name="Time" type="xsd:dateTime"/>
        <xsd:element name="Position" type="Position_t" minOccurs="0"/>
        <xsd:element name="HeartRateBpm" type="xsd:unsignedByte" minOccurs="0"/>
      </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="Position_t">
      <xsd:sequence>
        <xsd:element name="LatitudeDegrees" type="DegreesLatitude_t" />
        <xsd:element name="LongitudeDegrees" type="DegreesLongitude_t" />
        <xsd:element name="AltitudeMeters" type="xsd:double" minOccurs="0" maxOccurs="1" />
      </xsd:sequence>
    </xsd:complexType>

    <xsd:simpleType name="DegreesLongitude_t">
      <xsd:annotation><xsd:documentation>
      </xsd:documentation></xsd:annotation>
      <xsd:restriction base="xsd:double">
        <xsd:maxExclusive value="180.0"/>
        <xsd:minInclusive value="-180.0"/>
      </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="DegreesLatitude_t">
      <xsd:annotation><xsd:documentation>
      </xsd:documentation></xsd:annotation>
      <xsd:restriction base="xsd:double">
        <xsd:maxInclusive value="90.0"/>
        <xsd:minInclusive value="-90.0"/>
      </xsd:restriction>
    </xsd:simpleType>

</xsd:schema>

