Blank nodes e variabili esistenziali

29 Mag 2015

blanknode

 

Quando descriviamo il mondo asseriamo che qualcosa esiste. La natura di questo qualcosa è però mutevole e si distribuisce su una scala che va dalle cose ai concetti, dal concreto all'astratto, e viceversa. In questa scala occupa un ruolo rilevante la cosiddetta 'variabile esistenziale', attraverso la quale non descriviamo una singola entità individuale, ma piuttosto una specie di template o format astratto di tale entità.

Per usare un semplice esempio di , autore di Semantic Web Programming, se diciamo che "ognuno di noi ha un'anima gemella", di fatto stiamo asserendo che "per ogni persona esiste un’altra persona che è una ‘anima gemella’ della prima". Qui la potenziale anima gemella di ciascuno è per l’appunto la variabile esistenziale, la quale non è un individuo concreto, ma un template, uno stampo che si attaglia a diversi individui dello stesso tipo. Il problema è che le variabili esistenziali, non essendo entità individuali, di fatto non hanno un nome, perlomeno non hanno un nome come ce l'abbiamo io, voi, Piccadilly Circus e le strade in cui abitiamo. 

Nella costruzione delle ontologie semantiche capita spesso di doversi avvalere di queste variabili esistenziali, che vengono definite blank nodes (nodi vuoti) appunto perché non dispongono di un nome o di una URI che li contraddistingua. Possono avere un identificativo, il quale però vale e funziona solo all'interno dell'ontologia. Fuori di essa non ha più alcun valore.

Nella sintassi RDF un nodo blank node è un elemento rdf:description cui non viene assegnato alcun attributo rdf:about e quindi neppure una URI. In ogni tripla, un blank node può svolgere la funzione di soggetto, di oggetto, ma non di relazione/proprietà. Nei grafi viene rappresentato come un ovale vuoto e se nella stessa ontologia viene utilizzato più di una volta può essere identificato attraverso un attributo rdf:nodeID. Tale identificazione è tuttavia rigorosamente limitata all'ontologia in questione.

Ad esempio, per dire che Paolo e Maria conoscono entrambi una stessa persona, possiamo dire:

 

<foaf:Person rdf:about="http://example.org/Person#Paolo">

<foaf:knows>

  <foaf:Person rdf:nodeID=“ConoscenzaInComune"/>

 </foaf:knows>

</foaf:Person>

<foaf:Person rdf:about="http://example.org/Person#Maria">

<foaf:knows>

  <foaf:Person rdf:nodeID="ConoscenzaInComune"/>

</foaf:knows>

</foaf:Person>

 

Va ribadito che questo 'ConoscenzaInComune' non è un URI né un literal e ha un valore meramente convenzionale: se invece di 'ConoscenzaInComune' avessi scelto 'B406' non sarebbe cambiato nulla. Attraverso questo enunciato avremmo semplicemente detto che sia Paolo sia Maria conoscono un non meglio identificato individuo 'B406'.

 

Bisogna infine sottolineare che, pur essendo utili, questi blank node danno anche un sacco di problemi. Se un'ontologia ha troppi blank node, infatti, diventa artificiosa, difficile da interpretare e da interrogare attraverso SPARQL. Inoltre, e questo è forse il problema più grave, siccome i blank node hanno valore solo all'interno di una specifica ontologia, la loro presenza rende molto più difficile, se non addirittura impossibile, il merge tra ontologie diverse.   
  

 

Catalogo PagineBianche d'Autore

Catalogo PagineBianche d'Autore

Cliente: //Page:' }; //]]>

Utilizziamo cookie proprietari e di terze parti: proseguendo con la navigazione si presta il consenso all'utilizzo dei cookie. 

Per ulteriori informazioni consulta l'informativa. Per saperne di piu'

Approvo