SPARQL을 사용하여 LinkedMDB에서 ID가 높은 영화를 검색할 수 없습니다.
-
21-12-2019 - |
문제
나는 다음 쿼리를 실행하고 있습니다. LinkedMDB SPARQL 끝점 그리고 그것은 작동합니다.이를 통해 나는 ID가 72인 영화 감독에 대해 필요한 모든 정보를 얻습니다. 거대한, 그래서 제임스 카메론에 대한 정보를 얻습니다.
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).
}
더 높은 ID를 가진 영화(예: 예) ID 44396의 스타트렉, 72를 44396으로 바꾸면 쿼리에서 결과가 반환되지 않습니다. 항목 하지만 분명히 디렉토리, ID 및 이름이 있습니다.변경된 쿼리가 작동하지 않는 이유는 무엇입니까?
해결책
SPARQL을 사용하면 작성할 수 있습니다. 72
리터럴의 약어 "72"^^xsd:integer
.보시다시피 ID로 영화를 검색할 수 있습니다. "72"^^xsd:integer
문제없이.하지만 찾고 있는 다른 영화에 해당 ID가 있습니다. "44396"^^xsd:int
(데이터 유형은 xsd:int
, ~ 아니다 xsd:integer
).모르겠습니다 왜 데이터 유형은 다르지만 원하는 것을 검색하는 데는 충분합니다.
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 .
}
director nombre_director id_director
----------------------------------------------
db:director/9025 "J.J. Abrams" 9025
그것보다는 참고하세요 filter
ing, 실제로 원하는 값을 쿼리 패턴에 넣었습니다.나는 이것이 좀 더 간단하다고 생각하며 쿼리 엔진이 최적화되지 않은 경우 성능이 더 좋을 수 있습니다(큰 결과 집합을 구축한 다음 항목을 필터링하지 않기 때문에).실제로 이는 쿼리가 반환할 수 있는 결과 수에 제한이 있는 경우 변수와 필터를 사용하는 의미상 동일한 쿼리가 결과를 반환하지 않는 이유를 설명할 수 있습니다.(그러나 이것은 순수한 추측입니다.) 어쨌든 다음 쿼리는 작동하지 않지만 다음과 같이 작동해야 한다고 생각합니다.
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 )
}