Ho tripli non gestiti memorizzati come parte di singoli documenti che sto memorizzando nel mio contenuto db. Essenzialmente ogni documento rappresenta una persona e la tripla definita specifica l'URI del documento per il manager della persona. Sto cercando di usare SPARQL per determinare la lunghezza dei percorsi tra un manager e tutte le persone sotto di loro nella gerarchia.Esiste un modo per ottimizzare le query SPARQL?
Le triple nel documento sembrano
<sem:triple xmlns:sem="http://marklogic.com/semantics">
<sem:subject>http://rdf.abbvienet.com/infrastructure/person/10740024</sem:subject>
<sem:predicate>http://schemas.abbvienet.com/ontologies/infrastructure.owl#manager</sem:predicate>
<sem:object>http://rdf.abbvienet.com/infrastructure/person/10206242</sem:object>
</sem:triple>
ho trovato la seguente query SPARQL, che può essere utilizzato per restituire un manager, aperson sotto di loro nella gerarchia, e il numero di nodi lontani sono .
select ?manager ?leaf (count(?mid) as ?distance) {
BIND(<http://rdf.abbvienet.com/infrastructure/person/10025613> as ?manager)
?leaf <http://schemas.abbvienet.com/ontologies/infrastructure.owl#manager>* ?mid .
?mid <http://schemas.abbvienet.com/ontologies/infrastructure.owl#manager>+ ?manager .
}
group by ?manager ?leaf
order by ?manager ?leaf
Questo funziona, ma è molto lento, anche nel caso in cui la struttura gerarchica che sto guardando è uno o due livelli di profondità, intorno 15s. Ho 63,139 gestori tripli di questo tipo nel db.
Non dovrebbe essere 'ORDER BY? Leaf' come si ha una sola associazione per'? Manager'. – scotthenninger