Docs Italia beta

Documenti pubblici, digitali.

4. Contribuire al National Data Catalog

Il documento descrive le modalità di contribuzione a disposizione delle Organizzazioni, con un focus particolare sulle caratteristiche che i repository gestiti dalle stesse devono avere per poter essere processati dal NDC.

L’architettura del Catalogo è definita in Architettura

4.1. Terminologia

Questa sezione utilizza le note di lettura, definizioni e acronimi indicati nel Capitolo 2, oltre ai termini definiti di seguito.

Il termine «harvesting» identifica il processo di raccolta funzionale alla pubblicazione su NDC delle informazioni contenute nei repository semantici. Nel quadro dell’harvesting, si adottano i seguenti termini:

  • «ERRORE» indica che l’harvesting è terminato in maniera anomala;

  • «WARNING» indica che l’harvesting ha notificato un messaggio di allerta ma il processamento non è terminato;

  • «IGNORATA» indica che l’harvesting non ha processato una specifica risorsa (e.g. un file, una directory) ma che ciò non costituisce né un ERRORE né un WARNING.

4.2. Registrazione dell’istituzione

TODO:

Come e a chi si registra l’URL del repository? Quali altri dati descrittivi dell’istituzione sono necessari? Email? Repository

I seguenti paragrafi descrivono le linee guida che l’Organizzazione DEVE seguire nel caso in cui voglia pubblicare le risorse semantiche in un repository da sé gestito. È disponibile pubblicamente un repository di esempio creato a partire da tali linee guida.

4.3. Contenuto del repository

Ogni repository può contenere una o più risorse semantiche che verranno elaborate dal NDC. Quelle supportate sono:

  • Ontologie;

  • Vocabolari controllati (e.g., tassonomie, code list, tesauri);

  • Schemi dati in formato OAS3 (OpenAPI Specifications versione 3). Future versioni del catalogo possono supportare altre risorse semantiche ed altri formati.

4.4. File richiesti e layout del repository

Il repository DEVE contenere i seguenti file:

  • ndc-config.yaml: referenziando la posizione delle risorse semantiche ed ulteriori informazioni necessarie alla pubblicazione su NDC;

  • publiccode.yaml: contenente tutte le informazioni richieste dal Catalogo del Riuso.

Un repository è a tutti gli effetti un oggetto pubblico indicizzato dal Catalogo del Riuso, e DEVE contenere un file publiccode.yml conforme alle relative Linee Guida col riferimento al codice IPA dell’ente che gestisce il repository.

Queste informazioni verranno utilizzate anche per la continuità operativa del NDC.

...
maintenance:
  contacts:
email: info@teamdigitale.governo.it
name: Dipartimento per la Trasformazione Digitale
it:
  riuso:
    codiceIPA: pcm

Tutte le risorse fornite DEVONO risiedere all’interno della cartella assets/ referenziato in ndc-config.yaml. Le risorse al di fuori di assets/ non saranno elaborate.

Ogni tipo di asset (ontologie, vocabolari controllati, schemi) DEVE risiedere nella sua cartella specifica con un nome predefinito, referenziato in ndc-config.yaml.

I nomi di file e directory DEVONO corrispondere al pattern [A-ZA-Z0-9 _-.]{, 64}. Gli spazi NON DEVONO essere utilizzati nei file o nei nomi delle directory. Le directory DEVONO essere in minuscolo.

Il nome di ciascun file DEVE corrispondere al nome della relativa risorsa nell’URI utilizzato per referenziarla. I nomi dei file di una directory DEVONO corrispondere al nome della directory che li contiene, a meno dell’estensione degli stessi.

I contenuti degli asset DEVONO essere codificati in UTF-8 o ASCII.

Ogni risorsa DEVE risiedere sotto la sua cartella specifica:

  • ontologies: in assets/ontologies/;

  • Vocabolari controllati: in assets/controlled-vocabularies/;

  • Schemi: in assets/schemas/.

Ad esempio, il percorso di MyOntology sarà assets/ontologies/MyOntology/.

Inoltre, DEVONO essere creati e pubblicati sul repository del w3id i file htaccess che definiscono le regole di redirect delle URI, così come descritto nel paragrafo dedicato; lo scopo è di rendere resilienti e stabili le URI con le quali si referenziano le risorse semantiche.

4.5. Formati supportati

I file DEVONO essere codificati in UTF-8.

Le estensioni accettate per ciascuna tipologia di risorsa semantica sono descritte nei paragrafi dedicati.

Ulteriori serializzazioni (e.g. RDF/XML, JSON-LD, ..):

  • non verranno processate da NDC;

  • NON DOVREBBERO essere pubblicate, poiché verranno generate automaticamente dal NDC a partire dai file Turtle;

  • se presenti, DOVREBBERO essere generate automaticamente a partire dalla serializzazione in formato Turtle.

I file OAS3, JSON e JSON-LD DEVONO essere pubblicati in formato YAML, usando l’estensione .yaml o .yamlld a seconda del formato.

4.6. Controlli automatici

Il repository DOVREBBE utilizzare strumenti di continuous integration come github-actions o gitlab-ci per verificare la consistenza dei contenuti e la sintassi dei file.

Il modello di repository per gli asset semantici https://github.com/teamdigitale/dati-semantic-cookiecutter contiene degli esempi di controlli eseguibili sia in locale che nelle pipeline di continuous integration che verificano, tra l’altro:

  • la validità sintattica degli asset semantici;

  • la consistenza dello stile adottato per la pubblicazione.

4.7. Versionamento

TODO: definire il versionamento anche per gli schemi nel paragrafo dedicato

Le directory degli asset POSSONO essere avere sub-directory per supportare il versionamento. Il nome delle sub-directory DEVE rispettare il pattern:

(latest|v?[0-9]+(\.[0-9]+){0,2}).

Una directory contenente asset NON DEVE contenere contemporaneamente sub-directory versionate con e senza il prefisso v perché questo rende impossibile ordinare le versioni.

Sei esempi di path validi per le sub-directory. Notare che le versioni dell’ontologia Car non sono prefissate da v mentre quelle di Person sono tutte prefissate da v.

└── assets
    ├── ontologies
       └── Car
       |   ├── 1.3
       |   ├── 202101
       |   └── 4.5.6
       └── Person
           ├── v1.3
           └── v4.5.6
    └── schemas
        └── Person
            └── latest

Sei esempi di path non validi, anche perché le directory contengono contemporaneamente versioni prefissate da v che senza prefisso.

└── assets
    ├── ontologies
       └── MyOntology
           ├── v1.4-beta
           ├── versione 2.9
           ├── v4..6
           ├── v.3
           └── 4.5.

Il Catalogo elabora solo:

  • la cartella latest se presente;

  • La cartella con l’ultima versione, secondo la sintassi indicata dal semantic versioning.

4.7.1. File di Documentazione

Le directory degli asset POSSONO contenere file di documentazione in formato Markdown. L’estensione del file DEVE essere .md (ad esempio README.md). Questi file vengono ignorati durante il processamento da parte di NDC.

4.7.2. Esempi

Ad esempio, analizziamo un repository strutturato come segue

┌─ README.md
├─ publiccode.yaml
|
├─ assets/ontologies/
│  ├─ Onto1/
│    ├─ onto1.ttl
│    └─ onto1.rdf
│  ├─ Onto2/
│    └─ README.md
│  ├─ Onto3/
│    ├─ Other/
│      └─ temp.md
│    └─ onto3.ttl
│  ├─ Onto4/
│    └─ latest/
│       ├─ onto1.ttl
│       └─ onto1.rdf
│  └─ notes.md
|
└─ assets/controlled-vocabularies/
   └─ ...

Il repository non contiene schemi, quindi NDC non aggiungerà schemi al catalogo durante l’harvesting. Questo non rappresenta un problema e non è considerato un errore.

I file informativi (e.g. README.md, notes.md) presenti sia nella radice che nelle sottodirectory vengono ignorati durante l’harversting.

Per quanto riguarda la directory Onto1/:

  • essa non contiene sotto-directory né altre directory al suo interno ed è quindi una cartella foglia. Quindi viene processata come potenzialmente contenente un’ontologia;

  • contiene un file RDF/Turtle che verrà processato;

  • contiene un altro file RDF, plausibilmente una serializzazione diversa degli stessi contenuti del file .ttl in RDF/XML. Poiché NDC processa solo i file di tipo text/turtle con estensione .ttl, questo file viene ignorato.

La directory Onto2/ non contiene file .ttl: questo viene segnalato solamente come WARNING.

La directory Onto3/ ha una sottodirectory, quindi non è considerata come contenitore di ontologia, ma come directory intermedia nel cammino per altre directory foglia: il file onto3.tll è ignorato e non processato.

La directory Onto4/ contiene una sottodirectory latest/ che contiene un file .ttl, quindi viene processata come potenzialmente contenente un’ontologia.

4.8. Ontologie

Le ontologie pubblicate DEVONO essere conformi alle relative Linee guida nazionali.

Le ontologie DEVONO essere pubblicate solo in formato RDF/Turtle (media-type text/turtle) e l’estensione del file DEVE essere .ttl.

Le ontologie DEVONO utilizzare delle directory versionate come descritto in versionamento.

4.8.1. Esempi

Esempio di alberatura contenente i file che definiscono un’ontologia. In questo caso viene processata solo la directory latest/. Nell’esempio, l’alberatura contiene una serie di file di documentazione opzionali che non vengono processati.

assets/
  ontologies/
    MyOntology/
      CHANGELOG.md
      README.md
      v1.2/
        MyOntology.ttl
      v1.1/
        MyOntology.ttl
      latest/
        MyOntology.ttl
        LATEST.md

4.8.2. Versionamento

All’interno delle sotto-directory di ontologies/, NDC processa solo la directory con la versione più recente, ossia:

  • latest/ se presente;

  • quella maggiore secondo il seguente ordinamento:

    • tra due versioni espresse come forme numeriche (con punti), si segue l’ordinamento comunemente condiviso per cui i numeri a sinistra sono i più significativi

    • qualora due versioni abbiano lunghezza diversa ma una sia prefisso dell’altra, la più lunga viene considerata più recente; ad esempio v4.5 è considerata obsoleta in presenza di v4.5.2.

Un repository PUO’ contenere versioni precedenti delle ontologie per fini storici, al di là del versionamento supportato da git.

L’harvesting delle ontologie considera che le directory che contengono ontologie possano essere versionate, non i singoli file. Questo vale anche per le sotto-directory.

4.8.2.1. Esempi

Le directory versionate possono trovarsi in ogni punto dell’alberatura delle ontologie, discendendo verso le foglie della struttura gerarchica.

Sono esempi validi:

┌─ ontologies/
│  ├─ Onto1/
│    ├─ latest/
│      └─ onto1.ttl
│    ├─ v0.5/
│      └─ onto1.ttl
│    ├─ v0.6/
│      └─ onto1.ttl
│  ├─ Onto2/
│    ├─ 0.5/
│      └─ onto2.ttl
│    └─ 0.6/
│       └─ onto2.ttl
│  └─ ...
└─ ...

4.9. Vocabolari controllati

I vocabolari controllati pubblicati DEVONO essere conformi alle relative Linee guida nazionali.

I vocabolari controllati DEVONO essere pubblicati solo in formato RDF/Turtle (media type text/turtle) e l’estensione del file DEVE essere .ttl.

I vocabolari DEVONO utilizzare delle directory versionate come descritto in versionamento.

4.9.1. Proiezione in formato CSV

Le directory del vocabolario controllato DOVREBBERO contenere una proiezione in formato CSV del vocabolario insieme ai metadati necessari per mappare i campi del CSV alle risorse presenti nell’RDF. L’estensione del file DEVE essere .csv.

I metadati del CSV DOVREBBERO essere pubblicati in un frictionless data package, posizionato nella stessa directory ed annotato con tramite le specifiche indicate in REST API Linked Data Keywords.

La proiezione CSV deve rispettare i seguenti requisiti:

  1. è possibile inserire dei commenti, che iniziano con il carattere #;

  2. la prima riga utile DEVE contenere i nomi delle colonne;

  3. le righe seguenti DEVONO contenere i valori delle risorse separati da , (virgola) e racchiusi in " (doppie virgolette);

  4. la proiezione DOVREBBE essere generata utilizzando strumenti quali JSON-LD framing.

Questa proiezione in formato CSV viene esposta dalla NDC tramite API REST.

I metadati di cui sopra DEVONO essere espressi tramite un @context JSON-LD 1.1.

4.9.2. Esempi

Di seguito l’esempio di un’alberatura contenente un vocabolario controllato e la sua proiezione in formato CSV generata utilizzando le informazioni di framing indicate in framing.yamlld. Il file datapackage.yaml contiene i metadati del CSV.

assets/
  controlled-vocabulary/
    my-codelist/
      CHANGELOG.md
      README.md
      my-codelist.ttl
      my-codelist.csv
      datapackage.yaml
      framing.yamlld

Il file my-codelist.ttl contiene il vocabolario controllato in formato RDF/Turtle.

@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix at: <http://publications.europa.eu/ontology/authority/> .
@prefix atold: <http://publications.europa.eu/resource/authority/> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix c: <http://publications.europa.eu/resource/authority/country/> .

c:ITA a skos:Concept;
  dc:identifier "ITA";
  skos:prefLabel "Italy"@en, "Italia"@it, "Italie"@fr;
  skos:inScheme atold:country
.
c:DEU a skos:Concept;
  dc:identifier "DEU";
  skos:prefLabel "Germany"@en, "Germania"@it, "Allemagne"@fr;
  skos:inScheme atold:country
.
c:ESP a skos:Concept;
  dc:identifier "ESP";
  skos:prefLabel "Spain"@en, "Spagna"@it, "Espagne"@fr;
  skos:inScheme atold:country
.

The file my-codelist.csv contains the projection of the controlled vocabulary in CSV format.

# It is possible to add comments
#   metadata is into datapackage.yaml
"id","label_en","label_it","label_fr"
"ITA","Italy","Italia","Italie"
"DEU","Germany","Germania","Allemagne"
"ESP","Spain","Spagna","Espagne"

Datapackage contains all metadata information about the CSV file.

# Datapackage.yaml
profile: data-package

resources:
  - name: my-codelist
    path: my-codelist.csv
    profile: tabular-data-resource
    dialect:
      delimiter: ","
      doubleQuote: true
      lineTerminator: ""
    schema:
      x-jsonld-type: skos:Concept
      x-jsonld-context:
        "@context":
          skos: http://www.w3.org/2004/02/skos/core#
          dc: http://purl.org/dc/elements/1.1/
          at: http://publications.europa.eu/ontology/authority/
          atold: http://publications.europa.eu/resource/authority/
          c: http://publications.europa.eu/resource/authority/country/
          id: dc:identifier
          label_it:
            "@id": skos:prefLabel
            "@language": it
          label_en:
            "@id": skos:prefLabel
            "@language": en
          label_fr:
            "@id": skos:prefLabel
            "@language": fr
      fields:
        - name: id
          type: string
        - name: label_en
          type: string
        - name: label_it
          type: string
        - name: label_fr
          type: string

4.9.3. Versionamento

La versione attuale di NDC pubblica solamente l’ultima versione dei vocabolari controllati. L’Erogatore è responsabile della pubblicazione delle versioni precedenti dei vocabolari tramite il repository git.

I vocabolari che pubblicano informazioni soggette a variazioni nel tempo, DOVREBBERO versionare i singoli record. Si veda a questo proposito il vocabolario controllato dei Paesi pubblicato dall’Unione Europea: https://publication.europa.eu/resource/authority/country/ dove i singoli record contengono l’intervallo di validità dei dati.

4.10. Schemi OpenAPI

Gli schemi pubblicati devono essere conformi alle relative Linee guida nazionali.

Gli schemi DEVONO utilizzare delle directory versionate come descritto in versionamento.

Gli schemi per le API devono essere pubblicati in formato OpenAPI3 (corrispondenti ad una estensione di JSON Schema Draft 4), incorporato nella sezione #/components/schema del file OAS compatibilmente con le Linee Guida per l’interoperabilità tecnica.

L’estensione del file DEVE essere .oas3.yaml.

In futuro potranno essere supportati altri formati di schemi (e.g. versioni più recenti di JSON Schema).

Il file YAML DOVREBBE contenere i riferimenti semantici descritti nel documento I-D-polli-restapi-ld-keywords attraverso:

  • il campo custom x-jsonld-context contenente un @context JSON-LD conforme alle indicazioni contenute in JSON-LD 1.1;

  • il campo custom x-jsonld-type contenente il riferimento ad un rdf:type.

I metadati associati DEVONO essere pubblicati solo in formato RDF/Turtle (media type text/turtle) e l’estensione del file DEVE essere .ttl. Questo file DOVREBBE essere generato automaticamente dal documento OpenAPI.

Gli schemi forniti POSSONO essere verificati sintatticamente utilizzando l’OpenAPI Checker.

4.10.1. Schema bundling

Quando si pubblica un documento OAS contenente la specifica di un’API, è utile dereferenziare ed accorpare in un unico file tutti i riferimenti a schemi ed operazioni. Questo processo viene detto bundling. Il prodotto sarà un singolo OAS document (e.g. un file YAML) utile alla validazione sintattica e semantica dell’API. Questo meccanismo permette di inserire nell’IDL tutte le informazioni semantiche necessarie a descrivere l’API in base sia ai riferimenti ontologici che agli schemi utilizzati.

4.10.2. Esempi

Un esempio di file OAS3 metadatato con i campi x-jsonld-context e x-jsonld-type:

openapi: 3.0.1
...
components:
  schemas:
    Person:
      type: object
      x-jsonld-type: "https://w3id.org/italia/onto/CPV/Person"
      x-jsonld-context:
        "@vocab": "https://w3id.org/italia/onto/CPV/"
        nome_proprio: givenName
        cognome: familyName
      properties:
        nome_proprio: {type: string, ..}
        cognome: {type: string, ..}
      ...

Di seguito l’esempio di un’alberatura contenente uno schema

assets/
  schemas/
    Person/
      CHANGELOG.md
      README.md
      person.oas3.yaml
      person.index.ttl

4.11. Schemi XSD

Attualmente il materiale semantico pubblicato dalla UE si basa sui formati RDF ed XSD. NDC non supporta il processamento di file XSD. Questi potranno essere supportati in un secondo momento.

4.11.1. Esempio: Countries Authority Table

L’authority table dei paesi «Countries» viene pubblicata a partire dall’URL su http://publications.europa.eu/resource/dataset/country contenente i link a tutti i dataset associati e corrispondente al suo URI. All’indirizzo https://publications.europa.eu/resource/authority/country si trova l’elenco dei paesi in formato RDF; sotto quell’URL ci sono i riferimenti ai singoli paesi, eg. https://publications.europa.eu/resource/authority/country/ITA. Il versionamento è contenuto all’interno degli RDF e l’URL viene dereferenziato all’ultima versione. Gli URI sono versionati, eg. http://publications.europa.eu/resource/expression/country/20170920-0 Da lì è possibile individuare una lista di dataset associati ed eventualmente localizzati: qui https://publications.europa.eu/resource/cellar/07ed8d46-2b56-11e7-9412-01aa75ed71a1.0001.12/DOC_14 la lista delle coppie codice/paese in italiano in formato XML (ATTO table, usate per le traduzioni)

<TABLE VL="IT" NAME="countries">
  <LIBELLE CODE="1A0">Kosovo</LIBELLE>
  <LIBELLE CODE="ABW">Aruba</LIBELLE>
  <LIBELLE CODE="AFG">Afghanistan</LIBELLE>
...
</TABLE>

qui una codelist (estensione «.gc») http://publications.europa.eu/resource/distribution/country/20210616-0/xml/gc/Country.gc contenente tutti i dati in un formato xml analogo a quello tabellare

<?xml version="1.0" encoding="UTF-8"?>
<gc:CodeList xmlns:gc="http://docs.oasis-open.org/codelist/ns/genericode/1.0/">
   <Identification>
      <CanonicalUri>http://publications.europa.eu/resource/dataset/country</CanonicalUri>
<CanonicalVersionUri>http://publications.europa.eu/resource/dataset/country/20210616-0</CanonicalVersionUri>
<LocationUri>http://publications.europa.eu/resource/distribution/country/20210616-0/xml/gc/Country.gc</LocationUri>

   </Identification>
   <ColumnSet>
      <Column Id="code" Use="required">
         <ShortName>Code</ShortName>
         <Data Type="normalizedString" Lang="eng"/>
      </Column>
      <Column Id="Name" Use="optional">
         <ShortName>Name</ShortName>
         <Data Type="string" Lang="eng"/>
      </Column>
      <Column Use="optional" Id="ita_label">
         <ShortName>engLabel</ShortName>
         <Data Type="string" Lang="ita"/>
      </Column>
   ...
   </ColumnSet>
   <SimpleCodeList>
      <Row>
         <Value ColumnRef="code">
            <SimpleValue>ITA</SimpleValue>
         </Value>
         <Value ColumnRef="Name">
            <SimpleValue>Italy</SimpleValue>
         </Value>
         <Value ColumnRef="ita_label">
            <SimpleValue>Italy</SimpleValue>
         </Value>
    ...
   <SimpleCodeList>

Gli stessi dati possono essere recuperati a partire da https://data.europa.eu/data/datasets/country.

4.11.2. Versionamento

TBD

4.12. Redirect delle URI

Il presente paragrafo fornisce una guida per la creazione e la pubblicazione dei file htaccess che permettono il redirect delle URI delle risorse semantiche utilizzando il w3id.

Una volta configurati gli htaccess sulla base dell’organizzazione del proprio repository contenente le risorse semantiche, sarà possibile sfruttare le URL permanenti del w3id per referenziare le ontologie e i vocabolari.

L’efficacia delle regole di seguito descritte è subordinata all’applicazione delle indicazioni offerte dalla presente guida per la creazione ed organizzazione del repository contenente le risorse semantiche, con particolare riferimento all’uguaglianza che deve persistere tra il nome di ciascuna cartella e il nome dei relativi file (a meno dell’estensione) e il nome con il quale viene referenziata la risorsa semantica (es. ontologia) all’interno della propria URI.

4.12.1. Introduzione al redirect

w3id.org è una soluzione del W3C Permanent Identifier Community Group che permette l’aggiunta o modifica di identificativi permanenti a partire dai quali reindirizzare verso URL specifici; il processo si basa sull’aggiunta di una o più cartelle nel repository git del w3id, le quali DEVONO contenere i file .htaccess e file README.md, eventualmente organizzati in sottocartelle.

Nel caso del Catalogo, occorre fare riferimento alla cartella italia del repository git del w3id, nella quale DEVONO essere aggiunte le sottocartelle, ciascuna per una particolare area tematica, che conterranno i file di reindirizzamento, eventualmente organizzati in ulteriori sottocartelle, ed il file README.md. L’aggiunta delle sottocartelle di '/italia' sarà sottoposta ad approvazione del Comitato Italia; successivamente, le stesse saranno gestite autonomamente e con interfacciamento diretto verso w3id.org dai referenti indicati nei file README.md. La cartella e le relative sottocartelle, i file .htaccess e i file README.md DEVONO essere creati sul repository git del w3id dall’Organizzazione contributrice.

4.12.2. Processo di pubblicazione degli htaccess sul w3id

4.12.2.1. fork del repository GIT del w3id.org

Il primo passo per la registrazione dei vari redirect è il fork in locale della cartella Italia del GIT del w3id. Gli identificativi permanenti (URI) verranno definiti sulla base del percorso nel quale saranno inseriti i vari file htaccess. Nel caso del Catalogo, il percorso della cartella “root” per nome-cartella dovrà essere italia/<nome-cartella>/, dunque il namespace degli URI definiti nella stessa sarà w3id.org/italia/<nome-cartella>/.

4.12.2.2. aggiunta della cartella

Nel repository in locale creato a partire dalla fork occorrerà creare la cartella “nome-cartella” che conterrà l’alberatura di sottocartelle e dei relativi file .htaccess, oltre al file README.md.

Di seguito è fornito un esempio di alberatura della cartella sotto "/italia":

italia
|--nome-cartella
|   |--controlled-vocabulary
|   |   |-.htaccess
|   |--data
|   |   |-.htaccess
|   |--onto
|   |   |-.htaccess
|   |README.md

In tal modo, verranno definiti i seguenti URI:

  • w3id.org/italia/<nome-cartella>/controlled-vocabulary

  • w3id.org/italia/<nome-cartella>/data

  • w3id.org/italia/<nome-cartella>/onto

Il <nome-cartella> è molto importante dato che DEVE essere inserito in specifici parametri descritti di seguito nel presente documento, e sarà sempre utilizzato per riferirsi all’insieme delle risorse semantiche del Contributore nell’ambito della configurazione dei file di redirect.

Le regole di redirect associate a ciascun uri DEVONO essere definite nei relativi file .htaccess descritti di seguito. Il file README.md DEVE contenere i nominativi dei referenti unitamente ai loro riferimenti e-mail e di github. Questi riferimenti DEVONO curare la gestione della cartella e dei relativi file a seguito dell’approvazione di “Italia”. Si DOVREBBE prendere come esempio il file README.md sotto la cartella "/italia".

4.12.2.3. creazione della pull request

Una volta modificato il repository GIT in locale, si DEVE creare una pull request, la quale sarà analizzata ed eventualmente validata da «Italia”; nella pull request DEVONO essere indicati come reviewer i contatti presenti nel file README.md sotto “/italia”. Il merge sul branch master verrà effettuato direttamente da w3id.org e determinerà la pubblicazione definitiva dei nuovi URI e relative regole di redirect.

4.12.3. Contenuto dei file .htaccess e del README.md

Di seguito è data una descrizione di file .htaccess per ciascuna tipologia di risorsa, da cui l’Organizzazione contributrice DOVREBBE prendere spunto al fine creare i propri file di redirect. Gli snippet di codice di esempio sono basati sull’assunzione che per ciascuna risorsa semantica (es. ontologia) il nome della stessa nell’URI di referenziazione sia uguale al nome della cartella che contiene i relativi file sul git sorgente, e anche uguale ai nomi dei file a meno dell’estensione. In caso contrario, si renderebbe necessario sviluppare apposite regole di redirect più complesse.

4.12.3.1. controlled-vocabulary

Il file .htaccess da inserire nella sottocartella “italia/nome-cartella/controlled-vocabulary” DOVREBBE essere creato a prendendo come esempio quello contenuto nella cartella del GIT “italia/controlled-vocabulary”.

Esso contiene codice scritto sulla base delle Direttive Apache, e permette di gestire le richieste HTTP in base al valore dell’header Accept e di SYNTAX. A seconda del valore, le URL vengono riscritte in modo diverso o reindirizzate a URL esterni. La specifica azione di riscrittura o reindirizzamento dipende dalla combinazione di Accept e SYNTAX.

Di seguito viene data una descrizione delle direttive di esempio, alle quali DEVONO essere modificati i riferimenti degli URL di atterraggio, oltre all’eventuale modifica/integrazione delle regole al fine di meglio adattarsi al git del Contributore:

Header set Access-Control-Allow-Origin *

Questa riga imposta l’header Access-Control-Allow-Origin su *, consentendo a qualsiasi dominio di accedere alle risorse sul server tramite richieste Ajax o da altri domini diversi.

Options +FollowSymLinks

Questa riga abilita l’opzione FollowSymLinks, che permette al server di seguire i collegamenti simbolici (symlink) all’interno del file system.

RewriteEngine on

Questa riga attiva il motore di riscrittura delle URL di Apache (mod_rewrite), che permette di manipolare le URL delle richieste HTTP.

SetEnvIf Accept ^.*text/turtle.* SYNTAX=ttl
SetEnvIf Accept ^.*application/json.* SYNTAX=json
SetEnvIf Accept ^.*application/csv.* SYNTAX=csv
SetEnvIf Accept ^.*text/csv.* SYNTAX=csv
SetEnvIf Accept ^.*text/html.* SYNTAX=html

Queste righe impostano una variabile di ambiente chiamata SYNTAX in base all’header Accept della richiesta HTTP. Questo viene utilizzato per determinare il tipo di sintassi richiesto nella risposta. Queste righe DEVONO essere modificate a seconda dei formati dei file presenti nelle proprie cartelle github.

SetEnvIf Request_URI ^.*$ ROOT_URL="url-git"

Imposta la variabile di ambiente ROOT_URL con un URL fisso. L’URL inserito DEVE essere quello del proprio Github che punta alla cartella dei vocabolari controllati (in formato "https://raw.githubusercontent.com/...")

RewriteCond %{ENV:SYNTAX} ^(ttl|json|csv)$
RewriteRule ^([a-zA-Z-_0-9]+)(/?)$ %{ENV:ROOT_URL}$1/latest/$1.%{ENV:SYNTAX} [R=303,L]

Definisce la regola di riscrittura dell’URL nel caso in cui il tipo file richiesto sia ttl, json o csv (questi ultimi DEVONO essere configurati sulla base dei tipi file presenti nel repository sorgente).

RewriteCond %{ENV:SYNTAX} ^html$
RewriteRule ^(.+)$ https://schema.gov.it/lodview/"nome-cartella"/controlled-vocabulary/$1 [R=303,L]
RewriteRule ^(.+)/(.+)/(.+)$ https://schema.gov.it/lodview/"nome-cartella"/controlled-vocabulary/$1/$2/$3 [R=303,L]

Le precedenti condizioni si applicano solo quando SYNTAX è html, oppure in tutti gli altri casi non gestiti dalle precedenti condizioni. Riscrivono le URL in modo diverso, reindirizzando a URL esterni basati su modelli specifici. DEVONO essere configurati sulla base del nome della cartella tematica con la quale ci si riferisce al particolare insieme di risorse semantiche nel git del w3id.

4.12.3.2. onto

Il file .htaccess da inserire nella sottocartella “italia/nome-cartella/onto” DOVREBBE essere creato a partire da quello contenuto nella cartella del GIT “italia/onto”.

Esso contiene codice scritto sulla base delle Direttive Apache, e permette di gestire le richieste HTTP in base al valore dell’header Accept e di SYNTAX. A seconda del valore, le URL vengono riscritte in modo diverso o reindirizzate a URL esterni. La specifica azione di riscrittura o reindirizzamento dipende dalla combinazione di Accept e SYNTAX.

Di seguito viene data una descrizione delle direttive di esempio, alle quali DEVONO essere modificati i riferimenti degli URL di atterraggio, oltre all’eventuale modifica/integrazione delle regole al fine di meglio adattarsi al git del Contributore:

Header set Access-Control-Allow-Origin *

Questa riga imposta l’header Access-Control-Allow-Origin su *, consentendo a qualsiasi dominio di accedere alle risorse sul server tramite richieste Ajax o da altri domini diversi.

Options +FollowSymLinks

Questa riga abilita l’opzione FollowSymLinks, che permette al server di seguire i collegamenti simbolici (symlink) all’interno del file system.

RewriteEngine on

Questa riga attiva il motore di riscrittura delle URL di Apache (mod_rewrite), che permette di manipolare le URL delle richieste HTTP.

SetEnvIf Accept ^.*application/rdf\+xml.* SYNTAX=rdf
SetEnvIf Accept ^.*application/rdf\+xml.* SYNTAX=owl
SetEnvIf Accept ^.*application/n-triples.* SYNTAX=n3
SetEnvIf Accept ^.*text/turtle.* SYNTAX=ttl
SetEnvIf Accept ^.*text/html.* SYNTAX=html

Queste righe impostano una variabile di ambiente chiamata SYNTAX in base all’header Accept della richiesta HTTP. Questo viene utilizzato per determinare il tipo di sintassi richiesto nella risposta. Queste righe DEVONO essere modificate a seconda dei formati dei file presenti nelle proprie cartelle nel repository delle risorse semantiche.

SetEnvIf Request_URI ^.*$ ROOT_URL="url-git"

Imposta la variabile di ambiente ROOT_URL con un URL fisso. L’URL inserito DEVE essere quello del proprio repository che punta alla cartella delle ontologie (in formato "https://raw.githubusercontent.com/...")

RewriteCond %{ENV:SYNTAX} ^(rdf|ttl|owl|n3)$
RewriteRule ^([a-zA-Z-_0-9]+)(/?)$ %{ENV:ROOT_URL}$1/latest/$1.%{ENV:SYNTAX} [R=303,L]

Definisce la regola di riscrittura dell’URL nel caso in cui il tipo file richiesto sia rdf, ttl, own o n3 (questi ultimi DEVONO essere configurati sulla base dei tipi file presenti nel repository sorgente).

RewriteCond %{ENV:SYNTAX} ^html$
RewriteRule ^(.+)(/.+)$ https://schema.gov.it/lodview/"nome-cartella"/onto/$1$2 [R=303,L]
RewriteCond %{ENV:SYNTAX} ^html$
RewriteRule ^(.+)/$ https://schema.gov.it/lode/extract?url=https://w3id.org/italia/"nome-cartella"/onto/$1 [R=303,L]
RewriteCond %{ENV:SYNTAX} ^html$
RewriteRule ^(.+)$ https://schema.gov.it/lode/extract?url=https://w3id.org/italia/"nome-cartella"/onto/$1 [R=303,L]

Le precedenti condizioni si applicano solo quando SYNTAX è html. Riscrivono le URL in modo diverso, reindirizzando a URL esterni basati su modelli specifici. DEVONO essere configurati sulla base del nome della cartella tematica con la quale ci si riferisce al particolare insieme di risorse semantiche nel git del w3id.

4.12.3.3. data

Il file .htaccess da inserire nella sottocartella “italia/nome-cartella/data” DOVREBBE essere creato a partire da quello contenuto nella cartella del GIT “italia/data”.

Esso contiene codice scritto sulla base delle Direttive Apache, e permette di configurare il server Apache per consentire l’accesso da qualsiasi dominio alle risorse del server, impostare una variabile di ambiente ROOT_URL con un valore fisso, e quindi riscrivere tutte le richieste in modo che includano ROOT_URL prima dell’URI richiesto.

Di seguito viene data una descrizione delle direttive di esempio, alle quali DEVONO essere modificati i riferimenti degli URL di atterraggio, oltre all’eventuale modifica/integrazione delle regole al fine di meglio adattarsi al git del Contributore:

Header set Access-Control-Allow-Origin *

Questa riga imposta l’header Access-Control-Allow-Origin su *, consentendo a qualsiasi dominio di accedere alle risorse sul server tramite richieste Ajax o da altri domini diversi.

Options +FollowSymLinks

Questa riga abilita l’opzione FollowSymLinks, che permette al server di seguire i collegamenti simbolici (symlink) all’interno del file system.

RewriteEngine on

Questa riga attiva il motore di riscrittura delle URL di Apache (mod_rewrite), che permette di manipolare le URL delle richieste HTTP.

SetEnvIf Request_URI ^.*$ ROOT_URL=https://schema.gov.it/lodview/"nome-cartella"/data/

Questa riga imposta una variabile di ambiente chiamata ROOT_URL, che DEVE essere modificata sulla base del nome della cartella tematica con la quale ci si riferisce al proprio repository di risorse semantiche su w3id.

RewriteRule ^(.*)$ %{ENV:ROOT_URL}$1 [R=303,L]

Questa riga è una regola di riscrittura delle URL. Ogni richiesta che arriva al server verrà riscritta in modo da includere il valore di ROOT_URL prima dell’URI richiesto. Il flag [R=303,L] indica che la risposta HTTP sarà un redirect temporaneo (codice di stato 303) e che questa è l’ultima regola da applicare.

RewriteRule ^(.*)/$ %{ENV:ROOT_URL}$1 [R=303,L]

Questa è una regola di riscrittura simile alla precedente, ma si applica solo alle richieste che terminano con una barra. Anche in questo caso, la risposta sarà un redirect temporaneo con codice di stato 303.

4.12.3.4. README.md

Per la creazione del file README.md si PUÒ far riferimento all’esempio fornito da w3id.org stessa, oppure al file creato sotto la cartella “/italia”.

In ogni caso, si DEVONO descrivere le finalità di utilizzo delle URI e indicare i nominativi dei referenti nella sezione “contatti”.