문제

나는 다음 쿼리를 실행하고 있습니다. 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 .
}

SPARQL 결과(1개)

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

그것보다는 참고하세요 filtering, 실제로 원하는 값을 쿼리 패턴에 넣었습니다.나는 이것이 좀 더 간단하다고 생각하며 쿼리 엔진이 최적화되지 않은 경우 성능이 더 좋을 수 있습니다(큰 결과 집합을 구축한 다음 항목을 필터링하지 않기 때문에).실제로 이는 쿼리가 반환할 수 있는 결과 수에 제한이 있는 경우 변수와 필터를 사용하는 의미상 동일한 쿼리가 결과를 반환하지 않는 이유를 설명할 수 있습니다.(그러나 이것은 순수한 추측입니다.) 어쨌든 다음 쿼리는 작동하지 않지만 다음과 같이 작동해야 한다고 생각합니다.

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 ) 
}

SPARQL 결과(없음)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top