תפריט

טריטוריות קטנות וקודים מיוחדים: לא לכל אזור יש קוד בן שתי אותיות

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

פורסם

  • מקרי קצה
  • קודי מדינות
  • נתוני בדיקה

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

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

מדוע מפסיקה ההנחה של קוד בן שתי אותיות להחזיק?

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

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

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

מה צריך לקרות לקודים שמורים ולקודים שהוצאו משימוש?

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

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

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

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

שמות קודמים והשמות שמקום משתמש בהם לעצמו

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

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

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

לא רלוונטי אינו זהה ללא ידוע

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

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

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

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

לא נתמך אינו זהה לפגום

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

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

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

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

למפתחים: לאפשר לבטא את המצב השלישי

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

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

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

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

צעדים הבאים

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

המשך קריאה

מדריכים בנושא תבניות נתוני כתובת וזהות עבור 86 מדינות