आँकड़ों और विज्ञापन के लिए कुकीज़
हम आँकड़ों और विज्ञापन के लिए कुकीज़ इस्तेमाल करते हैं, दोनों Google को जाती हैं। मना करने से आपको दिखने वाली किसी चीज़ में कोई फ़र्क़ नहीं पड़ता।निजता पेज पढ़ें
यहाँ आप YAML को TOML में बदलते हैं, मुफ़्त और बिना खाते के: फ़ाइल ऊपर छोड़िए और कुछ ही सेकंड में नतीजा डाउनलोड के लिए तैयार मिलेगा। कन्वर्ज़न आपके अपने ब्राउज़र के भीतर होता है, इसलिए फ़ाइल कभी अपलोड नहीं होती। यह Windows, macOS और Linux पर वैसे ही चलता है जैसे iPhone और Android पर, और कनेक्शन काट देने पर भी चलता रहता है।
एक बार में 100 फ़ाइलें। फ़ॉर्मेट अलग-अलग हों तो भी चलेगा।
ये एक के बाद एक बदलती हैं और साथ में एक ZIP बनकर उतरती हैं।
YAML से TOML
सादे मूल्य और सरणियाँ ऊपर लिखी जाती हैं, फिर हर नेस्टेड mapping अपना ब्रैकेट वाला टेबल हेडर बनकर आता है। तीन स्तर गहरी नेस्टिंग तीन नेस्टेड ब्लॉक की जगह बिंदु वाला एक ही हेडर देती है, इसलिए tool, फिर ruff, फिर कोई सेटिंग — यह एक [tool.ruff] हेडर बनकर आता है, सेटिंग उसके नीचे।
यह हेडर का चपटा होना दोनों फ़ॉर्मेट के बीच सबसे साफ़ दिखने वाला फ़र्क़ है। YAML गहराई ख़ाली जगह से बताता है और बिना सीमा के नेस्ट हो सकता है, पढ़ने लायक़ रहना छोड़े बिना; TOML गहराई को हेडर नाम में लिखता है और चार स्तर पर भी पढ़ने लायक़ रहता है क्योंकि पूरा रास्ता हर ब्लॉक पर लिखा जाता है। किसी प्रोजेक्ट कॉन्फ़िग के लिए यह आमतौर पर सही सौदा है।
key: लिखी लाइन जिसके बाद कुछ न हो, वह मान्य YAML है और null बनकर पार्स होती है। TOML में null मूल्य है ही नहीं — विनिर्देश उसे परिभाषित ही नहीं करता — इसलिए लेखक कुंजी छोड़ ही देता है। कोई एरर नहीं, कोई प्लेसहोल्डर नहीं: कुंजी आपके YAML में थी और TOML में नहीं है।
यह लगने से ज़्यादा मायने रखता है क्योंकि ख़ाली कुंजियाँ जान-बूझकर की गई YAML आदत हैं। वे किसी सेटिंग को मौजूद-पर-असेट न होने की तरह चिह्नित करती हैं, ऑपरेटर के बाद में भरने के लिए जगह रखती हैं, और यह दर्ज करती हैं कि विकल्प मौजूद है। बदलने से पहले कोलन पर ख़त्म होती लाइनों को स्रोत में खोजिए।
सरणी में वही null अलग तरह बरतता है: लेखक इनकार कर देता है, और बदलाव यह संदेश देकर असफल होता है कि सरणी null या undefined मूल्य नहीं रख सकती। कुछ नहीं बनता।
यह दोनों में से बेहतर बर्ताव है, और यह असंगति जान-बूझकर है। टेबल से कुंजी हटाना बाक़ी टेबल को मतलब भरा रहने देता है; सरणी से तत्व हटाना उसके बाद के हर तत्व को खिसका देता है, जो क्रम-सूची को अलग सूची बना देता है।
TOML टेबल के हिसाब से समूह बनाता है। किसी टेबल से जुड़ी हर चीज़ उसके हेडर के बाद और अगले हेडर से पहले आनी चाहिए, इसलिए लेखक पहले हर scalar और सरणी लिखता है और फिर हर नेस्टेड ब्लॉक बारी-बारी। इस तरह बदली .gitlab-ci.yml अपनी stages सरणी ऊपर और जॉब परिभाषाओं को नीचे टेबल की तरह रखती है, चाहे YAML में क्रम कुछ भी रहा हो।
योजना बनाने लायक़ नतीजा है diff। अगर YAML फ़ाइल समीक्षा में है और उसी रिपॉज़िटरी में TOML उसकी जगह लेने वाली है, तो पहला कमिट अनुवाद के बजाय दोबारा-लिखा हुआ लगेगा, क्योंकि है भी वही।
पाइप चरित्र के बाद इंडेंट किया शेल स्क्रिप्ट — जो हर CI फ़ाइल के अपने बिल्ड कमांड रखने का तरीक़ा है — newline वाली स्ट्रिंग में पार्स होता है, और लेखक उसे बैकस्लैश-n escape के साथ सादी उद्धृत TOML स्ट्रिंग की तरह लिखता है। दस लाइन की स्क्रिप्ट एक बहुत लंबी लाइन बन जाती है।
TOML के पास triple-quote वाला बहु-पंक्ति स्ट्रिंग सिंटैक्स है जो स्क्रिप्ट को पढ़ने लायक़ रखता, और लेखक इसे इस्तेमाल नहीं करता। यह हाथ से करने वाला बदलाव है: escaped newline वाले मूल्य ढूँढिए, और हर एक को triple-quote ब्लॉक में दोबारा लिखिए।
इस परिवार में TOML इकलौता ऐसा फ़ॉर्मेट है जिसमें पहली श्रेणी की तारीख़ें हैं: offset datetime, local datetime, local date और local time सब विनिर्देश का हिस्सा हैं और TOML पार्सर उन्हें स्ट्रिंग की जगह तारीख़ की तरह वापस देता है। यही मुख्य वजह है कि कोई प्रोजेक्ट JSON के बजाय TOML चुनता है।
यह बदलाव आपको वे नहीं देता। YAML 1.2 बिना उद्धरण वाले 2024-01-02 को स्ट्रिंग मानता है, इसलिए यह TOML में "2024-01-02" उद्धरण सहित आता है। बाद में इन्हें उद्धरण से हटाना पूरा काम है और सेकंड लेता है।
जिस निर्माण की सबसे ज़्यादा चिंता होती है वही सबसे अच्छा काम करता है। YAML सूची जिसके तत्व mapping हों — लेखकों की सूची, बाइनरी की सूची, जॉब की सूची — TOML में tables की सरणी बनती है, दोहरे-ब्रैकेट वाला हेडर हर तत्व के लिए दोहराया जाता है। यही वह आकार है जो pyproject.toml या Cargo.toml अपने authors और targets के लिए चाहता है।
YAML फ़ाइल के बिलकुल ऊपर की सूची अपवाद है। TOML दस्तावेज़ हमेशा एक टेबल होता है, इसलिए जो दस्तावेज़ सिर्फ़ सूची है वह items नाम की एक कुंजी वाली टेबल में लपेटा जाता है।
TOML की बिना-उद्धरण कुंजियों में अक्षर, अंक, underscore और हाइफ़न ही चल सकते हैं। बाक़ी सब उद्धृत होना चाहिए, और लेखक आपके लिए उद्धृत कर देता है: बिंदु वाली कुंजी "date.timezone" बनकर उद्धरण सहित आती है, और जगह वाली कुंजी भी वैसी ही।
उद्धृत कुंजी एक संकेत भी है। बिंदु वाली उद्धृत कुंजी आमतौर पर मतलब रखती है कि YAML ने संरचना नेस्टिंग की जगह कुंजी नाम में बयान की थी, और TOML में वह संरचना असली टेबल के रूप में बेहतर लिखी जाती।
दोनों फ़ॉर्मेट टिप्पणी को सँभालते हैं और आपकी कोई भी पार नहीं होती। पार्सर पढ़ते वक़्त उन्हें छोड़ देता है और लेखक के पास लिखने को कुछ नहीं। किसी प्रोजेक्ट कॉन्फ़िग पर यह असली नुक़सान है — कोई dependency क्यों pin की गई इसका नोट, कमेंट किया विकल्प, कोई लाइन बताती हुई कि कौन-सा ब्लॉक किस माहौल पर लागू है।
माइग्रेशन तभी पूरी होती है जब वे वापस आ जाएँ। बदलिए, फिर पुरानी YAML और नई TOML साथ-साथ खोलकर टिप्पणियाँ वापस अपनी जगह जोड़िए। किसी सामान्य फ़ाइल पर यह दस मिनट का काम है और यही फ़र्क़ है ऐसे कॉन्फ़िग के बीच जिसे कोई सँभाल सके और जो काम करे पर कोई छूने की हिम्मत न करे।
| YAML | TOML | |
|---|---|---|
| पूरा नाम | YAML Ain't Markup Language | Tom's Obvious Minimal Language |
| फ़ाइल एक्सटेंशन | .yaml, .yml | .toml |
| मीडिया टाइप | application/yaml | application/toml |
| पहली बार प्रकाशित | 2001 | 2013 |
| विनिर्देश | YAML 1.2 | TOML 1.0 |
| लाइसेंस | खुला मानक | खुला मानक |
| आज की स्थिति | मौजूदा | मौजूदा |
| ब्राउज़र में खुलता है | कोई ब्राउज़र नहीं | कोई ब्राउज़र नहीं |
| इसकी जगह विचारणीय | JSON | JSON, INI |
कुछ नहीं खोता। YAML और TOML — दोनों अपनी सामग्री बिना नुक़सान सँभालते हैं: यह कन्वर्ज़न पैकिंग बदलता है, गुणवत्ता नहीं, और आप इसे दोहरा सकते हैं बिना इस डर के कि नुक़सान जमा होता जाएगा।
टिप्पणियाँ साथ जाती हैं। YAML और TOML — दोनों में टिप्पणी की वाक्य-रचना है, इसलिए बाद में फ़ाइल सँभालने वाले के लिए छोड़े गए नोट चुपचाप ग़ायब नहीं होते।
Visual Studio Code YAML और TOML — दोनों पढ़ लेता है, इसलिए आप नतीजे को असली फ़ाइल के बग़ल में रखकर देख सकते हैं, बिना दूसरा प्रोग्राम खोले।
YAML 2001 में आया। यह YAML 1.2 में तय किया गया है, और अगर फ़ाइल को उस औज़ार से ज़्यादा जीना है जिसने उसे लिखा, तो यह बात क़ीमती है।
TOML 2013 से चला आ रहा है, और TOML 1.0 में तय किया गया है। Visual Studio Code इस फ़ॉर्मेट को पढ़ लेता है।
नहीं। यह कन्वर्ज़न पूरी तरह आपके ब्राउज़र में होता है, इसलिए फ़ाइल आपके डिवाइस से बाहर नहीं जाती। आप ख़ुद जाँच सकते हैं: डेवलपर टूल्स का नेटवर्क टैब खोलिए और कुछ बदल कर देखिए। आपको पेज ख़ुद दिखेगा और आँकड़ों तथा विज्ञापन के वे अनुरोध दिखेंगे जिनसे इस सेवा का ख़र्च निकलता है — और एक भी ऐसा अनुरोध नहीं जो आपकी फ़ाइल साथ ले जा रहा हो।
हाँ। न खाता, न वॉटरमार्क, और न कोई रोज़ का कोटा जो ख़त्म हो: यह आपकी अपनी मशीन पर चलता है, इसलिए आप जितनी बार चाहें लौट सकते हैं। ब्राउज़र 100 MB तक की फ़ाइलें सँभालता है, एक बार में 100।
नहीं। TOML वही सामग्री बिना कुछ फेंके सँभालता है: नतीजा गुणवत्ता में असली फ़ाइल जैसा ही होता है।
कुछ नहीं खोता। YAML और TOML — दोनों अपनी सामग्री बिना नुक़सान सँभालते हैं: यह कन्वर्ज़न पैकिंग बदलता है, गुणवत्ता नहीं, और आप इसे दोहरा सकते हैं बिना इस डर के कि नुक़सान जमा होता जाएगा।