הגדרות TOML (.toml)

TOML תקן

Tom's Obvious Minimal Language (TOML) הוא פורמט הגדרות חד-משמעי הממוקד בבני אדם, אשר נוצר על ידי שותף-מייסד GitHub, טום פרסטון-וורנר (Tom Preston-Werner), ואומץ באופן נרחב במערכות אקולוגיות תכנותיות מודרניות, כולל Rust (Cargo) ו-Python (pyproject.toml).

המר TOML ל-JSON

ממיר חינמי מ-TOML ל-JSON פועל בדפדפן. המר קבצים באופן מיידי במכשיר שלך.

בדיקה ומטא-דאטה

מערכות הפעלה ומנתחי קבצים מזהים קבצי TOML על ידי בדיקת רצף הבייטים הבינארי הראשוני:

בחר או גרור קבצים לכאן

המרה פרטית ב-100% בתוך הדפדפן - הקבצים לעולם אינם עוזבים את המכשיר שלך

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

חתימת כותרת ברמת הבייט (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 (נוכחי)YAMLJSONINI
סיכון לדו-משמעותאפס (מפרט חד-משמעי לחלוטין)גבוה (באגי בוליאניים כמו 'בעיית נורווגיה' ב-YAML)אפס (טיפוסי נתונים קפדניים)בינוני (אין תקן רשמי)
טיפוסי תאריך ושעה מובניםתמיכה מובנית בתאריך ושעה לפי RFC 3339ניתוח מחרוזת / תאריך משתמעללא (מחרוזות בלבד)ללא (מחרוזות בלבד)
תמיכה בהערותמובנית (הערות #)מובנית (הערות #)הערות אינן מותרותמובנית (הערות ; ו-#)
מערכת אקולוגית עיקריתRust (Cargo), Python (PEP 518), GoKubernetes, 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) באמצעות הצהרות מערך טבלאות מקוננות לעומק.
  • הקצאת זיכרון בלתי מוגבלת במהלך ניתוח של מערכים מוטמעים ענקיים.

השיטות המומלצות להגנה:

היסטוריה ואבני דרך

2021TOML v1.0.0 משוחרר רשמית, ומקפיא את מפרט תחביר הליבה.
2018פייתון מאמצת את 'pyproject.toml' (תקן PEP 518) כתקן המודרני להגדרות בנייה.
2013טום פרסטון-וורנר מפרסם את TOML כדי לספק פורמט הגדרות נקי ללא המורכבות של YAML.

יתרונות מרכזיים

  • חד-משמעי לחלוטין: ממופה בצורה נקייה וצפויה לטבלת גיבוב (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 ישירות בדפדפן האינטרנט שלך.