# URY_2_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 = URY

# The administration level of the node data
ADMIN_LEVEL = 2

# 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/URY/URY_2_MAP.xml

# Generated key details :  Level 1 ( UY-AR = ARTIGAS ). Level 2 ( 010001 = URY.L2.1 ). 
UY-AR-G010001 = UY-AR-G010001, G010001, AR
# Generated key details :  Level 1 ( UY-SA = SALTO ). Level 2 ( 150001 = URY.L2.2 ). 
UY-SA-G150001 = UY-SA-G150001, G150001, SA
# Generated key details :  Level 1 ( UY-RV = RIVERA ). Level 2 ( 130001 = URY.L2.3 ). 
UY-RV-G130001 = UY-RV-G130001, G130001, RV
# Generated key details :  Level 1 ( UY-TA = TACUAREMBO ). Level 2 ( 180001 = URY.L2.4 ). 
UY-TA-G180001 = UY-TA-G180001, G180001, TA
# Generated key details :  Level 1 ( UY-PA = PAYSANDU ). Level 2 ( 110001 = URY.L2.5 ). 
UY-PA-G110001 = UY-PA-G110001, G110001, PA
# Generated key details :  Level 1 ( UY-PA = PAYSANDU ). Level 2 ( 110002 = URY.L2.6 ). 
UY-PA-G110002 = UY-PA-G110002, G110002, PA
# Generated key details :  Level 1 ( UY-RN = RIO NEGRO ). Level 2 ( 120001 = RIO NEGRO ). 
UY-RN-G120001 = RIO NEGRO
# Generated key details :  Level 1 ( UY-RN = RIO NEGRO ). Level 2 ( 120005 = URY.L2.7 ). 
UY-RN-G120005 = UY-RN-G120005, G120005, RN
# Generated key details :  Level 1 ( UY-DU = DURAZNO ). Level 2 ( 050001 = URY.L2.8 ). 
UY-DU-G050001 = UY-DU-G050001, G050001, DU
# Generated key details :  Level 1 ( UY-SO = SORIANO ). Level 2 ( 170001 = URY.L2.9 ). 
UY-SO-G170001 = UY-SO-G170001, G170001, SO
# Generated key details :  Level 1 ( UY-RN = RIO NEGRO ). Level 2 ( 120002 = URY.L2.10 ). 
UY-RN-G120002 = UY-RN-G120002, G120002, RN
# Generated key details :  Level 1 ( UY-FD = FLORIDA ). Level 2 ( 070001 = URY.L2.11 ). 
UY-FD-G070001 = UY-FD-G070001, G070001, FD
# Generated key details :  Level 1 ( UY-FS = FLORES ). Level 2 ( 060001 = URY.L2.12 ). 
UY-FS-G060001 = UY-FS-G060001, G060001, FS
# Generated key details :  Level 1 ( UY-LA = LAVALLEJA ). Level 2 ( 080002 = URY.L2.13 ). 
UY-LA-G080002 = UY-LA-G080002, G080002, LA
# Generated key details :  Level 1 ( UY-RN = RIO NEGRO ). Level 2 ( 120003 = URY.L2.14 ). 
UY-RN-G120003 = UY-RN-G120003, G120003, RN
# Generated key details :  Level 1 ( UY-RN = RIO NEGRO ). Level 2 ( 120004 = URY.L2.15 ). 
UY-RN-G120004 = UY-RN-G120004, G120004, RN
# Generated key details :  Level 1 ( UY-LA = LAVALLEJA ). Level 2 ( 080001 = LAGO ). 
UY-LA-G080001 = LAGO
# Generated key details :  Level 1 ( UY-CO = COLONIA ). Level 2 ( 040002 = URY.L2.16 ). 
UY-CO-G040002 = UY-CO-G040002, G040002, CO
# Generated key details :  Level 1 ( UY-SJ = SAN JOSE ). Level 2 ( 160001 = URY.L2.17 ). 
UY-SJ-G160001 = UY-SJ-G160001, G160001, SJ
# Generated key details :  Level 1 ( UY-MA = MALDONADO ). Level 2 ( 090002 = URY.L2.18 ). 
UY-MA-G090002 = UY-MA-G090002, G090002, MA
# Generated key details :  Level 1 ( UY-CA = CANELONES ). Level 2 ( 020002 = URY.L2.19 ). 
UY-CA-G020002 = UY-CA-G020002, G020002, CA
# Generated key details :  Level 1 ( UY-CA = CANELONES ). Level 2 ( 020001 = RIO SANTA ). 
UY-CA-G020001 = RIO SANTA
# Generated key details :  Level 1 ( UY-CO = COLONIA ). Level 2 ( 040001 = ISLA ). 
UY-CO-G040001 = ISLA
# Generated key details :  Level 1 ( UY-MO = MONTEVIDEO ). Level 2 ( 100001 = URY.L2.20 ). 
UY-MO-G100001 = UY-MO-G100001, G100001, MO
# Generated key details :  Level 1 ( UY-MA = MALDONADO ). Level 2 ( 090001 = ISLA ). 
UY-MA-G090001 = ISLA
# Generated key details :  Level 1 ( UY-CL = CERRO LARGO ). Level 2 ( 030001 = URY.L2.21 ). 
UY-CL-G030001 = UY-CL-G030001, G030001, CL
# Generated key details :  Level 1 ( UY-TT = TREINTA Y TRES ). Level 2 ( 190004 = URY.L2.22 ). 
UY-TT-G190004 = UY-TT-G190004, G190004, TT
# Generated key details :  Level 1 ( UY-TT = TREINTA Y TRES ). Level 2 ( 190005 = URY.L2.23 ). 
UY-TT-G190005 = UY-TT-G190005, G190005, TT
# Generated key details :  Level 1 ( UY-TT = TREINTA Y TRES ). Level 2 ( 190006 = URY.L2.24 ). 
UY-TT-G190006 = UY-TT-G190006, G190006, TT
# Generated key details :  Level 1 ( UY-TT = TREINTA Y TRES ). Level 2 ( 190007 = URY.L2.25 ). 
UY-TT-G190007 = UY-TT-G190007, G190007, TT
# Generated key details :  Level 1 ( UY-TT = TREINTA Y TRES ). Level 2 ( 190008 = URY.L2.26 ). 
UY-TT-G190008 = UY-TT-G190008, G190008, TT
# Generated key details :  Level 1 ( UY-TT = TREINTA Y TRES ). Level 2 ( 190003 = LAGUNA ). 
UY-TT-G190003 = LAGUNA
# Generated key details :  Level 1 ( UY-TT = TREINTA Y TRES ). Level 2 ( 190002 = LAGO ). 
UY-TT-G190002 = LAGO
# Generated key details :  Level 1 ( UY-TT = TREINTA Y TRES ). Level 2 ( 190001 = LAG. GUACHA ). 
UY-TT-G190001 = LAG. GUACHA
# Generated key details :  Level 1 ( UY-RO = ROCHA ). Level 2 ( 140001 = URY.L2.27 ). 
UY-RO-G140001 = UY-RO-G140001, G140001, RO
# Generated key details :  Level 1 ( UY-RO = ROCHA ). Level 2 ( 140002 = URY.L2.28 ). 
UY-RO-G140002 = UY-RO-G140002, G140002, RO
