מדריך DSPL

השם של DSPL הוא Dataset Publishing Language. ניתן לייבא מערכי נתונים שמתוארים ב-DSPL אל Google Public Data Explorer, כלי שמאפשר ניתוח עשיר וויזואלי של הנתונים.

הערה: כדי להעלות נתונים לנתונים ציבוריים של Google באמצעות הכלי להעלאה של נתונים ציבוריים, צריך להיות לכם חשבון Google.

המדריך הזה מכיל דוגמה מפורטת להכנת מערך נתונים בסיסי של DSPL.

מערך נתונים של DSPL הוא חבילה שמכילה קובץ XML וקבוצה של קובצי CSV. קובצי ה-CSV הם טבלאות פשוטות שכוללות את הנתונים של מערך הנתונים. קובץ ה-XML מתאר את המטא-נתונים של מערך הנתונים, כולל מטא-נתונים של מידע, כמו תיאורים של מדדים, וכן מטא-נתונים מבניים כמו הפניות בין טבלאות. המטא-נתונים מאפשרים למשתמשים שאינם מומחים לחקור את הנתונים שלך ולהמחיש אותם.

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

סקירה כללית

לפני שמתחילים ליצור את מערך הנתונים שלנו, נפרט סקירה כללית של מערך הנתונים של DSPL:

  • מידע כללי: מידע על מערך הנתונים
  • מושגים: הגדרות של "דברים" המופיעים במערך הנתונים (למשל, מדינות, שיעור אבטלה, מגדר וכו')
  • פרוסות: שילובים של מושגים שלגביהם יש נתונים
  • טבלאות: נתונים לגבי קונספטים ופרוסות. טבלאות קונספט כוללות ספירות וטבלאות פרוסות מכילות נתונים סטטיסטיים
  • נושאים: משמשים לארגון הקונספט של מערך הנתונים בהיררכיה משמעותית על ידי הוספת תוויות

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

מערך הנתונים לדוגמה מגדיר את המושגים הבאים:

  • country
  • gender
  • אוכלוסייה
  • מדינה
  • שיעור האבטלה
  • שנה

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

פריסות מגדירות כל שילוב של מושגים שעבורם קיימים נתונים סטטיסטיים במערך הנתונים. פלח מכיל מאפיינים ומדדים. בתמונה שלמעלה, המאפיינים מופיעים בכחול והמדדים כתומים. בדוגמה הזו, לפלח gender_country_slice יש נתונים לגבי המדד population ובמאפיינים country, year ו-gender. פרוסה נוספת, שנקראת country_slice, מספקת מספרים כוללים של אוכלוסייה שנתית (מדדים) למדינות.

בנוסף למאפיינים ולמדדים, הפלחים מתייחסים גם לטבלאות שמכילות את הנתונים בפועל.

עכשיו נסביר איך ליצור מערך נתונים כזה ב-DSPL.

פרטי מערך הנתונים

כדי להתחיל בעבודה, עלינו ליצור קובץ XML עבור מערך הנתונים שלנו. כאן מתחיל תיאור DSPL של מערך הנתונים לדוגמה שלנו:

<?xml version="1.0" encoding="UTF-8"?>
<dspl targetNamespace="http://www.stats-bureau.com/mystats"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://schemas.google.com/dspl/2010"
   xmlns:time="http://www.google.com/publicdata/dataset/google/time"
   xmlns:geo="http://www.google.com/publicdata/dataset/google/geo"
   xmlns:entity="http://www.google.com/publicdata/dataset/google/entity"
   xmlns:quantity="http://www.google.com/publicdata/dataset/google/quantity">

  <import namespace="http://www.google.com/publicdata/dataset/google/time"/>
  <import namespace="http://www.google.com/publicdata/dataset/google/entity"/>
  <import namespace="http://www.google.com/publicdata/dataset/google/geo"/>
  <import namespace="http://www.google.com/publicdata/dataset/google/quantity"/>

  <info>
    <name>
      <value>My statistics</value>
    </name>
    <description>
      <value>Some very interesting statistics about countries</value>
    </description>
    <url>
      <value>http://www.stats-bureau.com/mystats/info.html</value>
    </url>
    </info>

  <provider>
    <name>
      <value>Bureau of Statistics</value>
    </name>
    <url>
      <value>http://www.stats-bureau.com</value>
    </url>
  </provider>
 ...
</dspl>

התיאור של מערך הנתונים מתחיל ברכיב <dspl> ברמה העליונה. המאפיין targetNamespace מכיל URI שמזהה את מערך הנתונים באופן ייחודי. מרחב השמות של מערך הנתונים חשוב במיוחד כשמפרסמים את מערך הנתונים, כי הוא המזהה הגלובלי של מערך הנתונים ודרכים שבהן אנשים אחרים יכולים להתייחס אליו.

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

שימוש במידע מתוך מערכי נתונים אחרים

מערכי נתונים יכולים להשתמש שוב במערכי הנתונים האלה על ידי ייבוא של מערכי הנתונים האלה. כל רכיב <import> מציין את מרחב השמות של מערך נתונים אחר שיתייחס למערך נתונים זה.

במערך הנתונים לדוגמה שלנו, נזדקק לכמה הגדרות מhttp://www.google.com/publicdata/dataset/google/quantity (מערך נתונים שנוצר על ידי Google, המכיל מושגים שימושיים להגדרת כמויות מספריות), וממערכי הנתונים time, entity ו-geo, שמספקים הגדרות הקשורות לזמן, לישויות ולמיקום גיאוגרפי, בהתאמה.

הרכיב <dspl> העליון מספק הצהרת קידומת של מרחב שמות (למשל, xmlns:time="http://...") לכל מערכי הנתונים המיובאים. הצהרות עם קידומות נחוצות כדי להתייחס לרכיבים ממערכי נתונים אחרים באופן תמציתי. לדוגמה, time:year מתייחסת להגדרה year במערך הנתונים המיובאים שמרחב השמות שלו משויך לקידומת time.

מערך הנתונים ופרטי הספק

הרכיב <info> מכיל מידע כללי לגבי מערך הנתונים: השם, התיאור וכתובת ה-URL שבה ניתן למצוא מידע נוסף.

הרכיב <provider> מכיל מידע על ספק מערך הנתונים: השם שלו וכתובת ה-URL שבה אפשר למצוא מידע נוסף (בדרך כלל, דף הבית של ספק הנתונים).

הגדרת מושגים

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

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

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

אוכלוסייה

נתחיל בהגדרת האוכלוסיה. במסמך DSPL, הקונספטים מוגדרים ברכיב <concepts> שמופיע מיד אחרי מערך הנתונים ופרטי הספק.

הנה מושג אוכלוסייה עם המידע המינימלי הדרוש לכל קונספט: id (מזהה ייחודי), name ו- type.

<dspl ...>
  ...
  <concepts>
    <concept id="population">
      <info>
        <name>
          <value>Population</value>
        </name>
      </info>
      <type ref="integer"/>
    </concept>
  ...
  </concepts>

כך עובדת דוגמה זו:

  • כל קונספט חייב לספק id שמזהה את הקונספט בצורה ייחודית מתוך מערך הנתונים. המשמעות היא שאין שני מושגים שמוגדרים באותו מערך נתונים.
  • בדיוק כמו מערך הנתונים והספק שלו, רכיבי ה-<info> מספקים מידע טקסטואלי לגבי הקונספט, כמו השם והתיאור שלו.
  • הרכיב <type> מציין את סוג הנתונים עבור המכונות של הקונספט (במילים אחרות, "הערכים"). בדוגמה הזו, הסוג population הוא integer. DSPL תומך בסוגי הנתונים הבאים:
    • string
    • integer
    • float
    • boolean
    • date

המדינה

עכשיו נכתוב את ההגדרה של מושג המדינה:

<concept id="country">
  <info>
    <name><value>Country</value></name>
    <description>
      <value>My list of countries.</value>
    </description>
  </info>
  <type ref="string"/>
  <property id="name">
    <info>
      <name><value>Name</value></name>
      <description>
        <value>The official name of the country</value>
      </description>
    </info>
    <type ref="string" />
  </property>
  <table ref="countries_table" />
</concept>

הגדרת הקונספט של המדינה מתחילה כמו בהגדרה הקודמת, עם id, info ו-type.

ערכי קונספט

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

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

מאפייני קונספט

בנוסף ל-id שלו, לקונספט של המדינה יש רכיב <property> שמציין את שם המדינה. במילים אחרות, שם המדינה ("אירלנד") הוא נכס של המדינה עם id IE. נכסים הם האופן שבו DSPL מספק מידע מובנה נוסף על מופעים של קונספט.

ממש כמו התפיסה עצמה, למאפיינים יש id, info ו-type.

נתוני קונספט

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

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

מערך הנתונים מגדיר את הטבלה countries_table באופן הבא:

...
<tables>
  <table id="countries_table">
    <column id="country" type="string"/>
    <column id="name" type="string"/>
    <data>
      <file format="csv" encoding="utf-8">countries.csv</file>
    </data>
  </table>
  ...
</tables>

בטבלת המדינות מפורטות העמודות בטבלה, הסוגים שלהן, וקובץ CSV שמכיל את הנתונים. אפשר לקבץ את קובץ ה-CSV הזה ולהעלות אותו באמצעות XML של מערך הנתונים או לגשת אליו מרחוק דרך HTTP, HTTPS או FTP. במקרים כאלה צריך להחליף את countries.csv בכתובת URL, למשל http://www.myserver.com/mydata/countries.csv.

בכל מקום שבו הקובץ מאוחסן, הוא נראה כך:

country, name
AD,      Andorra
AF,      Afghanistan
AI,      Anguilla
AL,      Albania
US,      United States

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

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

יש כמה דרישות לנתוני ה-CSV עבור טבלת הרעיונות:

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

שנה

הקונספט האחרון שנחוץ לנתוני אוכלוסיית המדינה הוא מושג שמייצג שנים. במקום להגדיר קונספט חדש, נשתמש בקונספט לשנה מתוך אחד ממערכי הנתונים שייבאנו: "http://www.google.com/publicdata/dataset/google/time". כדי לעשות זאת, צריך להפנות לזה כ-time:year, כאשר time מייצג את מערך הנתונים שאליו מתבצעת הפניה, ו-year מזהה את הקונספט.

מושגים קנוניים

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

למעשה, הקונספט למדינה שהוגדר למעלה קיים בתור מושג קנוני. יצרנו אותו כאן למטרות הדגמה בלבד. כשהדבר אפשרי, כדאי להשתמש במושגים קנוניים במערכי הנתונים באופן ישיר או על ידי הרחבתם (הסבר נוסף על התוסף בהמשך). הקונספטים הקנוניים מאפשרים השוואה בין הנתונים למערכי נתונים אחרים, ומאפשרים שימוש במערכי הנתונים שלך ב-Public Data Explorer. למשל, אם יוצרים אנימציה של נתונים לאורך זמן או מציגים נתונים גיאוגרפיים במפה, המערכת משתמשת בקונספטים הקנוניים: time ו-geo, בהתאמה.

פרוסה ראשונה

עכשיו כשיש לנו קונספטים לאוכלוסיה, למדינה ולשנה, הגיע הזמן לשלב אותם יחד!

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

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

פרוסות מופיעות בקובץ ה-DSPL מתחת לרכיב <slices>, חייבות להופיע מיד אחרי הקטע concepts.

<slices>
  <slice id="countries_slice">
    <dimension concept="country"/>
    <dimension concept="time:year"/>
    <metric concept="population"/>
    <table ref="countries_slice_table"/>
  </slice>
</slices>

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

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

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

טבלת פרוסות

הטבלה של פלח האוכלוסייה שלנו מופיעה בקטע tables של קובץ ה-DSPL:

<tables>
  ...
  <table id="countries_slice_table">
    <column id="country" type="string"/>
    <column id="year" type="date" format="yyyy"/>
    <column id="population" type="integer"/>
    <data>
      <file format="csv" encoding="utf-8">country_slice.csv</file>
    </data>
  </table>
  ...
</tables>

הערה: העמודה year כוללת מאפיין format שמציין את פורמט השנים. פורמטים נתמכים של תאריכים הם הפורמטים שמוגדרים על ידי פורמט Joda DateTime.

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

country, year,  population
AF,      1960,  9616353
AF,      1961,  9799379
AF,      1962,  9989846
AF,      1963,  10188299
...

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

יש לשים לב שהערכים בעמודה country תואמים לערך/למזהה של הקונספט country, שהוא הקוד בן שתי האותיות של תקן ISO 3166 של המדינה.

נתוני ה-CSV לפלח צריכים לעמוד בדרישות הבאות:

  • כל ערך של שדה מאפיין (כגון country ו-year) לא יכול להיות ריק. ערכים לשדות של מדדים (למשל population) יכולים להיות ריקים. ערך ריק לא מיוצג על ידי תווים.
  • כל ערך של שדה מאפיין שמפנה לקונספט חייב להיכלל בנתוני הקונספט הזה. לדוגמה, הערך AF חייב להופיע בטבלת נתוני הקונספט של country.
  • כל שילוב ייחודי של ערכי מאפיינים, למשל AF, 2000, יכול להתרחש רק פעם אחת.
  • אפשר למיין את הנתונים לפי עמודות של מאפיינים שאינם הזמן (בכל סדר שהוא), ולאחר מכן אפשר גם לבחור באחת מהעמודות האחרות. כך, למשל, בטבלה עם העמודות [date, dimension1, dimension2, metric1, metric2], אפשר למיין לפי dimension1, dimension2 ואז date, אבל לא לפי date ואז לפי המאפיינים.

סיכום

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

  • יצירת הכותרת והתיאור של DSPL ומערך הנתונים שלו
  • יצירת קונספט אחד לאוכלוסיה, וקונספט אחר למדינה, עם קובץ CSV שמפרט את כל המדינות והשמות שלהן.
  • אפשר ליצור פלח עם מספרי האוכלוסיה שלנו במדינות שונות במשך הזמן, תוך התייחסות לקונספט לשנה שכבר הוגדרה במערך הנתונים המיובא מ-Google.

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

הוספת מאפיין: מדינות בארה"ב

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

<concept id="state" extends="geo:location">
  <info>
    <name>
      <value>state</value>
    </name>
    <description>
      <value>US states, identified by their two-letter code.</value>
    </description>
  </info>
  <property concept="country" isParent="true" />
  <table ref="states_table"/>
</concept>

תוספי קונספט והפניות של נכסים

הקונספט של המדינה מציג כמה תכונות חדשות של DSPL.

בשלב הראשון, מרחיבים עוד מושג, geo:location (כפי שמוגדר במערך הנתונים החיצוני שייבאנו בתחילת מערך הנתונים שלנו). מבחינה סמנטית, פירוש הדבר ש-state הוא סוג של geo:location. כתוצאה מכך, היא יורשת את כל המאפיינים והמאפיינים של geo:location. המיקום מגדיר מאפיינים של latitude ו-longitude באופן ספציפי. הארכת הקונספט הקודם חלה גם על הנכסים האלה. בנוסף, מכיוון שהמיקום עובר בירושה מ-entity:entity, המדינה מקבלת גם את כל המאפיינים של הנכס האחרון, כולל name, description ו-info_url.

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

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

בנוסף לירושה, נכס המדינה מציג גם את הרעיון של הפניות לקונספט. באופן ספציפי, לקונספט של המדינה יש מאפיין בשם country, המתייחס לקונספט של המדינה שיצרנו למעלה. הפעולה הזו מתבצעת באמצעות מאפיין concept. המאפיין הזה לא מציין מזהה, אלא רק הפניה לקונספט. זה שווה ערך ליצירת מזהה עם ערך זהה למזהה של הקונספט שאליו מתייחס הקובץ (כלומר, country בדוגמה זו). הקשר ההיררכי בין מדינה למדינה נקבע על ידי מאפיין isParent="true" בהפניה. באופן כללי, צריך לייצג מאפיינים עם קשרים היררכיים, כמו אזורים גיאוגרפיים, כך שהקונספט של הצאצא כולל מאפיין שמתייחס לקונספט ההורה באמצעות המאפיין isParent.

הגדרת הטבלה של המדינות נראית כך:

<tables>
  ...
  <table id="states_table">
    <column id="state" type="string"/>
    <column id="name" type="string"/>
    <column id="country" type="string">
      <value>US</value>
    </column>
    <column id="latitude" type="float"/>
    <column id="longitude" type="float"/>
    <data>
      <file format="csv" encoding="utf-8">states.csv</file>
    </data>
  </table>
  ...
</tables>

בעמודת המדינה יש ערך קבוע לכל המדינות. ציון השדה ב-DSPL מונע את החזרה של הערך הזה בכל מצב בנתונים. כמו כן, כללנו עמודות עבור name, latitude ו-longitude מפני שהמדינה עברה בירושה מהנכסים האלה אל geo:location. מצד שני, יש מאפיינים שעברו בירושה (למשל, description) אינן מכילות עמודות. זה בסדר אם נכס הושמט מטבלת הגדרת קונספט, הערך שלו לא מוגדר עבור כל מופע של הרעיון.

קובץ ה-CSV נראה כך:

state, name,        latitude,  longitude
AL,    Alabama,     32.318231, -86.902298
AK,    Alaska,      63.588753, -154.493062
AR,    Arkansas,    35.20105,  -91.831833
AZ,    Arizona,     34.048928, -111.093731
CA,    California,  36.778261, -119.417932
CO,    Colorado,    39.550051, -105.782067
CT,    Connecticut, 41.603221, -73.087749
...

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

<slices>
  <slice id="states_slice">
    <dimension concept="state"/>
    <dimension concept="time:year"/>
    <metric concept="population"/>
    <table ref="states_slice_table"/>
  </slice>
</slices>

ההגדרה של טבלת הנתונים נראית כך:

<tables>
  ...
  <table id="states_slice_table">
    <column id="state" type="string"/>
    <column id="year" type="date" format="yyyy"/>
    <column id="population" type="integer"/>
    <file format="csv" encoding="utf-8">state_slice.csv</file>
  </table>
  ...
</tables>

קובץ ה-CSV נראה כך:

state, year, population
AL,    1960, 9616353
AL,    1961, 9799379
AL,    1962, 9989846
AL,    1963, 10188299

למה ליצור פרוסה חדשה, במקום להוסיף עוד מאפיין למאפיין הקודם?

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

המאפיינים משמשים כ"מפתח ראשי" עבור הפלח. המשמעות היא שלכל שורת נתונים צריכים להיות ערכים לכל המאפיינים, ולכל שתי שורות נתונים לא יכולים להיות ערכים זהים בכל המאפיינים.

הוספת מדד: שיעור אבטלה

עכשיו נוסיף ערך נוסף למערך הנתונים שלנו:

<concept id="unemployment_rate" extends="quantity:rate">
  <info>
    <name>
      <value>Unemployment rate</value>
    </name>
    <description>
      <value>The percent of the labor force that is unemployed.</value>
    </description>
    <url>
      <value>http://www.bls.gov/cps/cps_htgm.htm</value>
    </url>
  </info>
  <type ref="float/>
  <attribute id="is_percentage">
    <type ref="boolean"/>
    <value>true</value>
  </attribute>
</concept>

בקטע info של המדד הזה יש שם, וכתובת URL (קישור של משרד העבודה האמריקני).

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

מאפייני קונספט

הקונספט הזה כולל גם את המבנה של מאפיין. בדוגמה הזו, אנחנו משתמשים במאפיין כדי לציין שהאחוז unemployment_rate הוא אחוז. המאפיין is_percentage עובר בירושה לקונספט quantity:rate שמרחיב את הקונספט הזה. המידע הזה משמש את ה-Public Data Explorer כדי להציג סימני אחוזים בעת הצגת הנתונים.

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

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

הוספת נתונים על שיעור האבטלה בארצות הברית

אנחנו מוכנים עכשיו להוסיף נתונים על שיעור האבטלה במדינות בארה"ב. מאחר ששיעור האבטלה הוא כבר ערך, ויש לנו כבר נתוני אוכלוסייה למדינות, אנחנו יכולים פשוט להוסיף אותו לפלח שכבר יצרנו עבור המאפיינים מדינה ושנה.

<slices>
  ...
  <slice id="states_slice">
    <dimension concept="state"/>
    <dimension concept="time:year"/>
    <metric concept="population"/>
    <metric concept="unemployment_rate"/>
    <table ref="states_slice_table"/>
  </slice>
  ...
</slices>

... ומוסיפים עמודה נוספת להגדרת הטבלה:

<tables>
  ...
  <table id="states_slice_table">
    <column id="state" type="string"/>
    <column id="year" type="date" format="yyyy"/>
    <column id="population" type="integer"/>
    <column id="unemployment_rate" type="float"/>
    <data>
      <file format="csv" encoding="utf-8">state_slice.csv</file>
    </data>
  </table>
  ...
</tables>

... ולקובץ ה-CSV:

state, year, population, unemployment_rate
AL,    1960, 9616353,    5.1
AL,    1961, 9799379,    5.2
AL,    1962, 9989846,    4.8
AL,    1963, 10188299,   6.9

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

מאפיינים נוספים: פירוט האוכלוסייה לפי מגדר

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

<concept id="gender" extends="entity:entity">
  <info>
    <name>
      <value>Gender</value>
    </name>
    <description>
      <value>Gender, Male or Female</value>
    </description>
    <pluralName>
      <value>Genders</value>
    </pluralName>
    <totalName>
      <value>Both genders</value>
    </totalName>
  </info>
  <type ref="string"/>
  <table ref="genders_table"/>
</concept>

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

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

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

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

<slice id="countries_gender_slice">
  <dimension concept="country"/>
  <dimension concept="gender"/>
  <dimension concept="time:year"/>
  <metric concept="population"/>
  <table ref="countries_gender_slice_table"/>
</slice>

הגדרת הטבלה עבור הפלח נראית כך:

<table id="countries_gender_slice_table">
  <column id="country" type="string"/>
  <column id="gender" type="string"/>
  <column id="year" type="date" format="yyyy"/>
  <column id="population" type="integer"/>
  <data>
    <file format="csv" encoding="utf-8">gender_country_slice.csv</file>
  </data>
</table>

קובץ ה-CSV עבור הטבלה נראה כך:

country, gender, year, population
AF,      M,      1960, 4808176
AF,      F,      1960, 4808177
AF,      M,      1961, 4899689
AF,      F,      1961, 4899690...

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

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

הנושאים

התכונה האחרונה של DSPL שבה נשתמש במערך הנתונים שלנו היא topics (נושאים). נושאים משמשים לסיווג נושאים לפי היררכיה, ויישומים משמשים את המשתמשים כדי לנווט לנתונים.

בקובץ ה-DSPL, הנושאים מופיעים ממש לפני הקונספטים. לפניכם דוגמה להיררכיית נושאים:

<dspl ... >
  ...
  <topics>
    <topic id="geography">
      <info>
        <name>
          <value>Geography</value>
        </name>
      </info>
    </topic>
    <topic id="social_indicators">
      <info>
        <name>
          <value>Social indicators</value>
        </name>
      </info>
    </topic>
    <topic id="population_indicators">
      <info>
        <name>
          <value>Population indicators</value>
        </name>
      </info>
    </topic>
    <topic id="poverty_and_income">
      <info>
        <name>
          <value>Poverty & income</value>
        </name>
      </info>
    </topic>
    <topic id="health">
      <info>
        <name>
          <value>Health</value>
        </name>
      </info>
    </topic>
  </topics>

אפשר לקנן נושאים לפי הצורך.

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

<concept id="population">
  <info>
    <name>
      <value>Population</value>
    </name>
    <description>
      <value>Size of the resident population.</value>
    </description>
  </info>
  <topic ref="population_indicators"/>
  <type ref="integer"/>
</concept>

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

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

לאחר יצירת מערך הנתונים, השלב הבא הוא zip אותו ולהעלות את קובץ ה-zip לכלי Google Public Data Explorer. אם נתקלת בבעיות, כדאי לעיין בקטע שאלות נפוצות, הכולל דיון לגבי הבעיות הנפוצות ביותר בהעלאה.

לעיונך, ניתן גם להוריד את קובץ ה-XML המלא ואת החבילה המלאה של מערך הנתונים המשויכים למדריך הזה.

מה להמשיך מכאן

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

מומלץ גם לבחון מערכי נתונים נוספים.