2017-03-22 4 views
0

Je crée une application web qui permet aux utilisateurs de rechercher des films en utilisant une requête SPARQL.SPARQL Requête pour les films

En ce moment j'utilise DBpedia pour obtenir les données.

Le problème est que j'ai besoin de 3 morceaux de données (titre, genre et date de sortie). mais le problème est que je ne reçois pas le genre du film mais je reçois genre de musique pour une raison:/

Voici la requête que j'ai créé

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
PREFIX db: <http://dbpedia.org/ontology/> 
PREFIX prop: <http://dbpedia.org/property/> 
SELECT ?movieLink ?title ?genreLink ?genre ?releaseDate 
WHERE { 
    ?movieLink rdf:type db:Film; 
       foaf:name ?title. 
    OPTIONAL { ?movieLink prop:genre ?genreLink. 
       ?genreLink rdfs:label ?genre. 
       FILTER(lang(?genre) = 'en') }. 
    OPTIONAL{ ?movieLink <http://dbpedia.org/ontology/releaseDate> ?releaseDate }. 

    FILTER(lang(?title) = 'en') 
    FILTER((?releaseDate >= '2010-01-01'^^xsd:date) && (?releaseDate < '2010-12-31'^^xsd:date)) 
} 
ORDER BY DESC(?releaseDate) 
LIMIT(100) 

Je suis coincé sur cette questions pour un moment, toute aide serait appréciée.

REMARQUE: j'ai examiné l'utilisation de Linkedmdb mais j'ai rencontré un problème similaire.

Répondre

1

Les données DBpedia proviennent principalement d'Infobox sur les pages Wikipedia. Par exemple, si vous regardez the page for the film Ayyanar, vous remarquerez qu'il contient deux infoboxes:

  • un pour le film lui-même, sans mention de genre
  • une pour la bande originale du film, avec le genre classé Soundtrack

C'est la raison pour laquelle votre requête retourne le genre de bande-son de ce film.

Il semble que infoboxes about films ne contient aucun champ pour le genre, donc vous ne serez pas en mesure d'obtenir cette information de cette façon.

D'autre part, l'article est dans la catégorie Action drama films qui est représenté sur DBpedia en utilisant dct:subject. Je pense que vous devriez être en mesure d'obtenir les informations de genre de qu'utiliser quelque chose comme:

OPTIONAL { ?movieLink dct:subject ?genreLink. 
      ?genreLink skos:broader+ dbc:Films_by_genre } 

Bien qu'il ne serait pas des données très propres (parce que la structure de catégorie de Wikipedia est un gâchis). Et cela ne fonctionne pas réellement pour moi, car une telle requête dépasse les limites de mémoire sur le point de terminaison publique DBpadia SPARQL.

+0

Merci beaucoup pour avoir éclairci ce point, par anychance Sauriez-vous comment interroger linkedmdb pour les mêmes données –

+0

@IeuanWalker Si vous nous donnez un lien LinkedMDB et une requête à partir, il y a une meilleure chance que votre deuxième question soit répondue –

1

@svick donne une bonne requête. Si dbpedia.org ne répond pas, utilisez notre point de terminaison qui inclut le raisonnement transitif: http://factforge.net/sparql. Par exemple, cela fonctionne:

SELECT * { 
    ?movieLink a dbo:Film; dct:subject ?genreLink. 
    ?genreLink skos:broaderTransitive dbc:Films_by_genre 
} 
+0

http://factforge.net/sparql répond même à la version lente 'skos: large +' mais en 180s au lieu de instantanément. Donc s'il vous plaît ne l'utilisez pas. –