لا يمكن استرداد الأفلام مع معرفات عالية من لينكدمدب مع سباركل

StackOverflow https://stackoverflow.com//questions/22021040

سؤال

أنا تشغيل الاستعلام التالي في لينكدمدب سباركل نقطة النهاية وهو يعمل.مع ذلك ، أحصل على جميع المعلومات التي أحتاجها عن مخرج الفيلم مع معرف 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).
}

مع الأفلام التي تحتوي على معرف أعلى ، على سبيل المثال ، مثال ستار تريك مع معرف 44396, ، إذا استبدلت 72 بـ 44396 ، فلن يقوم الاستعلام بإرجاع أي نتائج. الدخول من الواضح أنه يحتوي على دليل ومعرف واسم.لماذا لا يعمل الاستعلام تغيير?

هل كانت مفيدة؟

المحلول

سباركل يتيح لك الكتابة 72 كما الاختزال للحرفية "72"^^xsd:integer.كما رأيت ، يمكنك استرداد الفيلم باستخدام المعرف "72"^^xsd:integer بدون مشكلة.ومع ذلك ، فإن الفيلم الآخر الذي تبحث عنه يحتوي على المعرف "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جي ، أنا فقط وضعت القيمة المطلوبة الفعلية في نمط الاستعلام.أجد أن هذا أبسط قليلا ، وإذا لم يتم تحسين محرك الاستعلام ، فقد يكون أداء أفضل (نظرا لأنه لا يقوم بإنشاء مجموعة نتائج كبيرة ثم تصفية الأشياء).في الواقع ، قد يفسر ذلك سبب عدم إرجاع الاستعلام المكافئ لغويا الذي يستخدم متغيرا ومرشحا لأي نتائج ، إذا كان هناك حد لعدد النتائج التي يمكن للاستعلام إرجاعها.(ولكن هذا هو مجرد تكهنات.) على أي حال ، لا يعمل الاستعلام التالي ، لكنني أعتقد أنه يجب:

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

نتائج سباركل (لا شيء)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top