OGC logo

Open Geospatial Consortium

Date: 2015-05-29
Document identifier: http://www.opengis.net/doc/TS/kml/2.3
Reference number of document: 14-068r2
Version: 2.3
Category: Test Suite
Editors:
R. Martell
Galdos Systems, Inc. <rmartell {AT} galdosinc {DOT} com>
Contributors:
Sean Askay
Google, Inc. <alchemist {AT} google {DOT} com>
David Burggraf
<dsburggraf {AT} gmail {DOT} com>

OGC KML 2.3 – Abstract Test Suite

Copyright © 2015 Open Geospatial Consortium. To obtain additional rights of use, visit http://www.opengeospatial.org/legal/.

Scope

This document specifies an abstract test suite (ATS) consisting of a set of implementation-independent test cases that provide a basis for validating the structure and content of OGC KML 2.3 resources. The ATS may be realized by an executable test suite (ETS) that assesses the degree of conformance exhibited by a KML document.

Three conformance levels are defined; these indicate the relative importance or priority of a particular set of constraints. The highest level (CL3) indicates full conformance, but a given application or user community may choose to enforce a lower level of conformance.

Level 1 (CL1)
Includes test cases covering requirements that must be satisfied in all instances.
Level 2 (CL2)
As for CL1, plus test cases addressing recommended requirements that should be satisfied.
Level 3 (CL3)
As for CL2, plus test cases for optional constraints that are essentially informative in nature.

Several namespace bindings are assumed in this document (see Table 1). However, in an instance document the actual prefix bound to a given namespace is not significant; any legal NCName may be used.

Table 1: Namespace bindings
Prefix Namespace name
atom http://www.w3.org/2005/Atom
kml http://www.opengis.net/kml/2.2
xsd http://www.w3.org/2001/XMLSchema

References

The following normative documents contain provisions that, through reference in this text, constitute provisions of this document. For dated references, subsequent revisions do not apply. For undated references, the latest edition applies.

Conformance Level 1

Purpose

Conformance Level 1 includes test cases that address absolute requirements. A KML document must satisfy all assertions at this level to achieve minimal conformance.

ATC-101: Document element

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-101
  2. Purpose: Verify that the root element of the document has [local name] = "kml" and [namespace name] = "http://www.opengis.net/kml/2.3".
  3. Method: Pass if all XML infoset constraints are satisfied; fail otherwise. This test checks that an XML resource is indeed an OGC KML document. If this test fails, all remaining tests are skipped.
  4. References:
    • OGC 12-007r2, 7.1.2
  5. Test type: Basic

ATC-102: Schema validity

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-102
  2. Purpose: Check that the KML document is well-formed and schema-valid with respect to the XML Schema grammars identified in Annex A.
  3. Method: Pass if the document satisfies all schema constraints; fail otherwise.
  4. References:
    • OGC 12-007r2, 5.3
  5. Test type: Capability

ATC-103: Valid geometry coordinates

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-103
  2. Purpose: Verify that a kml:coordinates element contains a list of white space-separated 2D or 3D tuples that contain comma-separated decimal values (lon,lat[,hgt]).
  3. Method: Pass if all kml:coordinates elements contain 2D/3D tuples containing decimal values conforming to the xsd:decimal type; fail otherwise. White space consists of one or more of the following characters: space (U+0020), carriage return (U+000D), line feed (U+000A), or tab (U+0009). The applicable coordinate reference system (CRS) is defined in Annex B of the OGC KML specification.
  4. References:
    • OGC 12-007r2, 16.10: kml:coordinatesType
    • OGC 12-007r2, Annex B: KML Coordinate Reference System Definition
    • W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes - decimal
  5. Test type: Capability

ATC-104: TimeSpan interval

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-104
  2. Purpose: Verify that a TimeSpan element satisfies all of the following constraints:
    1. it includes at least one child element (kml:begin or kml:end);
    2. if it is a definite interval (that is, both kml:begin and kml:end are present), then the begin value is earlier than the end value.
  3. Method: Pass if all assertions are satisfied; fail otherwise.
  4. References:
    • OGC 12-007r2, 15.2.2
  5. Test type: Capability

ATC-105: TimeStamp value

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-105
  2. Purpose: Verify that a kml:TimeStamp element has a valid child kml:when element.
  3. Method: Pass if the assertion is satisfied; fail otherwise. Several truncated representations of the xsd:dateTime data type are permitted: date, gYearMonth, and gYear. A time zone indicator is allowed.
  4. References:
    • OGC 12-007r2, 15.3.2
    • W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes - Primitive Datatypes
  5. Test type: Capability

ATC-106: Valid style reference

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-106
  2. Purpose: Check that a kml:styleUrl element satisfies all of the following constraints:
    1. its value is a valid relative or absolute URL that refers to a shared style definition (any element that substitutes for kml:AbstractStyleSelectorGroup);
    2. if the reference is an absolute URI, it conforms to the 'http' or 'file' URI schemes;
    3. it includes a fragment identifier that conforms to the shorthand pointer syntax as defined in the W3C XPointer framework.
  3. Method: Pass if all applicable assertions are satisfied; fail otherwise. A relative URL is resolved according to the reference resolution algorithm described in section 5 of RFC 3986.
  4. References:
  5. Test type: Capability

ATC-107: Shared styles

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-107
  2. Purpose: Confirm that a shared style definition (any element that may substitute for kml:AbstractStyleSelectorGroup) satisfies all of the following constraints:
    1. its parent element is kml:Document;
    2. it has an 'id' attribute value.
  3. Method: Pass if all assertions are satisfied; fail otherwise. Shared styles include kml:Style and kml:StyleMap elements that appear as children of a kml:Document element.
  4. References:
    • OGC 12-007r2, 6.4: Shared Styles
  5. Test type: Capability

ATC-108: Region extent

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-108
  2. Purpose: Verify that the content of a kml:LatLonAltBox element satisfies all of the following conditions:
    1. kml:north > kml:south;
    2. kml:east > kml:west;
    3. kml:minAltitude <= kml:maxAltitude;
    4. if kml:minAltitude and kml:maxAltitude are both present, then kml:altitudeMode does not have the value "clampToGround".
  3. Method: Pass if all applicable constraints are satisfied; fail otherwise. The default envelope for a region is the entire surface of the EGM96 geoid. These checks verify that a region has a non-zero extent (a 3D envelope).
  4. References:
    • OGC 12-007r2, 9.19.2
  5. Test type: Capability

ATC-109: Link properties

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-109
  2. Purpose: Check that a link element (of type kml:LinkType) satisfies all of the following constraints:
    1. if present, the child kml:refreshInterval element has a positive value (> 0);
    2. if present, the child kml:viewRefreshTime element has a positive value (> 0);
    3. if present, the child kml:viewBoundScale element has a positive value (> 0).
  3. Method: Pass if a link element (kml:Link, kml:AbstractOverlayType/kml:Icon) adheres to all applicable constraints; fail otherwise.
  4. References:
    • OGC 12-007r2, cl. 13.1.3.2
    • OGC 12-007r2, cl. 13.1.3.4
    • OGC 12-007r2, cl. 13.1.3.5
  5. Test type: Capability

ATC-110: Link referent

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-110
  2. Purpose: Confirm that a link element refers to the correct resource type according to the appropriate case in Table 2.
    Table 2: Link referents by parent element
    Parent element Referent Acceptable media types
    kml:NetworkLink A KML (or KMZ) resource
    • application/vnd.google-earth.kml+xml
    • application/vnd.google-earth.kmz
    kml:Model A textured 3D object resource, such as a COLLADA file
    • model/vnd.collada+xml
    • model/*
    kml:AbstractOverlayTypea An image resource
    • image/*
    a Any of the following elements: kml:GroundOverlay, kml:ScreenOverlay, or kml:PhotoOverlay,
  3. Method: Pass if all link elements (kml:Link, kml:AbstractOverlayType/kml:Icon) have correct referents; fail otherwise.
  4. References:
    • OGC 12-007r2, 9.15.3.3
    • OGC 12-007r2, 10.9.3.8
    • OGC 12-007r2, 11.1.3.3
  5. Test type: Capability

ATC-111: Valid bounding box

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-111
  2. Purpose: Verify that the content of a kml:LatLonBox or kml:LatLonAltBox element satisfies all of the following constraints:
    1. it contains the kml:north, kml:south, kml:east, and kml:west elements;
    2. kml:north > kml:south;
    3. kml:east > kml:west.
  3. Method: Pass if all assertions are satisfied; fail otherwise. The default envelope for a kml:GroundOverlay feature is the entire surface of the WGS 84 ellipsoid. These constraints verify that a bounding box has a non-zero area.
  4. References:
    • OGC 12-007r2, 9.19.2
    • OGC 12-007r2, 11.3.2
  5. Test type: Capability

ATC-112: Geometry extrusion

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-112
  2. Purpose: Check that if the kml:extrude element has the value "true", then the value of (the sibling element) kml:altitudeMode is not "clampToGround".
  3. Method: Pass if the assertion is satisfied; fail otherwise. This applies to the following elements: kml:Point, kml:LineString, kml:LinearRing (but NOT if it forms the boundary of a polygon), and kml:Polygon.
  4. References:
    • OGC 12-007r2, 10.4.2
  5. Test type: Capability

ATC-113: Geometry tessellation

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-113
  2. Purpose: Confirm that if the kml:tessellate element has the value "true", then the value of kml:altitudeMode is "clampToGround" (default value).
  3. Method: Pass if the assertion is satisfied; fail otherwise. This applies to the following elements: kml:LineString, kml:LinearRing (but NOT if it forms the boundary of a polygon), and kml:Polygon.
  4. References:
    • OGC 12-007r2, 10.6.2
  5. Test type: Capability

ATC-114: Point coordinates

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-114
  2. Purpose: Check that the kml:coordinates element in a kml:Point geometry contains exactly one coordinate tuple.
  3. Method: Pass if the assertion is satisfied; fail otherwise.
  4. References:
    • OGC 12-007r2, 10.3.2
  5. Test type: Capability

ATC-115: LineString coordinates

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-115
  2. Purpose: Verify that the kml:coordinates element in a kml:LineString geometry contains at least two coordinate tuples.
  3. Method: Pass if the assertion is satisfied; fail otherwise.
  4. References:
    • OGC 12-007r2, 10.7.3.7
  5. Test type: Capability

ATC-116: LinearRing coordinates

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-116
  2. Purpose: Check that the kml:coordinates element in a kml:LinearRing geometry satisfies all of the following assertions:
    1. it contains at least 4 coordinate tuples;
    2. the first and last control points are identical (the ring is closed).
  3. Method: Pass if the assertions are satisfied; fail otherwise.
  4. References:
    • OGC 12-007r2, 10.5.3.7
  5. Test type: Capability

ATC-117: Polygon boundary elements

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-117
  2. Purpose: Verify that the boundary of a kml:Polygon element satisfies all of the following constraints:
    1. if it is not a descendant of kml:Update, then the kml:Polygon has a child kml:outerBoundaryIs element containing a kml:LinearRing element;
    2. each interior boundary defines a "hole" in the Polygon such that it lies within the exterior boundary.
  3. Method: Pass if all assertions are satisfied; fail otherwise. This test case verifies the fundamental structure of a polygon; curve orientation (coordinates order) is ignored. The relevant polygons are identified using this XPath expression: //kml:Polygon[not(ancestor::kml:Update)].
  4. References:
    • OGC 12-007r2, 10.8.2
  5. Test type: Capability

ATC-118: Icon element refers to image

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-118
  2. Purpose: Verify that the kml:Icon/kml:href element refers to an image resource.
  3. Method: Pass if the assertion is satisfied; fail otherwise. The image format must correspond to a registered image media type, image/* (PNG, JPEG, and GIF images are commonly used). This test case applies to kml:Icon elements in both kml:IconStyle and kml:AbstractOverlayType contexts.
  4. References:
    • OGC 12-007r2, 12.13.2
    • OGC 12-007r2, 13.1.2
    • IANA Media Type Register - image types
  5. Test type: Capability

ATC-119: PhotoOverlay field of view

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-119
  2. Purpose: Verify that a kml:ViewVolume element includes all of the following child elements: kml:leftFov, kml:rightFov, kml:bottomFov, kml:topFov, and kml:near (has non-negative value).
  3. Method: Pass if all expected elements are present; fail otherwise. The field of view for a PhotoOverlay is defined by four planes, each of which is specified by an angle relative to the view vector.
  4. References:
    • OGC 12-007r2, 11.5.2
  5. Test type: Capability

ATC-120: NetworkLinkControl refresh interval

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-120
  2. Purpose: Verify that the kml:NetworkLinkControl/kml:minRefreshPeriod element has a non-negative value (>=0).
  3. Method: Pass if the assertion is satisfied; fail otherwise. This element specifies the minimum time interval (in seconds) between refreshes of the referenced KML resource.
  4. References:
    • OGC 12-007r2, 13.4.3.1
  5. Test type: Capability

ATC-121: KML object content

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-121
  2. Purpose: Verify that a KML object that is not a descendant of kml:Update satisfies one of the following constraints:
    1. it is not empty;
    2. it has an 'id' attribute value (to enable future updates).
  3. Method: Pass if the applicable assertion is satisfied; fail otherwise. The relevant context is //kml:AbstractObjectType[not(ancestor::kml:Update)].
  4. References:
    • OGC 12-007r2, 8.1.4.1
  5. Test type: Capability

ATC-122: Update referent

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-122
  2. Purpose: Check that the value of the kml:Update/kml:targetHref element is an absolute URI that refers to a KML or KMZ resource.
  3. Method: Pass if the assertion is satisfied; fail otherwise. The URI is assumed to match the retrieval URI for a resource that was previously loaded (by some earth browser) with a network link (kml:NetworkLink/kml:Link/kml:href).
  4. References:
    • OGC 12-007r2, 13.5.3.1
    • KML Reference - Updates
  5. Test type: Capability

ATC-123: Update targets

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-123
  2. Purpose: Check that a KML object which is a descendant (grandchild) of kml:Update satisfies the following constraints:
    1. it includes a 'targetId' attribute value that identifies the object to be updated;
    2. it does not have an 'id' attribute.
  3. Method: Pass if all assertions are satisfied; fail otherwise. Examine the content of all kml:Create, kml:Delete and kml:Change elements comprising the update.
  4. References:
    • OGC 12-007r2, 13.5.2
  5. Test type: Capability

ATC-124: Phone number

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-124
  2. Purpose: Check that the value of the kml:phoneNumber element is a valid 'tel' URI that complies with RFC 3966 ("The tel URI for Telephone Numbers").
  3. Method: Pass if the assertion is satisfied; fail otherwise. The "tel" URI is a globally unique identifier only; it does not refer to a specific physical device.
  4. References:
    • OGC 12-007r2, cl. 9.1.3.9
  5. Test type: Capability

ATC-125: Schema identifier

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-125
  2. Purpose: Verify that a kml:Schema element has an 'id' attribute value.
  3. Method: Pass if the assertion is satisfied; fail otherwise. The schema is referenced by kml:SchemaData elements that contain custom data.
  4. References:
    • OGC 12-007r2, 9.10.2
  5. Test type: Capability

ATC-126: SimpleField definition

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-126
  2. Purpose:Verify that a kml:SimpleField element satisfies all of the following constraints:
    1. it has a 'name' attribute;
    2. the value of the 'type' attribute is one of the supported XML Schema datatypes:
      • xsd:string
      • xsd:int
      • xsd:unsignedInt
      • xsd:short
      • xsd:unsignedShort
      • xsd:float
      • xsd:double
      • xsd:boolean
      • xsd:date
      • xsd:dateTime
  3. Method: Pass if all assertions are satisfied; fail otherwise. A type that is validly derived from a simple XSD datatype is also acceptable.
  4. References:
  5. Test type: Capability

ATC-127: SchemaData content

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-127
  2. Purpose: Confirm that a kml:SchemaData element satisfies all of the following constraints:
    1. the 'schemaUrl' attribute value is a URL (it may be an absolute URI) with a fragment component that refers to a kml:Schema element;
    2. all kml:SimpleData child elements have a 'name' attribute that matches the name of a declared kml:SimpleField element in the associated kml:Schema element (see ATC-126);
    3. the values of all kml:SimpleData child elements conform to their declared types.
  3. Method: Pass if all assertions are satisfied; fail otherwise. This element is used in conjunction with kml:Schema to add (loosely) typed custom data to a KML feature.
  4. References:
    • OGC 12-007r2, 9.5.2
    • OGC 12-007r2, 9.6.2
    • Uniform Resource Identifier (URI): Generic Syntax - Fragment (RFC 3986)
  5. Test type: Capability

ATC-128: Data element has distinct name

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-128
  2. Purpose: Check that the value of the 'name' attribute is unique within the context of the parent kml:ExtendedData element.
  3. Method: Pass if the assertion is satisfied; fail otherwise. Each kml:Data element represents an untyped name-value pair.
  4. References:
    • OGC 12-007r2, 9.4.2
  5. Test type: Capability

ATC-129: Valid texture alias

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-129
  2. Purpose: Verify that a kml:Alias element satisfies all of the following assertions:
    1. the value of the child kml:targetHref element is a URI reference to an image (texture) resource;
    2. the value of the child kml:sourceHref element corresponds to a file reference that appears within the 3D object resource referenced in the preceding sibling kml:Link element.
  3. Method: Pass if all assertions are satisfied; fail otherwise. The source file is expected to be a textual (including XML) digital asset resource such as a COLLADA file.
  4. References:
  5. Test type: Capability

ATC-130: Feature metadata - atom:author

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-130
  2. Purpose: Check that an atom:author element satisfies all of the following assertions:
    1. the content of the child atom:uri element is an IRI reference;
    2. the content of the child atom:email element conforms to the "addr-spec" production rule in RFC 5322 (Internet Message Format).
  3. Method: Pass if all assertions are satisfied; fail otherwise. The content model is specified by the atomPersonConstruct pattern in the RELAX NG schema. Note that within a container element authorship is inherited by all child feature members; it may be overridden on a per-feature basis.
  4. References:
  5. Test type: Capability

ATC-131: Model orientation not empty

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-131
  2. Purpose: Verify that if a kml:Orientation element is not a descendant of kml:Update, then it contains at least one of the following elements: kml:heading, kml:tilt, or kml:roll.
  3. Method: Pass if the assertion is satisfied; fail otherwise.
  4. References:
    • OGC 12-007r2, 10.11.2
  5. Test type: Capability

ATC-132: GroundOverlay with altitude

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-132
  2. Purpose: Verify that a kml:GroundOverlay with an kml:altitudeMode value of "absolute" includes a kml:altitude element.
  3. Method: Pass if the assertion is satisfied; fail otherwise.
  4. References:
    • OGC 12-007r2, 9.20.2
  5. Test type: Capability

ATC-133: Model referents

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-133
  2. Purpose: Check that a kml:Model element adheres to all of the following constraints if it is not a descendant of kml:Update:
    1. it contains a child kml:Link element (refers to a 3D model);
    2. it has a child kml:Location element (specifies model position);
    3. if the referenced model has any associated texture files, then there is a kml:ResourceMap/kml:Alias element for each one.
  3. Method: Pass if all assertions are satisfied; fail otherwise. The KML standard does not mention any particular type of 3D model. However, Google Earth only handles COLLADA files (model/vnd.collada+xml).
  4. References:
    • OGC 12-007r2, 10.9.2
    • KML Reference - Model
    • KML Developer's Guide - Models
  5. Test type: Capability

ATC-134: PhotoOverlay

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-134
  2. Purpose: Check that if a kml:PhotoOverlay element is not a descendant of kml:Update, then it has all of the following child elements: kml:Icon, kml:ViewVolume, kml:Point, and kml:Camera.
  3. Method: Pass if all assertions are satisfied; fail otherwise.
  4. References:
    • OGC 12-007r2, 11.5.2
  5. Test type: Capability

ATC-135: Mode-specific feature style

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-135
  2. Purpose: Check that if a kml:Pair element is not a descendant of kml:Update, then it contains the following elements:
    1. a kml:key element (identifies the style mode);
    2. a kml:styleURL or kml:Style element.
  3. Method: Pass if the assertions are satisfied; fail otherwise. The parent kml:StyleMap element contains alternative styles that apply for a particular mode; two values are defined in kml:styleStateEnumType: "normal" (default) and "highlight".
  4. References:
    • OGC 12-007r2, 12.4.2
  5. Test type: Capability

ATC-136: ItemIcon refers to image resource

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-136
  2. Purpose: Check that if a kml:ItemIcon element is not a descendant of kml:Update, then it satisfies all of the following constraints:
    1. it has a kml:href child element that refers to an image resource;
    2. if its state includes the values "error" or "fetchingN" (where N = 0-2), then the associated feature is a NetworkLink.
  3. Method: Pass if all assertions are satisfied; fail otherwise. The referenced image is the icon used to indicate the state of a Folder or Link fetch. The ancestor Style element may be referenced from or contained within the feature that uses it.
  4. References:
    • OGC 12-007r2, 12.19.2
    • KML Reference - ItemIcon
  5. Test type: Capability

ATC-137: LookAt viewpoint

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-137
  2. Purpose: Check that a kml:LookAt element satisfies all of the following constraints:
    1. if it is not a descendant of kml:Update, it contains all of the following child elements: kml:longitude, kml:latitude, and kml:range;
    2. 0 <= kml:tilt <= 90;
    3. if kml:altitudeMode does not have the value "clampToGround", then the kml:altitude element is present.
  3. Method: Pass if all assertions are satisfied; fail otherwise. The LookAt element positions a "virtual camera" in relation to the feature that is being viewed.
  4. References:
    • OGC 12-007r2, 14.3.2
    • OGC 12-007r2, 14.3.3
    • KML Reference - LookAt
  5. Test type: Capability

ATC-138: Region visibility (LOD)

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-138
  2. Purpose: Check that a kml:Lod element satisfies all of the following constraints:
    1. if it is not a descendant of kml:Update, it contains the kml:minLodPixels element;
    2. kml:minLodPixels < kml:maxLodPixels (Note: -1 denotes positive infinity).
  3. Method: Pass if all assertions are satisfied; fail otherwise. The visibility of a region (and its associated features) is determined as indicated below, where P denotes the calculated projected pixel size.
    if (P < minLodPixels)
      opacity = 0
    else if (P < minLodPixels + minFadeExtent)
      opacity = (P - minLodPixels)/minFadeExtent
    else if (P < maxLodPixels - maxFadeExtent)
      opacity = 1
    else if (P < maxLodPixels)
      opacity = (maxLodPixels-P)/maxFadeExtent
    else
      opacity=0
  4. References:
  5. Test type: Capability

ATC-139: Link reference

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-139
  2. Purpose: Check that if a kml:Link or a kml:Icon element (both of type kml:LinkType) is not a descendant of kml:Update, then it contains a kml:href child element.
  3. Method: Pass if the assertion is satisfied; fail otherwise. The value is a URI reference. The type of resource referred to depends on the parent element (see ATC-110).
  4. References:
    • OGC 12-007r2, 13.1.2
  5. Test type: Capability

ATC-140: Region

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-140
  2. Purpose: Confirm that if a kml:Region element is not a descendant of kml:Update, it contains the kml:LatLonAltBox and kml:Lod elements.
  3. Method: Pass if the assertion is satisfied; fail otherwise. These elements are used to determine whether or not a region is considered to be "active".
  4. References:
    • OGC 12-007r2, 9.16.2
  5. Test type: Capability

ATC-141: Tour playlist

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-141
  2. Purpose: Verify that if a kml:Tour element is not a descendant of kml:Update, then it has a kml:Playlist child element that contains one or more tour primitives.
  3. Method: Pass if the assertion is satisfied; fail otherwise. A virtual tour consists of a sequence of tour primitives. A tour primitive is any element that can substitute for kml:AbstractTourPrimitiveGroup.
  4. References:
    • OGC 12-007r2, 9.23.2
  5. Test type: Capability

ATC-142: FlyTo view

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-142
  2. Purpose: Verify that a kml:FlyTo element contains a child view element (kml:Camera or kml:LookAt).
  3. Method: Pass if the assertion is satisfied; fail otherwise. A view element must substitute for kml:AbstractViewGroup.
  4. References:
  5. Test type: Capability

ATC-143: TourControl not empty

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-143
  2. Purpose: Verify that if a kml:TourControl element is not a descendant of kml:Update, then it contains a child kml:playMode element (or an allowable substitution).
  3. Method: Pass if the assertion is satisfied; fail otherwise. This element may be used to insert a user-controlled pause.
  4. References:
  5. Test type: Capability

ATC-144: SoundCue refers to audio resource

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-144
  2. Purpose: Check that if a kml:SoundCue element is not a descendant of kml:Update, then it has a kml:href child element that refers to an audio resource (media type audio/*).
  3. Method: Pass if the assertion is satisfied; fail otherwise. Sounds are played in parallel with the rest of the tour. Commonly used audio formats are listed below.
    • MP3 (audio/mpeg)
    • M4A (audio/mp4, with AAC encoding)
  4. References:
    • OGC 12-007r2, 9.29.2
    • KML Developer's Guide - Touring in KML - Adding sound
    • IANA Media Type Register - audio
  5. Test type: Capability

ATC-145: AnimatedUpdate referent

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-145
  2. Purpose: Check that the value of the kml:AnimatedUpdate/kml:Update/kml:targetHref element satisfies one of the following cases:
    1. it is an absolute URI that refers to a KML or KMZ resource;
    2. it is empty (the target elements are in the same document).
  3. Method: Pass if the assertion is satisfied; fail otherwise. Changes to KML features will be reverted when the tour is over, and will not be saved at any time.
  4. References:
  5. Test type: Capability

ATC-146: Track positions

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-146
  2. Purpose: Verify that the coordinates specifying the track positions (kml:coord) consist of space-delimited numeric values in the applicable coordinate reference system (CRS).
  3. Method: Pass if the assertion is satisfied; fail otherwise. A kml:Track element may be used to describe the time-varying position of a Placemark feature that represents a moving object. In the default CRS (see Annex B), the coordinate tuple values are longitude, latitude, and altitude. An empty kml:coord element is permitted to indicate missing position data; the estimated position may be determined using some interpolation method.
  4. References:
    • OGC 12-007r2, 10.15.3.8
    • OGC 12-007r2, Annex B
  5. Test type: Capability

ATC-147: Track properties constitute parallel array

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-147
  2. Purpose: Check that for every temporal value (kml:when) in a kml:Track there is a position (kml:coord) value. That is, the following XPath expression must be true: count(kml:when) = count(kml:coord).
  3. Method: Pass if the assertion is satisfied; fail otherwise. A temporal value may be represented by a period such a day, month, or year; this might be the case for an object that moves slowly or one whose position is observed infrequently.
  4. References:
    • OGC 12-007r2, 10.15.2
  5. Test type: Capability

ATC-148: Track orientations

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-148
  2. Purpose: Verify that each orientation element contained by a track (kml:angles) satisfies the following constraints:
    1. contains 1 or 3 space-delimited numeric values specifying an angle of rotation (heading, tilt, roll);
    2. if the track has no associated model, then only one angle (heading) is specified.
  3. Method: Pass if the assertion is satisfied; fail otherwise. A non-empty value specifies an additional heading, tilt, and roll value for the corresponding track position.
  4. References:
    • OGC 12-007r2, 10.15.3.9
  5. Test type: Capability

ATC-149: LatLonQuad coordinates

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-149
  2. Purpose: Verify that the coordinates of a LatLonQuad element contained by a GroundOverlay feature satisfies the following constraints:
    1. it contains exactly four coordinate tuples;
    2. the coordinates are specified in counter-clockwise order with the first coordinate corresponding to the lower-left corner of the overlayed image;
    3. the quadrilateral is convex (every internal angle <= 180 degrees).
  3. Method: Pass if all constraints are satisfied; fail otherwise. If present, the third value in a coordinate tuple is ignored (altitude is set using the kml:altitude element).
  4. References:
    • OGC 12-007r2, 11.4.2
  5. Test type: Capability

ATC-150: Model location

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-150
  2. Purpose: Check that a kml:Location element satisfies all of the following constraints:
    1. it contains the kml:longitude and kml:latitude elements;
    2. if the parent kml:Model element has a kml:altitudeMode value that is not "clampToGround", then the kml:altitude element must also be present.
  3. Method: Pass if all applicable assertions are satisfied; fail otherwise.
  4. References:
    • OGC 12-007r2, 9.20.2
    • OGC 12-007r2, 10.9.2
    • OGC 12-007r2, 10.10.2
  5. Test type: Capability

Conformance Level 2

Purpose

Includes all tests in Level 1, plus test cases covering requirements that should be satisfied by a KML document. Non-conformance at this level may hinder the utility, portability, or interoperability of the document.

ATC-201: PolyStyle not empty

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-2/atc-201
  2. Purpose: Check that if a kml:PolyStyle element is not a descendant of kml:Update, it contains at least one of the following elements: kml:color, kml:colorMode, kml:fill, or kml:outline.
  3. Method: Pass if the assertion is satisfied; fail otherwise.
  4. References:
    • OGC 12-007r2, 12.16.2
  5. Test type: Capability

ATC-202: 3D coordinates

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-2/atc-202
  2. Purpose: Confirm that a kml:coordinates or kml:Location element includes a third value (elevation) in every coordinate tuple if its sibling kml:altitudeMode element does NOT have the value "clampToGround".
  3. Method: Pass if the assertion is satisfied; fail otherwise. Applies to the control points in kml:AbstractGeometryType/kml:coordinates and kml:Model/kml:Location.
  4. References:
    • OGC 12-007r2, 9.20.2
  5. Test type: Capability

ATC-203: Scale element not empty

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-2/atc-203
  2. Purpose: Verify that if a kml:Scale element is not a descendant of kml:Update, it contains at least one of the following elements: kml:x, kml:y, or kml:z.
  3. Method: Pass if the assertion is satisfied; fail otherwise.
  4. References:
    • OGC 12-007r2, 10.12.2
  5. Test type: Capability

ATC-204: Document element not empty

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-2/atc-204
  2. Purpose: Verify that the root element (kml:kml) contains at least one child element: kml:NetworkLinkControl or any element that substitutes for kml:AbstractFeatureType.
  3. Method: Pass if the assertion is satisfied; fail otherwise.
  4. References:
    • OGC 12-007r2, 7.1.2
  5. Test type: Capability

ATC-205: viewFormat element not empty

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-2/atc-205
  2. Purpose: Verify that a kml:viewFormat contains at least one view parameter.
  3. Method: Pass if the assertion is satisfied; fail otherwise. The query string is expected to contain one or more name-value pairs encoded as specified for application/x-www-form-urlencoded entities.
  4. References:
  5. Test type: Capability

ATC-206: httpQuery element not empty

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-2/atc-206
  2. Purpose: Verify a kml:httpQuery contains at least one query parameter.
  3. Method: Pass if the httpQuery has at least one of the allowable parameters; fail otherwise. The query string is expected to contain one or more name-value pairs encoded as specified for application/x-www-form-urlencoded entities.
  4. References:
    • OGC 12-007r2, 13.1.2
    • OGC 12-007r2, 13.1.3.7
  5. Test type: Capability

ATC-207: LinearRing in polygon boundary

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-2/atc-207
  2. Purpose: Verify that a kml:LinearRing element that constitutes the boundary of a polygon does not contain any of the following elements: kml:extrude, kml:tesselate, or kml:altitudeMode.
  3. Method: Pass if the assertion is satisfied; fail otherwise.
  4. References:
    • OGC 12-007r2, 10.5.2
  5. Test type: Capability

ATC-208: Data element not empty

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-2/atc-208
  2. Purpose: Check that a kml:Data element (that contains an untyped name-value pair) has both a 'name' attribute and a kml:value child element. Furthermore, the value of the name attribute shall be unique within the context of its parent kml:ExtendedData element.
  3. Method: Pass if the assertion is satisfied; fail otherwise. This is the simplest means of adding custom data to a KML feature.
  4. References:
    • OGC 12-007r2, 9.4.2
  5. Test type: Capability

ATC-209: ResourceMap aliases

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-2/atc-209
  2. Purpose: Verify that a kml:ResourceMap element contains at least one kml:Alias child element, and that each alias has a unique kml:sourceHref value.
  3. Method: Pass if all assertions are satisfied; fail otherwise. Each alias renames a texture file referenced in the source digital asset (COLLADA) file.
  4. References:
    • OGC 12-007r2, 10.13.2
  5. Test type: Capability

ATC-210: Link refresh mode

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-2/atc-210
  2. Purpose: Check that a kml:Link or a kml:Icon element (of type kml:LinkType) adheres to all of the following constraints:
    1. if the kml:refreshInterval element is present, the kml:refreshMode value must be "onInterval";
    2. if the kml:viewRefreshTime element is present, the kml:refreshMode value must be "onStop".
  3. Method: Pass if all relevant assertions are satisfied; fail otherwise.
  4. References:
    • OGC 12-007r2, 13.2.1
  5. Test type: Capability

ATC-211: PhotoOverlay with large image

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-2/atc-211
  2. Purpose: Check that if a kml:PhotoOverlay element includes a kml:Icon/kml:href element containing [x], [y], and [level] parameters, then it also includes a child kml:ImagePyramid element; the converse must also be true.
  3. Method: Pass if the assertions are satisfied; fail otherwise. Check for the kml:ImagePyramid element when the x, y, and level parameters are present; if the kml:ImagePyramid element occurs then check for the presence of the x, y, and level parameters. The tile parameters are embedded within the URL (which need not be constructed exactly as shown in the following example).
    EXAMPLE    
    http://server.example.org/bigphoto/$[level]/row_$[x]_column_$[y].jpg
  4. References:
  5. Test type: Capability

ATC-212: GroundOverlay extent

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-2/atc-212
  2. Purpose: Verify that if a kml:GroundOverlay element is not a descendant of kml:Update, then its geographic extent is specified by either a kml:LatLonBox or a kml:LatLonQuad element.
  3. Method: Pass if the assertion is satisfied; fail otherwise. See ATC-111.
  4. References:
    • OGC 12-007r2, 11.2.2
  5. Test type: Capability

ATC-213: Camera position

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-2/atc-213
  2. Purpose: Check that a kml:Camera element satisfies all of the following constraints:
    1. if it is not a descendant of kml:Update, then the following child elements are present: kml:latitude, kml:longitude, and kml:altitude;
    2. the value of kml:altitudeMode is not "clampToGround".
  3. Method: Pass if the assertions are satisfied; fail otherwise. A camera view is defined in terms of its position and orientation; it is not confined to the Earth's surface.
  4. References:
    • OGC 12-007r2, 14.2.2
  5. Test type: Capability

ATC-215: Overlay has image

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-2/atc-215
  2. Purpose: Check that if any element that substitutes for kml:AbstractOverlayGroup is not a descendant of kml:Update, then it contains a kml:Icon child element (that refers to an image).
  3. Method: Pass if the assertion is satisfied; fail otherwise. This test applies to the following elements: kml:GroundOverlay, kml:PhotoOverlay, and kml:ScreenOverlay.
  4. References:
    • OGC 12-007r2, 11.1.2
  5. Test type: Capability

ATC-216: ScreenOverlay specifies point on screen

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-2/atc-216
  2. Purpose: Check that if a kml:ScreenOverlay element is not a descendant of kml:Update, then it has a kml:screenXY child element.
  3. Method: Pass if the assertion is satisfied; fail otherwise. The specified point is relative to the screen origin (lower left corner).
  4. References:
    • OGC 12-007r2, 11.10.2
  5. Test type: Capability

ATC-217: BalloonStyle not empty

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-2/atc-217
  2. Purpose: Check that if a kml:BalloonStyle element is not a descendant of kml:Update, it is not empty.
  3. Method: Pass if the assertion is satisfied; fail otherwise.
  4. References:
    • OGC 12-007r2, 12.7.2
  5. Test type: Capability

ATC-218: ExtendedData not empty

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-2/atc-218
  2. Purpose: Check that if a kml:ExtendedData element is not a descendant of kml:Update, it is not empty.
  3. Method: Pass if the assertion is satisfied; fail otherwise.
  4. References:
    • OGC 12-007r2, 9.3.2
  5. Test type: Capability

ATC-219: Folder not empty

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-2/atc-219
  2. Purpose: Check that if a kml:Folder element is not a descendant of kml:Update, then it is not empty.
  3. Method: Pass if the assertion is satisfied; fail otherwise.
  4. References:
    • OGC 12-007r2, 9.13.2
  5. Test type: Capability

ATC-220: IconStyle not empty

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-2/atc-220
  2. Purpose: Check that if a kml:IconStyle element is NOT a descendant of kml:Update, it is not empty.
  3. Method: Pass if the assertion is satisfied; fail otherwise.
  4. References:
    • OGC 12-007r2, 12.12.2
  5. Test type: Capability

ATC-221: Image tiling

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-2/atc-221
  2. Purpose: Check that if a kml:ImagePyramid element is not a descendant of kml:Update, it satisfies all of the following constraints:
    1. it has the kml:maxWidth and kml:maxHeight child elements;
    2. the kml:tileSize value is a power of 2 (2n).
  3. Method: Pass if all assertions are satisfied; fail otherwise.
  4. References:
  5. Test type: Capability

ATC-222: LabelStyle not empty

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-2/atc-222
  2. Purpose: Check that if a kml:LabelStyle element is not a descendant of kml:Update, it has at least one of the following child elements: kml:color, kml:colorMode, or kml:scale.
  3. Method: Pass if the assertion is satisfied; fail otherwise.
  4. References:
    • OGC 12-007r2, 12.14.2
  5. Test type: Capability

ATC-223: ListStyle not empty

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-2/atc-223
  2. Purpose: Check that if a kml:ListStyle element is not a descendant of kml:Update, it has at least one of the following child elements: kml:listItemType, kml:bgColor, or kml:ItemIcon.
  3. Method: Pass if the assertion is satisfied; fail otherwise.
  4. References:
    • OGC 12-007r2, 12.17.2
  5. Test type: Capability

ATC-224: Style not empty

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-2/atc-224
  2. Purpose: Check that if a kml:Style element is not a descendant of kml:Update, it is not empty.
  3. Method: Pass if the assertion is satisfied; fail otherwise. A style group can be collected in a kml:Document container and shared by multiple features.
  4. References:
    • OGC 12-007r2, 12.2.2
  5. Test type: Capability

ATC-225: MultiGeometry not empty

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-2/atc-225
  2. Purpose: Check that if a kml:MultiGeometry element is not a descendant of kml:Update, it contains two or more geometry elements.
  3. Method: Pass if the assertion is satisfied; fail otherwise. The members of the collection must substitute for kml:AbstractGeometryGroup.
  4. References:
    • OGC 12-007r2, 10.2.2
  5. Test type: Capability

ATC-226: Placemark has geometry

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-2/atc-226
  2. Purpose: Check that if a kml:Placemark element is not a descendant of kml:Update, it includes a geometry element (any element that substitutes for kml:AbstractGeometryGroup).
  3. Method: Pass if the assertion is satisfied; fail otherwise.
  4. References:
    • OGC 12-007r2, 9.14.2
  5. Test type: Capability

ATC-227: StyleMap content

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-2/atc-227
  2. Purpose: Check that if a kml:StyleMap element is not a descendant of kml:Update, it contains two kml:Pair elements where one has the key value "normal" and the other has the key value "highlight".
  3. Method: Pass if the assertion is satisfied; fail otherwise. This element is used to provide alternative styles for Placemark features; each style is identified by a 'key' value corresponding to a display mode.
  4. References:
    • OGC 12-007r2, 12.3.2
  5. Test type: Capability

ATC-228: FlyTo duration

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-2/atc-228
  2. Purpose: Verify that a kml:FlyTo element satisfies all of the following constraints:
    1. it has a specified flight duration (in seconds) >= 0;
    2. it specifies a method of flight (flyToMode).
  3. Method: Pass if all assertions are satisfied; fail otherwise. The flyToMode element informs an earth browser about how to approach the viewing position; the default value is "bounce" (begin and end at rest).
  4. References:
    • OGC 12-007r2, 9.27.2
  5. Test type: Capability

ATC-229: Wait duration

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-2/atc-229
  2. Purpose: Check that a kml:Wait element specifies a duration (in seconds) > 0.
  3. Method: Pass if the assertion is satisfied; fail otherwise. This tour primitive pauses the view, but not the tour timeline–sound files and animated updates should continue to play.
  4. References:
  5. Test type: Capability

ATC-230: AnimatedUpdate duration

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-230
  2. Purpose: Verify that the kml:AnimatedUpdate/kml:duration element specifies a duration (in seconds) > 0.
  3. Method: Pass if the assertion is satisfied; fail otherwise. Any changes that can be interpolated (e.g. properties with numeric or geometry values) are animated over the specified duration; otherwise the changes are applied at the end of the specified duration.
  4. References:
  5. Test type: Capability

ATC-231: Entity references in BalloonStyle text

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-231
  2. Purpose: Verify that replacement text values exist for any entity references appearing in a kml:BalloonStyle/kml:text element. The references are constructed as follows:
    1. $[name]: refers to either an element or an attribute of the containing feature, or to one of its extended data elements (//kml:Data/@name).
    2. $[name/displayName]: refers to the kml:displayName element in an extended data element (//kml:Data/@name) belonging to the feature.
    3. $[schemaName/fieldName]: refers to a descendant kml:SimpleData element that is defined by a kml:SimpleField element matching this XPath expression: kml:Schema[@name=$schemaName]/kml:SimpleField[@name=$fieldName].
    4. $[schemaName/fieldName/displayName]: refers to the kml:displayName element in a kml:Schema element matching this XPath expression: kml:Schema[@name=$schemaName]/kml:SimpleField[@name=$fieldName]/displayName.
  3. Method: Pass if all entity references can be dereferenced; fail otherwise. The source of values for the replacement text includes the ancestor feature being styled and any kml:Schema elements that are associated with it.
  4. References:
  5. Test type: Capability

ATC-232: Feature metadata - atom:link

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-232
  2. Purpose: Check that the value of the atom:link/@rel attribute is "related".
  3. Method: Pass if the assertion is satisfied; fail otherwise. If the attribute is not present, the link must be interpreted as if @rel = "alternate" (i.e. the referent is an alternate version of the resource). The value "related" simply denotes a generic relationship. The atom:link element applies to all child features in a container unless overridden.
  4. References:
  5. Test type: Capability

ATC-233: Valid unit of measurement

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-1/atc-233
  2. Purpose: Confirm that a uom attribute identifies a valid unit of measurement. The attribute value must be a URI reference that satisfies one of the following conditions:
    1. it is an absolute URI that refers to a resource that defines the unit of measurement;
    2. it is a relative URI that specifies a (case-sensitive) unit symbol from the Unified Code for Units of Measure. A standard SI prefix symbol may be used to specify a decimal (sub)multiple (see Table 1 in the UCUM).
  3. Method: Pass if the applicable assertion is satisfied; fail otherwise. The attribute may appear on any of the following elements: kml:SimpleField, kml:Data, and kml:SimpleArrayField. Some common unit identifiers are listed below.
    • km (kilometre)
    • s (second)
    • Cel (degree Celsius)
    • [nmi_i] (nautical mile)
  4. References:
  5. Test type: Capability

Conformance Level 3

Purpose

Includes all tests in Level 2 and introduces additional constraints that are essentially informative in nature; they are intended to signal the use of deprecated elements or to encourage alignment with existing (non-normative) geomatics standards or conventions.

ATC-301: Polygon boundary orientation

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-3/atc-301
  2. Purpose: Confirm that the rings comprising the boundary of a kml:Polygon geometry satisfy the constraints listed below.
    1. no two rings cross (but they may intersect at a single point);
    2. the (exterior) coordinates are specified in a counterclockwise order.
  3. Method: Pass if all assertions are satisfied; fail otherwise. The surface of a polygon is oriented such that the interior is to the left of a boundary curve. This means that the exterior boundary of the surface runs counterclockwise when viewed from the side of the surface indicated by the upward normal (the "top" of the surface); interior boundaries are clockwise.
    up (+)
  4. References:
    • OGC 12-007r2, 10.8.2
    • KML Reference - Polygon
    • Geographic information – Spatial schema (ISO 19107), cl. 6.3.6: GM_Ring
  5. Test type: Capability

ATC-302: LinearRing is closed and simple

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-3/atc-302
  2. Purpose: Check that a kml:LinearRing is closed and simple; that is, it forms a cycle (first and last coordinates are identical) and it does not cross itself.
  3. Method: Pass if the assertion is satisfied; fail otherwise.
  4. References:
    • OGC 12-007r2, 10.5.2
    • KML Reference - LinearRing
    • Geographic information – Spatial schema (ISO 19107), cl. 6.3.6: GM_Ring
  5. Test type: Capability

ATC-303: BalloonStyle with color (deprecated)

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-3/atc-303
  2. Purpose: Check for any occurrences of the (deprecated) kml:color element in kml:BalloonStyle elements.
  3. Method: Pass if no kml:color elements occur in this context; fail otherwise. This element is deprecated in favour of kml:bgColor.
  4. References:
    • OGC 12-007r2, 12.7.3.1
  5. Test type: Capability

ATC-304: Metadata element (deprecated)

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-3/atc-304
  2. Purpose: Check for any occurrences of the deprecated kml:Metadata element.
  3. Method: Pass if no kml:Metadata elements occur; fail otherwise. This element is deprecated in favour of kml:ExtendedData.
  4. References:
    • OGC 12-007r2, 9.2.2
  5. Test type: Capability

ATC-305: Model scale factors

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-3/atc-305
  2. Purpose: Verify that a kml:Scale element includes all of the following child elements: kml:x, kml:y, and kml:z
  3. Method: Pass if the assertion is satisfied; fail otherwise.
  4. References:
    • OGC 12-007r2, 10.12.2
  5. Test type: Capability

ATC-306: LOD fade range

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-3/atc-306
  2. Purpose: Verify that the following expression holds for the pixel ramp values that determine whether or not a region is active:
    kml:minFadeExtent + kml:maxFadeExtent <= 
    kml:maxLodPixels - kml:minLodPixels
  3. Method: Pass if the assertion is satisfied; fail otherwise. The fade range is depicted in the following figure.

    1 0 Opacity P minLodPixels maxLodPixels minFadeExtent maxFadeExtent
  4. References:
    • OGC 12-007r2, 9.22.2
    • OGC 12-007r2, 9.16.2
    • KML Developer's Guide - Regions - Fade Extent
  5. Test type: Capability

ATC-307: Model orientation is fully specified

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-3/atc-307
  2. Purpose: Verify that a kml:Orientation element includes the following child elements: kml:heading, kml:tilt, and kml:roll.
  3. Method: Pass if the assertion is satisfied; fail otherwise.
  4. References:
  5. Test type: Capability

ATC-308: Snippet element (deprecated)

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-3/atc-308
  2. Purpose: Check for any occurrences of the deprecated kml:Snippet element.
  3. Method: Pass if no kml:Snippet elements occur; fail otherwise. This element is deprecated in favour of kml:snippet.
  4. References:
    • OGC 12-007r2, 9.1.3.10
  5. Test type: Capability

ATC-309: Url element (deprecated)

  1. Identifier: http://www.opengis.net/spec/KML/2.3/conf/level-3/atc-309
  2. Purpose: Check for any occurrences of the deprecated kml:Url element.
  3. Method: Pass if no kml:Url elements occur as a child of kml:NetworkLink; fail otherwise. This element is deprecated in favour of kml:Link.
  4. References:
    • OGC 12-007r2, 9.15.3.3
  5. Test type: Capability

Annex A: Revision history

Date Release Authors Sections modified Description
2015-05-29 14-068r2 R. Martell Renamed ATC-214 to ATC-150 (moved to CL1), Table 1 Final specification
2015-01-21 14-068r1 R. Martell ATC-111, -216, -221, -233 (added), Annex A (added) Proposed specification released for TC review
2014-11-04 14-068 R. Martell All Candidate specification released for public comment