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:
è possibile inserire dei commenti, che iniziano con il carattere
#
;la prima riga utile DEVE contenere i nomi delle colonne;
le righe seguenti DEVONO contenere i valori delle risorse separati da
,
(virgola) e racchiusi in"
(doppie virgolette);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 unrdf: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.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”.