Risorsa anonima
# Risorsa anonima

Una risorsa anonima (chiamata anche in inglese blank node, abbreviato in bnode) è un nodo di un grafo RDF rappresentante una risorsa per la quale non è assegnato un percorso IRI. Secondo lo standard RDF, una risorsa anonima può essere utilizzata solo come soggetto o oggetto di una tripla RDF, e non come predicato.

I linguaggi facenti utilizzo di risorse anonime seguono necessariamente una logica di tipo OWA. Tramite blank node, infatti, non si garantisce la completezza della base di conoscenza.

Il concetto di risorsa anonima è ripreso anche in OWL per rappresentare classi anonime, come unioni o intersezioni fra classi, o restrizioni di classi tramite determinati vincoli sulle proprietà.

## Sintassi

Le risorse anonime possono essere denotate tramite identificatori blank node in RDF/XML, Turtle, N3 e N-Triples.

Segue un esempio in RDF/XML:

Gli identificatori dei blank node sono utilizzabili nella serializzazione di un singolo grafo RDF, ovvero il nodo _:b in un grafo non è lo stesso nodo identificato da _:b in un altro grafo. Da questo punto di vista è affine ad una variabile locale, visibile solo all'interno di uno specifico modulo.

Le risorse anonime possono essere identificate anche tramite elementi nidificati (in RDF/XML, Turtle and N3). Ecco un esempio:

Segue lo stesso esempio in Turtle:

## Query

Il concetto di risorsa anonima è usato anche nell'interrogazione delle ontologie. In SPARQL, ad esempio, presa una base di dati come:

e una query come:

il risultato di quest'ultima potrebbe essere fra i seguenti:

| x | nome |
| - | - |
| _:a | "Alice" |
| _:b | "Bob" |
| x | nome |
| _:c | "Alice" |
| _:d | "Bob" |
| x | nome |
| _:v | "Alice" |
| _:w | "Bob" |

Tali risultati sono tutti equivalenti fra loro, in quanto il nome del blank node non è importante in sé, ma serve solo per sapere quando due asserzioni si riferiscono necessariamente alla stessa risorsa.

I blank node possono essere indicati anche all'interno della query. In SPARQL esistono due sintassi per farlo: con _:abc si assegna un nome al blank node (in modo da poterlo utilizzare di nuovo per riferirsi alla stessa risorsa), mentre scrivendo non viene specificato alcun nome, quindi non ci si potrà più riferire esplicitamente a quella risorsa. Spesso i blank node possono essere sottintesi tramite le sintassi abbreviate: ad esempio, per chiedere tutti gli studenti che hanno superato un certo esame con 30 e lode, si potrebbe interrogare il sistema con la seguente query:

che è equivalente alla semplice:

Esiste inoltre una funzione (chiamata isBlank) per controllare se un certo nodo sia o meno una risorsa anonima. Ad esempio, scrivendo FILTER isBlank(?x) si forza il sistema a restituire solo risultati per i quali la variabile ?x è una risorsa anonima all'interno della base di dati.

