Ho una sparql-Query, che richiede determinate proprietà di URI di un determinato tipo. Come io sono sicuro, se tali proprietà esiste, io uso la parola chiave opzionale:Alternativa per parola chiave OPZIONALE in SPARQL-Queries?
PREFIX mbo: <http://creativeartefact.org/ontology/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT * WHERE {
?uri a mbo:LiveMusicEvent.
OPTIONAL {?uri rdfs:label ?label}.
OPTIONAL {?uri mbo:organisedBy ?organiser}.
OPTIONAL {?uri mbo:takesPlaceAt ?venue}.
OPTIONAL {?uri mbo:begin ?begin}.
OPTIONAL {?uri mbo:end ?end}.
}
Quando eseguo questa query contro il mio SPARQL-endpoint (Virtuoso Server), ho ottenuto l'errore:
Virtuoso 42000 Error The estimated execution time -721420288 (sec) exceeds the limit of 400 (sec).
Riducendo le clausole OPTIONAL, dopo la prima clausola rimossa il tempo di esecuzione stimato è 4106 secondi, quando rimuovo due clausole, la query viene eseguita (e restituisce immediatamente i valori).
Non riesco a vedere, perché il tempo di esecuzione stimato è salito alle stelle in questo modo con le clausole OPTIONAL aggiuntive, ma forse sto solo usando una query costruita errata?
Una delle cose che mi piacerebbe davvero (ma non ho molta idea di quanto costosa sarebbe) è la possibilità di fare qualcosa come 'from [construct {...} dove {...}] select ... dove {...} '. Renderebbe alcune attività difficili molto facili. –
@JoshuaTaylor mi è sempre sembrato strano che "COSTRUIRE" (che, in un certo senso, è il tipo di query più "naturale" per RDF) non è facile combinare/concatenare con altre query. Abbiamo sottoselezioni - perché non i sub-costrutti?Penso che sia una di quelle funzionalità in cui il WG è appena andato "Potrebbe essere bello, ma non ora". –
Sì, sarebbe bello avere in futuro, in realtà abbiamo un'implementazione delle sottocommissioni 'COSTRUISCI 'internamente a YarcData sebbene non nella clausola' FROM'. Li usiamo come un modo per invocare analisi di grafici più tradizionali (ad esempio k-means, percorso più breve, ecc.) Usandoli come sottoquery con modificatori personalizzati applicati in modo tale da poter essere annidati con cura all'interno di un normale schema grafico – RobV