# ITA_1_area.properties
# This file contains area values for ITALY
# /*********************************************************************************************
# * Copyright (c) 2007 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.CountryAreaLabelPropertyFileSpecification

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

# The administration level of the area 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;

# /*********************************************************************************************
# * The Data source for Europe is "UNESCO (1987) through UNEP/GRID-Europe."
# * For more details please visit : http://www.grid.unep.ch/data/policy.php
# ***********************************************************************************************/

# This is the source of the data
SOURCE = http://www.grid.unep.ch/data/data.php?category=human_related

# State/Province

#PUGLIA
IT-PU = 19347.0
#TRENTINO-ALTO ADIGE
IT-AD = 13620.0
#MARCHE
IT-MA = 9693.0
#VENETO
IT-VN = 18363.0
#CALABRIA
IT-CI = 15080.0
#SARDEGNA
IT-SD = 24090.0
#TOSCANA
IT-TC = 22992.0
#FRIULI-VENEZIA GIULIA
IT-FV = 7846.0
#PIEMONTE
IT-PM = 25398.0
#VALLE D'AOSTA
IT-AS = 3262.0
#LAZIO
IT-LA = 17203.0
#EMILIA-ROMAGNA
IT-ER = 22123.0
#LIGURIA
IT-LG = 5416.0
#ABRUZZI
IT-AB = 10794.0
#LOMBARDIA
IT-LB = 23859.0
#CAMPANIA
IT-CM = 13595.0
#UMBRIA
IT-UM = 8456.0
#SICILIA
IT-SC = 25707.0
#MOLISE
IT-ML = 4437.0
#BASILICATA
IT-BC = 9992.0
