SDI Indexer scan for coordinates

This commit is contained in:
Fabio Sinibaldi 2022-05-03 18:07:18 +02:00
parent 8ff0cee95a
commit 9e9c696909
7 changed files with 385 additions and 52 deletions

View File

@ -42,11 +42,10 @@ public abstract class AbstractProfiledDocumentsTests extends BasicServiceTestUni
} }
protected abstract WebTarget baseTarget(); protected abstract WebTarget baseTarget();
@Test @Test
public void getAll() { public void getAll() {
assumeTrue(GCubeTest.isTestInfrastructureEnabled()); assumeTrue(GCubeTest.isTestInfrastructureEnabled());

View File

@ -0,0 +1,72 @@
package org.gcube.application.cms.sdi.engine.bboxes;
import lombok.Data;
import lombok.Getter;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
import org.gcube.application.cms.serialization.Serialization;
import org.gcube.application.geoportal.common.model.JSONPathWrapper;
import org.gcube.application.geoportal.common.model.document.filesets.sdi.GCubeSDILayer;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
import java.util.List;
@Slf4j
public class BBOXByCoordinatePaths extends BBOXEvaluator{
@Data
@ToString
public static class CoordinatesPathBean{
private String x;
private String y;
private String z;
}
public BBOXByCoordinatePaths() {
super("COORDINATES_PATH");
}
@Override
public boolean isConfigured(Document profileConfiguration) {
return profileConfiguration.containsKey("coordinatesPath");
}
@Override
public GCubeSDILayer.BBOX evaluate(Document profileConfiguration, UseCaseDescriptor useCaseDescriptor, JSONPathWrapper documentNavigator) {
List coordsConfig=profileConfiguration.get("coordinatesPaths",List.class);
GCubeSDILayer.BBOX toSet = null;
for(Object coordsObj:coordsConfig){
log.debug("UseCaseDescriptor {} : Evaluating coords {} ", useCaseDescriptor.getId(),coordsObj);
CoordinatesPathBean bean = Serialization.convert(coordsObj,CoordinatesPathBean.class);
// x
if(bean.getX()!=null)
// for found
for(Double x : documentNavigator.getByPath(bean.getX(),Double.class)) {
if(toSet == null) toSet = new GCubeSDILayer.BBOX();
if (toSet.getMinX()==null || x< toSet.getMinX()) toSet.setMinX(x);
if (toSet.getMaxX()==null || x> toSet.getMaxX()) toSet.setMaxX(x);
}
// y
if(bean.getY()!=null)
// for found
for(Double y : documentNavigator.getByPath(bean.getY(),Double.class)) {
if(toSet == null) toSet = new GCubeSDILayer.BBOX();
if (toSet.getMinY()==null || y< toSet.getMinY()) toSet.setMinY(y);
if (toSet.getMaxY()==null || y> toSet.getMaxY()) toSet.setMaxY(y);
}
// z
if(bean.getZ()!=null)
// for found
for(Double z : documentNavigator.getByPath(bean.getZ(),Double.class)) {
if(toSet == null) toSet = new GCubeSDILayer.BBOX();
if (toSet.getMinZ()==null || z< toSet.getMinZ()) toSet.setMinZ(z);
if (toSet.getMaxZ()==null || z> toSet.getMaxZ()) toSet.setMaxZ(z);
}
}
return toSet;
}
}

View File

@ -0,0 +1,26 @@
package org.gcube.application.cms.sdi.engine.bboxes;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
import org.gcube.application.cms.serialization.Serialization;
import org.gcube.application.geoportal.common.model.JSONPathWrapper;
import org.gcube.application.geoportal.common.model.document.filesets.sdi.GCubeSDILayer;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
import java.util.List;
@RequiredArgsConstructor
@ToString
@Slf4j
public abstract class BBOXEvaluator {
@NonNull
private String name;
public abstract boolean isConfigured(Document profileConfiguration);
public abstract GCubeSDILayer.BBOX evaluate(Document profileConfiguration, UseCaseDescriptor useCaseDescriptor, JSONPathWrapper documentNavigator);
}

View File

@ -0,0 +1,48 @@
package org.gcube.application.cms.sdi.engine.bboxes;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
import org.gcube.application.cms.serialization.Serialization;
import org.gcube.application.geoportal.common.model.JSONPathWrapper;
import org.gcube.application.geoportal.common.model.document.filesets.sdi.GCubeSDILayer;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
import java.util.List;
@Slf4j
public class BBOXPathScanner extends BBOXEvaluator{
public BBOXPathScanner() {
super("BBOX PATH SCANNER");
}
@Override
public boolean isConfigured(Document profileConfiguration) {
return profileConfiguration.containsKey("bboxEvaluation");
}
@Override
public GCubeSDILayer.BBOX evaluate(Document profileConfiguration, UseCaseDescriptor useCaseDescriptor, JSONPathWrapper documentNavigator) {
List bboxEvaluationPaths = profileConfiguration.get("bboxEvaluation",List.class);
GCubeSDILayer.BBOX toSet = null;
for(Object pathObj : bboxEvaluationPaths){
log.debug("UseCaseDescriptor {} : Evaluating path {} ", useCaseDescriptor.getId(),pathObj);
List<Object> bboxObjects = documentNavigator.getByPath(pathObj.toString());
log.debug("UseCaseDescriptor {} : Evaluating path {} .. results {} ", useCaseDescriptor.getId(),pathObj,bboxObjects);
for(Object bboxObject : bboxObjects) {
log.info("Matched path {}, value is {} ",pathObj.toString(),bboxObject);
GCubeSDILayer.BBOX box = Serialization.convert(bboxObject, GCubeSDILayer.BBOX.class);
if(toSet == null) toSet = box;
if(box.getMaxX()>toSet.getMaxX()) toSet.setMaxX(box.getMaxX());
if(box.getMaxY()>toSet.getMaxY()) toSet.setMaxY(box.getMaxY());
if(box.getMinX()<toSet.getMinX()) toSet.setMinX(box.getMinX());
if(box.getMinY()<toSet.getMinY()) toSet.setMinY(box.getMinY());
}
}
return toSet;
}
}

View File

@ -9,7 +9,9 @@ import org.gcube.application.cms.plugins.faults.IndexingException;
import org.gcube.application.cms.plugins.faults.InitializationException; import org.gcube.application.cms.plugins.faults.InitializationException;
import org.gcube.application.cms.plugins.faults.InvalidPluginRequestException; import org.gcube.application.cms.plugins.faults.InvalidPluginRequestException;
import org.gcube.application.cms.plugins.faults.InvalidProfileException; import org.gcube.application.cms.plugins.faults.InvalidProfileException;
import org.gcube.application.cms.plugins.model.ComparableVersion; import org.gcube.application.cms.sdi.engine.bboxes.BBOXByCoordinatePaths;
import org.gcube.application.cms.sdi.engine.bboxes.BBOXEvaluator;
import org.gcube.application.cms.sdi.engine.bboxes.BBOXPathScanner;
import org.gcube.application.geoportal.common.model.document.identification.IdentificationReference; import org.gcube.application.geoportal.common.model.document.identification.IdentificationReference;
import org.gcube.application.geoportal.common.model.document.identification.SpatialReference; import org.gcube.application.geoportal.common.model.document.identification.SpatialReference;
import org.gcube.application.geoportal.common.model.plugins.IndexerPluginDescriptor; import org.gcube.application.geoportal.common.model.plugins.IndexerPluginDescriptor;
@ -58,10 +60,18 @@ public class SDIIndexerPlugin extends SDIAbstractPlugin implements IndexerPlugin
static final PluginDescriptor DESCRIPTOR=new PluginDescriptor("SDI-Indexer-Plugin", static final PluginDescriptor DESCRIPTOR=new PluginDescriptor("SDI-Indexer-Plugin",
IndexerPluginDescriptor.INDEXER); IndexerPluginDescriptor.INDEXER);
static final ArrayList<BBOXEvaluator> BBOX_EVALUATORS=new ArrayList<>();
static { static {
DESCRIPTOR.setDescription("SDI Indexer. " + DESCRIPTOR.setDescription("SDI Indexer. " +
"Manage Centroids layers."); "Manage Centroids layers.");
DESCRIPTOR.setVersion(new Semver("1.0.0")); DESCRIPTOR.setVersion(new Semver("1.0.0"));
BBOX_EVALUATORS.add(new BBOXPathScanner());
BBOX_EVALUATORS.add(new BBOXByCoordinatePaths());
} }
@Override @Override
@ -151,30 +161,27 @@ public class SDIIndexerPlugin extends SDIAbstractPlugin implements IndexerPlugin
} else{ } else{
// unable to use current Spatial reference, try evaluating it // unable to use current Spatial reference, try evaluating it
log.debug("UseCaseDescriptor {} : Getting evaluation paths from useCaseDescriptor.. ", useCaseDescriptor.getId()); log.debug("UseCaseDescriptor {} : Getting evaluation paths from useCaseDescriptor.. ", useCaseDescriptor.getId());
List bboxEvaluationPaths = profileConfiguration.get("bboxEvaluation",List.class);
if(bboxEvaluationPaths==null || bboxEvaluationPaths.isEmpty())
throw new Exception("Missing configuration bboxEvaluation");
// for each configuration option try until found
GCubeSDILayer.BBOX toSet = null; GCubeSDILayer.BBOX toSet = null;
for(Object pathObj : bboxEvaluationPaths){ for(BBOXEvaluator evaluator : BBOX_EVALUATORS){
log.debug("UseCaseDescriptor {} : Evaluating path {} ", useCaseDescriptor.getId(),pathObj); log.trace("UCD {}, Project {}. Evaluating BBOX with {}",useCaseDescriptor.getId(),project.getId(),evaluator);
List<Object> bboxObjects = documentNavigator.getByPath(pathObj.toString()); try{
log.debug("UseCaseDescriptor {} : Evaluating path {} .. results {} ", useCaseDescriptor.getId(),pathObj,bboxObjects); if(evaluator.isConfigured(profileConfiguration)){
for(Object bboxObject : bboxObjects) { toSet=evaluator.evaluate(profileConfiguration,useCaseDescriptor,documentNavigator);
log.info("Matched path {}, value is {} ",pathObj.toString(),bboxObject); if(toSet!=null) {
GCubeSDILayer.BBOX box = Serialization.convert(bboxObject, GCubeSDILayer.BBOX.class); log.info("UCD {}, Project {}. Evaluated BBOX {} with method {}",
useCaseDescriptor.getId(),project.getId(),toSet,evaluator);
if(toSet == null) toSet = box; break;
if(box.getMaxX()>toSet.getMaxX()) toSet.setMaxX(box.getMaxX()); }
if(box.getMaxY()>toSet.getMaxY()) toSet.setMaxY(box.getMaxY()); }
}catch (Throwable t){
if(box.getMinX()<toSet.getMinX()) toSet.setMinX(box.getMinX()); log.warn("UCD {}, Project {}. Exception with {}",
if(box.getMinY()<toSet.getMinY()) toSet.setMinY(box.getMinY()); useCaseDescriptor.getId(),project.getId(),evaluator,t);
} }
} }
if(toSet== null)
if(toSet == null) throw new IndexingException("No BBOX has been evaluated from project");
throw new IndexingException("No BBOX has been found on paths : "+bboxEvaluationPaths);
Double pointX=(toSet.getMaxX()-toSet.getMinX()); Double pointX=(toSet.getMaxX()-toSet.getMinX());
Double pointY = toSet.getMaxY()-toSet.getMinY(); Double pointY = toSet.getMaxY()-toSet.getMinY();

View File

@ -1,34 +1,215 @@
{ {
"_id" : "MOSI", "_id": "GNA-MOSI",
"_version" : "1.0.0", "_mongoId": null,
"_name" : "GNA : MOSI", "_version": "1.0.0",
"_name": "GNA : MOSI",
"_description" : "Modulistica siti", "_description": "Modulistica siti",
"_creationInfo": { "_handlers": [
"_user" : {
"_username": "fabio.sinibaldi"
}
},
"_dataAccessPolicies" : [
{"_policy" : {"_read" : "own", "_write" : "own"}, "_roles":[]},
{"_policy" : {"_read" : "any", "_write" : "none"}, "_roles":["Guest"],
"_enforcer": {"_filter" : "{\"_lifecycleInformation._phase\" : {\"$eq\" : \"PUBLISHED\"}}"}},
{"_policy" : {"_read" : "any", "_write" : "none"}, "_roles":["Editor"]},
{"_policy" : {"_read" : "any", "_write" : "any"}, "_roles":["Admin"]}
],
"_handlers" : [
{ {
"_id" : "DEFAULT-SINGLE-STEP", "_id": "DEFAULT-SINGLE-STEP",
"_type" : "LifecycleManagement", "_type": "LifecycleManagement",
"_configuration" : { "_configuration": {
"step_access" : [ "step_access": [
{"STEP" : "PUBLISH", "roles" :[]} {
"STEP": "PUBLISH",
"roles": []
}
]
}
},
{
"_id": "SDI-Indexer-Plugin",
"_type": "Indexer",
"_configuration": {
"explicitFieldMapping": [],
"additionalLayers": [
{
"source": {
"url": "..."
},
"toSetTitle": ""
}
] ]
} }
} }
] ],
} "_dataAccessPolicies": [
{"_policy": {"_read": "any","_write": "own"},"_roles": []}
],
"_schema" :{
"CD" : {"_min":1, "_label" : "IDENTIFICAZIONE","_children" :{
"TSK" : {"_min":1,"_type": "DIRECT-CL", "_values": ["MOSI"],"_label":"Tipo modulo"},
"CMD" : {"_min":1,"_label":"Codice modulo"},
"ESC" : {"_min":1,"_label":"Ente schedatore"},
"ECP" : {"_min":1,"_label":"Ente competente per tutela"},
"CBC" : {"_label":"Identificativo scheda bene culturale"},
"ACC" : {"_max":-1,"_label":"ALTRO CODICE", "_children": {
"ACCE" : {"_label": "Ente/soggetto responsabile","_type": "DIRECT-CL", "_values": ["MATTM","Regione","Ente Territoriale","GNA"]},
"ACCC" : {"_label": "Codice Identificativo","_type": "DIRECT-CL", "_values": ["MATTM","Regione","Ente Territoriale","GNA"]},
"ACCS" : {"_label" : "Note"}}}}},
"OG" : {"_label": "AREA/SITO","_children": {
"AMB": {"_label":"Ambito di tutela MiBAC","_min":1,"_type" : "STRING-CONSTANT", "_value":"archelogico"},
"AMA": {"_label":"Ambito di applicazione","_min":1,"_type" : "STRING-CONSTANT", "_value":"archeologia preventiva"},
"OGD": {"_min":1,"_label":"Definizione","_type": "DIRECT-CL", "_values": [
{"ogd" : "area di materiale mobile", "ogt": []},
{"ogd" : "area di uso funerario", "ogt": ["necropoli","monumento funerario"]},
{"ogd" : "deposizione di materiale", "ogt": []},
{"ogd" : "elemento per la confinazione", "ogt": []},
{"ogd" : "elemento toponomastico", "ogt": []},
{"ogd" : "giacimento in cavita' naturale", "ogt": []},
{"ogd" : "giacimento palentonlogico", "ogt": []},
{"ogd" : "giacimento subacqueo", "ogt": ["carico di materiale di bordo"]},
{"ogd" : "infrastruttura agraria", "ogt": ["canalizzazione","terrazzamento a scopo agricolo","tracce di coltivazione"]},
{"ogd" : "infrastruttura assistenziale", "ogt": []},
{"ogd" : "infrastruttura di consolidamento", "ogt": []},
{"ogd" : "infrastruttura di servizio", "ogt": []},
{"ogd" : "infrastruttura idrica", "ogt": []},
{"ogd" : "infrastruttura portuale", "ogt": []},
{"ogd" : "infrastruttura viaria", "ogt": []},
{"ogd" : "insediamento", "ogt": ["villaggio nuragico"]},
{"ogd" : "luogo ad uso pubblico", "ogt": []},
{"ogd" : "luogo di attivita' produttiva", "ogt": []},
{"ogd" : "monumento", "ogt": []},
{"ogd" : "ritrovamento sporadico", "ogt": []},
{"ogd" : "sito non identificato", "ogt": ["strutture murarie","pavimentazione"]},
{"ogd" : "sito pluristratificato", "ogt": []},
{"ogd" : "struttura abitativa", "ogt": []},
{"ogd" : "struttura di fortificazione", "ogt": ["fossato","rocca","porta","torre"]},
{"ogd" : "strutture per il culto", "ogt": []},
{"ogd" : "tracce di frequentazione", "ogt": []},
{"ogd" : "area priva di tracce archeologiche", "ogt": []}]},
"OGT": {"_label":"Tipologia","_type": "Derivate-CL-Field", "_sourcePath": "$.OG.OGD","_field": "ogt"},
"OGN" : {"_label" : "Denominazione"}}},
"LC" : {"_label": "LOCALIZZAZIONE","_min":1,"_children": {
"LCS": {"_label":"Stato","_min":1,"_type": "DIRECT-STRING-CL", "_values": ["Italia"]},
"LCR": {"_label":"Regione","_min":1,"_type": "REMOTE-CL", "_url" : "","_mediatype": "application/json","_field": "lcs"},
"LCP": {"_label":"Provincia","_min":1,"_type": "Derivate-CL-Field", "_sourcePath": "$.LC.LCR","_field": "lcr"},
"LCC": {"_label":"Comune","_min":1,"_type": "Derivate-CL-Field", "_sourcePath": "$.LC.LCP","_field": "lcp"},
"LCI": {"_label":"Indirizzo"},
"PVL": {"_label":"Toponimo"},
"PVZ": {"_label":"Tipo di contesto","_type": "DIRECT-STRING-CL", "_values": ["contesto urbano","contesto suburbano","contesto territoriale","contesto subacqueo"]},
"ACB" : {"_label":"ACCESSIBILITA'","_children": {
"ACBA": {"_label":"Accessibilita'","_type": "DIRECT-STRING-CL", "_values": ["si","no","in parte","disponibile"]},
"ACBS": {"_label":"Note"}}}}},
"DT" : {"_label":"CRONOLOGIA","_min":1,"_children": {
"DTR": {"_label":"Riferimento tecnologico","_min":1},
"DTT": {"_label":"Note"}}},
"DA" : {"_label":"DATI ANALITICI","_min":1,"_children":{
"DES": {"_label":"Descrizione","_min":1},
"OGM": {"_label":"Modalita' di individuazione","_type": "DIRECT-STRING-CL", "_values": ["analisi di testimonianze materiali provenienti dall'area in esame[specificare in nota d'ambito il significato del lemma]",
"cartografia storica","dati bibliografici","dati di archivio","documentazione di indagini archeologiche pregresse", "fonti orali","fotointerpretazione/fotorestituzione",
"indagini geomorfiche [carotaggi etc.]","prospezioni geofisiche", "riprese da drone","ricognizione archologica/survey"]}}},
"GE" : {"_min":1,"_label":"GEOREFERENZIAZIONE","_children": {
"GEL": {"_min":1,"_label":"Tipo di localizzazione","_type": "DIRECT-STRING-CL", "_values": ["localizzazione fisica"]},
"GET": {"_min":1,"_label":"Tipo di georeferenziazione","_type": "DIRECT-STRING-CL", "_values": ["georeferenziazione puntuale","georeferenziazione lineare","georeferenziazione areale"]},
"GEP": {"_min":1,"_label":"Sistema di riferimento","_type": "DIRECT-STRING-CL", "_values": ["WGS84"]},
"GEC" : {"_min":1,"_label":"COORDINATE","_children": {
"GECX": {"_min":1,"_label":"Coordinata x"},
"GECY": {"_min":1,"_label":"Coordinata y"}}},
"GPT": {"_min":1,"_label":"Tecnica di georeferenziazione","_type": "DIRECT-STRING-CL", "_values": ["rilievo da cartografia con sopralluogo","rilievo da cartografia senza sopralluogo",
"rilievo da foto aerea con sopralluogo","rilievo da foto aerea senza sopralluogo","rilievo da satellite","rilievo tradizionale","rilievo tramite GPS",
"rilievo tramite punti d'appoggio fiduciari o trigonometrici","stereofotogrammetria"]},
"GPM": {"_min":1,"_label":"Metodo di posizionamento","_type": "DIRECT-STRING-CL", "_values": ["posizionamento esatto","posizionamento approssimato",
"posizionamento con rappresentazione simbolica"]},
"GPB" : {"_min":1,"_label":"BASE CARTOGRAFICA","_children": {
"GPBB": {"_label":"Descrizione sintetica"}}}}},
"TU" : {"_min":1,"_label":"CONDIZIONE GIURIDICA E PROVVEDIMENTI DI TUTELA","_children": {
"CDG": {"_min":1,"_label":"CONDIZIONE GIURIDICA"},"_children" :{
"CDGG": {"_min":1,"_label":"Indicazione generica","_type": "DIRECT-STRING-CL", "_values": ["proprieta' Stato","proprieta' Ente pubblico territoriale",
"proprieta' Ente pubblico non territoriale","proprieta' privata","proprieta' Ente religioso cattolico","proprieta' Ente religioso non cattolico","proprieta' Ente straniero in Italia",
"proprieta' mista pubblica/privata","proprieta' mista pubblica/ecclesiastica","proprieta' mista privata/ecclesiastica","proprieta' persona giuridica senza scopo di lucro",
"detenzione Stato","detenzione Ente religioso cattolico","detenzione Ente religioso non cattolico","detenzione Ente straniero in Italia","detenzione mista pubblica/ privata",
"detenzione mista pubblica/ecclesiastica","detenzione mista privata/ ecclesiastica", "detenzione persona giuridica senza scopo di lucro","condizione giuridica mista","dato non disponibile","NR (recupero pregresso)"]}},
"BPT": {"_min":1,"_label":"Provvedimenti di tutela - sintesi","_type": "DIRECT-STRING-CL", "_values": ["si","no","dato non disponibile"]},
"NVC": {"_max":-1,"_label":"PROVVEDIMENTI DI TUTELA","_children": {
"NVCT": {"_label":"Normativa di riferimento","_type": "DIRECT-STRING-CL", "_values": ["L. 364/1909","L. 778/1922","L. 1089/1939","L. 1497/1939","D.Lgs. 490/1999","D.Lgs 42/2004"]},
"NVCM": {"_label":"Provvedimento di tutela","_type": "DIRECT-STRING-CL", "_values": ["tutela diretta","tutela indiretta","tutela ope legis [art. 142, co. 1, lett. m]"]},
"NVCE": {"_label":"Estremi provvedimento"},
"NVCP": {"_label":"Estensione del vincolo"},
"NWCN": {"_label":"Note"}}},
"STU":{"_label": "STRUMENTI URBANISTICO-TERRITORIALI","_children": {
"STUE": {"_label":"Ente/amministrazione"},
"STUT": {"_label":"Tipo strumento"},
"STUS": {"_label":"Note"}}}}},
"RE" : {"_min":1,"_label":"INDAGINI","_children": {
"RCG": {"_min":1,"_label":"RICOGNIZIONE ARCHEOLOGICA","_children": {
"RCGV": {"_min":1,"_label":"Denominazione ricognizione"},
"RCGD": {"_min":1,"_label":"Riferimento cronologico"},
"RCGT": {"_label":"Situazione ambientale"},
"RCGE": {"_label":"Motivo","_type": "DIRECT-STRING-CL", "_values": ["archeologia preventiva"]}}},
"MTP" : {"_min":1,"_label":"PRESENZA DI MATERIALI","_children": {
"MTPC": {"_label":"Categoria materiale","_type": "DIRECT-STRING-CL", "_values": ["AMBRA","CERAMICA","CORALLO","CUOIO","INDUSTRIA LITICA","INTONACO","INTONACO DIPINTO","LATERIZI",
"MATERIALE LAPIDEO","LEGNO","METALLO","OSSO-CORNO-AVORIO","PIETRE DURE-GEMME","PIETRA OLLARE","REPERTI ANTROPOLOGICI","REPERTI ARCHEOBOTANICI","REPERTI NUMISMATICI","REPERTI FITTILI",
"REPERTI ARCHEOLOGICI","REPERTI ORGANICI","REPERTI SCULTOREI","SCARTI DI PRODUZIONE","TESSUTO","VETRO"]},
"MTPZ": {"_label":"Note"}}},
"MTZ": {"_label":"Assenza di materiali","_type": "DIRECT-STRING-CL", "_values": ["MNP","NR"]},
"FOI" : {"_label" :"FOTOINTERPRETAZIONE/FOTORESTITUZIONE","_children": {
"FOIT" : {"_label": "Tipo immagine", "_type": "DIRECT-STRING-CL", "_values": ["fotografia aerea","fotografia satellitare"]},
"FOIR" : {"_label": "Riferimento cronologico"},
"FOIA" : {"_label": "Origine anomalia","_type": "DIRECT-STRING-CL", "_values": ["origine naturale","origine antropica","origine incerta"]},
"FOIQ" : {"_label": "Tipo anomalia","_type": "DIRECT-STRING-CL", "_values": ["anomalia puntuale","anomalia lineare","anomalia areale"]},
"FOIF" : {"_label": "Classificazione anomalia","_max":-1,"_type": "DIRECT-STRING-CL", "_values": ["affioramento","allineamento","macchia circolare","microrilievo","paleoalveo","tracce non identificate"]},
"FOIO" : {"_label": "Affidabilita'","_type": "DIRECT-STRING-CL", "_values": ["scarsa","discreta","buona","ottima"]},
"FOIN" : {"_label": "Note"}}}}},
"IP" : {"_label": "INDAGINI PREGRESSE","_children": {
"IAP" : {"_label": "INDAGINI ARCHEOLOGICHE PREGRESSE","_min": -1,"_children": {
"IAPN" : {"_label": "Denominazione indagine - Obbligatorieta' di contesto"},
"IAPR" : {"_label": "Riferimento cronologico - Obbligatorieta' di contesto"},
"IAPI" : {"_label": "Informazioni sull'indagine"},
"IAPS" : {"_label": "Note"}}}}},
"MT" : {"_label": "DATI TECNICI","children": {
"MIS" : {"_label": "MISURE","_children": {
"MISZ" : {"_label": "Tipo di misura","_type": "DIRECT-STRING-CL", "_values": ["area"]},
"MISU" : {"_label": "Unita' di misura","_type": "DIRECT-STRING-CL", "_values": ["mq"]},
"MISM" : {"_label": "valore"}}},
"MTA" : {"_label" : "ALTIMETRIA/QUOTE","_max": -1,"_children" : {
"MTAP" : {"_label" : "Riferimento"},
"MTAM" : {"_label" : "Quota minima s.l.m."},
"MTAX" : {"_label" : "Quota massima s.l.m."},
"MTAR" : {"_label" : "Quota relativa"},
"MTAS" : {"_label" : "Note"}}}}},
"VR" : {"_label": "VALUTAZIONE/INTERPRETAZIONE","_min": 1,"_children": {
"VRP" : {"_label": "VALUTAZIONE POTENZIALE ARCHEOLOGICO","_min": 1,"_children": {
"VRPI" : {"_label": "Interpretazione","_min": 1},
"VRPA" : {"_label": "Affidabilita'","_min": 1,"_type": "DIRECT-STRING-CL", "_values": ["scarsa","discreta","buona","ottima"]},
"VRPV" : {"_label": "Valutazione nell'ambito del contesto"},
"VRPS" : {"_label": "Potenziale - sintesi","_min": 1,"_type": "DIRECT-STRING-CL", "_values": ["potenziale alto","potenziale medio","potenziale basso","potenziale nullo","potenziale non valutabile"]},
"VRPN" : {"_label": "Note"}}},
"VRR" : {"_label" : "VALUTAZIONE RISCHIO ARCHEOLOGICO", "_min": 1,"_max": -1,"_children": {
"VRRP" : {"_label": "Codice progetto di riferimento","_min": 1},
"VRRO" : {"_label": "Distanza dall'opera in progetto","_min": 1},
"VRRR" : {"_label": "Valutazione rispetto all'opera in progetto","_min": 1},
"VRRS" : {"_label": "Rischio - sintesi","_min": 1,"_type": "DIRECT-STRING-CL","_values": ["rischio alto","rischio medio","rischio basso","rischio nullo"]},
"VRRN" : {"_label": "Note"}}}}},
"DO" : {"_label" : "DOCUMENTAZIONE", "_min": 1,"_children": {
"FTA" : {"_label" : "DOCUMENTAZIONE FOTOGRAFICA","_min": 1,"_children": {
"FTAN" : {"_label": "Codice identificativo"},
"FTAX" : {"_label": "Genere","_min": 1,"_type": "DIRECT-STRING-CL", "_values": ["documentazione allegata","documentazione esistente"]},
"FTAP" : {"_label": "Tipo", "_min": 1,"_type": "DIRECT-STRING-CL", "_values": ["immagine area","immagine satellitare","immagine b/n","immagine colore"]},
"FTAC" : {"_label": "Collocazione"}}},
"DRA" : {"_label" : "DOCUMENTAZIONE GRAFICA E CARTOGRAFICA","_children": {
"DRAN" : {"_label": "Codice identificativo"},
"DRAX" : {"_label": "Genere","_type": "DIRECT-STRING-CL", "_values": ["documentazione allegata","documentazione esistente"]},
"DRAT" : {"_label": "Tipo", "_type": "DIRECT-STRING-CL", "_values": ["cartografia storica","planimetria","posizionamento topografico","prospetto","sezione"]},
"DRAC" : {"_label": "Collocazione"},
"DRAK" : {"_label": "Nome file digitale"}}},
"FNT" : {"_label" : "FONTI E DOCUMENTI","_children" : {
"FNTI" : {"_label": "Codice identificativo"},
"FNTX" : {"_label": "Genere","_type": "DIRECT-STRING-CL", "_values": ["documentazione allegata","documentazione esistente"]},
"FNTP" : {"_label": "Tipo", "_type": "DIRECT-STRING-CL", "_values": ["relazione di verifica preventiva dell'interesse archeologico","scheda dell'area",
"documentazione di ricognizione archeologica","documentazione di scavo archeologico","referto di indagine archeometrica/diagnostica","fonte d'archivio","pubblicazione"]},
"FNTS" : {"_label": "Collocazione"},
"FNTK" : {"_label": "Nome file digitale"}}},
"BIB" : {"_label": "BIBLIOGRAFIA","_max":-1,"_children": {
"BIBR" : {"_label": "Abbreviazione"},
"BIBX" : {"_label": "Genere","_type": "DIRECT-STRING-CL","_values": ["bibliografia specifica"]},
"BIBM" : {"_label": "Riferimento bibliografico completo"},
"BIBN" : {"_label": "Note"}}}}},
"CM" : {"_label": "CERTIFICAZIONE E GESTIONE DI DATI","_min":1,"_children": {
"FUR" : {"_label" : "Funzionario responsabile","_min": 1},
"CMR" : {"_label" : "Responsabile contenuti","_min": 1},
"CMC" : {"_label" : "Responsabile redazione modulo","_min": 1},
"CMA" : {"_label" : "Anno di redazione","_min": 1},
"ADP" : {"_label" : "Profilo di accesso","_min": 1,"_type": "DIRECT-STRING-CL","_values": ["1","2","3"]}}}}
}