JSON-LD per la metadatazione di dati storici

Maximilian Ventura ~ 1 Agosto 2018 ~ Web Semantico

JSON-LD

JSON è l’acronimo di JavaScript Object Notation, si tratta di un formato di testo per lo scambio di dati. È molto semplice da leggere e scrivere per le persone e per le macchine. È indipendente dal linguaggio di programmazione e si basa su due strutture:

  • Un insieme di coppie nome/valore
  • Un elenco ordinato di valori

Nel 2010, Markus Lanthaler, Gregg Kellogg e Manu Sporny hanno deciso di sfruttare tutte queste caratteristiche per creare JSON-LD, con l’obiettivo di creare un formato leggero e facilmente comprensibile per la pubblicazione di Linked Data.

Se vuoi saperne di più sui Linked Data puoi leggere questo articolo.

Caratteristiche del formato JSON-LD

JSON-LD si caratterizza per la presenza del concetto di “context” attraverso il quale si collegano le proprietà dell’oggetto nel documento. Ma l’idea di base rispetto ai Linked Data pubblicati con RDF non cambia, si possono sempre specificare dizionari specifici e selezionare le proprietà opportune. È un formato aperto che ha raggiunto il rango di “Recommendation” dal W3C, un’organizzazione non governativa internazionale che ha come scopo quello di sviluppare tutte le potenzialità del World Wide Web.

Chi usa JSON-LD

L’utilizzo di questo formato è incoraggiato da parte di molti motori di ricerca come Google, Yandex, Bing, tuttavia molte entità e relazioni presenti in dizionari ampi e consolidati come Schema.org non sono riconosciuti. Per questo motivo, per creare un esempio di file JSON-LD che ha per tema come sempre la metadatazione di dati storici, ho deciso di utilizzare soltanto alcune proprietà di base in grado di descrivere tre elementi fondamentali:

  • Persona
  • Evento
  • Luogo

Persona

{
	"@context": "http://schema.org/",
	"@id": "https://fontistoriche.org/papa-adriano-i/",
	"@type": "Person",
	"name": "Papa Adriano I",    
	"birthDate": "0700",                  
	"deathDate": "0795-12-25",            
	"sameAs": "https://it.wikipedia.org/wiki/Papa_Adriano_I"
}

Il contesto specifica quale vocabolario si sta utilizzando, in questo caso:  schema. Ogni vocabolario possiede degli elementi che descrivono le proprietà dell’oggetto, per esempio “name” o “birthDate”. L’ID ci indica in maniera inequivocabile l’IRI a cui facciamo riferimento.

Evento

{
    	"@context": "http://schema.org/",
    	"@id": "https://it.wikipedia.org/wiki/Concilio_Lateranense_(769)",
        "@type": "Event",
            "name":"Concilio",
    		"description": "Concilio Lateranense (769)",
    		"startDate": "0769-04-12",
            "endDate": "0769-04-14",
            "location": {
		       "@type": "Place",
               "name": "Basilica di San Giovanni in Laterano",
    	       "address": {
      		      "@type": "PostalAddress",
      		      "addressLocality": "Roma",
                  "addressCountry": "ITA"
    	       }
            }
 }

Per descrivere il Concilio Lateranense del 769 utilizziamo come ID la pagina di wikipedia. L’aggiunta delle date è molto semplice e rispetta lo standard ISO 8601. Purtroppo “Event” (per Google) richiede la proprietà: “address” e i suoi derivati. In questo modo si crea un discrepanza, almeno a livello formale, tra il luogo descritto nell’evento, rispetto a come potrebbe essere descritto utilizzando le coordinate geografiche.

Luogo

{
	"@context": "http://schema.org/",
	"@id": "https://it.wikipedia.org/wiki/Roma",
	"@type": "Place",
	"name": "Roma",
	"geo": {
		"@type": "GeoCoordinates",
		"latitude": "41.893056",
		"longitude": "12.482778"
	}
}

Utilizzando le coordinate geografiche è possibile identificare un luogo anche se nel corso dei secoli ha cambiato nome, ed evitare i malintesi che possono sopraggiungere quando si utilizzano molte lingue per descrivere la stessa risorsa.

Unificare più elementi

Come ho già detto prima mi sono limitato all’utilizzo delle proprietà riconosciute dallo strumento di test per dati strutturati di Google, tuttavia è possibile unire le caratteristiche della “persona” con “luogo”, questo è il risultato:

{
    	"@context": "http://schema.org/",
    	"@id": "https://fontistoriche.org/papa-stefano-iii/",
    	"@type": "Person",
    	"name": "Papa Stefano III",    
    	"birthDate": "0720",      
    	"birthPlace": {
    		"@type": "Place",
                "name": "Siracusa",
    		"geo": {
		    "@type": "GeoCoordinates",
		    "latitude": "37.083333",
		    "longitude": "15.283333"
		}
	},             
    	"deathDate": "0772-01-24",        
    	"deathPlace": {
    		"@type": "Place",
		"name": "Roma",
    		"geo": {
		    "@type": "GeoCoordinates",
		    "latitude": "41.893056",
		    "longitude": "12.482778"
		}
	},
    	"sameAs": "https://it.wikipedia.org/wiki/Papa_Stefano_III"          	
}

Per eseguire delle query sarà sempre necessario utilizzare SPARQL, ma la creazione e la lettura dei file è più semplice e leggibile.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *