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

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

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

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

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

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

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

דילוג לתוכן