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

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

עד כה לשאילתות שלנו הייתה רק תבנית אחת להתאמה. למשל, הן אחזרו פריטים בעלי מאפיין 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), אבל הוא אינו מוצג בתוצאות.

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

| תרגיל: כתבו שאילתה שתציג את הבמאי והתסריטאי (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 – זו לא אסטרטגיה מוצלחת.
פתרון כללי יוצג בחלק הבא.

דילוג לתוכן