YAML (Telafuz: i); insan tarafından okunabilir Programlama dilidir. Genellikle konfigürasyon dosyaları için ve verilerin saklandığı veya iletildiği uygulamalarda kullanılır. YAML, Genişletilebilir İşaretleme Dili (XML) gibi birçok iletişim uygulamasını hedefler ancak Standart Genelleştirilmiş İşaretleme Dili (SGML) ile bilinçli olarak farklı bir minimal sözdizimi kullanır. Yerleşim belirlemek için Python tarzı girinti kullanır ve çoğu dize değeri etrafında alıntı işareti gerektirmez ve aynı dosyada JSON tarzı [...]
ve }
de desteklemektedir.
Paradigması | Veri serileştirme |
---|---|
İlk çıkışı | 11 Mayıs 2001 |
Tasarımcı | Clark Evans, Ingy döt Net, Oren Ben-Kiki |
Geliştirici | YAML.org |
Kararlı sürüm | 1.2 (Revizyon 1.2.2) (1 Ekim 2021) |
Veri değişimi | |
Konfigürasyon dosyaları, veri serileştirme | |
Yok | |
Etkilendikleri | JSON, XML |
Uygulama dili | Metin tabanlı |
Platformu | Çapraz platform |
İşletim sistemi | Herhangi bir |
Lisans | Açık kaynak |
Olağan dosya uzantıları | .yaml, .yml |
Web sitesi | https://yaml.org |
Özel veri türlerine de izin verilir, ancak YAML yerleşik olarak skalarları; (örneğin dizeler, tam sayılar, kayan nokta sayıları), listeleri ve ilişkisel dizileri gibi (aynı zamanda haritalar, sözlükler veya hash'ler olarak da bilinir) kodlar. Bu veri türleri Perl programlama diline dayanmaktadır, ancak tüm yaygın kullanılan yüksek seviyeli programlama dilleri çok benzer kavramlara sahiptir. İki nokta üst üste kullanılan sözdizimi, anahtar-değer çiftleri ifadesi için, RFC 822'de tanımlanan elektronik posta başlıklarından esinlenmiştir ve belge ayırıcı kodu (---
)MIME'dan (RFC 2046) ödünç alınmıştır. Kaçış dizeleri de C'den alınmıştır ve çok satırlı dizeler için boşlukla sarma HTML'den esinlenilmiştir. Listeler ve hash'ler, iç içe geçmiş listeler ve hash'ler içerebilir. grafikler YAML takma adları kullanılarak temsil edilebilemektedir. Bu da XML'de SOAP'a benzerdir. YAML, SAX'tan esinlenmiş bir özellik olarak akışlarda okunup yazılmak üzere tasarlanmıştır.
YAML okuma ve yazma desteği birçok programlama dilinde mevcuttur.Vim,Emacs, ve çeşitli entegre geliştirme ortamları bulunmaktadır. YAML, Ayrıca düzenlemeyi kolaylaştıran bazı özellikler sunmaktadır. Örneğin; iç içe geçmiş yapıların katlanması veya sözdizimi hatalarının otomatik olarak vurgulanması gibi özellikleri mevcuttur.
YAML dosyaları için resmi olarak önerilen dosya adı uzantısı .yaml
ve .yml
, 2006'dan beri geçerlidir. 2024'te MIME türü application/yaml
olarak kesinleşmiştir.
Tarih ve İsim
YAML (,) ilk olarak 2001 yılında Clark Evans tarafından önerilmiştir ve Ingy döt Net ve Oren Ben-Kiki tarafından tasarlanmıştır. Başlangıçta YAML'nın Yet Another Markup Language (Yine Bir İşaretleme Dili) anlamına geldiği söyleniyordu, çünkü bu dönem, sunum ve bağlantı için işaretleme dillerinin patladığı bir dönemdi (HTML, XML, SGML, vs.) İlk ismi, dil incelemesi olarak işaretleme dili olduğunu ifade eden (yet another) ifadesiyle bir teknoloji manzarasına gönderme yapmayı amaçlıyordu, ancak daha sonra YAML Ain't Markup Language (YAML İşaretleme Dili Değildir) olarak yeniden adlandırıldı, bu da özyinelemeli kısaltma olarak veri odaklı amacını ayırt etmek için kullanıldı.
Sürümler
Sürüm | Yayın tarihi |
---|---|
YAML 1.0 | 29 Ocak 2004 |
YAML 1.1 | 18 Ocak 2005 |
YAML 1.2.0 | 21 Temmuz 2009 |
YAML 1.2.1 | 1 Ekim 2009 |
YAML 1.2.2 | 1 Ekim 2021 |
Tasarım
Sözdizimi
Bir başvuru kartı ve tam özellik listesi resmi sitede mevcuttur. Aşağıda, temel öğelerin bir özeti bulunmaktadır.
YAML, bazı kontrol karakterleri hariç, tüm Unicode karakter setini kabul eder ve UTF-8, UTF-16 veya UTF-32 formatlarında kodlanabilir. (UTF-32 zorunlu olmamakla birlikte, bir ayrıştırıcının JSON uyumluluğuna sahip olması için gereklidir.)
- Boşluk girintileme yapı belirtmek için kullanılır; ancak, sekme karakterlerine bu girintilemenin bir parçası olarak izin verilmez.
- Yorumlar, diyez işareti (
#
) ile başlar, bir satırın herhangi bir yerinde başlayabilir ve satırın sonuna kadar devam eder. Yorumlar, diğer belirteçlerden boşluk karakterleriyle ayrılmalıdır. Eğer # karakteri bir dizge içinde görünürse, o zaman bu bir diyez (#
) harfi olur. - Liste üyeleri, her satır başında bir kısa çizgi (
-
) ile gösterilir.- Bir liste ayrıca, köşeli parantez (
[...]
) içine alınarak ve her bir giriş virgül ile ayrılarak belirtilebilir.
- Bir liste ayrıca, köşeli parantez (
- Bir ilişkisel dizi girişi, ?key: value biçiminde iki nokta üst üste ile temsil edilir ve her satıra bir giriş düşer. YAML, iki noktadan sonra bir boşluk gerektirir, böylece
http://www.wikipedia.org
gibi URL tarzı dizgeler, tırnak içine alınmadan temsil edilebilir.- Bir anahtarın önüne bir soru işareti konarak, tırnak işaretleri olmadan önünde kısa çizgi, köşeli parantez vb. içeren bir anahtarın "?anahtar: değer" biçiminde olmasına izin verilir.
- Bir ilişkisel dizi ayrıca, metin
{...}
içinde kapalı olarak ve anahtarlar iki nokta üst üste ile ayrılmış ve girişler virgülle ayrılmış olarak belirtilebilir (boşluklar JSON ile uyumluluğu korumak için gerekli değildir).
- Dizgeler (YAML'deki bir tür skaler), normalde tırnak işaretsizdir, ancak (
"
) veya tek tırnak ('
) içine alınabilir.- Çift tırnak içinde, özel karakterler bir ters eğik çizgi (
\
) ile başlayan C tarzı kaçış dizileriyle temsil edilebilir. Belgelenmiş bilgilere göre desteklenen tek sekizlik kaçış\0
'dır. - Tek tırnak içinde desteklenen tek kaçış dizisi,
'don''t'
gibi tek tırnağın kendisini belirten çift tek tırnak (''
)'dır.
- Çift tırnak içinde, özel karakterler bir ters eğik çizgi (
- Blok skalerleri, girinti ile sınırlıdır ve satır sonlarını koruma (
|
) veya katlama (>
) için isteğe bağlı değiştiricilere sahiptir. - Tek bir akıştaki birden çok belge, üç kısa çizgi (
---
) ile ayrılır.- Üç nokta (
...
), isteğe bağlı olarak bir akış içindeki bir belgeyi sonlandırır.
- Üç nokta (
- Yinelenen düğümler başlangıçta bir ampersand (
&
) ile belirtilir ve daha sonra bir yıldız işareti (*
) ile referans alınır. - Düğümler, bir dize izleyen çift ünlem işareti (
!!
) kullanılarak bir tür veya etiketle etiketlenebilir ve bu dize bir URI'ye genişletilebilir. - Bir akıştaki YAML belgeleri, bir yüzde işareti (
%
) ardından bir ad ve boşlukla ayrılmış parametrelerden oluşan 'yönergeler' ile başlayabilir. YAML 1.1'de iki yönerge tanımlanmıştır:- %YAML yönergesi, belirli bir belgede YAML sürümünü tanımlamak için kullanılır.
- %TAG yönergesi, URI önekleri için bir kısayol olarak kullanılır. Bu kısayollar daha sonra düğüm türü etiketlerinde kullanılabilir.
Temel Bileşenler
Geleneksel blok formatı, listede yeni bir öğeye başlamak için kısa çizgi+boşluk kullanır.
--- # Favori filmler - Casablanca - Gizli Teşkilat - Orada Olmayan Adam
İsteğe bağlı satır içi format, virgül+boşluk ile ayrılmıştır ve köşeli parantezler JSON'a benzer bir şekilde içine alınmıştır.
--- # Alışveriş listesi [süt, kabaklı turta, yumurta, meyve suyu]
Anahtarlar, değerlerden iki nokta+boşluk ile ayrılır. YAML veri dosyalarında yaygın olan girintili bloklar, anahtar/değer çiftlerini ayırmak için girinti ve yeni satır kullanır. YAML veri akışlarında yaygın olan satır içi bloklar, süslü parantezler arasındaki anahtar/değer çiftlerini ayırmak için virgül+boşluk kullanır.
--- # Girintili Blok isim: John Smith yaş: 33 --- # Satır İçi Blok {isim: John Smith, yaş: 33}
Dizgeler tırnak işaretlerine ihtiyaç duymaz. Çok satırlı dizgeler yazmanın iki yolu vardır; biri yeni satırları korur (|
karakteri kullanarak), diğeri ise yeni satırları katlar (>
karakteri kullanarak). Her iki durumda da bir yeni satır karakteri takip eder.
veri: | Bir zamanlar Ealing'den uzun bir adam vardı Darjeeling'e giden bir otobüse bindi Kapıda yazıyordu "Lütfen yere oturmayın" Bu yüzden dikkatlice tavana oturdu
Varsayılan olarak, öndeki girinti (ilk satırın) ve sondaki boşluklar çıkarılır, ancak diğer davranış açıkça belirtilebilir.
veri: > Katlanmış metin tek bir paragraf halinde birleştirilecek Boş satırlar paragraf ayrımı olarak kabul edilir
Katlanmış metin, yeni satırları boşluklara dönüştürür ve öndeki boşlukları kaldırır.
--- # Smith Ailesi - {isim: John Smith, yaş: 33} - isim: Mary Smith yaş: 27 - [isim, yaş]: [Rae Smith, 4] # anahtarlar olarak diziler desteklenir --- # İnsanlar, cinsiyete göre erkekler: [John Smith, Bill Jones] kadınlar: - Mary Smith - Susan Williams
Nesneler ve listeler, yaml'deki önemli bileşenlerdir ve karıştırılabilirler. İlk örnek, Smith ailesinden tüm insanları içeren anahtar-değer nesnelerinin bir listesidir. İkinci örnek, onları cinsiyete göre listeler; bu, iki liste içeren bir anahtar-değer nesnesidir.
Gelişmiş Bileşenler
YAML'ı diğer veri serileştirme dillerinin yeteneklerinden ayıran iki özellik, yapılar ve veri tipleridir.
YAML yapıları, tek bir dosya içinde birden fazla belgenin saklanmasına, tekrar eden düğümler için referansların kullanılmasına ve key olarak rastgele düğümlerin kullanılmasına olanak tanır.
Açıklık, kompaktlık ve veri giriş hatalarını önlemek için YAML, düğüm çapaları (&
kullanarak) ve referanslar (*
kullanarak) sağlar. Çapaya yapılan referanslar, tüm veri türleri için geçerlidir (aşağıdaki örnekteki ship-to referansına bakın).
Aşağıda, iki adımın tam olarak tanımlanmadan referans alındığı bir enstrüman dizicisindeki bir kuyruğun bir örneği verilmiştir.
--- # Lazer göz ameliyatı için Dizici protokolleri - step: &id001 # çapa etiketi &id001 tanımlar instrument: Lasik 2000 pulseEnergy: 5.4 pulseDuration: 12 repetition: 1000 spotSize: 1mm - step: &id002 instrument: Lasik 2000 pulseEnergy: 5.0 pulseDuration: 10 repetition: 500 spotSize: 2mm - Enstrüman1: *id001 # ilk adıma referans verir (çapa &id001 ile) - Enstrüman2: *id002 # ikinci adıma referans verir
Açık veri tipleri, YAML belgelerinin çoğunda nadiren görülür çünkü YAML basit tipleri otomatik olarak algılar. Veri tipleri üç kategoriye ayrılabilir: çekirdek, tanımlı ve kullanıcı tanımlı. Çekirdek olanlar, herhangi bir ayrıştırıcıda bulunması beklenenlerdir (ör. ondalık sayılar, tamsayılar, dizgeler, listeler, haritalar, ...). İkili veri gibi daha birçok gelişmiş veri türü, YAML spesifikasyonunda tanımlanmıştır, ancak tüm uygulamalarda desteklenmez. Son olarak, YAML, kullanıcı tanımlı sınıflara, yapılar veya ilkelere uyum sağlamak için yerel olarak veri türü tanımlarını genişletmenin bir yolunu tanımlar (ör. dört basamaklı ondalık sayılar).
YAML, varlığın veri türünü otomatik olarak algılar, ancak bazen veri türünü açıkça belirtmek istenir. En yaygın durum, tek kelimelik bir dizenin bir sayı, boolean veya etiket gibi göründüğü ve bu durumu ayırmak için tırnak işaretleri veya açık bir veri tipi etiketi kullanılması gerektiği durumdur.
--- a: 123 # bir tamsayı b: "123" # bir dize, tırnak işaretleri ile ayrılmış c: 123.0 # bir ondalık sayı d: !!float 123 # açık veri tipiyle de bir ondalık sayı (!! ile öneki eklenmiş) e: !!str 123 # açık tip ile bir dize f: !!str Evet # açık tip ile bir dize g: Evet # bir boolean True (yaml1.1), dize "Evet" (yaml1.2) h: Evet, Hayır muzlarımız var # bir dize, "Evet" ve "Hayır" bağlama göre ayrılmış.
YAML'ın her uygulamasında, spesifikasyonla tanımlanmış her veri türü bulunmaz. Bu yerleşik türler, çift ünlem işaretiyle (sigil) öneki kullanır (!!
). Burada gösterilmeyenler arasında özellikle ilginç olanlar setler, sıralı haritalar, zaman damgaları ve onaltılı sayılardır. İşte base64 ile kodlanmış ikili veriye bir örnek.
--- resim: !!binary | R0lGODdhDQAIAIAAAAAAANn Z2SwAAAAADQAIAAACF4SDGQ ar3xxbJ9p0qa7R0YxwzaFME 1IAADs=
YAML'ın birçok uygulaması, nesne serileştirme için kullanıcı tanımlı veri türlerini destekleyebilir. Yerel veri türleri evrensel veri türleri değildir, ancak YAML ayrıştırıcı kitaplığı kullanılarak uygulamada tanımlanır. Yerel veri türleri, tek bir ünlem işareti (!
) kullanır.
Özellikler
Girintili Sınırlama
YAML, yapısını esas olarak girintilere dayandırdığı için, özellikle ayraç çarpışmasına karşı dayanıklıdır. YAML'nin skaler değerlerdeki tırnak işaretlerine ve süslü parantezlere karşı duyarsızlığı, bir YAML belgesine yalnızca bir blok literal içinde (
veya >
kullanarak) girintileme yaparak XML, JSON veya hatta YAML belgelerini yerleştirmenize olanak tanır:
--- example: > HTML, değiştirilmeden YAML içine girer message: | <blockquote style="font: italic 1em serif"> "Üç, iki'den her zaman büyüktür, büyük iki değerleri için bile" --Yazar Bilinmiyor </blockquote> date: 2007-06-01
YAML, tüm iç tırnak işaretlerini tırnak içine alıp kaçış karakteri kullanarak JSON içine yerleştirilebilir. YAML, ayrılmış karakterleri (<
, >
, &
, '
, "
) kaçış karakteri kullanarak ve boşlukları dönüştürerek veya bir CDATA bölümü içine yerleştirerek XML'e yerleştirilebilir.
Hiyerarşik Olmayan Veri Modelleri
JSON’un, her bir alt düğümün tek bir ebeveyni olan hiyerarşik bir modelde veri temsil etme yeteneğinin aksine, YAML, aynı verilerin tekrarlanmasını önlemek için ağaçta iki veya daha fazla noktadan referans verilmesine olanak tanıyan basit bir ilişkisel şema sunar. Bu, XML'e yerleşik IDREF işlevine benzer. YAML ayrıştırıcısı daha sonra bu referansları okunduğunda ima ettikleri tam doldurulmuş veri yapılarına genişletir, böylece ayrıştırıcıyı kullanan program, referansları genişletmeyen XML işlemcilerinin aksine, bir ilişkisel kodlama modelinden haberdar olmak zorunda kalmaz. Bu genişletme, yapılandırma dosyalarında veya çok sayıda parametrenin bir dizi ardışık kayıtta aynı kaldığı ve yalnızca birkaçının değiştiği işleme protokollerinde veri giriş hatalarını azaltırken okunabilirliği artırabilir. Örneğin, bir faturadaki "gönderilecek" ve "faturalandırılacak" kayıtların neredeyse her zaman aynı veriler olması gibi.
Pratik Hususlar
YAML satır yönelimlidir ve bu nedenle, mevcut programların yapılandırılmamış çıktısını YAML formatına dönüştürmek ve orijinal belgenin görünümünün çoğunu korumak genellikle basittir. Kapanış etiketleri, süslü parantezler veya tırnak işaretleri dengelenmediğinden, genellikle basit programlarda dağıtılmış print ifadelerinden doğrudan iyi biçimlendirilmiş YAML oluşturmak kolaydır. Aynı şekilde, boşluk ayraçları, YAML dosyalarını grep, AWK, Perl, Ruby ve Python'daki satır yönelimli komutları kullanarak hızlı ve geçici bir şekilde filtrelemeyi kolaylaştırır.
Özellikle, işaretleme dillerinin aksine, ardışık YAML satırlarından oluşan parçalar genellikle kendi başlarına iyi biçimlendirilmiş YAML belgeleridir. Bu, bir belgedeki belirli kayıtları çıkarmaya başlamadan önce (örneğin açılış ve kapanış etiketlerini dengelemek ve tırnak ve kaçış karakterlerini gezinmek gibi) bir belgenin tamamını işlemeleri gerekmeyen ayrıştırıcılar yazmayı çok kolaylaştırır. Bu özellik, özellikle bir dosyadaki kayıtlar üzerinde tek, durumsuz bir geçişte, dosyanın tüm veri yapısının belleğe sığamayacak kadar büyük olduğu veya yapının tamamını yeniden oluşturarak tek bir öğeyi çıkarmanın aşırı derecede pahalı olacağı durumlarda hızlıdır.
Zıt bir şekilde, girintili sınırlama derin iç içe geçmiş hiyerarşileri karmaşıklaştırıyor gibi görünse de, YAML, tek bir boşluk kadar küçük girintileri işler ve bu, işaretleme dillerinden daha iyi sıkıştırma sağlayabilir. Ayrıca, aşırı derin girintiden tamamen kaçınılabilir: 1) "satır içi stil"e (yani JSON benzeri biçim) geri dönerek girinti olmadan; veya 2) hiyerarşiyi düz bir forma çözmek için ilişkisel çapaları kullanarak, böylece YAML ayrıştırıcı, tam veri yapısına şeffaf bir şekilde yeniden oluşturur.
Güvenlik
YAML tamamen bir veri-temsil dili olup, yürütülebilir komutlara sahip değildir. Herhangi bir veri dilinde doğrulama ve Javascript'te güvenli ayrıştırma doğası gereği mümkün olsa da, uygulama o kadar ünlü bir tuzaktır ki, YAML'nin iliştirilmiş bir komut diline sahip olmaması göreceli bir güvenlik avantajı olabilir.
Ancak, YAML diline özgü etiketlere izin verir, böylece bu etiketleri destekleyen bir ayrıştırıcı tarafından rastgele yerel nesneler oluşturulabilir. Karmaşık nesne örneklemesine izin veren herhangi bir YAML ayrıştırıcısı, bir enjeksiyon saldırısı olasılığını açar. Keyfi sınıfların nesnelerinin yüklenmesine izin veren Perl ayrıştırıcıları, "kutsanmış" değerler olarak adlandırılan değerleri oluşturur. Bu değerleri kullanmak beklenmedik davranışlara neden olabilir, örneğin sınıf aşırı yüklenmiş operatörler kullanıyorsa. Bu, keyfi Perl kodunun yürütülmesine yol açabilir.
Durum, Python veya Ruby ayrıştırıcıları için de benzerdir. PyYAML belgelerine göre:
Bir YAML belgesini İnternet gibi güvenilmeyen bir kaynaktan alırsanız, keyfi bir Python nesnesi oluşturma yeteneğinin tehlikeli olabileceğini unutmayın.
yaml.safe_load
işlevi, bu yeteneği tamsayılar veya listeler gibi basit Python nesneleriyle sınırlar. [...]PyYAML, her türlü Python nesnesini oluşturmanıza olanak tanır. Hatta Python sınıflarının örnekleri,
!!python/object
etiketi kullanılarak oluşturulabilir.
Veri İşleme ve Temsil
YAML spesifikasyonu bir örnek belgeyi bir "Sunum" veya "karakter akışı" olarak tanımlar. YAML örnek belgelerinde ana mantıksal yapılar skalerler, diziler ve eşlemelerdir. YAML spesifikasyonu ayrıca bu birincil mantıksal yapılar için bazı temel kısıtlamalar belirtir. Örneğin, spesifikasyona göre, eşleme anahtarlarının bir sırası yoktur. Düğüm sırasının önemli olduğu her durumda bir dizi kullanılmalıdır.
Ayrıca, YAML işlemcileri için uyumluluk tanımlarken, YAML spesifikasyonu iki birincil işlem tanımlar: dump ve load. Tüm YAML uyumlu işlemciler en az bir bu işlemlerden birini sağlamalıdır ve isteğe bağlı olarak her ikisini de sağlayabilir. Son olarak, YAML spesifikasyonu bir bilgi modeli veya "temsil grafiği" tanımlar, bu grafik hem dump hem de load işlemleri sırasında oluşturulmalıdır, ancak bu temsil, bir API aracılığıyla kullanıcıya sunulmak zorunda değildir.
Diğer Serileştirme Formatlarıyla Karşılaştırma
JSON ile Karşılaştırma
JSON söz dizimi, YAML sürüm 1.2'nin temelini oluşturur. Bu sürüm, YAML'yi "JSON ile resmi bir alt küme olarak uyumlu hale getirmek" amacıyla yayımlanmıştır. Önceki YAML sürümleri tam olarak uyumlu olmasa da, bu farklılıklar nadiren fark edilirdi ve çoğu JSON belgesi, Syck gibi bazı YAML ayrıştırıcıları tarafından ayrıştırılabilir. Bu, JSON'un semantik yapısının YAML'nin isteğe bağlı "satır içi stili" ile eşdeğer olmasından kaynaklanmaktadır. JSON gibi satır içi stilde genişletilmiş hiyerarşiler yazılabilir, ancak bu, netliği artırmadıkça önerilen bir YAML stili değildir.
YAML, JSON'da bulunmayan birçok ek özelliğe sahiptir; bunlar arasında yorumlar, genişletilebilir veri türleri, ilişkisel sabitler, tırnaksız dizgiler ve anahtar sırasını koruyan eşleme türleri bulunur.
YAML'nin anlaşılır olması, JSON serileştirme ve ayrıştırmanın, YAML'ye göre çok daha hızlı olmasını sağlar.
TOML ile Karşılaştırma
TOML, .ini dosya formatının bir geliştirmesi olarak tasarlanmıştır. YAML'nin minimum gösterge karakteri kullanımı, TOML'nin tırnak işareti ve köşeli parantez gereksinimleriyle kıyaslandığında daha avantajlı olarak görülür. YAML'nin önemli girinti kullanımı, TOML'nin anahtar ve tablo adları için nokta gösterimi ile karşılaştırılmıştır ve hangi yöntemin daha okunabilir yapılandırma dosyalarına yol açtığı konusunda farklı görüşler vardır.
XML ile Karşılaştırma
Bu başlık herhangi bir .Eylül 2024) () ( |
YAML, XML'de bulunan etiket özniteliklerine sahip değildir. Bunun yerine YAML, genişletilebilir tür bildirimlerine (nesneler için sınıf türleri dahil) sahiptir.
YAML'nin kendisi, örneğin bir belgenin kendini doğrulamasına izin veren XML'nin dil tanımlı belge şeması tanımlayıcılarına sahip değildir. Bununla birlikte, YAML için dışarıdan tanımlanmış birkaç şema tanımlayıcı dili vardır (örneğin, Doctrine, Kwalify ve Rx) ve bu rolü yerine getirir. Ayrıca, YAML veri yapılarını XML'de temsil eden YAXML, XML şema içe aktarıcıları ve XSLT gibi çıktı mekanizmalarının YAML'ye uygulanmasına izin verir.
Comparison of data-serialization formats daha kapsamlı bir YAML ve diğer serileştirme formatlarının karşılaştırmasını sağlar.
Yazılım (emitter'lar ve parser'lar)
Sabit veri yapıları için, YAML dosyaları sadece veriyi ve YAML'ye özgü süslemeleri yazan print komutları kullanılarak kolayca oluşturulabilir. Ancak, değişken veya karmaşık, hiyerarşik verileri dökebilmek için, özel bir YAML emitter (yayımcı) tercih edilir. Benzer şekilde, basit YAML dosyaları (örneğin, anahtar-değer çiftleri) düzenli ifadelerle kolayca ayrıştırılabilir. Daha karmaşık veya değişken veri yapıları için ise, resmi bir YAML parser (ayrıştırıcı) önerilir.
YAML emitter'ları ve parser'ları birçok popüler dil için mevcuttur. Çoğu, kendi yerel dillerinde yazılmıştır. Bazıları ise C kütüphanesi libyamlnin dil bağlamalarıdır; bu, onların daha hızlı çalışmasını sağlayabilir. Bir zamanlar, Syck adında başka bir C kütüphanesi vardı, bu kütüphane why the lucky stiff tarafından yazılmış ve sonrasında yetim bırakılmıştır: bu kütüphane artık bakımsız durumdadır, resmi bir kaynak paketi yoktur ve web sitesi ele geçirilmiştir. Bu nedenle önerilebilecek tek C kütüphanesi libyamldir. Başlangıçta Kirill Simonov tarafından geliştirilmiştir. 2018'de, yeni bakıcılar Ian Cordasco ve Ingy döt Net tarafından geliştirmeye devam edilmiştir.
C++ programcıları, C kütüphanesi libyaml ve C++ kütüphanesi libyaml-cpp arasında seçim yapabilirler. Her ikisi de tamamen bağımsız kod tabanlarına ve tamamen farklı API'lere sahiptir. libyaml-cpp kütüphanesinin hala 0 olan bir ana sürüm numarası vardır, bu da API'nin herhangi bir anda değişebileceğini gösterir; nitekim, 0.3 sürümünden sonra da bu gerçekleşmiştir. İç içe geçmiş elemanlar için uzantılar hedefleyen, C# dilinde yazılmış bir gramer odaklı bir uygulama da mevcuttur.
YAML'nin bazı uygulamaları, örneğin Perl'in YAML.pm, bir dosyanın (akışın) tamamını yükler ve onu toplu olarak ayrıştırır. PyYaml gibi diğer uygulamalar ise tembel ayrıştırma yapar ve sadece istek üzerine bir sonraki belgeyi işler. Çok büyük dosyalar için, belgeleri bağımsız olarak işlemek planlandığında, tüm dosyayı işlemden önce oluşturmak engelleyici olabilir. Bu nedenle, YAML.pm'de bazen bir dosyayı belgelere bölmek ve her birini ayrı ayrı ayrıştırmak gerekebilir. YAML bunu kolaylaştırır, çünkü bu sadece satır başında üç nokta ve ardından bir boşluk (ve olası bir yorum) ile tanımlanan belge sonu ayıracına bölmeyi gerektirir. Bu ayıraç içerikte yasaklanmıştır.
Eleştiri
YAML, önemli boşluk, kafa karıştırıcı özellikleri, güvenli olmayan varsayılanları ve karmaşık ve belirsiz spesifikasyonu nedeniyle eleştirilmiştir:
- Yapılandırma dosyaları, kullanıcılar farkında olmadan komutları çalıştırabilir veya içerikleri yükleyebilir.
- Büyük YAML dosyalarını düzenlemek zordur, çünkü girinti hataları fark edilmeyebilir.
- Otomatik tür belirleme bir hata kaynağıdır. Örneğin, tırnak içine alınmamış
Yes
veNo
boolean'a dönüştürülür; yazılım sürüm numaraları float'a dönüştürülebilir. - Sonlandırıcıların olmaması nedeniyle kesilmiş dosyalar genellikle geçerli YAML olarak yorumlanır.
- Standardın karmaşıklığı tutarsız uygulamalara yol açtı ve dili taşınabilir olmaktan çıkardı.
YAML'ın algılanan kusurları ve karmaşıklığı, StrictYAML ve NestedText gibi daha katı alternatiflerin ortaya çıkmasına neden olmuştur.
Kaynakça
- ^ a b c "Yet Another Markup Language (YAML) 1.0 / Working Draft". 10 Ara 2001. 10 Tem 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 28 Mayıs 2019.
- ^ a b c "YAML Ain't Markup Language (YAML) Version 1.2". YAML.org. 24 Oca 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 29 Mayıs 2019.
- ^ "Built-in Types — Python 3.9.6 documentation". docs.python.org. 14 Haziran 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Ağustos 2021.
- ^ "Standard built-in objects - JavaScript | MDN". developer.mozilla.org (İngilizce). 19 Ocak 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Ağustos 2021.
- ^ corob-msft (17 Ağustos 2021). "Built-in types (C++)". docs.microsoft.com (İngilizce). 13 Haziran 2024 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Ağustos 2021.
- ^ "The Official YAML Web Site". yaml.org. 18 Mart 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 5 Şubat 2019.
- ^ "Setting up Vim for YAML editing". arthurkoziel.com. 23 Kasım 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 20 Aralık 2021.
- ^ "Yaml Mode". EmacsWiki. 12 Haziran 2015. 8 Kasım 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 5 Aralık 2016.
- ^ aukaost. "Pretty YAML - Packages - Package Control". Packagecontrol.io. 8 Kasım 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 5 Aralık 2016.
- ^ "yaml | Eclipse Plugins, Bundles and Products - Eclipse Marketplace". Marketplace.eclipse.org. 8 Kasım 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 5 Aralık 2016.
- ^ Ruth Kusterer. "NetBeans IDE - Ruby and Ruby on Rails Development". Netbeans.org. 19 Kasım 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 5 Aralık 2016.
- ^ "YAML Ain't Markup Language". 24 Eylül 2006. 24 Eylül 2006 tarihinde kaynağından arşivlendi.
- ^ Kaynak hatası: Geçersiz
<ref>
etiketi;rfc9512
isimli refler için metin sağlanmadı (Bkz: ) - ^ Evans, Clark (11 Mayıs 2001). "YAML Taslağı 0.1". Yahoo! Tech grupları: sml-dev. 3 Haziran 2001 tarihinde kaynağından arşivlendi. Erişim tarihi: 21 Mart 2019.
- ^ "Yet Another Markup Language (YAML) 1.0". YAML.org. 14 Nisan 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 29 Mayıs 2019.
- ^ "YAML 1.1 Başvuru Kartı". YAML.org. 14 Nisan 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 29 Mayıs 2019.
- ^ "YAML Markup Language (YAML) Sürüm 1.2". YAML.org. 24 Ocak 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 29 Mayıs 2019.
- ^ "YAML specification v1.2.2 Section 6.1. Indentation Spaces". 12 Mart 2023 tarihinde kaynağından arşivlendi. Erişim tarihi: 12 Mart 2023.
- ^ "YAML Ain't Markup Language (YAML) Sürüm 1.2". YAML.org. 24 Ocak 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 29 Mayıs 2019.
- ^ "Bulut Tabanlı Yönetim uygulamaları". JigoCloud.com. 17 Eylül 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 28 Eylül 2016.
- ^ a b "YAML 1.2 Yapıların Spesifikasyonu". YAML.org. 24 Ocak 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 29 Mayıs 2019.
- ^ "Extensible Markup Language (XML) 1.0 (İkinci Baskı)". W3.org. 15 Mayıs 2022 tarihinde kaynağından arşivlendi. Erişim tarihi: 27 Mayıs 2015.
- ^ "Ücretsiz Kurslar | YAML'ye Giriş - Uygulamalı bir kurs". Insidelearn (İngilizce). 26 Ağustos 2022 tarihinde kaynağından arşivlendi. Erişim tarihi: 4 Ağustos 2022.
- ^ "YAML". . 4 Ağustos 2022. 26 Aralık 2022 tarihinde kaynağından arşivlendi. Erişim tarihi: 4 Ağustos 2022.
- ^ "PyYAML Documentation, Loading YAML". Pyyaml.org. 24 Eylül 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 28 Eylül 2016.
- ^ "Ain't Markup Language (YAML) Version 1.1". YAML.org. 14 Nisan 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 29 Mayıs 2019.
- ^ Ek, isteğe bağlı kullanım, mantıksal yapılar YAML türleri deposunda listelenmiştir."Language-Independent Types for YAML Version 1.1". YAML.org. 14 Nisan 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 29 Mayıs 2019.
- ^ "YAML Ain't Markup Language (YAML) Version 1.1". YAML.org. 13 Haziran 2024 tarihinde kaynağından arşivlendi. Erişim tarihi: 29 Mayıs 2019.
- ^ "Ain't Markup Language (YAML) Version 1.1". YAML.org. 13 Haziran 2024 tarihinde kaynağından arşivlendi. Erişim tarihi: 29 Mayıs 2019.
- ^ "YAML Ain't Markup Language (YAML) Version 1.1". YAML.org. 14 Nisan 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 29 Mayıs 2019.
- ^ Uyumsuzluklar şunlardı: JSON, UTF-32 gibi genişletilmiş karakter setlerine izin veriyor ve YAML'ye göre uyumsuz Unicode karakter kaçış sözdizimine sahipti; YAML, virgül, eşittir ve iki nokta üst üste gibi ayırıcıların ardından bir boşluk gerektiriyordu, ancak JSON bunu gerektirmiyordu. JSON'un bazı standart olmayan uygulamaları, JavaScript'in
/*...*/
yorumlarını içerecek şekilde grameri genişletir. Bu tür sınır durumlarını ele almak, JSON'u satır içi YAML olarak ayrıştırmadan önce hafif bir ön işleme gerektirebilir. Daha fazla bilgi için bkz. [1] 29 Ağustos 2013 tarihinde Wayback Machine sitesinde arşivlendi.. - ^ Parsing JSON with SYCK 17 Eylül 2016 tarihinde Wayback Machine sitesinde arşivlendi.. Not that e.g. Symfony's YAML parser does not support line breaks inside [] or {} structures, which is a major incompatibility with JSON.
- ^ "YAML vs JSON vs XML in Go". Medium. 15 Haziran 2021. 24 Ocak 2024 tarihinde kaynağından arşivlendi. Erişim tarihi: 31 Ocak 2024.
- ^ "Differences Between YAML and JSON". Baeldung. 9 Temmuz 2020. 7 Mart 2023 tarihinde kaynağından arşivlendi. Erişim tarihi: 7 Mart 2023.
- ^ Siebenmann, Chris (30 Nisan 2019). "My problem with YAML's use of whitespace". 1 Aralık 2023 tarihinde kaynağından arşivlendi. Erişim tarihi: 6 Ekim 2023.
- ^ What is wrong with TOML?
- ^ yaml-core@lists.sourceforge.net, 27 Haziran 2018 tarihli e-posta.
- ^ "YAML Grammar for Lexepars". GitHub. 17 Eylül 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 20 Şubat 2020.
- ^ "YAML Ain't Markup Language (YAML) Version 1.2 # 9.1.2 Document Markers". YAML.org. 24 Ocak 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 29 Mayıs 2019.
- ^ a b c d e Tournoij, Martin (4 Eylül 2016). "YAML: probably not so great after all". 10 Mayıs 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 16 Mayıs 2019.
- ^ "That's a lot of YAML". 2 Mart 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 16 Mayıs 2019.
- ^ com/cblp/yaml-sucks "YAML sucks"
|url=
değerini kontrol edin (). GitHub. 7 Nisan 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 16 Mayıs 2019. - ^ a b com/strictyaml/why/implicit-typing-removed/ "The Norway Problem - why StrictYAML refuses to do implicit typing and so should you"
|url=
değerini kontrol edin (). 21 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Haziran 2020. - ^ "YAML Test Matrix". 16 Temmuz 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Nisan 2020.
Dış Bağlantılar
- Resmî site
- YAMLScript
wikipedia, wiki, viki, vikipedia, oku, kitap, kütüphane, kütübhane, ara, ara bul, bul, herşey, ne arasanız burada,hikayeler, makale, kitaplar, öğren, wiki, bilgi, tarih, yukle, izle, telefon için, turk, türk, türkçe, turkce, nasıl yapılır, ne demek, nasıl, yapmak, yapılır, indir, ücretsiz, ücretsiz indir, bedava, bedava indir, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, resim, müzik, şarkı, film, film, oyun, oyunlar, mobil, cep telefonu, telefon, android, ios, apple, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, pc, web, computer, bilgisayar
YAML Telafuz i ˈ j ae m e l insan tarafindan okunabilir Programlama dilidir Genellikle konfigurasyon dosyalari icin ve verilerin saklandigi veya iletildigi uygulamalarda kullanilir YAML Genisletilebilir Isaretleme Dili XML gibi bircok iletisim uygulamasini hedefler ancak Standart Genellestirilmis Isaretleme Dili SGML ile bilincli olarak farkli bir minimal sozdizimi kullanir Yerlesim belirlemek icin Python tarzi girinti kullanir ve cogu dize degeri etrafinda alinti isareti gerektirmez ve ayni dosyada JSON tarzi ve de desteklemektedir YAMLParadigmasiVeri serilestirmeIlk cikisi11 Mayis 2001TasarimciClark Evans Ingy dot Net Oren Ben KikiGelistiriciYAML orgKararli surum1 2 Revizyon 1 2 2 1 Ekim 2021 Veri degisimiKonfigurasyon dosyalari veri serilestirmeYokEtkilendikleriJSON XMLUygulama diliMetin tabanliPlatformuCapraz platformIsletim sistemiHerhangi birLisansAcik kaynakOlagan dosya uzantilari yaml ymlWeb sitesihttps yaml org Ozel veri turlerine de izin verilir ancak YAML yerlesik olarak skalarlari ornegin dizeler tam sayilar kayan nokta sayilari listeleri ve iliskisel dizileri gibi ayni zamanda haritalar sozlukler veya hash ler olarak da bilinir kodlar Bu veri turleri Perl programlama diline dayanmaktadir ancak tum yaygin kullanilan yuksek seviyeli programlama dilleri cok benzer kavramlara sahiptir Iki nokta ust uste kullanilan sozdizimi anahtar deger ciftleri ifadesi icin RFC 822 de tanimlanan elektronik posta basliklarindan esinlenmistir ve belge ayirici kodu MIME dan RFC 2046 odunc alinmistir Kacis dizeleri de C den alinmistir ve cok satirli dizeler icin boslukla sarma HTML den esinlenilmistir Listeler ve hash ler ic ice gecmis listeler ve hash ler icerebilir grafikler YAML takma adlari kullanilarak temsil edilebilemektedir Bu da XML de SOAP a benzerdir YAML SAX tan esinlenmis bir ozellik olarak akislarda okunup yazilmak uzere tasarlanmistir YAML okuma ve yazma destegi bircok programlama dilinde mevcuttur Vim Emacs ve cesitli entegre gelistirme ortamlari bulunmaktadir YAML Ayrica duzenlemeyi kolaylastiran bazi ozellikler sunmaktadir Ornegin ic ice gecmis yapilarin katlanmasi veya sozdizimi hatalarinin otomatik olarak vurgulanmasi gibi ozellikleri mevcuttur YAML dosyalari icin resmi olarak onerilen dosya adi uzantisi yaml ve yml 2006 dan beri gecerlidir 2024 te MIME turu application yaml olarak kesinlesmistir Tarih ve IsimYAML ˈ j ae m el ilk olarak 2001 yilinda Clark Evans tarafindan onerilmistir ve Ingy dot Net ve Oren Ben Kiki tarafindan tasarlanmistir Baslangicta YAML nin Yet Another Markup Language Yine Bir Isaretleme Dili anlamina geldigi soyleniyordu cunku bu donem sunum ve baglanti icin isaretleme dillerinin patladigi bir donemdi HTML XML SGML vs Ilk ismi dil incelemesi olarak isaretleme dili oldugunu ifade eden yet another ifadesiyle bir teknoloji manzarasina gonderme yapmayi amacliyordu ancak daha sonra YAML Ain t Markup Language YAML Isaretleme Dili Degildir olarak yeniden adlandirildi bu da ozyinelemeli kisaltma olarak veri odakli amacini ayirt etmek icin kullanildi SurumlerSurum Yayin tarihiYAML 1 0 29 Ocak 2004YAML 1 1 18 Ocak 2005YAML 1 2 0 21 Temmuz 2009YAML 1 2 1 1 Ekim 2009YAML 1 2 2 1 Ekim 2021TasarimSozdizimi Bir basvuru karti ve tam ozellik listesi resmi sitede mevcuttur Asagida temel ogelerin bir ozeti bulunmaktadir YAML bazi kontrol karakterleri haric tum Unicode karakter setini kabul eder ve UTF 8 UTF 16 veya UTF 32 formatlarinda kodlanabilir UTF 32 zorunlu olmamakla birlikte bir ayristiricinin JSON uyumluluguna sahip olmasi icin gereklidir Bosluk girintileme yapi belirtmek icin kullanilir ancak sekme karakterlerine bu girintilemenin bir parcasi olarak izin verilmez Yorumlar diyez isareti ile baslar bir satirin herhangi bir yerinde baslayabilir ve satirin sonuna kadar devam eder Yorumlar diger belirteclerden bosluk karakterleriyle ayrilmalidir Eger karakteri bir dizge icinde gorunurse o zaman bu bir diyez harfi olur Liste uyeleri her satir basinda bir kisa cizgi ile gosterilir Bir liste ayrica koseli parantez icine alinarak ve her bir giris virgul ile ayrilarak belirtilebilir Bir iliskisel dizi girisi key value biciminde iki nokta ust uste ile temsil edilir ve her satira bir giris duser YAML iki noktadan sonra bir bosluk gerektirir boylece http www wikipedia org gibi URL tarzi dizgeler tirnak icine alinmadan temsil edilebilir Bir anahtarin onune bir soru isareti konarak tirnak isaretleri olmadan onunde kisa cizgi koseli parantez vb iceren bir anahtarin anahtar deger biciminde olmasina izin verilir Bir iliskisel dizi ayrica metin icinde kapali olarak ve anahtarlar iki nokta ust uste ile ayrilmis ve girisler virgulle ayrilmis olarak belirtilebilir bosluklar JSON ile uyumlulugu korumak icin gerekli degildir Dizgeler YAML deki bir tur skaler normalde tirnak isaretsizdir ancak cift tirnak veya tek tirnak icine alinabilir Cift tirnak icinde ozel karakterler bir ters egik cizgi ile baslayan C tarzi kacis dizileriyle temsil edilebilir Belgelenmis bilgilere gore desteklenen tek sekizlik kacis 0 dir Tek tirnak icinde desteklenen tek kacis dizisi don t gibi tek tirnagin kendisini belirten cift tek tirnak dir Blok skalerleri girinti ile sinirlidir ve satir sonlarini koruma veya katlama gt icin istege bagli degistiricilere sahiptir Tek bir akistaki birden cok belge uc kisa cizgi ile ayrilir Uc nokta istege bagli olarak bir akis icindeki bir belgeyi sonlandirir Yinelenen dugumler baslangicta bir ampersand amp ile belirtilir ve daha sonra bir yildiz isareti ile referans alinir Dugumler bir dize izleyen cift unlem isareti kullanilarak bir tur veya etiketle etiketlenebilir ve bu dize bir URI ye genisletilebilir Bir akistaki YAML belgeleri bir yuzde isareti ardindan bir ad ve boslukla ayrilmis parametrelerden olusan yonergeler ile baslayabilir YAML 1 1 de iki yonerge tanimlanmistir YAML yonergesi belirli bir belgede YAML surumunu tanimlamak icin kullanilir TAG yonergesi URI onekleri icin bir kisayol olarak kullanilir Bu kisayollar daha sonra dugum turu etiketlerinde kullanilabilir Temel Bilesenler Geleneksel blok formati listede yeni bir ogeye baslamak icin kisa cizgi bosluk kullanir Favori filmler Casablanca Gizli Teskilat Orada Olmayan Adam Istege bagli satir ici format virgul bosluk ile ayrilmistir ve koseli parantezler JSON a benzer bir sekilde icine alinmistir Alisveris listesi sut kabakli turta yumurta meyve suyu Anahtarlar degerlerden iki nokta bosluk ile ayrilir YAML veri dosyalarinda yaygin olan girintili bloklar anahtar deger ciftlerini ayirmak icin girinti ve yeni satir kullanir YAML veri akislarinda yaygin olan satir ici bloklar suslu parantezler arasindaki anahtar deger ciftlerini ayirmak icin virgul bosluk kullanir Girintili Blok isim John Smith yas 33 Satir Ici Blok isim John Smith yas 33 Dizgeler tirnak isaretlerine ihtiyac duymaz Cok satirli dizgeler yazmanin iki yolu vardir biri yeni satirlari korur karakteri kullanarak digeri ise yeni satirlari katlar gt karakteri kullanarak Her iki durumda da bir yeni satir karakteri takip eder veri Bir zamanlar Ealing den uzun bir adam vardi Darjeeling e giden bir otobuse bindi Kapida yaziyordu Lutfen yere oturmayin Bu yuzden dikkatlice tavana oturdu Varsayilan olarak ondeki girinti ilk satirin ve sondaki bosluklar cikarilir ancak diger davranis acikca belirtilebilir veri gt Katlanmis metin tek bir paragraf halinde birlestirilecek Bos satirlar paragraf ayrimi olarak kabul edilir Katlanmis metin yeni satirlari bosluklara donusturur ve ondeki bosluklari kaldirir Smith Ailesi isim John Smith yas 33 isim Mary Smith yas 27 isim yas Rae Smith 4 anahtarlar olarak diziler desteklenir Insanlar cinsiyete gore erkekler John Smith Bill Jones kadinlar Mary Smith Susan Williams Nesneler ve listeler yaml deki onemli bilesenlerdir ve karistirilabilirler Ilk ornek Smith ailesinden tum insanlari iceren anahtar deger nesnelerinin bir listesidir Ikinci ornek onlari cinsiyete gore listeler bu iki liste iceren bir anahtar deger nesnesidir Gelismis Bilesenler YAML i diger veri serilestirme dillerinin yeteneklerinden ayiran iki ozellik yapilar ve veri tipleridir YAML yapilari tek bir dosya icinde birden fazla belgenin saklanmasina tekrar eden dugumler icin referanslarin kullanilmasina ve key olarak rastgele dugumlerin kullanilmasina olanak tanir Aciklik kompaktlik ve veri giris hatalarini onlemek icin YAML dugum capalari amp kullanarak ve referanslar kullanarak saglar Capaya yapilan referanslar tum veri turleri icin gecerlidir asagidaki ornekteki ship to referansina bakin Asagida iki adimin tam olarak tanimlanmadan referans alindigi bir enstruman dizicisindeki bir kuyrugun bir ornegi verilmistir Lazer goz ameliyati icin Dizici protokolleri step amp id001 capa etiketi amp id001 tanimlar instrument Lasik 2000 pulseEnergy 5 4 pulseDuration 12 repetition 1000 spotSize 1mm step amp id002 instrument Lasik 2000 pulseEnergy 5 0 pulseDuration 10 repetition 500 spotSize 2mm Enstruman1 id001 ilk adima referans verir capa amp id001 ile Enstruman2 id002 ikinci adima referans verir Acik veri tipleri YAML belgelerinin cogunda nadiren gorulur cunku YAML basit tipleri otomatik olarak algilar Veri tipleri uc kategoriye ayrilabilir cekirdek tanimli ve kullanici tanimli Cekirdek olanlar herhangi bir ayristiricida bulunmasi beklenenlerdir or ondalik sayilar tamsayilar dizgeler listeler haritalar Ikili veri gibi daha bircok gelismis veri turu YAML spesifikasyonunda tanimlanmistir ancak tum uygulamalarda desteklenmez Son olarak YAML kullanici tanimli siniflara yapilar veya ilkelere uyum saglamak icin yerel olarak veri turu tanimlarini genisletmenin bir yolunu tanimlar or dort basamakli ondalik sayilar YAML varligin veri turunu otomatik olarak algilar ancak bazen veri turunu acikca belirtmek istenir En yaygin durum tek kelimelik bir dizenin bir sayi boolean veya etiket gibi gorundugu ve bu durumu ayirmak icin tirnak isaretleri veya acik bir veri tipi etiketi kullanilmasi gerektigi durumdur a 123 bir tamsayi b 123 bir dize tirnak isaretleri ile ayrilmis c 123 0 bir ondalik sayi d float 123 acik veri tipiyle de bir ondalik sayi ile oneki eklenmis e str 123 acik tip ile bir dize f str Evet acik tip ile bir dize g Evet bir boolean True yaml1 1 dize Evet yaml1 2 h Evet Hayir muzlarimiz var bir dize Evet ve Hayir baglama gore ayrilmis YAML in her uygulamasinda spesifikasyonla tanimlanmis her veri turu bulunmaz Bu yerlesik turler cift unlem isaretiyle sigil oneki kullanir Burada gosterilmeyenler arasinda ozellikle ilginc olanlar setler sirali haritalar zaman damgalari ve onaltili sayilardir Iste base64 ile kodlanmis ikili veriye bir ornek resim binary R0lGODdhDQAIAIAAAAAAANn Z2SwAAAAADQAIAAACF4SDGQ ar3xxbJ9p0qa7R0YxwzaFME 1IAADs YAML in bircok uygulamasi nesne serilestirme icin kullanici tanimli veri turlerini destekleyebilir Yerel veri turleri evrensel veri turleri degildir ancak YAML ayristirici kitapligi kullanilarak uygulamada tanimlanir Yerel veri turleri tek bir unlem isareti kullanir OzelliklerGirintili Sinirlama YAML yapisini esas olarak girintilere dayandirdigi icin ozellikle ayrac carpismasina karsi dayaniklidir YAML nin skaler degerlerdeki tirnak isaretlerine ve suslu parantezlere karsi duyarsizligi bir YAML belgesine yalnizca bir blok literal icinde veya gt kullanarak girintileme yaparak XML JSON veya hatta YAML belgelerini yerlestirmenize olanak tanir example gt HTML degistirilmeden YAML icine girer message lt blockquote style font italic 1em serif gt Uc iki den her zaman buyuktur buyuk iki degerleri icin bile Yazar Bilinmiyor lt blockquote gt date 2007 06 01 YAML tum ic tirnak isaretlerini tirnak icine alip kacis karakteri kullanarak JSON icine yerlestirilebilir YAML ayrilmis karakterleri lt gt amp kacis karakteri kullanarak ve bosluklari donusturerek veya bir CDATA bolumu icine yerlestirerek XML e yerlestirilebilir Hiyerarsik Olmayan Veri Modelleri JSON un her bir alt dugumun tek bir ebeveyni olan hiyerarsik bir modelde veri temsil etme yeteneginin aksine YAML ayni verilerin tekrarlanmasini onlemek icin agacta iki veya daha fazla noktadan referans verilmesine olanak taniyan basit bir iliskisel sema sunar Bu XML e yerlesik IDREF islevine benzer YAML ayristiricisi daha sonra bu referanslari okundugunda ima ettikleri tam doldurulmus veri yapilarina genisletir boylece ayristiriciyi kullanan program referanslari genisletmeyen XML islemcilerinin aksine bir iliskisel kodlama modelinden haberdar olmak zorunda kalmaz Bu genisletme yapilandirma dosyalarinda veya cok sayida parametrenin bir dizi ardisik kayitta ayni kaldigi ve yalnizca birkacinin degistigi isleme protokollerinde veri giris hatalarini azaltirken okunabilirligi artirabilir Ornegin bir faturadaki gonderilecek ve faturalandirilacak kayitlarin neredeyse her zaman ayni veriler olmasi gibi Pratik Hususlar YAML satir yonelimlidir ve bu nedenle mevcut programlarin yapilandirilmamis ciktisini YAML formatina donusturmek ve orijinal belgenin gorunumunun cogunu korumak genellikle basittir Kapanis etiketleri suslu parantezler veya tirnak isaretleri dengelenmediginden genellikle basit programlarda dagitilmis print ifadelerinden dogrudan iyi bicimlendirilmis YAML olusturmak kolaydir Ayni sekilde bosluk ayraclari YAML dosyalarini grep AWK Perl Ruby ve Python daki satir yonelimli komutlari kullanarak hizli ve gecici bir sekilde filtrelemeyi kolaylastirir Ozellikle isaretleme dillerinin aksine ardisik YAML satirlarindan olusan parcalar genellikle kendi baslarina iyi bicimlendirilmis YAML belgeleridir Bu bir belgedeki belirli kayitlari cikarmaya baslamadan once ornegin acilis ve kapanis etiketlerini dengelemek ve tirnak ve kacis karakterlerini gezinmek gibi bir belgenin tamamini islemeleri gerekmeyen ayristiricilar yazmayi cok kolaylastirir Bu ozellik ozellikle bir dosyadaki kayitlar uzerinde tek durumsuz bir geciste dosyanin tum veri yapisinin bellege sigamayacak kadar buyuk oldugu veya yapinin tamamini yeniden olusturarak tek bir ogeyi cikarmanin asiri derecede pahali olacagi durumlarda hizlidir Zit bir sekilde girintili sinirlama derin ic ice gecmis hiyerarsileri karmasiklastiriyor gibi gorunse de YAML tek bir bosluk kadar kucuk girintileri isler ve bu isaretleme dillerinden daha iyi sikistirma saglayabilir Ayrica asiri derin girintiden tamamen kacinilabilir 1 satir ici stil e yani JSON benzeri bicim geri donerek girinti olmadan veya 2 hiyerarsiyi duz bir forma cozmek icin iliskisel capalari kullanarak boylece YAML ayristirici tam veri yapisina seffaf bir sekilde yeniden olusturur Guvenlik YAML tamamen bir veri temsil dili olup yurutulebilir komutlara sahip degildir Herhangi bir veri dilinde dogrulama ve Javascript te guvenli ayristirma dogasi geregi mumkun olsa da uygulama o kadar unlu bir tuzaktir ki YAML nin ilistirilmis bir komut diline sahip olmamasi goreceli bir guvenlik avantaji olabilir Ancak YAML diline ozgu etiketlere izin verir boylece bu etiketleri destekleyen bir ayristirici tarafindan rastgele yerel nesneler olusturulabilir Karmasik nesne orneklemesine izin veren herhangi bir YAML ayristiricisi bir enjeksiyon saldirisi olasiligini acar Keyfi siniflarin nesnelerinin yuklenmesine izin veren Perl ayristiricilari kutsanmis degerler olarak adlandirilan degerleri olusturur Bu degerleri kullanmak beklenmedik davranislara neden olabilir ornegin sinif asiri yuklenmis operatorler kullaniyorsa Bu keyfi Perl kodunun yurutulmesine yol acabilir Durum Python veya Ruby ayristiricilari icin de benzerdir PyYAML belgelerine gore Bir YAML belgesini Internet gibi guvenilmeyen bir kaynaktan alirsaniz keyfi bir Python nesnesi olusturma yeteneginin tehlikeli olabilecegini unutmayin yaml safe load islevi bu yetenegi tamsayilar veya listeler gibi basit Python nesneleriyle sinirlar PyYAML her turlu Python nesnesini olusturmaniza olanak tanir Hatta Python siniflarinin ornekleri python object etiketi kullanilarak olusturulabilir Veri Isleme ve Temsil YAML spesifikasyonu bir ornek belgeyi bir Sunum veya karakter akisi olarak tanimlar YAML ornek belgelerinde ana mantiksal yapilar skalerler diziler ve eslemelerdir YAML spesifikasyonu ayrica bu birincil mantiksal yapilar icin bazi temel kisitlamalar belirtir Ornegin spesifikasyona gore esleme anahtarlarinin bir sirasi yoktur Dugum sirasinin onemli oldugu her durumda bir dizi kullanilmalidir Ayrica YAML islemcileri icin uyumluluk tanimlarken YAML spesifikasyonu iki birincil islem tanimlar dump ve load Tum YAML uyumlu islemciler en az bir bu islemlerden birini saglamalidir ve istege bagli olarak her ikisini de saglayabilir Son olarak YAML spesifikasyonu bir bilgi modeli veya temsil grafigi tanimlar bu grafik hem dump hem de load islemleri sirasinda olusturulmalidir ancak bu temsil bir API araciligiyla kullaniciya sunulmak zorunda degildir Diger Serilestirme Formatlariyla KarsilastirmaJSON ile Karsilastirma JSON soz dizimi YAML surum 1 2 nin temelini olusturur Bu surum YAML yi JSON ile resmi bir alt kume olarak uyumlu hale getirmek amaciyla yayimlanmistir Onceki YAML surumleri tam olarak uyumlu olmasa da bu farkliliklar nadiren fark edilirdi ve cogu JSON belgesi Syck gibi bazi YAML ayristiricilari tarafindan ayristirilabilir Bu JSON un semantik yapisinin YAML nin istege bagli satir ici stili ile esdeger olmasindan kaynaklanmaktadir JSON gibi satir ici stilde genisletilmis hiyerarsiler yazilabilir ancak bu netligi artirmadikca onerilen bir YAML stili degildir YAML JSON da bulunmayan bircok ek ozellige sahiptir bunlar arasinda yorumlar genisletilebilir veri turleri iliskisel sabitler tirnaksiz dizgiler ve anahtar sirasini koruyan esleme turleri bulunur YAML nin anlasilir olmasi JSON serilestirme ve ayristirmanin YAML ye gore cok daha hizli olmasini saglar TOML ile Karsilastirma TOML ini dosya formatinin bir gelistirmesi olarak tasarlanmistir YAML nin minimum gosterge karakteri kullanimi TOML nin tirnak isareti ve koseli parantez gereksinimleriyle kiyaslandiginda daha avantajli olarak gorulur YAML nin onemli girinti kullanimi TOML nin anahtar ve tablo adlari icin nokta gosterimi ile karsilastirilmistir ve hangi yontemin daha okunabilir yapilandirma dosyalarina yol actigi konusunda farkli gorusler vardir XML ile Karsilastirma Bu baslik herhangi bir kaynak icermemektedir Lutfen guvenilir kaynaklar ekleyerek bu basligin gelistirilmesine yardimci olunuz Kaynaksiz icerik itiraz konusu olabilir ve kaldirilabilir Eylul 2024 Bu sablonun nasil ve ne zaman kaldirilmasi gerektigini ogrenin YAML XML de bulunan etiket ozniteliklerine sahip degildir Bunun yerine YAML genisletilebilir tur bildirimlerine nesneler icin sinif turleri dahil sahiptir YAML nin kendisi ornegin bir belgenin kendini dogrulamasina izin veren XML nin dil tanimli belge semasi tanimlayicilarina sahip degildir Bununla birlikte YAML icin disaridan tanimlanmis birkac sema tanimlayici dili vardir ornegin Doctrine Kwalify ve Rx ve bu rolu yerine getirir Ayrica YAML veri yapilarini XML de temsil eden YAXML XML sema ice aktaricilari ve XSLT gibi cikti mekanizmalarinin YAML ye uygulanmasina izin verir Comparison of data serialization formats daha kapsamli bir YAML ve diger serilestirme formatlarinin karsilastirmasini saglar Yazilim emitter lar ve parser lar Sabit veri yapilari icin YAML dosyalari sadece veriyi ve YAML ye ozgu suslemeleri yazan print komutlari kullanilarak kolayca olusturulabilir Ancak degisken veya karmasik hiyerarsik verileri dokebilmek icin ozel bir YAML emitter yayimci tercih edilir Benzer sekilde basit YAML dosyalari ornegin anahtar deger ciftleri duzenli ifadelerle kolayca ayristirilabilir Daha karmasik veya degisken veri yapilari icin ise resmi bir YAML parser ayristirici onerilir YAML emitter lari ve parser lari bircok populer dil icin mevcuttur Cogu kendi yerel dillerinde yazilmistir Bazilari ise C kutuphanesi libyamlnin dil baglamalaridir bu onlarin daha hizli calismasini saglayabilir Bir zamanlar Syck adinda baska bir C kutuphanesi vardi bu kutuphane why the lucky stiff tarafindan yazilmis ve sonrasinda yetim birakilmistir bu kutuphane artik bakimsiz durumdadir resmi bir kaynak paketi yoktur ve web sitesi ele gecirilmistir Bu nedenle onerilebilecek tek C kutuphanesi libyamldir Baslangicta Kirill Simonov tarafindan gelistirilmistir 2018 de yeni bakicilar Ian Cordasco ve Ingy dot Net tarafindan gelistirmeye devam edilmistir C programcilari C kutuphanesi libyaml ve C kutuphanesi libyaml cpp arasinda secim yapabilirler Her ikisi de tamamen bagimsiz kod tabanlarina ve tamamen farkli API lere sahiptir libyaml cpp kutuphanesinin hala 0 olan bir ana surum numarasi vardir bu da API nin herhangi bir anda degisebilecegini gosterir nitekim 0 3 surumunden sonra da bu gerceklesmistir Ic ice gecmis elemanlar icin uzantilar hedefleyen C dilinde yazilmis bir gramer odakli bir uygulama da mevcuttur YAML nin bazi uygulamalari ornegin Perl in YAML pm bir dosyanin akisin tamamini yukler ve onu toplu olarak ayristirir PyYaml gibi diger uygulamalar ise tembel ayristirma yapar ve sadece istek uzerine bir sonraki belgeyi isler Cok buyuk dosyalar icin belgeleri bagimsiz olarak islemek planlandiginda tum dosyayi islemden once olusturmak engelleyici olabilir Bu nedenle YAML pm de bazen bir dosyayi belgelere bolmek ve her birini ayri ayri ayristirmak gerekebilir YAML bunu kolaylastirir cunku bu sadece satir basinda uc nokta ve ardindan bir bosluk ve olasi bir yorum ile tanimlanan belge sonu ayiracina bolmeyi gerektirir Bu ayirac icerikte yasaklanmistir ElestiriYAML onemli bosluk kafa karistirici ozellikleri guvenli olmayan varsayilanlari ve karmasik ve belirsiz spesifikasyonu nedeniyle elestirilmistir Yapilandirma dosyalari kullanicilar farkinda olmadan komutlari calistirabilir veya icerikleri yukleyebilir Buyuk YAML dosyalarini duzenlemek zordur cunku girinti hatalari fark edilmeyebilir Otomatik tur belirleme bir hata kaynagidir Ornegin tirnak icine alinmamis Yes ve No boolean a donusturulur yazilim surum numaralari float a donusturulebilir Sonlandiricilarin olmamasi nedeniyle kesilmis dosyalar genellikle gecerli YAML olarak yorumlanir Standardin karmasikligi tutarsiz uygulamalara yol acti ve dili tasinabilir olmaktan cikardi YAML in algilanan kusurlari ve karmasikligi StrictYAML ve NestedText gibi daha kati alternatiflerin ortaya cikmasina neden olmustur Kaynakca a b c Yet Another Markup Language YAML 1 0 Working Draft 10 Ara 2001 10 Tem 2019 tarihinde kaynagindan arsivlendi Erisim tarihi 28 Mayis 2019 a b c YAML Ain t Markup Language YAML Version 1 2 YAML org 24 Oca 2019 tarihinde kaynagindan arsivlendi Erisim tarihi 29 Mayis 2019 Built in Types Python 3 9 6 documentation docs python org 14 Haziran 2020 tarihinde kaynagindan arsivlendi Erisim tarihi 19 Agustos 2021 Standard built in objects JavaScript MDN developer mozilla org Ingilizce 19 Ocak 2021 tarihinde kaynagindan arsivlendi Erisim tarihi 19 Agustos 2021 corob msft 17 Agustos 2021 Built in types C docs microsoft com Ingilizce 13 Haziran 2024 tarihinde kaynagindan arsivlendi Erisim tarihi 19 Agustos 2021 The Official YAML Web Site yaml org 18 Mart 2021 tarihinde kaynagindan arsivlendi Erisim tarihi 5 Subat 2019 Setting up Vim for YAML editing arthurkoziel com 23 Kasim 2021 tarihinde kaynagindan arsivlendi Erisim tarihi 20 Aralik 2021 Yaml Mode EmacsWiki 12 Haziran 2015 8 Kasim 2016 tarihinde kaynagindan arsivlendi Erisim tarihi 5 Aralik 2016 aukaost Pretty YAML Packages Package Control Packagecontrol io 8 Kasim 2016 tarihinde kaynagindan arsivlendi Erisim tarihi 5 Aralik 2016 yaml Eclipse Plugins Bundles and Products Eclipse Marketplace Marketplace eclipse org 8 Kasim 2016 tarihinde kaynagindan arsivlendi Erisim tarihi 5 Aralik 2016 Ruth Kusterer NetBeans IDE Ruby and Ruby on Rails Development Netbeans org 19 Kasim 2016 tarihinde kaynagindan arsivlendi Erisim tarihi 5 Aralik 2016 YAML Ain t Markup Language 24 Eylul 2006 24 Eylul 2006 tarihinde kaynagindan arsivlendi Kaynak hatasi Gecersiz lt ref gt etiketi rfc9512 isimli refler icin metin saglanmadi Bkz Kaynak gosterme Evans Clark 11 Mayis 2001 YAML Taslagi 0 1 Yahoo Tech gruplari sml dev 3 Haziran 2001 tarihinde kaynagindan arsivlendi Erisim tarihi 21 Mart 2019 Yet Another Markup Language YAML 1 0 YAML org 14 Nisan 2019 tarihinde kaynagindan arsivlendi Erisim tarihi 29 Mayis 2019 YAML 1 1 Basvuru Karti YAML org 14 Nisan 2019 tarihinde kaynagindan arsivlendi Erisim tarihi 29 Mayis 2019 YAML Markup Language YAML Surum 1 2 YAML org 24 Ocak 2019 tarihinde kaynagindan arsivlendi Erisim tarihi 29 Mayis 2019 YAML specification v1 2 2 Section 6 1 Indentation Spaces 12 Mart 2023 tarihinde kaynagindan arsivlendi Erisim tarihi 12 Mart 2023 YAML Ain t Markup Language YAML Surum 1 2 YAML org 24 Ocak 2019 tarihinde kaynagindan arsivlendi Erisim tarihi 29 Mayis 2019 Bulut Tabanli Yonetim uygulamalari JigoCloud com 17 Eylul 2016 tarihinde kaynagindan arsivlendi Erisim tarihi 28 Eylul 2016 a b YAML 1 2 Yapilarin Spesifikasyonu YAML org 24 Ocak 2019 tarihinde kaynagindan arsivlendi Erisim tarihi 29 Mayis 2019 Extensible Markup Language XML 1 0 Ikinci Baski W3 org 15 Mayis 2022 tarihinde kaynagindan arsivlendi Erisim tarihi 27 Mayis 2015 Ucretsiz Kurslar YAML ye Giris Uygulamali bir kurs Insidelearn Ingilizce 26 Agustos 2022 tarihinde kaynagindan arsivlendi Erisim tarihi 4 Agustos 2022 YAML 4 Agustos 2022 26 Aralik 2022 tarihinde kaynagindan arsivlendi Erisim tarihi 4 Agustos 2022 PyYAML Documentation Loading YAML Pyyaml org 24 Eylul 2016 tarihinde kaynagindan arsivlendi Erisim tarihi 28 Eylul 2016 Ain t Markup Language YAML Version 1 1 YAML org 14 Nisan 2019 tarihinde kaynagindan arsivlendi Erisim tarihi 29 Mayis 2019 Ek istege bagli kullanim mantiksal yapilar YAML turleri deposunda listelenmistir Language Independent Types for YAML Version 1 1 YAML org 14 Nisan 2019 tarihinde kaynagindan arsivlendi Erisim tarihi 29 Mayis 2019 YAML Ain t Markup Language YAML Version 1 1 YAML org 13 Haziran 2024 tarihinde kaynagindan arsivlendi Erisim tarihi 29 Mayis 2019 Ain t Markup Language YAML Version 1 1 YAML org 13 Haziran 2024 tarihinde kaynagindan arsivlendi Erisim tarihi 29 Mayis 2019 YAML Ain t Markup Language YAML Version 1 1 YAML org 14 Nisan 2019 tarihinde kaynagindan arsivlendi Erisim tarihi 29 Mayis 2019 Uyumsuzluklar sunlardi JSON UTF 32 gibi genisletilmis karakter setlerine izin veriyor ve YAML ye gore uyumsuz Unicode karakter kacis sozdizimine sahipti YAML virgul esittir ve iki nokta ust uste gibi ayiricilarin ardindan bir bosluk gerektiriyordu ancak JSON bunu gerektirmiyordu JSON un bazi standart olmayan uygulamalari JavaScript in yorumlarini icerecek sekilde grameri genisletir Bu tur sinir durumlarini ele almak JSON u satir ici YAML olarak ayristirmadan once hafif bir on isleme gerektirebilir Daha fazla bilgi icin bkz 1 29 Agustos 2013 tarihinde Wayback Machine sitesinde arsivlendi Parsing JSON with SYCK 17 Eylul 2016 tarihinde Wayback Machine sitesinde arsivlendi Not that e g Symfony s YAML parser does not support line breaks inside or structures which is a major incompatibility with JSON YAML vs JSON vs XML in Go Medium 15 Haziran 2021 24 Ocak 2024 tarihinde kaynagindan arsivlendi Erisim tarihi 31 Ocak 2024 Differences Between YAML and JSON Baeldung 9 Temmuz 2020 7 Mart 2023 tarihinde kaynagindan arsivlendi Erisim tarihi 7 Mart 2023 Siebenmann Chris 30 Nisan 2019 My problem with YAML s use of whitespace 1 Aralik 2023 tarihinde kaynagindan arsivlendi Erisim tarihi 6 Ekim 2023 What is wrong with TOML yaml core lists sourceforge net 27 Haziran 2018 tarihli e posta YAML Grammar for Lexepars GitHub 17 Eylul 2020 tarihinde kaynagindan arsivlendi Erisim tarihi 20 Subat 2020 YAML Ain t Markup Language YAML Version 1 2 9 1 2 Document Markers YAML org 24 Ocak 2019 tarihinde kaynagindan arsivlendi Erisim tarihi 29 Mayis 2019 a b c d e Tournoij Martin 4 Eylul 2016 YAML probably not so great after all 10 Mayis 2019 tarihinde kaynagindan arsivlendi Erisim tarihi 16 Mayis 2019 That s a lot of YAML 2 Mart 2019 tarihinde kaynagindan arsivlendi Erisim tarihi 16 Mayis 2019 com cblp yaml sucks YAML sucks url degerini kontrol edin yardim GitHub 7 Nisan 2019 tarihinde kaynagindan arsivlendi Erisim tarihi 16 Mayis 2019 a b com strictyaml why implicit typing removed The Norway Problem why StrictYAML refuses to do implicit typing and so should you url degerini kontrol edin yardim 21 Subat 2020 tarihinde kaynagindan arsivlendi Erisim tarihi 3 Haziran 2020 YAML Test Matrix 16 Temmuz 2020 tarihinde kaynagindan arsivlendi Erisim tarihi 3 Nisan 2020 Dis BaglantilarResmi site YAMLScript