הגדרות YAML (.yaml)

YAML תקן

YAML Ain't Markup Language (YAML) הוא פורמט סריאליזציה דומיננטי של נתונים עבור DevOps מודרני, תשתיות ענן (Kubernetes, Docker Compose) ואוטומציית CI/CD, והוא מדגיש קריאות לבני אדם באמצעות הזחה נקייה באמצעות רווחים.

המר YAML ל-JSON

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

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

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

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

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

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

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

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

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

2D 2D 2D 0A

ייצוג ASCII: ---\n

תקינה: YAML 1.2.2 Specification

מפרט טכני

מבנה המכולהפורמט סריאליזציה של נתונים המבוסס על הזחה ונוח לקריאה, שהוא הרחבה של JSON ותומך בעוגנים ובכינויים
דחיסהזרם טקסט לא דחוס
סדר בתים (Endianness)זרם טקסט UTF-8 / Unicode
מרחבי צבעלא רלוונטי (סריאליזציה של נתונים)
ערוצים ומבנהמיפויים (מילוני מפתח-ערך), רצפים (רשימות), ערכים סקלריים (מחרוזות, מספרים וערכים בוליאניים), ועוגנים (&ref/*ref)
ממדים מרבייםגודל מסמך ללא מגבלה קבועה (תומך בזרמים של כמה מסמכים, המופרדים באמצעות '---')
שקיפותאין
הזרמה ופרוגרסיביותזרמים של כמה מסמכים מאפשרים לעבד מסמך אחר מסמך לפי הסדר

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

תכונה טכניתYAML (נוכחי)JSONTOMLXML
סגנון תחבירהיררכיה המבוססת על הזחה ורווחיםסוגריים ומרכאות קפדנייםטבלאות וצמדי מפתח=ערךתגי פתיחה וסגירה מפורטים
תמיכה בהערותמובנית (הערות #)הערות אינן מותרותמובנית (הערות #)<!-- הערות -->
אימוץ ב-DevOpsהתמיכה משתנה בין תוכנות.התמיכה משתנה בין תוכנות.הגדרות חבילה של Rust/Pythonהגדרות מדור קודם ארגוניות
שימוש חוזר בנתוניםעוגנים מובנים (&) וכינויים (*)ללא (כפילות ידנית)ללא (כפילות ידנית)ישויות XML

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

שגיאת מנתח: 'mapping values are not allowed here' או שגיאת הזחה.

גורם שורש: ערבוב של טאבים עם רווחים או רמות הזחה לא מיושרות.

שחזור: המר טאבים לרווחים ואמת את התחביר באמצעות מעצב ה-YAML של File2File.app.

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

מנתחי YAML שתומכים בתגי טיפוס מותאמים אישית (כמו 'yaml.load()' של PyYAML) אפשרו היסטורית הרצת קוד מרחוק באמצעות יצירת אובייקטים שרירותיים.

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

  • הרצת קוד שרירותי באמצעות תגי דסריאליזציה לא מאובטחים של אובייקטים (למשל '!!python/object/apply').
  • פצצות הרחבת ישויות (המקבילה של 'מיליארד צחוקים' המשתמשת בעוגנים ובכינויים של YAML).
  • פגיעויות בבלבול טיפוסים עקב ניתוח משתמע של ערכים בוליאניים ותאריכים.

שיטות מומלצות להגנה: השתמש תמיד במנתחי YAML בטוחים ('yaml.safe_load()' ב-Python) ואכוף מגבלות על עומק הרחבת העוגנים.

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

2021פורסמה הגרסה המתוקנת YAML 1.2.2, ששיפרה את התאימות ל-JSON ואת הגדרות הדקדוק הפורמליות.
2009YAML 1.2 מגדיר את YAML כעל-קבוצה קפדנית של JSON, כלומר כל קובץ JSON תקף הוא גם קובץ YAML תקף.
2001קלארק אוונס (Clark Evans), אינגי דוט נט (Ingy döt Net) ואורן בן-קיקי (Oren Ben-Kiki) יוצרים את YAML כחלופה ל-XML, ידידותית לקריאה ולכתיבה של בני אדם.

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

  • YAML נפוץ בכלי תשתית, אך התמיכה וההתנהגות משתנות בין מימושים.
  • תחביר נקי וקריא: מבטל את העומס של סוגריים מסולסלים, מרובעים ומרכאות באמצעות הזחה אינטואיטיבית.
  • תומך בהפניות ועוגנים (&anchor / *anchor) כדי לעשות שימוש חוזר בלוקי הגדרות חוזרים ללא כפילות.

מגבלות טכניות וחסרונות

  • רגיש לתווים לבנים (whitespace): תו טאב מקרי או רווח נוסף עלולים לשבש את היררכיית המסמך או לגרום לשגיאות ניתוח.
  • באגי המרת טיפוסים ידועים לשמצה: מילים ללא מרכאות כמו 'no', 'on', 'yes', או קודי מדינות ('NO' עבור נורווגיה) עשויים להפוך בשקט לבוליאניים.
  • מהירות ניתוח איטית משמעותית בהשוואה לפורמטים בינאריים או ל-JSON קפדני.

עובדות טכניות מעניינות

  • YAML עמד במקור עבור 'Yet Another Markup Language', אך שונה בהומור לשם ראשי התיבות הרקורסיבי 'YAML Ain't Markup Language' כדי להדגיש את סריאליזציית הנתונים.
  • 'בעיית נורווגיה' (The Norway Problem) היא באג תכנותי מפורסם שבו קוד המדינה 'NO' בקובץ YAML פוענח כערך הבוליאני 'false'.
  • כל קובץ JSON תקף בעולם הוא בו-זמנית גם קובץ YAML תקף ב-100%.

שאלות טכניות נפוצות

למה משמש YAML?

YAML הוא שפת התצורה הראשית עבור מחשוב ענן, פריסת אשכולות Kubernetes, קובצי Docker Compose, זרימות עבודה של GitHub Actions והגדרות תוכנה.

האם אני יכול להשתמש בטאבים (tabs) בקובצי YAML?

לא. מפרט ה-YAML הרשמי אוסר בתכלית האיסור על שימוש בתווי טאב לצורך הזחה (indentation); עליך להשתמש תמיד ברווחים (בדרך כלל 2 רווחים לכל רמה).

איך אוכל להמיר YAML ל-JSON?

ניתן להמיר קובצי YAML ל-JSON נקי ומאומת בלחיצת כפתור אחת באמצעות File2File.app ישירות בדפדפן האינטרנט שלך תוך שמירה על פרטיות מלאה.