הגדרות TOML (.toml)

TOML תקן

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

המר TOML ל-JSON

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

בדיקה ומטא-נתונים

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

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

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

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

חתימת כותרת ברמת הבייט (Magic Bytes)

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

חתימת HEX (היסט 0):

5B ... 5D

ייצוג ASCII: [...]

תקינה: TOML v1.0.0 Specification

מפרט טכני

מבנה המכולהקובץ תצורה קריא לאדם שממופה באופן חד-משמעי לטבלת גיבוב, ומובנה באמצעות [tables] וצמדי key = value
דחיסהזרם טקסט לא דחוס
סדר בתים (Endianness)זרם טקסט UTF-8
מרחבי צבעלא רלוונטי (קובץ תצורה)
ערוצים ומבנהטבלאות, מערכים של טבלאות, טבלאות מוטמעות, מחרוזות, מספרים שלמים, מספרים עשרוניים, ערכים בוליאניים ותאריכי ושעות RFC 3339
ממדים מרבייםאורך טקסט ללא מגבלה קבועה
שקיפותאין
הזרמה ופרוגרסיביותניתוח רציף של קובץ התצורה, שורה אחר שורה

מטריצת השוואה טכנית: TOML מול מתחרים

תכונה טכניתTOML (נוכחי)YAMLJSONINI
סיכון לדו-משמעותאפס (מפרט חד-משמעי לחלוטין)גבוה (באגי בוליאניים כמו 'בעיית נורווגיה' ב-YAML)אפס (טיפוסי נתונים קפדניים)בינוני (אין תקן רשמי)
טיפוסי תאריך ושעה מובניםתמיכה מובנית בתאריך ושעה לפי RFC 3339ניתוח מחרוזת / תאריך משתמעללא (מחרוזות בלבד)ללא (מחרוזות בלבד)
תמיכה בהערותמובנית (הערות #)מובנית (הערות #)הערות אינן מותרותמובנית (הערות ; ו-#)
מערכת אקולוגית עיקריתRust (Cargo), Python (PEP 518), GoKubernetes, Ansible, תהליכי CI/CDממשקי API של אינטרנט, תקשורת בדפדפןWindows מדור קודם, הגדרות Git

מצבי השחתה נפוצים ומדריך שחזור הקסדצימלי (Hex)

שגיאת מנתח (Parser): 'Duplicate key in table' או 'Invalid table header'.

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

שחזור: אמת את תחביר ה-TOML ועצב אותו מחדש באמצעות מעצב ה-TOML של File2File.app.

ניתוח אבטחה ווקטורי תקיפה נגד מנתחי פורמטים (parsers)

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

ווקטורי תקיפה ידועים

  • זיהום אבות-טיפוס במנתחי TOML מבוססי JavaScript המזריקים מאפיינים לתוך Object.prototype.
  • מניעת שירות (DoS) באמצעות הצהרות מערך טבלאות מקוננות לעומק.
  • הקצאת זיכרון בלתי מוגבלת במהלך ניתוח של מערכים מוטמעים ענקיים.

שיטות מומלצות להגנה: ודא עמידה במגבלות קינון של טבלאות והשתמש באובייקטי מילון הבטוחים מפני זיהום אבות-טיפוס (prototype pollution).

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

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 משתמשות ב-Cargo.toml כדי להגדיר מטא־נתונים, תלויות ויעדים; פרויקטי Rust המשתמשים במערכות בנייה אחרות עשויים להשתמש בקבצים שונים.
  • בניגוד ל-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 ישירות בדפדפן האינטרנט שלך.