הגדרות TOML (.toml)
TOML תקןTom's Obvious Minimal Language (TOML) הוא פורמט הגדרות חד-משמעי הממוקד בבני אדם, אשר נוצר על ידי שותף-מייסד GitHub, טום פרסטון-וורנר (Tom Preston-Werner), ואומץ באופן נרחב במערכות אקולוגיות תכנותיות מודרניות, כולל Rust (Cargo) ו-Python (pyproject.toml).
המר TOML ל-JSON
ממיר חינמי מ-TOML ל-JSON פועל בדפדפן. המר קבצים באופן מיידי במכשיר שלך.
בדיקה ומטא-דאטה
מערכות הפעלה ומנתחי קבצים מזהים קבצי TOML על ידי בדיקת רצף הבייטים הבינארי הראשוני:
חתימת כותרת ברמת הבייט (Magic Bytes)
מערכות הפעלה ומנתחי קבצים מזהים קבצי TOML על ידי בדיקת רצף הבייטים הבינארי הראשוני:
חתימת HEX (היסט 0):
5B ... 5Dייצוג ASCII: [...]
תקינה: TOML v1.0.0 Specification
מפרט טכני
| ארכיטקטורת מעטפת | Human-readable configuration file mapping unequivocally to a hash table, structured with [tables] and key = value pairs |
| דחיסה | Uncompressed text stream |
| סדר בתים (Endianness) | UTF-8 text stream |
| מרחבי צבע | N/A (Configuration File) |
| ערוצים ומבנה | Tables, arrays of tables, inline tables, strings, integers, floats, booleans, and RFC 3339 datetimes |
| ממדים מרביים | Unbounded text length |
| שקיפות | None |
| הזרמה ופרוגרסיביות | Sequential line-by-line configuration parsing |
מטריצת השוואה טכנית: TOML מול מתחרים
| תכונה טכנית | TOML (נוכחי) | YAML | JSON | INI |
|---|---|---|---|---|
| סיכון לדו-משמעות | אפס (מפרט חד-משמעי לחלוטין) | גבוה (באגי בוליאניים כמו 'בעיית נורווגיה' ב-YAML) | אפס (טיפוסי נתונים קפדניים) | בינוני (אין תקן רשמי) |
| טיפוסי תאריך ושעה מובנים | תמיכה מובנית בתאריך ושעה לפי RFC 3339 | ניתוח מחרוזת / תאריך משתמע | ללא (מחרוזות בלבד) | ללא (מחרוזות בלבד) |
| תמיכה בהערות | מובנית (הערות #) | מובנית (הערות #) | הערות אינן מותרות | מובנית (הערות ; ו-#) |
| מערכת אקולוגית עיקרית | Rust (Cargo), Python (PEP 518), Go | Kubernetes, Ansible, צינורות CI/CD | ממשקי API של אינטרנט, תקשורת בדפדפן | חלונות מדור קודם, הגדרות Git |
מצבי שיחשות נפוצים ומדריך שחזור הקסדצימלי (Hex)
שגיאת מנתח (Parser): 'Duplicate key in table' או 'Invalid table header'.
גורם שורש: ניסיון להגדיר מחדש מפתח קיים או מרחב שמות של טבלה בתוך המסמך.
התאוששות: אמת וקבע מחדש את תחביר ה-TOML באמצעות מעצב ה-TOML של File2File.
ניתוח אבטחה ווקטורי התקפה על מנתחים (Parsers)
מנתחי TOML חייבים להיזהר מפני זיהום אבות-טיפוס (prototype pollution) והתשה של מעבדים עקב קינון פתולוגי של מערכי טבלאות.
ווקטורי תקיפה ידועים
- זיהום אבות-טיפוס במנתחי TOML מבוססי JavaScript המזריקים מאפיינים לתוך Object.prototype.
- מניעת שירות (DoS) באמצעות הצהרות מערך טבלאות מקוננות לעומק.
- הקצאת זיכרון בלתי מוגבלת במהלך ניתוח של מערכים מוטמעים ענקיים.
השיטות המומלצות להגנה:
היסטוריה ואבני דרך
יתרונות מרכזיים
- חד-משמעי לחלוטין: ממופה בצורה נקייה וצפויה לטבלת גיבוב (hash table) ללא שום המרת טיפוסים מפתיעה.
- תמיכה מובנית ממדרגה ראשונה בתאריכים ושעות (חותמות זמן לפי RFC 3339, תאריכים ושעות) ללא הצטרכות לתווי בריחה (escaping) במחרוזות.
- אומץ כפורמט ההגדרות הרשמי עבור כלי פיתוח מודרניים (Cargo.toml ב-Rust, pyproject.toml ב-Python).
מגבלות טכניות וחסרונות
- עצי אובייקטים מרובי-רמות המקוננים עמוק עלולים להפוך למרוצפים ומילוליים מדי בהשוואה ל-YAML.
- תחביר עבור מערכים של טבלאות ([[table.array]]) עשוי להיות לא אינטואיטיבי עבור מתחילים.
- פחות קומפקטי מ-JSON עבור תעבורת נתונים ב-API בתפוקה גבוהה ממכונה למכונה.
עובדות טכניות מעניינות
- TOML נוצר על ידי טום פרסטון-וורנר, שגם ייסד שותף את GitHub ויצר את Gravatar ואת SemVer (גרסאות סמנטיות).
- קובץ ה-'Cargo.toml' בכל פרויקט Rust מגדיר את כל תלויות החבילות ודגלי המהדר בפורמט TOML.
- בניגוד ל-JSON, פורמט TOML תומך באופן מובני בהערות (באמצעות התווים '#') ובמחרוזות מרובות שורות.
שאלות טכניות נפוצות
למה משמש TOML?
TOML משמש לתצורת תוכנה, בעיקר ב-Cargo.toml של Rust, ב-pyproject.toml של Python, בהגדרות Go Hugo ובכלי קונטיינרים.
למה מעדיפים את TOML על פני YAML עבור הגדרות תצורה?
TOML נמנע מבאגי הניתוח הידועים לשמצה של מקרי קצה ב-YAML (כגון המילה 'NO' ללא מרכאות שהופכת לבוליאני false), תוך שמירה על ידידותיות למשתמש עם הערות וטבלאות ברורות.
איך אוכל להמיר TOML ל-JSON או YAML?
ניתן להמיר קובצי TOML ל-JSON או YAML באופן מיידי באמצעות File2File.app ישירות בדפדפן האינטרנט שלך.