<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="160" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[160]</anchor-end> This specification defines how to parse <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GPX</anchor> files.</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="205" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[205]</anchor-end> The original <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GPX</anchor> specification does not define
how to interpret <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GPX</anchor> files.</comment-p><section><h1>Data model</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> A <dfn>data set</dfn> has 
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">name</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">description</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">keywords</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">generator</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">timestamp</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">updated</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">author</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">license</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">minimum latitude</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">minimum longitude</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">maximum latitude</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">maximum longitude</f></dfn>,
and
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">time-zone offset</f></dfn>,
which are initially <code>null</code>.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[19]</anchor-end> A <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">data set</anchor> has
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">waypoints</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">routes</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">tracks</f></dfn>,
and
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">links</f></dfn>,
which are initially <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">empty<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">is empty</title></anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">lists<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">list</title></anchor>.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[26]</anchor-end> A <dfn>point</dfn> has
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">name</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">description</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">timestamp</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">latitude</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">longitude</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">elevation</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">geoid height</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">magnetic variation</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">comment</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">source</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">symbol name</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">type</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">fix</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">number of satellites</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">hdop</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">vdop</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">age of DGPS data</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DGPS ID</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">speed</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">accuracy</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">temperature</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">water temperature</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">depth</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">cadence</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">distance</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">to distance</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">heartrate</f></dfn>, 
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">point role</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">power</f></dfn>,
and
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">road type</f></dfn>,
which are initially <code>null</code>.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="189" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[189]</anchor-end> A <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">route</anchor> has <dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">links</f></dfn>, which is initially an <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">empty<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">is empty</title></anchor>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">list</anchor>.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="45" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[45]</anchor-end> A <dfn>route</dfn> has
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">name</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">description</f></dfn>, 
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">comment</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">source</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">type</f></dfn>,
and
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">number</f></dfn>,
which are initially <code>null</code>.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="62" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[62]</anchor-end> A <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">route</anchor> has <dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">points</f></dfn>
and
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">links</f></dfn>,
which are initially <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">empty<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">is empty</title></anchor>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">lists<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">list</title></anchor>.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="72" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[72]</anchor-end> A <dfn>track</dfn> has
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">name</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">description</f></dfn>, 
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">comment</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">source</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">type</f></dfn>,
and
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">number</f></dfn>,
which are initially <code>null</code>.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="73" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[73]</anchor-end> A <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">track</anchor> has <dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">segments</f></dfn>
and
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">links</f></dfn>,
which are initially <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">empty<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">is empty</title></anchor> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">lists<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">list</title></anchor>.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="74" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[74]</anchor-end> A <dfn>track segment</dfn> has <dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">points</f></dfn>, which is initially an <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">empty<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">is empty</title></anchor>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">list</anchor>.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="43" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[43]</anchor-end> A <dfn>person</dfn> has
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">name</f></dfn>
and
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">email</f></dfn>,
which are initially <code>null</code>.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="207" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[207]</anchor-end> A <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">person</anchor> has
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">links</f></dfn>,
which is initially an <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">empty<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">is empty</title></anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">list</anchor>.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="51" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[51]</anchor-end> A <dfn>license</dfn> has
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">holder</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">year</f></dfn>, and
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL</f></dfn>,
which are initially <code>null</code>.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="202" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[202]</anchor-end> A <dfn>link</dfn> has
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME type</f></dfn>,
and
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">text</f></dfn>,
which are initially <code>null</code>.</p><hr></hr><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="188" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[188]</anchor-end> 
A <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">track</anchor> is a <dfn>valid timestamped route</dfn> if all of the following
conditions are true:</p><ul><li>Its <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">segments</f> is not <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">empty<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">is empty</title></anchor>.</li><li>Its <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">segments</f> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">contains</anchor> no <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">track segment</anchor>
whose <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">size</f> is less than <n xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">2</n>.</li><li>Its <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">segments</f> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">contains</anchor> no <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">track segment</anchor>
that <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">contains</anchor> a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">point</anchor> whose
<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">latitude</f>,
<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">longitude</f>,
<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">elevation</f>,
or
<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">timestamp</f>
is 
<code>null</code>.</li><li>Its <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">segments</f> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">contains</anchor> no <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">track segment</anchor> <var>segment</var>
where there is an integer <var>index</var> in the range [ <n xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">1</n>, <var>segment</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">size</f> - 1 ]
such that <var>segment</var> [ <var>index</var> - 1 ]'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">timestamp</f> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;</anchor> 
<var>segment</var> [ <var>index</var> ]'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">timestamp</f>.</li></ul></section><section><h1>Parsing</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="206" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[206]</anchor-end> An implementation <MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST</MUST>
use an <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML parser</anchor> that implements <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML5</anchor>
to parse a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GPX</anchor> file.
It <MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST NOT</MUST> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">fetch</anchor> and process <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">external entities<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">external entity</title></anchor>.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="159" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[159]</anchor-end> An implementation <MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST</MUST>
use the steps to <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">parse a GPX document</anchor> to parse a <code class="DOMi" xml:lang="en">Document</code> as
a GPX document.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> To <dfn>parse a GPX document</dfn> <var>doc</var>, run these steps:<figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> Let <var>element</var> be <var>doc</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">document element</f>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> If <var>element</var> is an <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">element</anchor> whose <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">local name</f> is <code>gpx</code>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> Return the result of <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">parsing a <code xmlns="http://www.w3.org/1999/xhtml">gpx</code> element<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">parse a <code xmlns="http://www.w3.org/1999/xhtml">gpx</code> element</title></anchor> <var>element</var>.</li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> Otherwise:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> Return <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor>.</li></ol></li></ol></figure></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="78" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[78]</anchor-end> These steps ignore any duplicate <code xmlns="http://www.w3.org/1999/xhtml" class="XMLe" xml:lang="en">link<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">link (GPX)</title></code>
element.  They also ignore any <code xmlns="http://www.w3.org/1999/xhtml" class="XMLe" xml:lang="en">link<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">link (GPX)</title></code> content.</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> To <dfn>parse a <code>gpx</code> element</dfn> <var>element</var>, run these steps:<figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="79" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[79]</anchor-end> Let <var>data set</var> be a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">data set</anchor>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[17]</anchor-end> Let <var>creator</var> be <var>element</var>'s <code class="XMLa" xml:lang="en">creator</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">attribute value</anchor>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="59" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[59]</anchor-end> If <var>creator</var> is not <code>null</code> and is not the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">empty string</anchor>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="71" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[71]</anchor-end> Set <var>data set</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">generator</f> to <var>creator</var>.</li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="179" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[179]</anchor-end> Let <var>tzoffset</var> be <var>element</var>'s <code class="XMLa" xml:lang="en">tzoffset</code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">attribute value</anchor> in the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GPX extension namespace</anchor>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="182" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[182]</anchor-end> If <var>tzoffset</var> is not <code>null</code> and is not the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">empty string</anchor>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="183" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[183]</anchor-end> Let <var>offset</var> be the result of 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">parsing a time-zone offset string<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">parse a time-zone offset string</title></anchor>
<var>tzoffset</var>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="184" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[184]</anchor-end> If <var>offset</var> is not nothing:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="181" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[181]</anchor-end> Set <var>data set</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">time-zone offset</f> to <var>offset</var>.</li></ol></li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">For each</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">element</anchor> <var>child</var> in <var>element</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">children</f>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end> Switch by <var>child</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">local name</f>:<figure class="switch"><dl><dt><code class="XMLe" xml:lang="en">metadata<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">metadata (GPX)</title></code></dt><dd><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="29" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[29]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">For each</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">element</anchor> <var>gc</var> in <var>child</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">children</f>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[20]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Process<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">process a value element</title></anchor> <var>gc</var> with <var>data set</var>,
using the following table:<figure class="table"><dl><dt>l</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">local name</f></dd><dt>f</dt><dd>Field</dd><dt>r</dt><dd>Rule</dd></dl><dl><dt>l</dt><dd><code>name<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">name (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">name</f></dd><dt>r</dt><dd>String</dd></dl><dl><dt>l</dt><dd><code>desc<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">desc (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">description</f></dd><dt>r</dt><dd>String</dd></dl><dl><dt>l</dt><dd><code>keywords<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">keywords (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">keywords</f></dd><dt>r</dt><dd>String</dd></dl><dl><dt>l</dt><dd><code>link<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">link (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">links</f></dd><dt>r</dt><dd>Link</dd></dl><dl><dt>l</dt><dd><code>author<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">author (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">author</f></dd><dt>r</dt><dd>Person</dd></dl><dl><dt>l</dt><dd><code>copyright<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">copyright (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">license</f></dd><dt>r</dt><dd>License</dd></dl></figure></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="30" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[30]</anchor-end> If <var>gc</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">local name</f> is <code>time<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">time (GPX)</title></code>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="83" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[83]</anchor-end> If <var>gc</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">namespace</f> is <code>http://www.topografix.com/GPX/gpx_modified/0/1</code>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="88" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[88]</anchor-end> If <var>data set</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">updated</f> is <code>null</code>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="85" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[85]</anchor-end> Let <var>text</var> be <var>gc</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">child text content</f>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="86" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[86]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Parse a global date and time string<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">parse a global date and time string</title></anchor>
<var>text</var>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="87" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[87]</anchor-end> If a time is returned,
set <var>data set</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">updated</f> to the time.</li></ol></li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="84" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[84]</anchor-end> Otherwise:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="89" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[89]</anchor-end> If <var>data set</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">timestamp</f> is <code>null</code>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="90" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[90]</anchor-end> Let <var>text</var> be <var>gc</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">child text content</f>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="91" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[91]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Parse a global date and time string<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">parse a global date and time string</title></anchor>
<var>text</var>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="92" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[92]</anchor-end> If a time is returned,
set <var>data set</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">timestamp</f> to the time.</li></ol></li></ol></li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="40" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[40]</anchor-end> If <var>gc</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">local name</f> is <code>bounds</code>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="97" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[97]</anchor-end> If <var>data set</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">minimum latitude</f> is <code>null</code>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="98" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[98]</anchor-end> Set <var>data set</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">minimum latitude</f> be the result of applying the
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">rules for parsing a latitude value</anchor> to <var>gc</var>'s <code>minlat</code> attribute value.</li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="99" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[99]</anchor-end> If <var>data set</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">minimum longitude</f> is <code>null</code>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="100" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[100]</anchor-end> Set <var>data set</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">minimum longitude</f> be the result of applying the
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">rules for parsing a longitude value</anchor> to <var>gc</var>'s <code>minlon</code> attribute value.</li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="101" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[101]</anchor-end> If <var>data set</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">maximum latitude</f> is <code>null</code>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="102" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[102]</anchor-end> Set <var>data set</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">maximum latitude</f> be the result of applying the
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">rules for parsing a latitude value</anchor> to <var>gc</var>'s <code>maxlat</code> attribute value.</li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="103" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[103]</anchor-end> If <var>data set</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">maximum longitude</f> is <code>null</code>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="104" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[104]</anchor-end> Set <var>data set</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">maximum longitude</f> be the result of applying the
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">rules for parsing a longitude value</anchor> to <var>gc</var>'s <code>maxlon</code> attribute value.</li></ol></li></ol></li></ol></li></ol></figure></dd><dt><code class="XMLe" xml:lang="en">wpt</code></dt><dd>
Append the result of <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">parsing a point element<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">parse a point element</title></anchor> <var>child</var>
to <var>data set</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">waypoints</f>.</dd><dt><code class="XMLe" xml:lang="en">rte</code></dt><dd>
Append the result of <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">parsing a route element<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">parse a route element</title></anchor> <var>child</var>
to <var>data set</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">routes</f>.</dd><dt><code class="XMLe" xml:lang="en">trk</code></dt><dd>
Append the result of <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">parsing a track element<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">parse a track element</title></anchor> <var>child</var>
to <var>data set</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">tracks</f>.</dd></dl></figure></li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="115" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[115]</anchor-end> Return <var>data set</var>.</li></ol></figure></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[27]</anchor-end> To <dfn>parse a point element</dfn> <var>element</var>, run these steps:<figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="25" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[25]</anchor-end> Let <var>point</var> be a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">point</anchor>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="116" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[116]</anchor-end> Set <var>point</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">latitude</f> to the result of applying the
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">rules for parsing a latitude value</anchor> to <var>element</var>'s <code>lat</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">attribute value</anchor>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="118" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[118]</anchor-end> Set <var>point</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">longitude</f> to the result of applying the
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">rules for parsing a latitude value</anchor> to <var>element</var>'s <code>lon</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">attribute value</anchor>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="185" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[185]</anchor-end> Let <var>road</var> be <var>element</var>'s <code class="XMLa" xml:lang="en">road</code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">attribute value</anchor> in the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GPX extension namespace</anchor>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="186" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[186]</anchor-end> If <var>road</var> is a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">valid road type string</anchor>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="187" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[187]</anchor-end> Set <var>point</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">road type</f> to <var>road</var>.</li></ol></li><li>
<anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="218" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[218]</anchor-end> 
Let <var>role</var> be <var>element</var>'s <code class="XMLa" xml:lang="en">pointrole</code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">attribute value</anchor> in the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GPX extension namespace</anchor>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="219" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[219]</anchor-end> If <var>role</var> is a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">valid point role string</anchor>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="220" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[220]</anchor-end> Set <var>point</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">point role</f> to <var>role</var>.</li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="21" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[21]</anchor-end> Set <var>to distance</var>
be
<var>element</var>'s <code class="XMLa" xml:lang="en">todistance</code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">attribute value</anchor> in the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GPX extension namespace</anchor>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="22" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[22]</anchor-end> If 
<var>to distance</var> is <em>not</em> <code>null</code>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[32]</anchor-end> 
Let <var>number</var> be the result of applying the
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">rules for parsing floating-point number values</anchor> to <var>to distance</var>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="31" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[31]</anchor-end> 
If <var>number</var> is a number greater than or equal to <n xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">0</n>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="33" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[33]</anchor-end> 
Set <var>point</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">to distance</f>
to <var>number</var>.</li></ol></li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">For each</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">element</anchor> <var>child</var> in <var>element</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">children</f>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="154" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[154]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Process<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">process a value element</title></anchor> <var>child</var> with <var>point</var>,
using the following table:<figure class="table"><dl><dt>l</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">local name</f></dd><dt>f</dt><dd>Field</dd><dt>r</dt><dd>Rule</dd></dl><dl><dt>l</dt><dd><code>sat</code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">number of satellites</f></dd><dt>r</dt><dd>Non-negative number</dd></dl><dl><dt>l</dt><dd><code>dgpsid</code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DGPS ID</f></dd><dt>r</dt><dd>Non-negative integer</dd></dl><dl><dt>l</dt><dd><code>ele</code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">elevation</f></dd><dt>r</dt><dd>Number</dd></dl><dl><dt>l</dt><dd><code>geoidheight</code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">geoid height</f></dd><dt>r</dt><dd>Number</dd></dl><dl><dt>l</dt><dd><code>hdop</code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">hdop</f></dd><dt>r</dt><dd>Number</dd></dl><dl><dt>l</dt><dd><code>vdop</code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">vdop</f></dd><dt>r</dt><dd>Number</dd></dl><dl><dt>l</dt><dd><code>pdop</code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">pdop</f></dd><dt>r</dt><dd>Number</dd></dl><dl><dt>l</dt><dd><code>ageofdgpsdata</code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">age of DGPS data</f></dd><dt>r</dt><dd>Number</dd></dl><dl><dt>l</dt><dd><code>speed</code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">speed</f></dd><dt>r</dt><dd>Number</dd></dl><dl><dt>l</dt><dd><code>magvar</code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">magnetic variation</f></dd><dt>r</dt><dd>Degree</dd></dl><dl><dt>l</dt><dd><code>time<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">time (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">timestamp</f></dd><dt>r</dt><dd>Time</dd></dl><dl><dt>l</dt><dd><code>name<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">name (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">name</f></dd><dt>r</dt><dd>String</dd></dl><dl><dt>l</dt><dd><code>desc<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">desc (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">description</f></dd><dt>r</dt><dd>String</dd></dl><dl><dt>l</dt><dd><code>cmt</code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">comment</f></dd><dt>r</dt><dd>String</dd></dl><dl><dt>l</dt><dd><code>src<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">src (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">source</f></dd><dt>r</dt><dd>String</dd></dl><dl><dt>l</dt><dd><code>sym</code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">symbol name</f></dd><dt>r</dt><dd>String</dd></dl><dl><dt>l</dt><dd><code>type<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">type (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">type</f></dd><dt>r</dt><dd>String</dd></dl><dl><dt>l</dt><dd><code>fix<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">fix (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">fix</f></dd><dt>r</dt><dd>String</dd></dl><dl><dt>l</dt><dd><code>link<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">link (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">links</f></dd><dt>r</dt><dd>Link</dd></dl></figure></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="141" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[141]</anchor-end> If <var>child</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">local name</f> is <code>extensions</code>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="143" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[143]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">For each</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">element</anchor> <var>gc</var> in <var>child</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">children</f>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="144" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[144]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Process<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">process a value element</title></anchor> <var>gc</var> with <var>point</var>,
using the following table:<figure class="table"><dl><dt>l</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">local name</f></dd><dt>f</dt><dd>Field</dd><dt>r</dt><dd>Rule</dd></dl><dl><dt>l</dt><dd><code>cadence</code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">cadence</f></dd><dt>r</dt><dd>Number</dd></dl><dl><dt>l</dt><dd><code>distance</code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">distance</f></dd><dt>r</dt><dd>Number</dd></dl><dl><dt>l</dt><dd><code>hr</code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">heartrate</f></dd><dt>r</dt><dd>Number</dd></dl><dl><dt>l</dt><dd><code>heartrate</code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">heartrate</f></dd><dt>r</dt><dd>Number</dd></dl><dl><dt>l</dt><dd><code>power</code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">power</f></dd><dt>r</dt><dd>Number</dd></dl><dl><dt>l</dt><dd><code>temp</code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">temperature</f></dd><dt>r</dt><dd>Number</dd></dl><dl><dt>l</dt><dd><code>speed</code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">speed</f></dd><dt>r</dt><dd>Number</dd></dl><dl><dt>l</dt><dd><code>accuracy</code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">accuracy</f></dd><dt>r</dt><dd>Number</dd></dl></figure></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="145" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[145]</anchor-end> If <var>gc</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">local name</f> is <code>TrackPointExtension</code>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="146" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[146]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">For each</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">element</anchor> <var>ggc</var> in <var>gc</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">children</f>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="147" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[147]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Process<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">process a value element</title></anchor> <var>ggc</var> with <var>point</var>,
using the following table:<figure class="table"><dl><dt>l</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">local name</f></dd><dt>f</dt><dd>Field</dd><dt>r</dt><dd>Rule</dd></dl><dl><dt>l</dt><dd><code>atemp</code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">temperature</f></dd><dt>r</dt><dd>Number</dd></dl><dl><dt>l</dt><dd><code>wtemp</code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">water temperature</f></dd><dt>r</dt><dd>Number</dd></dl><dl><dt>l</dt><dd><code>depth</code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">depth</f></dd><dt>r</dt><dd>Number</dd></dl><dl><dt>l</dt><dd><code>hr</code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">heartrate</f></dd><dt>r</dt><dd>Number</dd></dl><dl><dt>l</dt><dd><code>cad</code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">cadence</f></dd><dt>r</dt><dd>Number</dd></dl></figure></li></ol></li></ol></li></ol></li></ol></li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="161" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[161]</anchor-end> Return <var>point</var>.</li></ol></figure></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="52" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[52]</anchor-end> To <dfn>parse a route element</dfn> <var>element</var>, run these steps:<figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="56" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[56]</anchor-end> Let <var>route</var> be a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">route</anchor>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="57" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[57]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">For each</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">element</anchor> <var>child</var> in <var>element</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">children</f>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="58" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[58]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Process<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">process a value element</title></anchor> <var>child</var> with <var>route</var>,
using the following table:<figure class="table"><dl><dt>l</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">local name</f></dd><dt>f</dt><dd>Field</dd><dt>r</dt><dd>Rule</dd></dl><dl><dt>l</dt><dd><code>name<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">name (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">name</f></dd><dt>r</dt><dd>String</dd></dl><dl><dt>l</dt><dd><code>desc<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">desc (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">description</f></dd><dt>r</dt><dd>String</dd></dl><dl><dt>l</dt><dd><code>cmt</code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">comment</f></dd><dt>r</dt><dd>String</dd></dl><dl><dt>l</dt><dd><code>src<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">src (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">source</f></dd><dt>r</dt><dd>String</dd></dl><dl><dt>l</dt><dd><code>type<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">type (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">type</f></dd><dt>r</dt><dd>String</dd></dl><dl><dt>l</dt><dd><code>number<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">number (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">number</f></dd><dt>r</dt><dd>Non-negative number</dd></dl><dl><dt>l</dt><dd><code>link<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">link (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">links</f></dd><dt>r</dt><dd>Link</dd></dl></figure></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="60" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[60]</anchor-end> If <var>child</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">local name</f> is <code>rtept</code>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="61" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[61]</anchor-end> Append the result of <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">parsing a point element<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">parse a point element</title></anchor> <var>child</var>
to <var>route</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">points</f>.</li></ol></li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="162" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[162]</anchor-end> Return <var>route</var>.</li></ol></figure></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="63" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[63]</anchor-end> To <dfn>parse a track element</dfn> <var>element</var>, run these steps:<figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="64" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[64]</anchor-end> Let <var>track</var> be a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">track</anchor>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="65" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[65]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">For each</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">element</anchor> <var>child</var> in <var>element</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">children</f>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="66" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[66]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Process<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">process a value element</title></anchor> <var>child</var> with <var>track</var>,
using the following table:<figure class="table"><dl><dt>l</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">local name</f></dd><dt>f</dt><dd>Field</dd><dt>r</dt><dd>Rule</dd></dl><dl><dt>l</dt><dd><code>name<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">name (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">name</f></dd><dt>r</dt><dd>String</dd></dl><dl><dt>l</dt><dd><code>desc<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">desc (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">description</f></dd><dt>r</dt><dd>String</dd></dl><dl><dt>l</dt><dd><code>cmt</code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">comment</f></dd><dt>r</dt><dd>String</dd></dl><dl><dt>l</dt><dd><code>src<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">src (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">source</f></dd><dt>r</dt><dd>String</dd></dl><dl><dt>l</dt><dd><code>type<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">type (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">type</f></dd><dt>r</dt><dd>String</dd></dl><dl><dt>l</dt><dd><code>number<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">number (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">number</f></dd><dt>r</dt><dd>Non-negative number</dd></dl><dl><dt>l</dt><dd><code>link<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">link (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">links</f></dd><dt>r</dt><dd>Link</dd></dl></figure></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="67" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[67]</anchor-end> If <var>child</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">local name</f> is <code>trkseg</code>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="70" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[70]</anchor-end> Let <var>segment</var> be a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">track segment</anchor>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="76" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[76]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">For each</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">element</anchor> <var>gc</var> in <var>child</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">children</f>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="77" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[77]</anchor-end> If <var>gc</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">local name</f> is <code>trkpt</code>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="80" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[80]</anchor-end> Append the result of <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">parsing a point element<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">parse a point element</title></anchor> <var>gc</var>
to <var>segment</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">points</f>.</li></ol></li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="75" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[75]</anchor-end> Append <var>segment</var> to <var>track</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">segments</f>.</li></ol></li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="163" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[163]</anchor-end> Return <var>track</var>.</li></ol></figure></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="105" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[105]</anchor-end> The <dfn>rules for parsing a latitude value</dfn> <var>text</var> are as given in the following algorithm:<figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="106" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[106]</anchor-end> Let <var>number</var> be the result of applying the
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">rules for parsing floating-point number values</anchor> to <var>text</var>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="107" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[107]</anchor-end> If <var>number</var> is not a number, return <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor> and abort these steps.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="108" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[108]</anchor-end> If <var>number</var> is greater than <n xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">90</n>, or less than <n xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">-90</n>,
return <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor> and abort these steps.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="109" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[109]</anchor-end> Return <var>number</var>.</li></ol></figure></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="110" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[110]</anchor-end> The <dfn>rules for parsing a longitude value</dfn> <var>text</var> are as given in the following algorithm:<figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="111" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[111]</anchor-end> Let <var>number</var> be the result of applying the
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">rules for parsing floating-point number values</anchor> to <var>text</var>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="112" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[112]</anchor-end> If <var>number</var> is not a number, return <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor> and abort these steps.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="113" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[113]</anchor-end> If <var>number</var> is greater than <n xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">180</n>, or less than <n xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">-180</n>,
return <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor> and abort these steps.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="114" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[114]</anchor-end> Return <var>number</var>.</li></ol></figure></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="153" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[153]</anchor-end> To <dfn>process a value element</dfn> <var>element</var> with <var>object</var> and <var>table</var>,
run these steps:<figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="156" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[156]</anchor-end> Let <var>row</var> be a row in <var>table</var>, whose &quot;<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">local name</f>&quot;
cell value is <var>element</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">local name</f>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="142" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[142]</anchor-end> If <var>row</var> is <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor>, abort these steps.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="155" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[155]</anchor-end> Let <var>field</var> be <var>row</var>'s &quot;Field&quot; cell value.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="164" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[164]</anchor-end> If <var>object</var>'s <var>field</var>'s value is not <code>null</code>, abort these steps.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="157" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[157]</anchor-end> Let <var>result</var> be the result of switching by <var>row</var>'s &quot;Rule&quot; cell value:<figure class="switch"><dl><dt>String</dt><dd><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="149" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[149]</anchor-end> Let <var>text</var> be <var>element</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">child text content</f>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="150" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[150]</anchor-end> If <var>text</var> is not the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">empty string</anchor>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="151" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[151]</anchor-end> Return <var>text</var>.</li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="148" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[148]</anchor-end> Otherwise:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="152" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[152]</anchor-end> Return <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor>.</li></ol></li></ol></figure></dd><dt>Non-negative number</dt><dd><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="135" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[135]</anchor-end> Let <var>text</var> be <var>element</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">child text content</f>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="136" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[136]</anchor-end> Let <var>number</var> be the result of applying the 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">rules for parsing non-negative integers</anchor> to <var>text</var>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="137" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[137]</anchor-end> If <var>number</var> is a number:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="138" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[138]</anchor-end> Return <var>number</var>.</li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="139" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[139]</anchor-end> Otherwise:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="140" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[140]</anchor-end> Return <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor>.</li></ol></li></ol></figure></dd><dt>Number</dt><dd><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="120" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[120]</anchor-end> Let <var>text</var> be <var>element</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">child text content</f>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="121" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[121]</anchor-end> Let <var>number</var> be the result of applying the
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">rules for parsing floating-point number values</anchor> to <var>text</var>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="122" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[122]</anchor-end> If <var>number</var> is a number:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="119" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[119]</anchor-end> Return <var>number</var>.</li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="128" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[128]</anchor-end> Otherwise:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="129" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[129]</anchor-end> Return <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor>.</li></ol></li></ol></figure></dd><dt>Degree</dt><dd><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="125" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[125]</anchor-end> Let <var>text</var> be <var>element</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">child text content</f>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="126" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[126]</anchor-end> Let <var>number</var> be the result of applying the
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">rules for parsing floating-point number values</anchor> to <var>text</var>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="127" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[127]</anchor-end> If <var>number</var> is a number in the range [ <n xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">0</n>, <n xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">360</n> ]:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="124" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[124]</anchor-end> Return <var>number</var>.</li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="132" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[132]</anchor-end> Otherwise:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="133" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[133]</anchor-end> Return <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor>.</li></ol></li></ol></figure></dd><dt>Year</dt><dd><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="36" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[36]</anchor-end> Let <var>text</var> be <var>element</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">child text content</f>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="37" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[37]</anchor-end> If <var>text</var> is four or more <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ASCII digits</anchor>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="38" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[38]</anchor-end> Let <var>year</var> be the result of applying the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">rules for parsing non-negative integers</anchor> to <var>text</var>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="41" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[41]</anchor-end> If <var>year</var> is a positive integer:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="39" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[39]</anchor-end> Return <var>year</var> and abort these steps.</li></ol></li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> Return <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor>.</li></ol></figure></dd><dt>Time</dt><dd><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> Let <var>text</var> be <var>element</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">child text content</f>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="117" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[117]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Parse a global date and time string<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">parse a global date and time string</title></anchor>
<var>text</var>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="123" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[123]</anchor-end> If a time is returned:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="130" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[130]</anchor-end> Return the time.</li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="131" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[131]</anchor-end> Otherwise:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="134" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[134]</anchor-end> Return <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor>.</li></ol></li></ol></figure></dd><dt>URL Content</dt><dd><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="81" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[81]</anchor-end> Let <var>text</var> be <var>element</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">child text content</f>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="82" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[82]</anchor-end> If <var>text</var> is not the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">empty string</anchor>,
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">parse<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">parse a URL</title></anchor> <var>text</var> relative to <var>element</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">node document</f>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="93" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[93]</anchor-end> If parsed and not failed:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="94" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[94]</anchor-end> Return the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">resulting URL string</anchor>.</li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="95" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[95]</anchor-end> Otherwise:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="96" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[96]</anchor-end> Return <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor>.</li></ol></li></ol></figure></dd><dt>Link</dt><dd><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="190" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[190]</anchor-end> Let <var>href</var> be <var>element</var>'s <code class="XMLa" xml:lang="en">href</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">attribute value</anchor>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="191" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[191]</anchor-end> If <var>href</var> is not <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor>,
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">parse<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">parse a URL</title></anchor> <var>href</var> relative to <var>element</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">node document</f>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="192" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[192]</anchor-end> If parsed and not failed:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="200" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[200]</anchor-end> Let <var>link</var> be a new <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">link</anchor>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="201" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[201]</anchor-end> Set <var>link</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL</f> to the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">resulting URL string</anchor>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="203" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[203]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">For each</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">element</anchor> <var>child</var> in <var>element</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">children</f>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="204" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[204]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Process<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">process a value element</title></anchor> <var>child</var> with <var>link</var>,
using the following table:<figure class="table"><dl><dt>l</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">local name</f></dd><dt>f</dt><dd>Field</dd><dt>r</dt><dd>Rule</dd></dl><dl><dt>l</dt><dd><code>text<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">text (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">text</f></dd><dt>r</dt><dd>String</dd></dl><dl><dt>l</dt><dd><code>type<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">type (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME type</f></dd><dt>r</dt><dd>String</dd></dl><dl><dt>l</dt><dd><code>link<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">link (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL</f></dd><dt>r</dt><dd>URL</dd></dl></figure></li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="193" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[193]</anchor-end> Return <var>link</var>.</li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="194" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[194]</anchor-end> Otherwise:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="195" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[195]</anchor-end> Return <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor>.</li></ol></li></ol></figure></dd><dt>Person</dt><dd><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="42" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[42]</anchor-end> Let <var>person</var> be a new <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">person</anchor>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="68" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[68]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">For each</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">element</anchor> <var>child</var> in <var>element</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">children</f>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[23]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Process<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">process a value element</title></anchor> <var>child</var> with <var>person</var>,
using the following table:<figure class="table"><dl><dt>l</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">local name</f></dd><dt>f</dt><dd>Field</dd><dt>r</dt><dd>Rule</dd></dl><dl><dt>l</dt><dd><code>name<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">name (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">name</f></dd><dt>r</dt><dd>String</dd></dl><dl><dt>l</dt><dd><code>link<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">link (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">links</f></dd><dt>r</dt><dd>Link</dd></dl></figure></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="69" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[69]</anchor-end> If <var>child</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">local name</f> is <code>email<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">email (GPX)</title></code>
and <var>person</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">email</f> is <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="46" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[46]</anchor-end> Let <var>left</var> be <var>child</var>'s <code>id<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">email (GPX)</title></code> attribute value.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="47" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[47]</anchor-end> Let <var>right</var> be <var>child</var>'s <code>domain<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">email (GPX)</title></code> attribute value.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="48" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[48]</anchor-end> If <var>left</var> and <var>right</var> are not <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="50" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[50]</anchor-end> Let <var>email</var> be <var>left</var> followed by <code>@</code> followed by <var>right</var>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="49" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[49]</anchor-end> Set <var>person</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">email</f> to <var>email</var>.</li></ol></li></ol></li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="44" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[44]</anchor-end> Return <var>person</var>.</li></ol></figure></dd><dt>License</dt><dd><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="55" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[55]</anchor-end> Let <var>license</var> be a new <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">license</anchor>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> Let <var>holder</var> be
<var>element</var>'s <code>author<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">copyright (GPX)</title></code> attribute value.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> If <var>holder</var> is not <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor> and is not the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">empty string</anchor>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="54" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[54]</anchor-end> Set <var>license</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">holder</f> to <var>holder</var>.</li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="53" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[53]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">For each</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">element</anchor> <var>child</var> in <var>element</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">children</f>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="24" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[24]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Process<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">process a value element</title></anchor> <var>child</var> with <var>license</var>,
using the following table:<figure class="table"><dl><dt>l</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">local name</f></dd><dt>f</dt><dd>Field</dd><dt>r</dt><dd>Rule</dd></dl><dl><dt>l</dt><dd><code>year</code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">year</f></dd><dt>r</dt><dd>Year</dd></dl><dl><dt>l</dt><dd><code>license<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">license (GPX)</title></code></dd><dt>f</dt><dd><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL</f></dd><dt>r</dt><dd>URL Content</dd></dl></figure></li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="28" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[28]</anchor-end> Return <var>license</var>.</li></ol></figure></dd></dl></figure></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="158" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[158]</anchor-end> If <var>result</var> is not <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="196" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[196]</anchor-end> If <var>object</var>'s field <var>field</var> is a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">list</anchor>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="199" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[199]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Append<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">append</title></anchor> <var>result</var> to <var>object</var>'s field <var>field</var>'s value.</li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="197" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[197]</anchor-end> Otherwise:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="198" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[198]</anchor-end> Set <var>object</var>'s field <var>field</var> to <var>result</var>.</li></ol></li></ol></li></ol></figure></p></section><section><h1>MIME types</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="166" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[166]</anchor-end> A
<dfn>GPX MIME types</dfn>
is any <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME type</anchor> whose <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">essence</anchor> is one of the following:</p><ul><li><code>text/gpx</code></li><li><code>application/gpx</code></li><li><code>application/gpx+xml</code></li><li><code>application/x-gpx</code></li><li><code>application/x-gpx+xml</code></li></ul><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="168" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[168]</anchor-end> 
When an implementation uses a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME type</anchor> to identify GPX,
it <MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST</MUST> use <code>application/gpx+xml</code>.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="169" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[169]</anchor-end> 
When an implementation interprets a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME type</anchor>,
it <MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST</MUST> recognize any <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GPX MIME type</anchor> as equivalent to
<code>application/gpx+xml</code>.</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="170" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[170]</anchor-end> Therefore, any
<code xmlns="http://www.w3.org/1999/xhtml">charset</code> parameter is interpreted as an <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML MIME type</anchor>
<code xmlns="http://www.w3.org/1999/xhtml">charset</code> parameter.</comment-p></section><section><h1>Namespaces</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="173" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[173]</anchor-end> 
The <dfn>GPX namespace</dfn> is
<dfn><code>http://www.topografix.com/GPX/1/1</code></dfn>.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="174" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[174]</anchor-end> 
The <dfn>GPX 1.0 namespace</dfn>
is
<dfn><code>http://www.topografix.com/GPX/1/0</code></dfn>.
The <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GPX 1.0 namespace</anchor>
<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST NOT</MUST> be used.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="171" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[171]</anchor-end> 
The <dfn>GPX extension namespace</dfn>
is 
<dfn><code>data:,gpx</code></dfn>.</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> Most of the parsing steps intentionally ignore <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">namespaces<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">namespace</title></anchor>
of <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">elements<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">element</title></anchor>.</comment-p></section><section><h1>Definitions of extensions</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="172" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[172]</anchor-end> 
The <code>gpx</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">element</anchor> in the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GPX namespace</anchor>
<MAY xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MAY</MAY>
have a <code>tzoffset</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">attribute</anchor>
in the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GPX extension namespace</anchor>.
If specified,
its <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">value<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">attribute value</title></anchor>
<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST</MUST>
be a 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">valid time-zone offset string</anchor>.
It is the time-zone offset that is appropriate as
the default time-zone offset
for rendering timestamps in the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">element</anchor>.</p><hr></hr><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="214" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[214]</anchor-end> 
The <code>wpt<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">&lt;wpt&gt;</title></code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">element</anchor> in the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GPX namespace</anchor>
<MAY xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MAY</MAY>
have a <code>pointrole</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">attribute</anchor>
in the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GPX extension namespace</anchor>.
If specified,
its <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">value<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">attribute value</title></anchor>
<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST</MUST>
be a
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">valid point role string</anchor>.
It is the kind of the point in the context of a race (or similar) event
described by the document.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="215" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[215]</anchor-end> 
A <dfn>valid point role string</dfn>
is one of followings:</p><table><tbody><tr><th> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">String<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">valid point role string</title></anchor></th><th> Description</th></tr><tr><td><dfn><code>globalStart</code></dfn></td><td>The first start point of the race.</td></tr><tr><td><dfn><code>globalGoal</code></dfn></td><td>The last goal point of the race.</td></tr><tr><td><dfn><code>partialStart</code></dfn></td><td>The start point of one of the subsections of the entire route of the race (which is not categorized as <code>globalStart</code>).</td></tr><tr><td><dfn><code>partialGoal</code></dfn></td><td>The goal point of one of the subsections of the entire route of the race (which is not categorized as <code>globalGoal</code>).</td></tr><tr><td><dfn><code>checkpoint</code></dfn></td><td> One of intermediate points during the route of the race which serves a remarkable role in the race, typically known as aid station, checkpoint, or gate.</td></tr><tr><td><dfn><code>observer</code></dfn></td><td>A point that does not belong to any other kind.</td></tr></tbody></table><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="216" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[216]</anchor-end> 
How to use these roles, including how points are associated with
the routes in the same document, are application dependent.</p><note xmlns="urn:x-suika-fam-cx:markup:ietf:html:3:draft:00:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="217" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[217]</anchor-end> 
An application might impose additional context-specific constraints
for GPX document it handles.  For example, an application 
might require that the first point in the route
has to be the same location with the point whose
<code>pointrole</code> is <code>globalStart</code>.</p></note><hr></hr><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="175" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[175]</anchor-end> 
The <code>trkpt</code> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">element</anchor> in the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GPX namespace</anchor>
<MAY xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MAY</MAY>
have a <code>road</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">attribute</anchor>
in the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GPX extension namespace</anchor>.
If specified,
its <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">value<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">attribute value</title></anchor>
<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST</MUST>
be a 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">valid road type string</anchor>.
It is the kind or condition of the road 
at the point of the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">element</anchor>.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="176" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[176]</anchor-end> A <dfn>valid road type string</dfn> is one of followings:</p><table><tbody><tr><th> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">String<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">valid road type string</title></anchor></th><th> Description</th></tr><tr><td><dfn><code>p</code></dfn></td><td>A road paved by e.g. concrete or asphalt</td></tr><tr><td><dfn><code>d</code></dfn></td><td>A dirt road</td></tr><tr><td><dfn><code>u</code></dfn></td><td>A completely unpaved path</td></tr></tbody></table><hr></hr><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="35" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[35]</anchor-end> 
The <code>trkpt</code> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">element</anchor> in the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GPX namespace</anchor>
<MAY xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MAY</MAY>
have a <code>todistance</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">attribute</anchor>
in the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GPX extension namespace</anchor>.
If specified,
its <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">value<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">attribute value</title></anchor>
<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST</MUST>
be a 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">valid floating-point number</anchor>
that 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">parses<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">rules for parsing floating-point number values</title></anchor>
to a number greater than or equal to <n xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">0</n>.
It is the distance between this
and the previous
points (i.e. the points represented by this and the nearest <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">previous sibling</anchor>
<code>trkpt</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">elements<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">element</title></anchor> in the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GPX namespace</anchor>),
in <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">meters<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">meter</title></anchor>.
If there is no previous point, 
the number <MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST</MUST> be equal to <n xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">0</n>.
If the distance is not known,
the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">attribute</anchor> <MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST NOT</MUST> be specified.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="209" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[209]</anchor-end> To <dfn>determine the distance between track points</dfn>
<var>point1</var> and <var>point2</var>, run these steps:</p><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="210" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[210]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Assert</anchor>: 
<var>point1</var> and <var>point2</var> 
are both contained in the <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">points</f> 
of the same 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">track segment</anchor>
and 
<var>point2</var>
immediately
follows
<var>point1</var>
in the <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">points</f>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="211" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[211]</anchor-end> 
If <var>point2</var>'s
<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">to distance</f>
is <em>not</em> 
<code>null</code>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="212" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[212]</anchor-end> 
Return <var>point2</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">to distance</f>.</li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="213" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[213]</anchor-end> 
Return the distance between points
(<var>point1</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">latitide</f>, <var>point1</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">longitude</f>)
and
(<var>point2</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">latitide</f>, <var>point2</var>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">longitude</f>),
determined by an
implementation-dependent algorithm.</li></ol></figure></section><section><h1>References</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="208" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[208]</anchor-end> 
The term 
<dfn>meter</dfn> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.bipm.org/en/publications/si-brochure/metre.html">https://www.bipm.org/en/publications/si-brochure/metre.html</anchor-external>
is defined by the
<cite>SI Brochure: The International System of Units (SI)</cite>.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="165" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[165]</anchor-end> This specification depends on the <cite>Infra Standard</cite>.
The terms
<dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">list</anchor></dfn>,
<dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">append</anchor></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">contains</f></dfn>,
<dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">for each<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">For each</title></anchor></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">size</f></dfn>,
and
<dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">is empty</anchor></dfn>,
are defined by the <cite>Infra Standard</cite>.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="167" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[167]</anchor-end> 
The terms
<dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME type</anchor></dfn>
and
<dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">essence</anchor></dfn>
are defined by the <cite>MIME Sniffing Standard</cite>.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> The terms 
<dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">previous sibling</anchor></dfn>,
<dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">element</anchor></dfn>, <dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">attribute</anchor></dfn>,
<dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">value<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">attribute value</title></anchor><title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">attribute value</title></dfn>,
<dfn><code class="DOMi" xml:lang="en">Document</code></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">document element</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">node document</f></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">children</f></dfn>, <dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">local name</f></dfn>,
and <dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">namespace</f></dfn> are defined by the <cite>DOM Standard</cite>.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="34" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[34]</anchor-end> The terms <dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ASCII digits</anchor></dfn>, 
<dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">rules for parsing non-negative integers</anchor></dfn>,
<dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">valid floating-point number</anchor></dfn>,
<dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">rules for parsing floating-point number values</anchor></dfn>,
<dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">parse a global date and time string</anchor></dfn>,
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">child text content</f></dfn>,
<dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">valid time-zone offset string</anchor></dfn>,
<dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">parse a time-zone offset string</anchor></dfn>,
<dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">parse a URL</anchor></dfn>,
<dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">resulting URL string</anchor></dfn>,
and
<dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML parser</anchor></dfn>,
are defined by the <cite>HTML Standard</cite>.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="178" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[178]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Elements<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">element</title></anchor> in the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GPX namespace</anchor> and
its <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">attributes<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">attribute</title></anchor>
are defined by the GPX specification
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.topografix.com/gpx.asp">https://www.topografix.com/gpx.asp</anchor-external>.</p></section><section><h1>Data and tests</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="177" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[177]</anchor-end> 
There are JSON data files:</p><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/manakai/data-web-defs/blob/master/data/elements.json">https://github.com/manakai/data-web-defs/blob/master/data/elements.json</anchor-external><ul><li>Documentaion <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/manakai/data-web-defs/blob/master/doc/elements.txt">https://github.com/manakai/data-web-defs/blob/master/doc/elements.txt</anchor-external></li></ul></li><li><anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/manakai/data-web-defs/blob/master/data/mime-types.json">https://github.com/manakai/data-web-defs/blob/master/data/mime-types.json</anchor-external><ul><li>Documentaion <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/manakai/data-web-defs/blob/master/doc/mime-types.txt">https://github.com/manakai/data-web-defs/blob/master/doc/mime-types.txt</anchor-external></li></ul></li></ul></refs><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="348" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[348]</anchor-end> Test data are available at:
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/wakaba/tests-web/tree/master/gpx/parsing">https://github.com/wakaba/tests-web/tree/master/gpx/parsing</anchor-external>.</p></section><section><h1>License</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="347" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[347]</anchor-end> Per <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CC0</anchor> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://creativecommons.org/publicdomain/zero/1.0/">https://creativecommons.org/publicdomain/zero/1.0/</anchor-external>, to the
extent possible under law, the author of this specification
has waived all copyright and related or neighboring rights to
this specification.</p></section><section><h1>Notes</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="349" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[349]</anchor-end> There are implementations:
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://manakai.github.io/pod/Web/GPX/Parser">https://manakai.github.io/pod/Web/GPX/Parser</anchor-external> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor>),
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/wakaba/js-gpx-parser">https://github.com/wakaba/js-gpx-parser</anchor-external> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JavaScript</anchor> <sw-see xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"> <code xmlns="http://www.w3.org/1999/xhtml">js-gpx-parser</code> </sw-see>).</p></section></body></html>