Come mostrato in this question che ha un titolo simile, vorrei recuperare una risorsa dbpedia conoscendo una parte del suo nome. Sono un principiante quando si tratta di SPARQL e simili, ma l'esempio nella domanda mi ha aiutato molto, poiché l'autore ha cercato "Romania", e la persona che rispondeva lo ha agganciato con una richiesta di Sparql per fare il lavoro. È carino, ma ecco la cosa.Recupero di una risorsa DBpedia tramite il suo nome stringa con SPARQL e senza conoscere il tipo
Nell'esempio, hanno già "sapevano" che la Romania è un paese, da qui il
?c a dbpedia-owl:Country ;
nella clausola WHERE. La richiesta completa SPARQL essere
SELECT ?c
WHERE {
?c a dbpedia-owl:Country ;
foaf:name "Romania"@en .
FILTER NOT EXISTS {?c dbpedia-owl:dissolutionYear ?y}
}
Ma, questa domanda non risponde quasi completamente il nostro bisogno, quindi, alla ricerca di qualsiasi risorsa con il suo nome, il "nome" è il nome reale di una risorsa, o una parte di it, indipendentemente dal suo (rdf:) tipo. L'obiettivo sarebbe quello di cercare "qualsiasi cosa", solo conoscendo il nome o una parte di esso.
Ho fatto qualche ricerca prima di farti questa domanda, e so già che il problema del "nome del nome" potrebbe essere risolto con la funzione bif (il modo sbagliato, dato che non è conforme a sparql), o la clausola CONTAINS, ma non ho trovato alcun esempio che mostra come usarlo.
Supponiamo ora che ci sia una "parola" da cercare tra le risorse di dbpedia, quella parola sarebbe un input da parte di qualche utente. E chiamiamolo "INPUT".
La richiesta, immagino, sarebbe simile:
SELECT ?something WHERE
{
?something a (dbpedia Resource).
CONTAINS(?something,"INPUT")
}
La mia domanda principale è di circa due aspetti importanti:
- C'è qualcosa che descrive il tipo di risorsa DBpedia? Non penso sia in ontologia o altro. Con knwoing che mi piacerebbe cercare tra tutte le risorse per trovare una corrispondenza ...
- Un nome specifico vorrei fornire, o qualche stringa. Ho considerato l'opzione FILTER, ma ciò significherebbe ottenere TUTTE le risorse e quindi filtrarle in base al loro nome dopo che sono state ritirate, il che sarebbe, suppongo, non così ottimale.
Quindi, qualcuno conosce questa "Master Query" per ottenere una risorsa fornendo il suo nome o una parte di esso? (Un esempio è fornire "Obama" e ottenere risultati non solo per Barrack, ma anche per Michelle).
Grazie in anticipo.
In realtà è un peccato che dobbiamo passare attraverso un "trucco" (i dcterms: soggetto), ma hey, le mie richieste sono solo per le risorse DBBedia. Quindi la tua risposta è assolutamente incredibile e mi ha salvato CARICHI di mal di testa. Grazie mille. Per quanto riguarda le funzioni bif, so che non sono compatibili con SPARQL, è per questo che ho cercato CONTAINS, anche se penso che cercherò ancora esempi in cui usano questa clausola. Quindi, grazie ancora per la tua risposta, il mio viaggio con dbpedia e rdf è appena iniziato, ma tu mi hai appena dato l'avvio di cui avevo bisogno. –
Ci sono alcune restrizioni dolorose con questo approccio. Non consente spazi. Quindi, se stai cercando di recuperare la rappresentazione dell'entità canonica per "Barak Obama" (o, a livello di codice, qualsiasi stringa di nome che hai trovato, che è il mio caso), non puoi usare bif: contains. E poi ho pensato, forse l'URL codifica la stringa? '? Label bif: contiene" barak% 20obama ".' Nessun dado lì. Forse due dichiarazioni separate per catturare parti costituenti? No. :( 'Virtuoso 37000 Errore SP031: compilatore SPARQL: Più di un BIF: contiene() o predicato di simile per la variabile '$ label' in un unico group' Tutte le idee – sands
@sands si può fare etichetta bif??: contiene '"barak obama"' (annota le virgolette extra) – MrM