XML Biçimlendirici ve Doğrulayıcı
XML'i tarayıcınızda anında biçimlendirin, doğrulayın veya küçültün — sonuçlar yazarken canlı güncellenir.
Belgeniz cihazınızda kalır
Sonradan silinecek bir şey yok
Düzenlenmiş belgeler için güvenli
Her modern tarayıcıda çalışır
Nasıl çalışır
- 1
XML’inizi yapıştırın
Bir yapılandırma dosyası, bir API yanıtı, bir fatura, bir besleme ya da okumanız gereken bir dışa aktarım.
- 2
Biçimlendirin ya da küçültün
Okumak için girintileyin ya da geri sıkıştırın — uyarılar iki durumda da gösterilir.
- 3
Sonucu kopyalayın
Bir düzenleyiciye, bir kayda, bir test verisine ya da göndermek üzere olduğunuz bir belgeye taşıyın.
Neden bu araç
Biçimlendirme veriyi değiştirirse söylenir
Metin taşıyan bir öğeyi girintilemek o metni değiştirir; bunu sonradan değil öncesinde öğrenirsiniz.
Ad alanı önekleri korunur
Önekler yazıldığı gibi bırakılır, böylece onlara başvuran XPath ifadeleri ve stil sayfaları çalışmayı sürdürür.
Dış varlıklar asla çözülmez
Hiçbir dosya okunmaz ve hiçbir adres çekilmez; bir XML aracının en çok taşıması gereken özellik budur.
Genişleme bombaları reddedilir
Gigabaytlara açılan küçük bir belge saptanır ve sekmeyi dondurmak yerine geri çevrilir.
Bildirim ve kodlama korunur
XML bildirimi, kodlama özniteliği ve varsa bayt sırası imi gidiş dönüşten değişmeden çıkar.
Hiçbir şey tarayıcıdan ayrılmaz
Faturalar, SOAP yükleri ve kimlik doğrulama belgeleri bu sayfada işlenir, hiçbir yere yüklenmez.
XML’i girintilemek süs değildir — bir öğenin içindeki boşluk veridir
XML biçimlendirmesini JSON biçimlendirmesinden ayıran gerçek budur ve bu konudaki hemen her sürpriz bundan doğar. JSON’da belirteçler arasındaki boşluk veri modelinin tümüyle dışındadır: bir belgeyi yeniden biçimlendirin, ayrıştırıcınızın okuduğu her değer aynı kalır. XML’de böyle bir güvence yoktur. Bir öğenin içeriği bir metin düğümüdür ve bir şey açıkça aksini söylemedikçe boşluk o düğümün parçasıdır. `<ad>Ali</ad>` yazısını metni kendi satırında duran girintili bir biçime çevirin; öğe artık `Ali` içermez — bir satır sonu, iki boşluk, `Ali`, bir satır sonu daha ve biraz daha boşluk içerir. Uygulama kodunun çoğu bunu çıkışta kırparak gizler; tam da bu yüzden önemli hâle gelene kadar fark edilmez: bir veritabanıyla karşılaştırılan değer, bir sağlama toplamı, bir imza. XML şartnamesi boşluğun anlamlı olduğunu bildirmek için `xml:space="preserve"` sunar ve bir şema bir öğeyi boşluğa duyarsız işaretleyebilir; ama yalnızca belgeye bakan bir biçimlendirici bunların hiçbirini bilmez. Varsaymak yerine uyarması gerekir ve bu araç öyle yapar.
İmzalı bir belgeyi yeniden biçimlendirmek imzayı geçersiz kılar, hem de tasarım gereği
Yukarıdaki sonuç, bir belge imzalandığı anda somutlaşır. XML dijital imzaları dosyayı imzalamaz — belge ağacının, Canonical XML şartnamesinde tanımlı bir normalleştirme adımının ürettiği kanonik biçimini imzalar. O adım öznitelik sırasını, ad alanı bildirimlerini ve belirli boşlukları sabitler; böylece aynı şeyi ifade eden iki belge aynı özeti verir. Yapmadığı şey, bir öğenin içeriğine eklediğiniz boşluğu bağışlamaktır; çünkü model açısından bu biçimlendirme değil, veride değişikliktir. Dolayısıyla güzelleştirilmiş bir imzalı fatura, bir SAML belgesi ya da bir SOAP iletisi artık geçerli değildir ve arıza tamdır: doğrulama küçük bir sapma bildirmez, imzanın tutmadığını bildirir. Buradan alınacak kural şudur: imzalı bir belge, metin kılığına girmiş ikili bir nesnedir. İsterseniz biçimlendirilmiş hâlde okuyun, ama aldığınız baytları gönderin.
Ad alanı öneki ad değildir — adres öyledir
Ad alanları, XML tasarımının JSON’dan gelenleri en çok şaşırttığı ve dikkatsiz bir biçimlendiricinin gerçek zarar verdiği yerdir. `soap:` ya da `ns2:` gibi bir önek, kendi başına anlamı olmayan yerel bir kısaltmadır; bir öğeyi tanımlayan şey, o önekin bağlandığı adrestir. `a:Body` ve `env:Body` kullanan iki belge, her iki önek de aynı ad alanı adresine bağlıysa özdeştir; ikisi de `ns:Item` kullanan iki belge ise adresler farklıysa birbiriyle ilgisizdir. İşte bu yüzden önekleri daha derli toplu bir şeye yardımsever biçimde yeniden adlandıran bir araç, teknik olarak eşdeğer ve pratikte bozuk bir belge üretir: kod tabanınızdaki her XPath ifadesi, her XSLT şablonu ve elle yazılmış her seçici öneke başvurur, adrese değil; çünkü insanların yazdığı şey odur. Varsayılan ad alanları ikinci bir tuzak ekler: `xmlns="…"` içindeki öneksiz bir öğe o ad alanındayken, öneksiz bir öznitelik hiçbir ad alanında değildir. Bu araç hiçbir öneki değiştirmez ve hiçbir bildirimi yerinden oynatmaz.
Varlık genişlemesi, bir XML ayrıştırıcısına ne yapmayacağının söylenmesi gerekmesinin nedenidir
XML, bir belgenin kendi varlıklarını tanımlamasına ve bir varlığın bir başkasına başvurmasına izin verir. Tek başına bu özellik, biçimin tarihindeki en bilinen hizmet engelleme saldırısını üretir: bir varlığı başka bir varlığın on kopyası olarak tanımlayın, bunu on kat iç içe geçirin ve birkaç yüz baytlık bir belge bir milyar karaktere açılsın. Adı da vardır — milyar kahkaha saldırısı — ve varlıkları bütçesiz genişleten her ayrıştırıcıda işler. Daha keskin sorun dış varlıklardır; bunlar bir belgenin, bir varlığın değerinin başka bir yerden okunması gerektiğini bildirmesine izin verir: `SYSTEM "file:///etc/passwd"` yerel bir dosyayı okur ve bir `http://` adresi, ayrıştırıcıyı bir saldırgan adına özel bir ağın içine seve seve uzanan bir istek istemcisine dönüştürür. Buna XXE denir ve yıllardır üretim sunucularından kimlik bilgisi okumak için kullanılır. Savunma zekice ayrıştırma değil, reddetmedir: hiçbir dış varlığı çözmeyen bir belge işleyicisine hiçbir şey çektirilemez. Bu araç hiçbirini çözmez ve genişlemeye tavan koyar; düşmanca bir belge burada bu yüzden yalnızca geri çevrilir.
XML büyük küçük harfe duyarlıdır ve Türkçe bunu tehlikeli kılar
Bu, çoğu dilde görünmeyen ama Türkçe yazan ekipleri düzenli olarak yakalayan bir hatadır. XML büyük küçük harfe duyarlıdır: `<Isim>` ile `<isim>` iki ayrı öğedir ve `<Isim>` etiketini `</isim>` ile kapatmak iyi biçimlilik hatasıdır. Şimdi buna Türkçe’nin nokta kuralını ekleyin. Türkçe’de `I` harfinin küçüğü `i` değil `ı`, `i` harfinin büyüğü `I` değil `İ`’dir; bu yüzden Java’da `toLowerCase()`, .NET’te `ToLower()` ya da bir kabuk betiği, makinenin yerel ayarı Türkçe olduğunda `Isim` sözcüğünü `isim` değil `ısım` yapar. Etiket adlarını normalleştiren, öznitelikleri büyük küçük harfe duyarsız eşleştiren ya da öğe adlarından sınıf adı üreten her kod bu noktada bozulur — ve yalnızca Türkiye yerel ayarına sahip makinelerde bozulur, dolayısıyla bir geliştiricinin dizüstünde ortaya çıkar, sunucuda çıkmaz. Doğru çözüm, ad karşılaştırmalarında yerelden bağımsız bir dönüşüm kullanmaktır. Bu araç hiçbir adın büyük küçük hâlini değiştirmez, yalnızca olduğu gibi tutar.
İnsanların biçimlendirmesi gereken XML’in içinde gerçekte ne var
Belgeleri adıyla anmakta yarar var, çünkü liste bu ihtiyatı açıklıyor. XML, yazılım dünyasının düzenlenmiş kısımlarının yaşadığı yerdir: bir vergi idaresine sunulan elektronik faturalar, bankalar arasında dolaşan SOAP yükleri, tam anlamıyla birinin yoldaki kimliği olan SAML belgeleri, sağlık kayıtları, mahkeme dosyaları, bordro dışa aktarımları, henüz açıklanmamış fiyatlar taşıyan ürün beslemeleri. Biri bir biçimlendiriciye uzandığında, bunun sebebi neredeyse her zaman o belgelerden birinin hata vermesi ve onu okuma ihtiyacıdır — yani panosundaki örnek gerçek bir örnektir, müşterinin vergi numarası ve belgenin öznesi içinde durur. Bunu barındırılan bir biçimlendiriciye yapıştırmak tam olarak onu yükler ve özellikle bir SAML belgesi, geçerli kaldığı sürece taşıyıcı bir kimlik bilgisidir. Bu sayfa belgeyi JavaScript içinde ayrıştırıp yazdırır ve bunu yaparken hiçbir istek göndermez; geliştirici araçlarınızın ağ paneli de aynısını gösterecektir.
Kaçınılması gereken yaygın hatalar
- XML biçimlendirmesinin JSON biçimlendirmesi gibi güvenli olduğunu varsaymak. Bir öğenin içindeki boşluk metin düğümünün parçasıdır, dolayısıyla girintilemek ayrıştırıcının geri okuduğu değerleri değiştirir.
- İmzalı bir belgeyi güzelleştirmek. İmzalar ağacın kanonik biçimini kapsar ve öğe içeriğine eklenen boşluk bir veri değişikliğidir — doğrulama düpedüz başarısız olur.
- Bir aracın ad alanı öneklerini yeniden adlandırmasına izin vermek. Kimlik adrestir, ama kod tabanınızdaki her XPath ve XSLT öneke başvurur; teknik olarak eşdeğer belge pratikte bozulur.
- Etiket adlarını Türkçe yerel ayarıyla küçültmek. `Isim` sözcüğü `isim` değil `ısım` olur ve yalnızca Türkiye yerel ayarlı makinelerde bozulur — sunucuda değil, geliştiricinin dizüstünde.
- Güvenilmez XML’i dış varlıklar açıkken ayrıştırmak. `SYSTEM "file:///…"` yerel dosyaları okur ve bir http adresi ayrıştırıcıya saldırgan adına çekim yaptırır — buna XXE denir.
Karşılaştırma
| Ölçüt | Bu araç | Çevrimiçi biçimlendiriciler | Bir düzenleyici eklentisi |
|---|---|---|---|
| Belge sunucuya gönderilir | Asla | Genellikle evet | Hayır |
| Girintileme veriyi değiştirince uyarır | Evet | Hayır | Nadiren |
| Dış varlıkları çözer | Asla | Bazen | Ayarlanabilir |
| Ad alanı öneklerini korur | Her zaman | Genellikle | Genellikle |
| Bildirimi ve bayt sırası imini korur | Evet | Değişir | Genellikle |
| Fiyat | Ücretsiz | Ücretsiz / ücretli katmanlar | Ücretsiz |
Özellikler
Biçimlendirme ve küçültme
İki yön de var; girinti genişliği sizin denetiminizde, bir projenin gerektirdiği yerde sekme de kullanılabilir.
İyi biçimlilik denetimi
Dengesiz etiketler, başıboş ve işaretleri ve geçersiz adlar bulundukları satır ve sütunla bildirilir.
Boşluk güvenliği uyarıları
Karışık içerik ya da anlamlı metin taşıyan öğeler, girintileme onları yeniden yazmadan önce işaretlenir.
Öznitelik sırasına dokunulmaz
Öznitelikler belge sırasında kalır, çünkü bazı tüketiciler ve bazı imzalar buna bağlıdır.
CDATA ve yorumlar korunur
Bölümler birebir tutulur; aksi hâlde kaçış gerektirecek içerik de dahil.
Büyük belgeler desteklenir
Birkaç megabaytlık bir dışa aktarım yükleme ve boyut tavanı olmadan biçimlenir.
Kurulacak bir şey yok
Derleme aracı yok, çalışma zamanı yok, bağımlılık yok — web sayfasında çalışır.
Arapça ve RTL hazır
Sekiz dilde tam arayüz, sağdan sola Arapça dahil.
Varsayılan olarak güvenli
HTTPS üzerinden sunulur; içerik takibi ve üçüncü taraf yüklemesi yoktur.
Kimler kullanıyor
Entegrasyon geliştiricileri
Tek bir kesintisiz satır hâlinde gelen bir SOAP yanıtını okumak.
Finans ve faturalama ekipleri
Vergi idaresinin geri çevirdiği bir elektronik faturayı incelemek.
Sistem yöneticileri
Bir yapılandırma dosyasını sürüm denetimine göndermeden önce derleyip toplamak.
API hatası arayan herkes
Bir belgenin ayrıştırılmasını bozan tek kaçışsız ve işaretini bulmak.
Sıkça Sorulan Sorular
Hayır. Her şey tarayıcınızda yerel çalışır — metniniz asla yüklenmez, saklanmaz veya paylaşılmaz.
Evet — tamamen ücretsiz, hesap ve sınır yok.