TOML Yapılandırması (.toml)
TOML StandartTom's Obvious Minimal Language (TOML), GitHub kurucu ortağı Tom Preston-Werner tarafından oluşturulan, net, insan odaklı bir konfigürasyon formatıdır; Rust (Cargo) ve Python (pyproject.toml) gibi modern programlama ekosistemlerinde yaygın olarak benimsenmiştir.
TOML biçimini JSON biçimine dönüştür
Tarayıcında TOML biçimini JSON biçimine ücretsiz dönüştür. Dosyaları cihazında anında dönüştür.
İncele ve Meta Veriler
İşletim sistemleri ve dosya çözümleyicileri, TOML dosyalarını başlangıçtaki ikili sihirli bayt dizisini inceleyerek tanımlar:
Bayt düzeyinde başlık imzası (sihirli baytlar)
İşletim sistemleri ve dosya çözümleyicileri, TOML dosyalarını başlangıçtaki ikili sihirli bayt dizisini inceleyerek tanımlar:
HEX İMZASI (OFSET 0):
5B ... 5DASCII GÖSTERİMİ: [...]
Standartlaştırma: TOML v1.0.0 Specification
Teknik Özellikler
| Kapsayıcı mimarisi | [tables] bölümleri ve key = value çiftleriyle yapılandırılmış, doğrudan karma tabloya eşlenen insanlarca okunabilir yapılandırma dosyası |
| Sıkıştırma | Sıkıştırılmamış metin akışı |
| Bayt Düzeni (Endianness) | UTF-8 metin akışı |
| Renk Uzayları | N/A (Configuration File) |
| Kanallar ve Yapı | Tablolar, tablo dizileri, satır içi tablolar, dizgeler, tamsayılar, kayan noktalı sayılar, Boole değerleri ve RFC 3339 tarih-saatleri |
| Maksimum Boyutlar | Sınırsız metin uzunluğu |
| Şeffaflık | None |
| Akış ve Aşamalı İşleme | Yapılandırmanın satır satır sıralı ayrıştırılması |
Teknik karşılaştırma matrisi: TOML ve rakipleri
| Teknik Nitelik | TOML (Güncel) | YAML | JSON | INI |
|---|---|---|---|---|
| Belirsizlik Riski | Sıfır (belirtim kesin ve yoruma kapalı) | Yüksek (YAML'da 'Norveç sorunu' nedeniyle boole türünde hatalar) | Sıfır (katı veri tipleri) | Orta (resmi bir standart yok) |
| Yerleşik tarih ve saat türleri | Yerel RFC 3339 tarih ve saat desteği | Örtük dize / tarih ayrıştırma | Yok (yalnızca dizeler) | Yok (yalnızca dizeler) |
| Yorum Desteği | Yerel (# yorumları) | Yerel (# yorumları) | Yorumlara izin verilmez | Yerel (; ve # yorumları) |
| Birincil Ekosistem | Rust (Cargo), Python (PEP 518), Go | Kubernetes, Ansible, CI/CD boru hatları | Web API'leri, tarayıcı iletişimi | Eski Windows, Git yapılandırması |
Yaygın Bozulma Modları ve Hex Kurtarma Kılavuzu
Ayrıştırıcı hatası: 'Duplicate key in table' (Tabloda yinelenen anahtar) veya 'Invalid table header' (Geçersiz tablo başlığı).
Kök Neden: Belge içinde mevcut bir anahtarın veya tablo ad alanının yeniden tanımlanmaya çalışılması.
Kurtarma: File2File.app TOML Biçimlendiriciyi kullanarak TOML sözdizimini doğrulayın ve yeniden biçimlendirin.
Güvenlik Analizi ve Ayrıştırıcı Saldırı Vektörleri
TOML ayrıştırıcıları, prototip kirlenmesine ve aşırı iç içe geçmiş tablo dizilerinden kaynaklanan CPU tükenmesine karşı koruma sağlamalıdır.
Bilinen Saldırı Vektörleri
- JavaScript TOML ayrıştırıcılarında Object.prototype içine özellikler enjekte eden prototip kirlenmesi.
- Derinlemesine iç içe geçmiş tablo dizisi bildirileri yoluyla hizmet reddi (DoS).
- Devasa satır içi dizi ayrıştırma sırasında sınırsız bellek tahsisi.
Savunmaya yönelik en iyi uygulamalar: Tabloların iç içe geçme sınırlarını doğrula ve prototip kirlenmesine karşı güvenli sözlük nesneleri kullan.
Tarihsel kökenler ve önemli dönüm noktaları
Temel Avantajlar ve Artılar
- Tamamen belirgin: Beklenmedik tür dönüşümleri olmadan karma tablosuna açık ve öngörülebilir biçimde eşlenir.
- Dize kaçışlarına gerek kalmadan yerleşik tarih ve saat desteği sunar (RFC 3339 zaman damgaları, tarihler ve saatler).
- Modern programlama dili araçları için resmî standart yapılandırma biçimi olarak benimsenmiştir (Rust Cargo.toml, Python pyproject.toml).
Teknik Kısıtlamalar ve Eksiler
- Derinlemesine iç içe geçmiş çok seviyeli nesne ağaçları, YAML ile karşılaştırıldığında uzun ve karmaşık hale gelebilir.
- Tablo dizileri için sözdizimi ([[table.array]]), yeni başlayanlar için sezgisel olmayabilir.
- Yüksek hacimli makineden makineye API veri alışverişinde JSON'a göre daha az kompakttır.
İlginç Teknik Bilgiler
- TOML'u, GitHub'ın kurucu ortaklarından ve Gravatar ile SemVer'in (Semantic Versioning) yaratıcısı Tom Preston-Werner oluşturdu.
- Cargo paketleri meta verileri, bağımlılıkları ve hedefleri bildirmek için Cargo.toml kullanır; başka derleme sistemlerindeki Rust projeleri farklı dosyalar kullanabilir.
- JSON'dan farklı olarak TOML, '#' karakterini kullanan yorum satırlarını ve çok satırlı dizeleri yerel olarak destekler.
Sıkça Sorulan Teknik Sorular
TOML ne için kullanılır?
TOML; yazılım yapılandırmasında, özellikle Rust'ın Cargo.toml, Python'un pyproject.toml, Go Hugo yapılandırmaları ve kapsayıcı (container) araçlarında kullanılır.
TOML yapılandırma için neden YAML yerine tercih edilir?
TOML, yorum satırları ve açık tablolarla okunabilirliğini korurken YAML'daki bilinen uç durum ayrıştırma hatalarını (örneğin tırnaksız 'NO' ifadesinin false boole değerine dönüşmesi) önler.
TOML dosyasını JSON veya YAML formatına nasıl dönüştürebilirim?
TOML dosyalarını web tarayıcında doğrudan File2File.app'i kullanarak anında JSON veya YAML'a dönüştürebilirsin.
İlgili TOML Dönüşüm Çiftleri
TOML yapılandırma dosyalarını JSON biçimine dönüştürmek, insan dostu özellik ayarlarını web uygulamalarının anında ayrıştırabileceği katı bir veri nesnesine çevirir.
JSON yapılandırma dosyalarını TOML formatına dönüştürmek, tüm yapılandırılmış anahtar-değer veri hiyerarşilerini korurken insan tarafından düzenlemeyi basitleştirir.