Bosh sahifa Wiki TOML

TOML

TOML — konfiguratsiya ma’lumotlarini inson o‘qishi va tahrirlashi uchun qulay shaklda yozishga mo‘ljallangan matnli format. To‘liq nomi Tom’s Obvious, Minimal Language. TOML oddiy kalit-qiymat yozuvlari, bo‘limlar, massivlar va aniq ma’lumot turlarini qo‘llab-quvvatlaydi.

TOML ko‘pincha dastur sozlamalari, package manifestlari, build vositalari va server konfiguratsiyalarida ishlatiladi. U YAMLga qaraganda sintaksisi qat’iyroq, JSONga qaraganda esa inson uchun qulayroq bo‘lishga intiladi.

Kalit va qiymat

Eng oddiy yozuv:

title = "UzbekDevs"
port = 8000
active = true

Kalit chap tomonda, qiymat o‘ng tomonda yoziladi. Tenglik belgisi ikki qismni ajratadi.

Bir kalit ayni scope ichida ikki marta e’lon qilinmasligi kerak.

Matn qiymatlari

Oddiy matn qo‘shtirnoq ichida yoziladi:

name = "Farrukh Sherkulov"

Literal string bir tirnoq bilan yozilishi mumkin:

path = 'C:\data\files'

Basic string escape sequence’larni qayta ishlaydi. Literal string esa ko‘p belgini o‘z holicha saqlaydi.

Ko‘p qatorli matn

Uchta qo‘shtirnoq ko‘p qatorli basic string yaratadi:

description = """
Birinchi qator
Ikkinchi qator
"""

Uchta bir tirnoq literal ko‘p qatorli matn uchun ishlatiladi.

Bu certificate, SQL bo‘lagi yoki uzun tavsif saqlashda qulay bo‘lishi mumkin.

Sonlar

TOML integer va floating-point qiymatlarni alohida taniydi:

workers = 4
ratio = 0.75

Sonni o‘qishni yengillashtirish uchun underscore ishlatilishi mumkin:

max_size = 1_048_576

Hexadecimal, octal va binary integer yozuvlari ham qo‘llab-quvvatlanadi.

Boolean

Boolean faqat kichik harfli aniq qiymatlar bilan yoziladi:

debug = false
enabled = true

yes, no, on yoki off TOML boolean qiymati hisoblanmaydi.

Bu parserlar orasidagi noaniqlikni kamaytiradi.

Sana va vaqt

TOML sana hamda vaqt uchun alohida turlarga ega.

Misollar:

created_at = 2026-07-14T09:30:00+05:00
release_date = 2026-07-14
start_time = 09:30:00

Offsetli datetime va local datetime farqlanadi.

Application timezone va conversionni aniq boshqarishi kerak.

Table

Bo‘lim yoki obyekt table orqali yoziladi:

[database]
host = "localhost"
port = 5432
name = "uzbekdevs"

database.host va database.port bitta nested obyektga tegishli.

Table nomi nuqta orqali ichma-ich yozilishi mumkin:

[server.tls]
enabled = true

Inline table

Kichik obyekt bir qatorda yozilishi mumkin:

point = { x = 10, y = 20 }

Inline table ko‘p qatorli bo‘limga qaraganda ixcham.

Murakkab va tez-tez tahrirlanadigan obyekt uchun odatiy table tushunarliroq.

Array

Bir turdagi yoki parser qo‘llab-quvvatlaydigan qiymatlar massivda yoziladi:

ports = [80, 443, 8000]
roles = ["viewer", "editor"]

Array ko‘p qatorga bo‘linishi va oxirgi elementdan keyin vergulga ruxsat berilishi mumkin.

Nested array ham mavjud.

Array of tables

Bir xil tuzilishga ega obyektlar ro‘yxati:

[[servers]]
name = "api-1"
host = "10.0.0.11"

[[servers]]
name = "api-2"
host = "10.0.0.12"

Har [[servers]] yangi obyekt yaratadi.

Bu service, dependency yoki mirror ro‘yxatini saqlashda ishlatiladi.

Izoh

# belgidan keyingi qism izoh:

port = 8000 # HTTP port

Izoh parser natijasiga kirmaydi.

Secret, parol yoki vaqtinchalik token izohga yozilmaydi, chunki fayl bilan birga tarqaladi.

Dotted key

Nested qiymat table ochmasdan yozilishi mumkin:

database.host = "localhost"
database.port = 5432

Dotted key va table yozuvi bir documentda chalkash ishlatilsa duplicate yoki conflict hosil bo‘lishi mumkin.

Bir xil loyiha uchun yagona uslub tanlanadi.

Parser qat’iyligi

TOML parser noto‘g‘ri sintaksisni jim talqin qilish o‘rniga xato qaytarishga intiladi.

Muammolar:

  • duplicate key;
  • noto‘g‘ri sana;
  • yopilmagan string;
  • bir qiymatni ikki type sifatida e’lon qilish;
  • table va scalar to‘qnashuvi.

Bu konfiguratsiya xatosini erta aniqlashga yordam beradi.

TOML va JSON

JSON API va machine-to-machine almashinuvda keng tarqalgan.

TOML esa inson tahrirlaydigan configuration uchun qulay:

  • izoh mavjud;
  • sana-vaqt turi mavjud;
  • table sintaksisi;
  • kamroq qavs;
  • qat’iy scalar turlari.

JSON parserlari va ecosystemi kengroq.

TOML va YAML

YAML anchoring, custom tag va murakkab structure bo‘yicha kuchliroq.

TOML sintaksisi kichikroq va parserlar orasida noaniqlik kamroq.

TOML juda chuqur document yoki markup uchun emas, asosan configuration uchun yaratilgan.

Schema

TOML formatining o‘zi application fieldlarini majburiy belgilamaydi.

Application:

  • required key;
  • allowed value;
  • diapazon;
  • unknown field;
  • environmentga oid qoida

ni alohida schema yoki validation orqali tekshiradi.

Sintaksis valid bo‘lishi configuration semantik jihatdan to‘g‘ri degani emas.

Security

TOML fayl ichida database paroli yoki API token bo‘lishi mumkin.

Himoya:

Untrusted userga arbitrary TOML orqali applicationning barcha settinglarini o‘zgartirishga ruxsat berilmaydi.

Environment bo‘yicha sozlama

Development, test va production uchun alohida TOML fayllar ishlatilishi mumkin. Umumiy qiymatlar bitta bazaviy faylda, environmentga xos farqlar esa alohida qatlamda saqlanadi. Merge tartibi aniq bo‘lishi kerak: qaysi fayl oldingi qiymatni almashtirishi va unknown key bilan nima sodir bo‘lishi hujjatlashtiriladi. Secretlar environment file ichida qolsa ham repositoryga kiritilmaydi.

Bog‘liq tushunchalar

Tom’s Obvious Minimal Language, Configuration file, Key-value, Table, Array, Data serialization, YAML, JSON, Schema validation, Package manifest