2011-10-25 25 views
6

Forse qualcuno potrebbe darmi un suggerimento. È possibile misurare la distanza tra 2 concetti/classi che appartengono alla stessa ontologia?Misurazione delle distanze tra le classi nei grafici RDF/OWL

Ad esempio, supponiamo di avere un'ontologia con la classe di astronomia e la classe Telescopio. C'è un collegamento tra entrambi, ma non è un collegamento diretto. L'astronomia ha una classe genitrice chiamata Scienza, e il Telescopio ha una classe genitrice chiamata Strumento Ottico che appartiene al suo genitore chiamato Strumentazione, che è correlata ad una classe chiamata Scienza dell'Emiro che alla fine appartiene ad una classe chiamata Scienza.

Quindi esiste un collegamento indiretto tra Telescopio e Astronomia e voglio scoprire il numero di passaggi necessari per raggiungere una classe a partire dall'altra.

C'è una semplice query SPARQL che risolve tale domanda? O ci sono modi migliori per fare quel lavoro? O non è possibile scoprirlo usando il paradigma del Semantic Web?

Qualsiasi suggerimento sarà molto apprezzato.

risposta

4

Nella mia comprensione SPARQL non contiene alcuna costruzione ricorsiva per essere in grado di misurare il collegamento indiretto di lunghezza arbitraria. Il meglio che puoi fare è preparare una serie di query distance_1(a, b), distance_2(a, b) ... per verificare la distanza specifica tra due concetti.

Un'altra alternativa è scoprire queste informazioni utilizzando la tecnologia non SPARQL, ad esempio scrivendo algoritmo di attraversamento grafico in Python con RDFlib.

5

SPARQL offre la possibilità di cercare percorsi di lunghezza arbitraria in un grafico ma nessun meccanismo per dirvi la lunghezza di quel percorso.

Così si può fare qualcosa di simile:

SELECT * WHERE { ?s ex:property+ ?o } 

La sintassi è molto simile espressioni regolari in modo da poter fare alternative, cardinalità ristrette ecc

2

Dal momento che lei ha detto in modo esplicito che si sta parlando di classi e che sarà nella stessa ontologia, è lecito ritenere che saranno sempre connessi (perché alla fine entrambi saranno una sottoclasse di "Cosa", giusto?). D'altra parte, il percorso che ho menzionato tra parentesi (Class1 -> ... -> Thing < - ... < - Class2) è una cosa banale, quindi presumo che tu voglia trovare ... tutte le esistenti percorsi tra due classi, in altre parole, tutti i percorsi esistenti tra due vertici. È vero? O stai cercando il percorso più breve? La tua domanda non è molto chiara sotto questo aspetto, puoi chiarirlo?

Per quanto ne so, non esiste un semplice costrutto SPARQL che elencherà tutti i percorsi tra le classi o il percorso più breve. Tuttavia, alcune triple negozi semantica web sono dotati di algoritmi grafico di attraversamento, come breadth-first-search o profondità-prima-di ricerca, si prega di fare riferimento a:

È inoltre possibile trovare il codice sorgente di il seguente progetto molto utile:

Problemi correlati