YAML

YAML (ראשי תיבות רקורסיביים של YAML Ain't Markup Language - קרי "YAML אינה שפת סימון"; נהגה: יָאמֵל) הוא פורמט סריאליזציה טקסטואלי שנועד להיות קריא בקלות לבן אנוש (human readable), המשמש בדרך כלל לקובצי תצורה (קונפיגורציה) וביישומים בהם מאוחסן או מועבר מידע. הפורמט משמש ביישומים דומים לאלו של XML, אך התחביר (syntax) שלו מינימלי. קינון (nesting) מתבצע באמצעות הזחה, בדומה לפייתון, והגדרת רשימה (list) ומפה (map) מתבצעות בצורה קצרה יותר לעומת XML באמצעות  ו- בהתאמה, בדומה ל-JSON, ש-YAML מהווה למעשה הרחבה שלה (כל קובץ JSON הוא גם קובץ YAML תקין).

התקן תומך בהגדרת טיפוסי נתונים מותאמים, אך מעבר לכך YAML תומך בקידוד סקלרים (כמו מחרוזות, מספרים שלמים ומספרי נקודה צפה), רשימות ומפות. הגדרת ערכים בקובץ YAML (בצורת key-value) מתבצעת באמצעות נקודתיים (:), צורת הגדרה שמבוססת על פורמט header-ים בדואר אלקטרוני כפי שמוגדר ב-RFC 0822 (תקן ARPA), והמפריד  המשמש לתיחום בין directives מקורו בתקן הדואר האלקטרוני MIME (RFC 2046). הגדרת רצפי מילוט (escape sequences) מתבצע בצורה דומה ל-C, והגדרת מחרוזות בעלות מספר שורות נעשה באמצעות רווחים בהשראת HTML.

תמיכה מובנית בכתיבה ובקריאה של קובצי YAML קיימת בשפות תכנות רבות. כמה עורכי טקסט כמו Emacs, וסביבות פיתוח (IDE), כוללים יכולות המאפשרות עריכה פשוטה של מסמכי YAML, למשל קיבוץ של מבנים מקוננים או התראה אוטומטית על שגיאות תחביר.

סיומת הקובץ המומלצת למסמכי YAML היא .yaml (מאז 2006).

היסטוריה
התקן הוצע לראשונה בשנת 2001 על ידי קלארק אוונס, שתכנן אותה יחד עם אינגי דוט נט ואורן בן-קיקי. בתחילה הוגדר כי ראשי התיבות YAML משמען Yet Another Markup Language (עוד שפת סימון), אך לאחר מכן שונו ראשי התיבות ל-YAML Ain't Markup Language (YAML אינה שפת סימון) - החל מאפריל 2002.

דוגמאות לתחביר בסיסי 
YAML מאפשרת להגדיר רשימות ומפות במספר שורות, או בשורה בודדת / בתוך שורה (inline).

הגדרה של פריטים ברשימה במספר שורות נעשית באמצעות מקף ורווח לפני כל פריט:
--- # סרטים אהובים
- Casablanca
- North by Northwest
- The Man Who Wasn't There

בהגדרה של רשימה בשורה אחת הפריטים מופרדים בפסיק וברווח, עם סוגריים מרובעים לסימון תחילת וסוף הרשימה (בדומה ל-JSON):
--- # רשימת קניות
[milk, pumpkin pie, eggs, juice]

הגדרת מיפוי key-value נעשית באמצעות תחביר של נקודתיים (:) המפרידות בין רכיבי המיפוי. בהגדרה במספר שורות נעשה שימוש בהזחה, ובהגדרה בשורה אחת פריטי המיפוי מופרדים בפסיק וברווח, עם סוגריים מסולסלים לסימון תחילת וסוף המפה (בדומה ל-JSON):
--- # הגדרת מיפוי במספר שורות בהזחה
 name: John Smith
 age: 33
--- # הגדרת מיפוי בתוך השורה
{name: John Smith, age: 33}

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

המחרוזת הבאה תכלול את תווי ירידת השורה:
data: |
 There once was a tall man from Ealing
 Who got on a bus to Darjeeling
 It said on the door
 "Please don't sit on the floor"
 So he carefully sat on the ceiling

המחרוזת הבאה תתעלם מתווי ירידת השורה - מלבד המקרה של השורה הריקה (שם תהיה ירידת שורה):
data: >
 Wrapped text
 will be folded
 into a single
 paragraph

 Blank lines denote
 paragraph breaks

קישורים חיצוניים

ביאורים

הערות שוליים 

תקני סריאליזציה