Domanda

Sto eseguendo la seguente query su linkedmdb sparql endpoint e funziona.Con esso, ottengo tutte le informazioni di cui ho bisogno del direttore del film con ID 72, che è Titanic , quindi ottengo informazioni su James Cameron.

PREFIX mdb: <http://data.linkedmdb.org/resource/movie/>
SELECT ?director?nombre_director?id_director WHERE {
  ?pelicula mdb:filmid ?id .
  ?pelicula <http://data.linkedmdb.org/resource/movie/director> ?director .
  ?director <http://data.linkedmdb.org/resource/movie/director_name> ?nombre_director .
  ?director <http://data.linkedmdb.org/resource/movie/director_directorid> ?id_director .
  FILTER (?id = 72).
}
.

Con film che hanno un ID più alto, ad es. Esempio Star Trek con ID 44396 , Se sostituisco 72 con 44396, la query non restituisce risultati. La voce ha chiaramente una directory, un ID e un nome, però.Perché la query modificata non funziona?

È stato utile?

Soluzione

sparql ti consente di scrivere 72 come stenografia per il "72"^^xsd:integer letterale. Come hai visto, puoi recuperare il film con l'ID "72"^^xsd:integer senza problemi. Tuttavia, l'altro film che stai cercando ha l'ID "44396"^^xsd:int (nota che il tipo di dati è xsd:int, non xsd:integer). Non so perché il tipo di dati è diverso, ma è abbastanza per aiutarci a recuperare ciò che vogliamo:

PREFIX mdb: <http://data.linkedmdb.org/resource/movie/>
SELECT ?director?nombre_director?id_director WHERE {
  ?pelicula mdb:filmid "44396"^^xsd:int .
  ?pelicula <http://data.linkedmdb.org/resource/movie/director> ?director .
  ?director <http://data.linkedmdb.org/resource/movie/director_name> ?nombre_director .
  ?director <http://data.linkedmdb.org/resource/movie/director_directorid> ?id_director .
}
.

Risultati sparql (uno)

director          nombre_director  id_director
----------------------------------------------
db:director/9025  "J.J. Abrams"    9025
.

Nota che piuttosto che filtering, ho appena inserito il valore attuale desiderato nel modello di query. Trovo che questo sia un po 'più semplice, e se il motore di query non è ottimizzato, potrebbe essere migliore performance (poiché non sta costruendo un grande risultato e quindi filtrando le cose). Infatti, ciò potrebbe spiegare perché la query semanticamente equivalente che utilizza una variabile e un filtro non restituisce risultati, se c'è un limite su quanti risultati la query può tornare. (Ma questa è pura speculazione.) In ogni caso, la seguente query non funziona, ma penso che dovrebbe:

PREFIX mdb: <http://data.linkedmdb.org/resource/movie/>
SELECT ?director?nombre_director?id_director WHERE {
  ?pelicula mdb:filmid ?id .
  ?pelicula <http://data.linkedmdb.org/resource/movie/director> ?director .
  ?director <http://data.linkedmdb.org/resource/movie/director_name> ?nombre_director .
  ?director <http://data.linkedmdb.org/resource/movie/director_directorid> ?id_director .
  filter ( ?id = "44396"^^xsd:int ) 
}
.

Risultati sparql (nessuno)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top