e.Toscana Compliance 
Request for Comments: 54
Del: 22/11/2007 
Categoria: Infrastrutturale

RFC Codifiche e.Toscana


1. Introduzione
===============
L'infrastruttura di cooperazione applicativa (CART)  uno strumento che 
abilita la cooperazione tra applicazioni e sistemi attraverso lo scambio di 
informazione e l'invocazione di servizi.
I contenuti gestiti dalle applicazioni che partecipano alla cooperazione 
sono descritti dagli RFC applicativi e.Toscana. In particolare un RFC Applicativo
descrive per ogni dominio applicativo le interazioni previste, il tipo e il 
formato XML dell'informazione scambiata.

In un numero rilevante di domini, l'informazione scambiata include 
anche codici che individuano entit diverse del contesto. Esempi rilevanti sono 
rappresentati dai domini della Rete degli URP, del SUAP o del Protocollo Informatico,
che prevedono l'uso di codici per l'identificazione di Enti di PA, uffici, soggetti, o
pratiche amministrative.

L'uso di codici in un contesto di cooperazione evidenzia la necessit di definire 
e condividere codifiche di riferimento che permettano a tutti gli Enti participanti di 
identificare in modo non ambiguo le entit codificate e interpretare e 
attribuire correttamente i contenuti informativi che transitano attraverso 
l'infrastruttura. 

La definizione di codifiche di riferimento ha un numero di vantaggi:
 - propone agli Enti uno standard di codifica che pu essere utilizzato anche 
   internamente all'Ente; 
 - permette di creare tabelle che mettano in relazione eventuali codici locali 
   usati dall'Ente con quelli utilizzati per la cooperazione con altri Enti; 
 - permette di usare uno stesso codice in domini diversi 
   (ad esempio il codice utilizzato per identificare un Ente potrebbe
   essere lo stesso sia nel dominio del SUAP che della rete URP o per l'anagrafe)
 
Per il motivo di cui all'ultimo punto precedente, qualora si preveda la possibilit di 
usare una stessa codifica in domini applicativi diversi,  opportuno che questa venga 
posta all'esame della comunit attraverso un RFC infrastrutturale dedicato.

Obiettivo di questo RFC  quello di descrivere la struttura di un RFC per la definizione 
delle codifiche e di definire il formato con cui deve essere rappresentata la codifica stessa.


2. La struttura di un RFC di codifica
=====================================
Un documento RFC infrastrutturale di codifica deve includere le seguenti sezioni:
 1. Contesto 
 2. Definizione della codifica
 3. Bibliografia

La sezione "Contesto" descrive le finalit della codifica e le entit oggetto della 
codifica (Enti o di pratiche amministrative). Nella descrizione 
possono essere citati a titolo di esempio i domini per i quali si prevede 
applicazione della codifica al momento della stesura dell'RFC.

La sezione "Definizione della codifica" riporta la descrizione formale della 
codifica secondo le modalit illustrate nel seguito del documento. 
In questa sezione devono essere inclusi anche esempi di codifiche di entit 
conformi alla descrizione formale riportata.

La sezione "Bibliografia" include almeno: 
 - il riferimento a questo RFC; 
 - nel caso in cui ci si riferisca ad una codifica standard definita da un soggetto
   terzo (es una codifica ISTAT), il riferimento ai documenti di specifica della codifica.


3. La descrizione formale della codifica
========================================
La descrizione formale della codifica deve essere effettuata attraverso XML Schema.
Il formato della definizione dipende dalla tipologia di codice. 
Allo stato attuale si distinguono due tipi di codici:
 - Enumerazioni: codici esprimibili elencando tutti i possibili casi;
 - Derivazioni: codici non esprimibili per enumerazione in quanto derivati da 
   una elaborazione dell'informazione associata all'entit identificata.
  
  
3.1. Enumerazioni 
-----------------
Una enumerazione  descritta attraverso un insieme finito e prestabilito di identificativi. 
In XML Schema la descrizione formale di questo tipo di codice  fornita attraverso 
un elemento <enumeration>:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
 targetNamespace="..."  xmlns:tns="..." elementFormDefault="qualified">

  <simpleType name="NomeCodice">
    	<restriction base="string">
    		<enumeration value="CODICE_ABC">
    			<annotation>
    				<documentation>
						  Descrizione del significato del codice CODICE_ABC
    				</documentation>
    			</annotation>    		    		    		    		    		    		
    		</enumeration>
        <enumeration value="CODICE_EFG">
    			<annotation>
    				<documentation>
						  Descrizione del significato del codice CODICE_EFG
    				</documentation>
    			</annotation>    		    		    		    		    		    		
    		</enumeration>
      </restriction>
  </simpleType>
</schema>

Di seguito si riporta un esempio di codifica descritta attraverso enumerazione:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
 targetNamespace="..."
 xmlns:tns="..."
 elementFormDefault="qualified">
 
 <simpleType name="Provincia">
    	<restriction base="string">
    		<enumeration value="FI">
    			<annotation>
    				<documentation>
						 Provincia di Firenze 		
    				</documentation>
    			</annotation>    		    		    		    		    		    		
    		</enumeration>
    		<enumeration value="PO">
    			<annotation>
    				<documentation>
						 Provincia di Prato		
    				</documentation>
    			</annotation>    		    		    		    		    		    		    		
    		</enumeration>
    		<enumeration value="PT">
    			<annotation>
    				<documentation>
						Provincia di Pistoia
    				</documentation>
    			</annotation>    		    		    		    		    		    		    		    		
    		</enumeration>
    		[ .... ]
    	</restriction>
    </simpleType>
</schema>
  

3.2. Derivazioni
----------------
Nel caso in cui la codifica non sia esprimibile tramite enumerazione di 
tutti i possibili valori (ad esempio nel caso in cui il codice sia calcolato a 
partire dalla entit identificata), si definisce solo la struttura del codice 
attraverso una espressione regolare a cui si associa una descrizione della 
procedura di derivazione del codice (qualora questa non sia gi documentata altrove). 
Un esempio  il seguente:

<?xml version="1.0" encoding="UTF-8"?>
<schema
	xmlns="http://www.w3.org/2001/XMLSchema"
	targetNamespace="http://www.example.org/Esempio"
	xmlns:tns="http://www.example.org/Esempio"
	elementFormDefault="qualified">
	
 <simpleType name="codiceFiscale">
  <annotation>
    <documentation>La struttura del codice e' documentata alla URL
     http://www.agenziaentrate.it/ilwwcm/connect/Nsi/Servizi/Codice+fiscale+-+tessera+sanitaria/Codice+fiscale/
    </documentation>
  </annotation>
  <restriction base="string">
    <pattern value="[a-zA-Z]{6}[0-9]{2}[a-zA-Z][0-9]{2}[a-zA-Z][0-9]{3}[a-zA-Z]"/>
  </restriction>
 </simpleType>
</schema>

Il "codiceFiscale" non  quindi espresso tramite enumerazione ma  comunque definito a 
livello di struttura.




Bibliografia
============
[1] "RFC Applicativo e.Toscana", RFC 17, 
http://web.rete.toscana.it/eCompliance/portale/mostraRFC?idRev=55&idRfc=17

[2] "XML Schema: patterns for data type restrictions" 
http://www.w3.org/TR/xmlschema-2/#dt-pattern
