שאילתת ספארקל בסיסית

סרטים בסדרה מלחמת הכוכבים

זוהי שאילתת הספארקל הראשונה שנלמד. השאילתה הפשוטה הזו מראה את הסרטים ששייכים לסדרה מלחמת הכוכבים.

# סרטי מלחמת הכוכבים 
SELECT ?item  
WHERE 
{
  ?item wdt:P179 wd:Q22092344.
}

קידוד צבעים בממשק השאילתות

בממשק השאילתות של ויקינתונים יש משמעות לצבעים השונים, שמסייעים להבין ולהסביר את הקוד בספארקל:

  • אפור: השורה הראשונה של השאילתה מתחילה בסולמית (#) ולאחריה טקסט באפור. זוהי הדרך לסמן הערה – משהו שאנחנו כותבים שלא משפיע על השאילתה עצמה. כל טקסט שמופיע אחרי # הוא הערה וממשק השאילתות מתעלם ממנו, פרט לתבניות מסויימות שנראה בחלקים הבאים.
  • אדום: המילים SELECT ו-WHERE בשורות 2-3 מופיעות באדום ובאותיות גדולות זוהי הדרך לסמן מילות תחביר "שמורות" של ספארקל, שהן סוג של "פקודה":
    • SELECT – אחרי מילה זו מצהירים את שמות המשתנים שיוצגו בתוצאות השאילתה
    • WHERE – אחרי מילה זו מופיעה התבנית להתאמה שלפיה ייבחרו הפריטים, כלומר הקריטריונים או המגבלות על היחסים בין משתני השאילתה, לרוב בצורה של שלישיות שמשקפות את מבנה הפריט-מאפיין-ערך של ויקינתונים.
  • ירוק: בשורות 2 ו-5 מופיע הביטוי "item?". בשפת ספארקל שמות של משתנים מתחילים בסימן שאלה ומסומנים בירוק. שמות משתנים יכולים לקבל כל רצף של תווים (פרט למילים שמורות). בדוגמא למעלה מופיע המשתנה item? אך התוצאות יהיו זהות גם אם נקרא למשתנה בשם אחר, כמו film?, או x? או any_variable_name?. התפקיד של משתנים הוא להחזיק ערכים לשימוש עתידי.
  • כחול: בשורה מספר 5 מופיעים מספר מונחים בצבע כחול. אלה מסמנים תחיליות (prefixes). תחיליות הן קיצורי דרך שמאפשרות לשאילתות להיות מוצגות בצורה יותר קומפקטית ובהירה. ללא התחיליות היינו צריכים לציין את כתובת ה-URL המלאה של כל אלמנט בשאילתה.
    • wdt: תחילית המסמנת מאפיין בוויקינתונים + המספר המזהה של המאפיין (אחרי האות P).
      ללא התחילית היינו צריכים להציג את המאפיין כך: http://www.wikidata.org/prop/direct/>:P179
    • wd: תחילית עבור פריטים בוויקינתונים + המספר המזהה של הפריט (אחרי האות Q).
      ללא התחילית היינו צריכים להציג את המאפיין כך: <http://www.wikidata.org/entity/>:Q22092344

הסבר לשאילתה

עכשיו נסתכל איך השאילתה עובדת.

שאילתת ספארקל מורכבת בדרך כלל משתי פסוקיות (clause) או יותר, שהן חלקים של השאילתה עם פונקציות שונות. בשאילתת הספארקל הבסיסית שלנו יש שתי פסוקיות:

פסוקית SELECT

בפסוקית ה-SELECT אנחנו מפרטים את המשתנים שהשאילתה תחזיר בתוצאות – במקרה הנוכחי קראנו למשתנה שלנו item?. בעיקרון השורה הזו אומרת "אנחנו הולכים למצוא כמה ערכים ולשמור אותם במשתנה item?, ואז אנחנו נציג את הערכים האלה".

פסוקית WHERE

בפסוקית ה-WHERE אנחנו מציינים את התנאים למשתנים, לרוב בצורה של שלישיות. מבחינה לוגית, ספארקל עובד לפי התאמת תבניות (pattern matching). כלומר, המעבד של ספארקל מחפש התאמה בין התבניות שאנחנו מגדירים בפסוקית ה-WHERE להצהרות בוויקינתונים, שכזכור יש להן מבנה עם שלושה חלקים (נושא, מושא, נשוא). פסוקית ה-WHERE אומרת למעבד איזה ערכים של המאפיין להכניס למשתנים שהצהרנו בפסוקית ה-SELECT, ואיך לשלוף את הנתונים.

תבנית השאילתה הבסיסית של ספארקל משקפת את המבנה של פריט-מאפיין-ערך, שהוא הצורה בה המידע נשמר במאגר של נתונים מקושרים. התבנית להתאמה בשאילתה הפשוטה שלנו ניתנת כהצהרה:
פריט – עם מאפיין:חלק מהסדרה – עם ערך:מלחמת הכוכבים (סדרת סרטים)

במילים אחרות, השאילתה בוחרת פריטים שהם: (1) עם מאפיין: חלק מסדרה (P179), ו-(2) למאפיין יש את הערך "מלחמת הכוכבים (סדרת סרטים)" (Q22092344).
שימו לב שאם אתם עומדים עם הסמן מעל התחילית או המספר המזהה הקשור אליה, ממשק השאילתות יציג לכם את התווית והתיאור של המאפיין או הפריט.

לחצו על כפתור ה"Play" (הכפתור הכחול עם החץ) על מנת להריץ את השאילתה. יש לגלול בתוך המסגרת כדי לראות את התוצאות.

השאילתה מחזירה את המספר המזהה של כל סרט בסדרת הסרטים מלחמת הכוכבים, אבל לא את השם של הסרט.
בחלק הבא נלמד איך לאחזר גם את השמות של הסרטים.

הוספת תוויות

הוספת תוויות

פריטים בוויקינתונים מזוהים על ידי מספר Q ייחודי. לכל פריט יש גם תווית – השם המקובל לאותו פריט בשפה מסוימת. השאילתה הבאה מחזירה את הסרטים בסדרת הסרטים מלחמת הכוכבים ואת התוויות שלהם.

# סרטי מלחמת הכוכבים 

SELECT ?item  ?itemLabel 
WHERE 
{ 
  ?item wdt:P179 wd:Q22092344.
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE]". }
}

הסבר לשאילתה

בפסוקית ה-SELECT אנחנו מצהירים על שני משתנים: item? ו-itemLabel?.
Label הוא צירוף "שמור": הוא מתייחס לתווית של הפריט שמוגדר על ידי שם המשתנה. כלומר אם למשתנה שלנו היינו קוראים x?, אז המשתנה עבור התווית יהיה xLabel?. אם היינו קוראים למשתנה film?, אז המשתנה עבור התווית יהיה filmLabel?, וכן הלאה.

בפסוקית ה-WHERE מופיעה אותה תבנית להתאמה כמו קודם:
.item wdt:P179 wd:Q22092344?
בנוסף, מופיעה באדום הפקודה SERVICE ולאחריה הטקסט (בכחול):
."[wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE

הטקסט בכחול הוא קוד שקורא לשירות מיוחד שמאחזר את התוויות של פריטים. במילים אחרות, אם המשתנה בפסוקית ה-SELECT נקרא NAMELabel?, ממשק השאילתות שולף את התווית של הפריט שמחזיק המשתנה NAME?. השירות הזה שימושי מאוד כיוון שהוא מוריד את רמת המורכבות שהייתה נדרשת בשאילתות ספארקל כדי להשיג את אותו אפקט.

מה זה AUTO_LANGUAGE?

אנגלית היא ברירת המחדל של ממשק השאילתות, כפי שניתן לראות בפינה הימנית העליונה של הממשק. בחירת השפה משפיעה הן על ממשק השאילתות עצמו והן על השפה של התוויות ששירות התוויות מחזיר .

הריצו את השאילתה. אחרי כן שנו את שפת הממשק והריצו את השאילתה שוב.

הגדרת שפת התווית

הגדרת שפת התווית

דרך אחרת להגדיר את השפה שהשאילתה מחזירה לתוויות היא להצהיר זאת בקוד של פקודת SERVICE (במקום לשנות את שפת הממשק).

למשל, השאילתה הבאה מחזירה ומציגה את התוויות בעברית (he):

# סרטי מלחמת הכוכבים 

SELECT ?item  ?itemLabel 
WHERE 
{ 
  ?item wdt:P179 wd:Q22092344.
  SERVICE wikibase:label { bd:serviceParam wikibase:language "he". }
}

ניתן להגדיר מספר שפות ואת הסדר שבו יאוחזרו התוויות. למשל, השאילתה הבאה שולפת קודם את התווית בצרפתית (fr), אבל אם אין תווית בשפה זו תאוחזר התווית בגרמנית (de), ואם זו לא קיימת אז התווית באיטלקית, וכן הלאה.

# סרטי מלחמת הכוכבים 

SELECT ?item  ?itemLabel 
WHERE 
{ 
  ?item wdt:P179 wd:Q22092344.
SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,de,it,es,no,pt". }
}


השלמה אוטומטית

פונקציית החיפוש של ממשק השאילתות

לא קל לזכור את הקוד לשירות התוויות של ויקינתונים. למרבה המזל, ממשק השאילתות מציע פתרון פשוט: השלמה אוטומטית. בחלון של ממשק השאילתות, בכל שלב, ניתן ללחוץ על המקשים Ctrl+רווח (או Enter+Alt) והממשק יציג תפריט עם אפשרויות לקוד שיכול להיות מתאים; בחרו את ההצעה המתאימה בעזרת מקשי החצים, ולחצו על Enter.

למשל, במקום לכתוב את הקוד:

SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE]".}

אפשר רק להתחיל להקליד SERV, ללחוץ על Ctrl+רווח, וההצעה הראשונה בתפריט שנפתח היא ההשלמה האוטומטית לקוד של שירות התוויות. כל מה שעליכם לעשות הוא ללחוץ על Enter. לאחר שהכנסתם את הקוד, ייתכן ותרצו לערוך אותו כדי להגדיר את השפות הספציפיות לתוויות שהשירות יאחזר.

ההשלמה האוטומטית יכולה גם לחפש מספרי Q (מספר מזהה של פריטים) או מספרי P (מספר מזהה של מאפיינים). אם מקלידים את אחת מהתחיליות :wd (לפריטים) או :wdt (למאפיינים) ומתחילים להקליד טקסט (לא משנה באיזה שפה), Ctrl+רווח יבצע חיפוש של הטקסט בוויקינתונים, ויציע לכם פריטים או מאפיינים רלוונטיים.

הוספת תיאור

הוספת תיאור של פריט

כפי שהוסבר במבוא לוויקינתונים, לכל פריט בוויקינתונים יש מספר מזהה ייחודי שמתחיל באות Q. לפריטים יש גם תווית בשפה אחת או יותר. בנוסף, לפריט יכול להיות תיאור – ביטוי קצר בשפה כלשהי. מכיוון שהתוויות של פריטים אינן בהכרח ייחודיות, התיאור של פריט בוויקינתונים יכול להבחין בין פריטים בעלי תווית זהה או דומה. גם התיאור של פריט לא צריך להיות ייחודי, אבל לא יכולים להיות שני פריטים עם אותה תווית ואותו תיאור.

בממשק השאילתות Description היא עוד מילה מיוחדת (כמו Label), ששמורה לתיאור של הפריט שאוחזר על ידי משתנה מסויים. אם בפסוקית ה-SELECT יש משתנה בשם NAMEDescription?, ממשק השאילתות יאחזר את התיאור של הפריט שמחזיק המשתנה NAME?.

השאילתה הבאה מחזירה פריטים ששייכים לסדרת הסרטים מלחמת הכוכבים עם התווית והתיאור שלהם.


תרגיל: שאילתה פשוטה

| תרגיל: צרו רשימה של פריטים, כולל תווית ותיאור, שהם חלק מסדרת הסרטים הארי פוטר (Q216930)

כתבו את שאילתת הספארקל בחלונית שלמטה בעזרת SELECT ו-WHERE.

לחצו על כפתור ה"פליי" להרצת השאילתה.

פתרון

הפתרון המוצג אינו בהכרח זהה לשלך. אולי השתמשת בשמות משתנים אחרים, או שהשפה שבחרת להציג בה את התוויות היא אחרת. אלה הבדלים קלים שאינם משמעותיים; מה שחשוב הן התוצאות.

לחצו על כפתור ה"פליי" להרצת השאילתה.

אחזור ערכים

שאילתות שמאחזרות את הערך של ההצהרה

כפי שהוסבר במבוא, ויקינתונים אוגר מידע בצורה של הצהרות בעלות מבנה של פריט-מאפיין-ערך.

בדוגמה הראשונה שראינו, השאילתה מאחזרת פריטי ויקינתונים שמתאימים לתבנית השאילתה שהוגדרה: יש להם צירוף מסויים של מאפיין וערך – ספציפית, יש להם מאפיין P179 (חלק מסדרה) עם הערך Q22092344 (סדרת הסרטים מלחמת הכוכבים). כלומר, המשתנה עם השם "item" אוסף את אותם פריטי ויקינתונים שיש להם הצהרה שמתאימה לתבנית:

פריט – עם מאפיין:חלק מהסדרה – עם ערך:מלחמת הכוכבים (סדרת סרטים)

במקרה הזה הפריט הוא החלק של ההצהרה שהשאילתה מאחזרת. אבל שאילתות לא חייבות לאחזר את הפריט שהוא נושא ההצהרה, כלומר החלק הראשון שלה.

בשאילתה הבאה המשתנה actor? אוסף את הערכים של המאפיין "שחקנים" (P161) עבור הפריט מלחמת הכוכבים – פרק 4: תקווה חדשה (Q17738). כלומר המשתנה אוסף את החלק השלישי של ההצהרה (מושא ההצהרה):

שתי תבניות או יותר

הוספת תבניות להתאמה

עד כה לשאילתות שלנו הייתה רק תבנית אחת להתאמה. למשל, הן אחזרו פריטים בעלי מאפיין P179 (חלק מסדרה) עם הערך Q22092344 (סדרת הסרטים מלחמת הכוכבים). בשאילתה הבאה יש שתי תבניות להתאמה:

השאילתה מחזירה ארבעה פריטים. אלה פריטים שעומדים בשני התנאים בפסוקית ה-WHERE. במילים אחרות, היחס בין שתי התבניות הוא יחס של "וגם":
.item wdt:P179 wd:Q22092344?
וגם
item wdt:P57 Q38222?

# פינת התחביר

דרך אחרת לנסח את השאילתה היא להשתמש בנקודה-פסיק כדי לצרף את שתי התבניות:

# סרטי מלחמת הכוכבים

SELECT ?item  ?itemLabel
WHERE 
{ 
  ?item wdt:P179 wd:Q22092344; 	# הפריט הוא חלק מסדרת הסרטים מלחמת הכוכבים
            wdt:P57 wd:Q38222.          # לפריט יש מאפיין "במאי" עם הערך ג'ורג' לוקאס
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE]". }
}

הנקודה-פסיק בשורה 6 מצרף את שתי התבניות להתאמה, ולכן אין צורך לחזור על המשתנה item? בשורה 7.

אופרטור UNION

התאמת תבניות עם יחס של "או" (OR)

בחלק הקודם ראינו שאם יש לשאילתה שתי תבניות להתאמה, היחס ביניהן הוא של "גם" (AND) – השאילתה תחזיר רק את הפריטים שתואמים את שתי התבניות. האופרטור UNION משמש כאשר רוצים להגדיר יחס של "או" (OR) בין התבניות. השאילתה הבאה מאחזרת פריטים שהם או חלק מסדרת הסרטים מלחמת הכוכבים, או חלק מסדרת הסרטים "מסע בין כוכבים".

שאילתה עם יותר ממשתנה אחד

שאילתות עם יותר ממשתנה אחד

עד עכשיו לשאילתות שלנו היה למעשה רק משתנה אחד, גם אם הצהרנו על משתנים נוספים עבור התווית ו/או התיאור של הפריט. עכשיו נסתכל על שאילתות עם יותר משתנים.
השאילתה הבאה מאחזרת את הפריטים שהם חלק מסדרת הסרטים מלחמת הכוכבים, ואת הבמאי של כל אחד מהסרטים.

#סרטי מלחמת הכוכבים

SELECT ?item  ?itemLabel ?director
WHERE 
{ 
  ?item wdt:P179 wd:Q22092344. # הפריט הוא חלק מסדרת הסרטים מלחמת הכוכבים
  ?item wdt:P57 ?director.             # ?director הערך של המאפיין "במאי" של הפריט נאסף על ידי המשתנה
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE]". }
}

הסבר השאילתה

בפסוקית ה-SELECT יש את המשתנים item? ו-director?, כמו גם המשתנה itemLabel? ששולף את התווית עבור המשתנה item?

בפסוקית ה-WHERE, בשורות 6 ו-7, ניתן לראות את התבניות להתאמה:
.item wdt:P179 wd:Q22092344?
.item wdt:P57 ?director?

ספארקל מחפש פריטי ויקינתונים שיש להם הצהרות שתואמות את התבניות בפסוקית ה-WHERE. השורה הראשונה של פסוקית ה-WHERE פירושה "תמצא את הפריטים שיש להם הצהרה עם מאפיין P179 (חלק מהסדרה) עם הערך Q22092344 (מלחמת הכוכבים (סדרת סרטים))".
בשורה השניה בפסוקית ה-WHERE נאמר "עבור כל אחד מהפריטים הללו, תמצא את מאפיין P57 (במאי) ושים את הערך שלו במשתנה director?".
כפי שראינו קודם, בין שתי ההצהרות בפסוקית ה-WHERE יש יחס של "וגם", כלומר רק תבניות שמתאימות לכל ההצהרות יאוחזרו על ידי השאילתה.

עכשיו נריץ את השאילתה:

מה צריך להוסיף לשאילתה כדי שתציג את שמות הבמאים? הוסיפו זאת והריצו שוב את השאילתה.

פתרון

# פינת התחביר

אם היינו רוצים להראות את השם של הבמאי אבל לא את המספר Q, יכולנו להשמיט את המשתנה director? מפסוקית ה-SELECT ורק להצהיר על המשתנה directorLabel?. תחביר זה מציין שיש משתנה בשם director? (שמופיע בפסוקית ה-WHERE), אבל הוא אינו מוצג בתוצאות.

דילוג לתוכן