# CHL_1_node.properties 
# /*********************************************************************************************
# * Copyright (c) 2006 IBM Corporation and others.
# * All rights reserved. This program and the accompanying materials
# * are made available under the terms of the Eclipse Public License v1.0
# * which accompanies this distribution, and is available at
# * http://www.eclipse.org/legal/epl-v10.html
# *
# * Contributors:
# *     IBM Corporation - initial API and implementation
# ***********************************************************************************************/

# /**********************************************************************************************
# * Key Format: 
# * 
# * 	 For level 1 data, the key is the ISO3166-2 code. An ISO3166-2 code is composed as follows: 
# * a two letter country code followed by up to three alphanumeric characters for the level 1 administration.
# *
# * 	 For level 2 data, the key is the ISO3166-2 code followed by six digits. The leftmost two digits indicate
# * the level 1 container of a level 2 administration (i.e. California is a level 1 container for Orange County
# * which is a level 2 administration).  The two digits were taken from a lexicographic sorting of all the
# * level 1 administrations within a country. Similarly, the four leftmost digits indicate a level 2 administration.
# * Again, these four digits are an index into the lexicographic sorting of all level 2 administrations within 
# * a level 1 administration. 
# ************************************************************************************************/

# This is the name of the class that will interpret the rest of the file's contents
RECORD_CLASSNAME = org.eclipse.stem.internal.data.geography.specifications.CountryNodePropertyFileSpecification

# The ISO-3166-1 alpha3 code for the country
ISOKEY = CHL

# The administration level of the node data
ADMIN_LEVEL = 1

# This is the date range for which the area values in this file are valid 
# See http://purl.org/dc/terms/1.1/valid
VALID = start=1900-01-01;

# This is the source of the data
SOURCE = http://www.iso.org/iso/home.htm
# SOURCE = http://www.iso.org/iso/home.htm

# The file that contains the latitude/longitude data for the node 
SPATIAL_URI = platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/CHL/CHL_1_MAP.xml

CL-AI = AISEN, 01, AI
CL-ANT = ANTARTICA CHILENA, 02, ANT
CL-AN = ANTOFAGASTA, 03, AN
CL-ARC = ARAUCO, 05, ARC
CL-ARI = ARICA, 06, ARI
CL-BI = BIOBIO, 08, BI
CL-CHP = CACHAPOAL, 09, CHP
CL-CPT = CAPITAN PRAT, 10, CPT
CL-CAR = CARDENAL CARO, 11, CAR
CL-CAU = CAUQUENES, 12, CAU
CL-CTN = CAUTIN, 13, CTN
CL-CBU = CHACABUCO, 14, CBU
CL-CHN = CHANARAL, 15, CHN
CL-CLE = CHILOE, 16, CLE
CL-CPA = CHOAPA, 17, CPA
CL-CHQ = COIHAIQUE, 18, CHQ
CL-CHG = COLCHAGUA, 19, CHG
CL-COP = COPIAPO, 21, COP
CL-COR = CORDILLERA, 23, COR
CL-CUR = CURICO, 24, CUR
CL-EL = EL LOA, 25, EL
CL-ELQ = ELQUI, 26, ELQ
CL-GCR = GENERAL CARRERA, 27, GCR
CL-HUA = HUASCO, 28, HUA
CL-IQI = IQUIQUE, 29, IQI
CL-LIM = LIMARI, 31, LIM
CL-LIN = LINARES, 32, LIN
CL-LLA = LLANQUIHUE, 33, LLA
CL-AND = LOS ANDES, 34, AND
CL-MA = MAGALLANES, 36, MA
CL-MIP = MAIPO, 37, MIP
CL-MLL = MALLECO, 38, MLL
CL-MIL = MELIPILLA, 40, MIL
CL-NUB = NUBLE, 41, NUB
CL-OSR = OSORNO, 42, OSR
CL-PAL = PALENA, 43, PAL
CL-PAN = PARINACOTA, 44, PAN
CL-PET = PETORCA, 45, PET
CL-QUI = QUILLOTA, 46, QUI
CL-SAT = SAN ANTONIO, 48, SAT
CL-ACO = SAN FELIPE DE ACONCAGUA, 49, ACO
CL-SGO = SANTIAGO, 50, SGO
CL-TAL = TALAGANTE, 51, TAL
CL-TCA = TALCA, 52, TCA
CL-TF = TIERRA DEL FUEGO, 54, TF
CL-TOC = TOCOPILLA, 55, TOC
CL-ESP = ULTIMA ESPERANZA, 56, ESP
CL-VDI = VALDIVIA, 57, VDI
CL-VAL = VALPARAISO, 58, VAL
CL-CON = CONCEPCION, 20, CON
