תרגיל: יותר ממשתנה אחד

| תרגיל: כתבו שאילתה שתציג את הבמאי והתסריטאי (P58) של כל אחד מהסרטים בסדרת הסרטים מלחמת הכוכבים

פתרון

או, בשימוש בתחביר שונה (ראו את ההסבר כאן)

השאילתה הקודמת שאחזרה את הבמאי של כל אחד מסרטי מלחמת הכוכבים החזירה 9 תוצאות. השאילתה הנוכחית מחזירה 16 תוצאות. מדוע?

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

ערכים מרובים

מאפיינים עם יותר מערך אחד

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

למשל, עבור הפריט מלחמת הכוכבים – פרק 5: האימפריה מכה שנית (Q181795) המאפיין "תסריטאי" מקבל את הערכים הבאים:

תצוגה גרפית של המידע תראה כך:

עוד תרגיל

| תרגיל: הציגו את הבמאי והעלות (P2130) של כל סרט בסדרת הסרטים מלחמת הכוכבים

פתרון

או, בשימוש בתחביר שונה (ראו את ההסבר כאן)

שאילתה קודמת שאחזרה את הבמאי של כל אחד מסרטי מלחמת הכוכבים החזירה 9 תוצאות. השאילתה הנוכחית מחזירה 8 תוצאות. מדוע?

כי יש פריטים שלא מופיע בהם המאפיין "עלות" (P2130), ולכן השאילתה מתעלמת מהם.

פסוקית OPTIONAL

ערכים חסרים ופסוקית OPTIONAL

כפי שכבר ראינו, כשיש יותר מתבנית אחת להתאמה בפסוקית ה-WHERE,

כפי שראינו קודם, כאשר יש יותר מתבנית אחת להתאמה בפסוקית ה-WHERE, אז יש ביניהן יחס של "וגם", כלומר רק תבניות שמתאימות לכל ההצהרות יאוחזרו על ידי השאילתה. למשל, בתרגיל האחרון היו בשאילתה שלוש תבניות להתאמה:

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

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

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

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

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

הריצו שוב את השאילתה עם עלות כתבנית אופציונלית.

תצוגת תמונות

תצוגת תמונות

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

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

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

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

מופעים וקבוצות

מאפיין P31 – "מופע של"

רוב המאפיינים בוויקינתונים מתארים תכונות ש"יש" לפריט: לפריט מלחמת הכוכבים – פרק 4: תקווה חדשה (Q17738) יש את המאפיין במאי (P57), יש את מאפיין משך (P2047), יש עלות (P2130). אבל לעיתים קרובות אנחנו מעוניינים באיזה מין דבר הוא הפריט עצמו. לרוב פריטי ויקינתונים יש לפחות הצהרה אחת עם מאפיין P31 – "מופע של". מאפיין זה מגדיר את הקבוצה או המחלקה שהפריט הוא דוגמה שלה ושייך לה.

  • מלחמת הכוכבים – פרק 4: תקווה חדשה הוא מופע של סרט קולנוע (Q11424)
  • מלחמת הכוכבים (Q22092344) היא מופע של סדרת סרטים (Q24856).
  • מלחמת הכוכבים (Q462) הוא מופע של זיכיון מדיה (Q196600).

לפריט יכולה להיות יותר מהצהרת P31 אחת. למשל, מלחמת הכוכבים – פרק 8: אחרוני הג'דיי (Q18486021) הוא מופע של סרט קולנוע (Q11424) וגם מופע של סרט תלת-ממד (Q229390).

ישימו לב שהצהרות מהסוג P31 שואפות להבחנות כלליות ולהעביר נתונים אחרים למאפיינים נוספים, למשל:
ג'ורג' לוקאס (Q38222) הוא מופע של אדם (Q5).
אפשר היה לומר שג'ורג' לוקאס הוא מופע של במאי (Q2526255), כי לוקאס הוא בבירור דוגמה לבמאי ושייך לקבוצה של במאים. אבל הגישה של ארגון המידע בוויקינתונים היא להגדיר את ה"מופע של" לערך הכללי ביותר, ולכלול מידע יותר ספציפי למאפיינים אחרים. למשל, המידע שלוקאס הוא במאי מתואר באמצעות הצהרה עם המאפיין עיסוק (P106).

מאפיין P279 – "תת-קבוצה של"

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

  • סרט קולנוע (Q11424) הוא תת-קבוצה של "יצירת אמנות חזותית" (Q4502142), אבל גם של "יצירה אודיו-ויזואלית" (Q2431196).
  • סדרת סרטים (Q24856) היא תת-קבוצה של סדרת יצירות (Q7725310), יצירת אמנות (Q838948), יצירה אודיו-ויזואלית (Q2431196) וזכיון מדיה (Q196600).

ההשלכות של ההבחנה בין מופע ותת-קבוצה

נניח שאנחנו רוצים רשימה של כל הסרטים שמתרחשים ביקום של מלחמת הכוכבים.
אנחנו יכולים להריץ את השאילתה הבאה:

השאילתה מחזירה רק 10 תוצאות. ברור שחלק מהסרטים לא נכללו בתוצאות – למשל, מלחמת הכוכבים – פרק 1: אימת הפנטום (Q165713). מדוע?

כי חלק מהפריטים מוגדרים כמופע של סרט באורך מלא (Q24869) – זה הערך שהמאפיין P31 מקבל. אף על פי שסרט באורך מלא הוא תת-קבוצה של סרט קולנוע (Q11424), מבחינת ספארקל התבנית בפסוקית ה-WHERE בשאילתה לא תואמת את הפריט. כלומר, פריטים שהם לא מופע של "סרט קולנוע" לא תואמים את התבנית בשאילתה ולכן אינם מאוחזרים על ידיה.

בעיקרון יכולנו להשתמש באופרטור UNION כדי לבחור סרטים שהם או מופע של "סרט קולנוע" או מופע של "סרט באורך מלא":

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

נתיבי מאפיין

נתיבי מאפיין

המבנה התחבירי שמאפשר לנו לבחור פריטים ששייכים לאותה קבוצה משתמש בנתיבי מאפיין (property paths). נתיבי מאפיין הם דרך מקוצרת לרשום את המאפיינים המחברים בין שני פריטים.

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

לפריט Q165713 יש מאפיין P31 (מופע של) המקבל את הערך "סרט באורך מלא" Q24869. ההצהרה של פריט-מאפיין-ערך היא אם כן:
Q24869 – P31 – Q165713

הנתיב בין פריט Q165713 לפריט Q24869 הוא הפשוט והקצר ביותר: מאפיין אחד.

לפריט Q24869 (סרט באורך מלא) יש מאפיין P279 (תת-קבוצה של) המקבל את הערך "סרט קולנוע" Q11424.
ההצהרה של פריט-מאפיין-ערך היא אם כן:
Q11424 – P279 – Q24869

גם הנתיב בין פריט Q24869 לפריט Q11424 הוא בעל מאפיין אחד בלבד.

אפשר לחבר אלמנטים של הנתיב בעזרת קו נטוי קדמי (/). כאשר בשאילתה מופיע המבנה התחבירי wdt:P31/wdt:P279 הוא מסמן נתיב בין שני פריטים המורכב ממאפיין P31 (מופע של) וממאפיין P279 (תת-קבוצה של).

אבל אם התבנית להתאמה בשאילתה היא:
.item wdt:P31/wdt:P279 wd:Q11424?
השאילתה תמצא התאמה אך ורק עם פריטים שהם מופע של תת-קבוצה של סרט קולנוע – כלומר פריטים שהנתיב שלהם לפריט "סרט קולנוע" (Q11424) מורכב מ-P31 וגם P279. פריטים שהם מופע של "סרט קולנוע" בעצמם (כלומר יש להם מאפיין P31 עם הערך Q11424) לא יאוחזרו כיוון שהם לא תואמים את המבנה התחבירי של התבנית.

הביטוי *wdt:P31/wdt:P279 בשורה 6 הוא דרך קיצור לציין שיש מאפיין "מופע של" ואחריו מספר כלשהו של מאפייני "תת-קבוצה של" בין item? לבין הפריט "סרט קולנוע" (Q11424).

אם מסירים את הכוכבית (*) בשורה 6 בשאילתה ומריצים את השאילתה, התוצאות לא כוללות פריטים שהם בעצמם מופע של סרט קולנוע.
הכוכבית (*) אחרי אלמנט בנתיב פירושה "אפס או יותר מהאלמנט הזה". מכאן שהתבנית להתאמה
item wdt:P31/wdt:P279* wd:Q11424?
יכולה להתאים ל:
.item wdt:P31 wd:Q11424?
או
.item wdt:P31/wdt:P279 wd:Q11424?
או
.item wdt:P31/wdt:P279/wdt:P279 wd:Q11424?
או
.item wdt:P31/wdt:P279/wdt:P279/wdt:P279 wd:Q11424?
וכן הלאה.

DISTINCT

DISTINCT – הצגת תוצאות ייחודיות

בוא נסתכל שוב על השאילתה שמראה את כל יצירות האמנות (Q838948) שמתרחשות ביקום הבדיוני של מלחמת הכוכבים:

אם תריצו את השאילתה תוכלו לראות שיש בתוצאות כמה כפילויות: פריטים מסוימים, כמו Q19590955 (רוג אחת: סיפור מלחמת הכוכבים) ו-Q6074 (מלחמת הכוכבים – פרק 7: הכוח מתעורר) מופיעים יותר מפעם אחת.
לעיתים קרובות שאילתות עלולות להחזיר תוצאות כפולות – למשל כשמשתמשים בתבנית שכוללת מבנה תחבירי עם נתיבי מאפיין כמו:
item wdt:P31/wdt:P279* ?class?
אם יש מספר נתיבים מ-item? ל-class? תתקבלת תוצאה חדשה עבור כל אחד מהנתיבים. למשל, לפריט Q19590955 (רוג אחת: סיפור מלחמת הכוכבים) יש את הערכים "סרט קולנוע" וגם "סרט תלת-ממד" למאפיין P31, ולכל אחד מהם יש נתיב למחלקה "יצירת אמנות". כתוצאה מכך, הפריט מופיע פעמיים בתוצאות.

כדי להסיר כפילויות מהתוצאות מוסיפים את מילת המפתח DISTINCT אחרי SELECT:

דילוג לתוכן