# Expiration

By default, data is loaded only once by Links into Google Earth. To prevent KML data from becoming stale, you can specify a *refreshMode* of *onExpire* for any data loaded by an \<href\> element (in a Link or Icon element). By default, HTTP expiration headers specify the expiration time. You can also now specify an *expires* time in a KML NetworkLinkControl. The time is expressed as an XML dateTime (see [XML Schema Part 2: Datatypes Second Edition](http://www.w3.org/TR/xmlschema-2/#dateTime)). If both HTTP headers and KML expiration times are specified, the KML expiration time takes precedence.

# Example 1: Expiration using HTTP server expiration time

This example is for illustration only. It shows a GroundOverlay with an Icon that sets a *refreshMode* of *onExpire*. Since no KML expiration time is set, this example uses the HTTP server expiration time.

```
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
  <name>refreshMode onExpire</name>
  <Snippet maxLines="10">
    Image automatically reloads according to http
    server expiration.
  </Snippet>
  <GroundOverlay>
    <Icon>
      <href>http://www.someserver.com/image.jpeg</href>
      <refreshMode>onExpire</refreshMode>
    </Icon>
    <LatLonBox>
      <!-- from edit session in earth -->
      <!-- The roof of a building in the Presidio -->
      <north>37.80385180177469</north>
      <east>-122.4558710620651</east>
      <south>37.80337403503347</south>
      <west>-122.4564295653771</west>
    </LatLonBox>
  </GroundOverlay>
</Document>
</kml>
```

# Example 2: Example using KML expiration time

The following example delivers a Placemark at randomly selected coordinates. This example includes a Link with a *refreshMode* of *onExpire*. In this case, the expiration date/time is specified (in a Python script) using the new KML \<expires\> element. This KML expiration time takes precedence over any time that may have been specified in the HTTP headers.

Here is the KML NetworkLink containing the Link with the \<href\> and \<refreshMode\> elements:

```
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
  <NetworkLink>
    <Link>
      <href>http://dev.someserver.com/cgi-bin/expires.py</href>
      <refreshMode>onExpire</refreshMode>
    </Link>
  </NetworkLink>
</Document>
</kml>
```

This is the Python script that sets an expires time of \[*now* + 11 seconds\] and refreshes the Placemark's coordinates:

```
#!/usr/bin/python

import random
import time

lat = random.random() * 180. - 90.
lon = random.random() * 360. - 180.

now = time.time()
future = time.gmtime(now + 11)
y = future[0]
mo = future[1]
d = future[2]
h = future[3]
mi = future[4]
s = future[5]
iso8601 = '%04d-%02d-%02dT%02d:%02d:%02dZ' % (y,mo,d,h,mi,s)

print 'Content-type: application/vnd.google-earth.kml+xml'
print

print '<?xml version=\"1.0\" encoding=\"UTF-8\"?>'
print '<kml xmlns=\"http://www.opengis.net/kml/2.2\">'

# must be child of <kml>
print '<NetworkLinkControl>'
print '<expires>%s</expires>' % iso8601
print '</NetworkLinkControl>'

print '<Placemark>'
print '<name>placemark expires %s</name>' % iso8601
print '<Point>'
print '<coordinates>%f,%f,0</coordinates>' % (lon,lat)
print '</Point>'
print '</Placemark>'

print '</kml>'
```

[Back to top](https://developers.google.com/kml/documentation/expiration#top)