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