ויקינתונים, או ויקידאטה, הוא מיזם בינלאומי של תנועת ויקימדיה, שמטרתו להפוך למסד הנתונים החופשי הגדול בעולם, כפי שוויקיפדיה הפכה למקור המידע הנפוץ ביותר.
ויקינתונים הוא מאגר נתונים פתוח וחופשי שניתן לכתיבה ולעריכה על ידי בני אדם וגם על ידי מכונות. ויקינתונים מהווה מאגר מרכזי לכל המידע המובנה במיזמי ויקימדיה, כגון: ויקיפדיה, ויקימילון, ויקיטקסט, ויקימסע, ואחרים.
ויקינתונים גם מספק תמיכה לאתרים ושירותים אחרים מעבר למיזמים של ויקימדיה. התוכן בוויקינתונים זמין ברישיון חופשי, ניתן לייצא אותו בפורמטים סטנדרטיים, ולקשרו למערכי נתונים אחרים ברשת האינטרנט.
הסבר על ויקינתונים ונתונים מקושרים
ויקינתונים הוא מאגר אחסון מרכזי המורכב בעיקר מפריטים, שיכולים לייצג כל דבר, יישות או מושג. פריט יכול להיות חפץ, אדם, אירוע, מקום, יצירת אמנות, אך גם מושגים מופשטים יותר כמו אהבה או סוציאליזם. פריטים מקבלים מזהה ייחודי המתחיל באות Q ואחריה מספר.
למשל, פריט Q17738 מייצג את הסרט "מלחמת הכוכבים" משנת 1977 . לכל פריט יש גם תווית – השם המקובל לאותו פריט בשפה מסוימת. ניתן להזין תווית בכל שפה נתונה. בצורה זו ניתן לזהות את הפריט ולהציג מידע בסיסי עבורו בצורה שאינה תלוית-שפה ולא מתעדפת שפה אחת על פני השנייה.
תוויות של פריטים לא חייבות להיות ייחודיות. למשל, הפריט "מלחמת הכוכבים" (Q462) מייצג את סדרת סרטי המדע הבדיוני וזיכיון המדיה. גם לפריט Q54317 יש את אותה התווית "מלחמת הכוכבים", אך הוא מייצג את משחק הווידאו בשם זה, מ-1983. התיאור של פריט ויקינתונים הוא ביטוי קצר שמטרתו להבחין בין פריטים שיש להם תווית זהה או דומה. גם התיאור של פריט לא צריך להיות ייחודי – לפריטים רבים יש את אותו תיאור. אבל לא יכולים להיות שני פריטים עם אותה תווית ואותו תיאור.
זהו מערך נתונים קטן שמפרט מידע על סרטים בסדרת מלחמת הכוכבים. עבור כל סרט מוצגות כמה תכונות או מאפיינים: שם הסרט, הבמאי שלו, משך הזמן שלו (בדקות) וההכנסות מכרטיסים שצבר הסרט (בדולרים). דרך זו של הצגת נתונים אמורה להיראות מוכרת למי שמכיר תוכנות כמו אקסל (Excel) או SQL. אבל ויקינתונים אינו מסד נתונים המבוסס על טבלאות, כמו זה שלמעלה, אלא בעל פורמט של "נתונים מקושרים". מה זה אומר?
כך תיוצג השורה הראשונה של הטבלה בצורה של נתונים מקושרים:
בוויקינתונים, שמשתמש בפורמט של נתונים מקושרים, המידע נשמר בצורה של הצהרות. להצהרות – הידועות פורמלית כשלישיות של "נושא, נשוא מושא" – יש מבנה של "פריט-מאפיין-ערך".
למשל, ההצהרה "השמיים בצבע תכלת" מורכבת מ: (1) נושא ("השמיים") (2) נשוא ("בצבע") (3) מושא ("תכלת"). באופן דומה, ההצהרה "מלחמת הכוכבים – פרק 4: תקווה חדשה בוים על ידי ג'ורג' לוקאס" מורכבת מהנושא/פריט "מלחמת הכוכבים – פרק 4: תקווה חדשה", הנשוא/מאפיין "בוים על ידי", והמושא/ערך "ג'ורג' לוקאס" .
אפשר לחשוב על כל שורה בטבלה לעיל כעל פריט, כשכותרות העמודות הן שמות המאפיינים, והתוכן של כל תא הוא הערך שהמאפיין מקבל.
דרך אחרת לתאר נתונים אלה היא בעזרת הצהרות. למשל, הפריט בשורה הראשונה של הטבלה ניתן לתיאור על-ידי ההצהרות:
פריט (Item)
מאפיין (Property)
ערך (Value)
Q17738
שם
מלחמת הכוכבים – פרק 4: תקווה חדשה
Q17738
במאי
ג'ורג לוקאס
Q17738
משך
121 דקות
Q17738
פדיון קופת כרטיסים
775398007
ויקינתונים שומר את המידע על פריטים בצורה של קביעות. קביעות מתארות בפירוט מאפיינים של פריט, ומורכבות מצמדים של מאפיין וערך. מאפיינים בוויקינתונים מזוהים על ידי האות P ואחריה מספר. למשל, המאפיין "במאי" הוא P57. הערך שהמאפיין הזה מקבל עבור פריט Q17738 (מלחמת הכוכבים – פרק 4: תקווה חדשה) הוא "ג'ורג' לוקאס", שהוא גם פריט בפני עצמו – Q38222. אבל לא כל ערך הוא גם פריט. למשל, הערך למאפיין "משך" (P2047) עבור הפריט Q17738 הוא 121 דקות.
יש מאפיינים שצריכים לקבל ערכים שאינם פריטים. למשל, ראינו שהערך של המאפיין "משך" עבור הפריט Q17738 הוא 121 דקות – ערך כמותי. הערך של המאפיין "תאריך הוצאה לאור" (P577) בארצות הברית הוא "25 במאי 1977", ערך מסוג תאריך. סוגי נתונים נפוצים אחרים הם מחרוזת (רצף של תווים, למשל של אותיות או קוד), קואורדינטות, וטקסט חד-לשוני (מחרוזת שאינה מתורגמת לשפות אחרות). בוויקינתונים יש כיום 27 סוגי נתונים שונים. עוד מידע עליהם ניתן למצוא כאן.
זוהי שאילתת הספארקל הראשונה שנלמד. השאילתה הפשוטה הזו מראה את הסרטים ששייכים לסדרה מלחמת הכוכבים.
# סרטי מלחמת הכוכבים
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). כלומר המשתנה אוסף את החלק השלישי של ההצהרה (מושא ההצהרה):