كيف تتطابق مع الحرفيين الوريديين في sparql؟

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

  •  25-09-2019
  •  | 
  •  

سؤال

لدي هذا الاستعلام. إنه يطابق أي شيء "جنوب" باسمه. لكني أريد فقط الشخص الذي foaf:name هو بالضبط "الجنوب".

SELECT Distinct ?TypeLabel 
WHERE
{
    ?a     foaf:name   "South" .
    ?a     rdf:type    ?Type .
    ?Type  rdfs:label  ?TypeLabel .
}
هل كانت مفيدة؟

المحلول

(الخروج من التعليقات لهذا)

مشكلات البيانات

المشكلة هي البيانات ، وليس استفسارك. إذا استخدم الاستعلام التالي:

SELECT DISTINCT ?a 
WHERE { 
    ?a foaf:name "Imran Khan" . 
}

تجد (كما تقول) "عمران خان نيزي". لكن النظر إلى دخول DBPedia ل عمران خان, ، سترى كلاهما:

foaf:name "Imran Khan Niazy"
foaf:name "Imran Khan"

وذلك لأن RDF يتيح الاستخدام المتكرر للخصائص.

سبب

كان "الجنوب" نفس المشكلة (الألبوم ، الفنان ، و "ساوث لوتون" بشكل غريب). هذه هي الحالات التي يوجد فيها كلا من أسماء مألوفة ("Imran Khan" ، "South") ، وأسماء أكثر دقة ("Imran Khan Niazy" ، "South (الألبوم)") لأغراض الصواب أو الغموض.

القرار

إذا كنت تريد مباراة أكثر دقة ، فحاول إضافة نوع (على سبيل المثال http://dbpedia.org/ontology/musicalwork للألبوم).

احذر

انتبه إلى أن DBPedia مستمدة من ويكيبيديا ، وأن عملية الاستخراج ليست مثالية. هذه منطقة حية مع بيانات متزعزع ، لذلك لا تفترض أن استعلامك قد حدث خطأ.

نصائح أخرى

متأخر بعض الشيء ولكن على أي حال ... أعتقد أن هذا هو ما تبحث عنه:

SELECT Distinct ?TypeLabel Where { 
?a foaf:name ?name . 
?a rdf:type ?Type . 
?Type rdfs:label ?TypeLabel . 
FILTER (?name="South"^^xsd:string)
}

يمكنك استخدام Filter مع أنواع XSD من أجل تقييد النتيجة. أتمنى أن يساعد هذا ... في صحتك!

يجب أن يتطابق هذا الاستعلام مع الحرفي تمامًا South وليس الحرفية فقط التي تحتوي على South كسلسلة فرعية. للمباريات الجزئية التي ستذهب إليها FILTER مع مثل REGEX(). محرك الاستعلام الخاص بك مكسور بهذا المعنى - أي محرك الاستعلام الذي تعمل معه؟

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