XML Biçimlendirici
Denetim raporu
Belgeniz ve şemanız tarayıcınızdan çıkmaz.
Geçerli yazısı gördüm, neden karşı sistem dosyayı reddetti?
Çünkü XML'de iki ayrı kavram var: iyi biçimli olmak sözdiziminin doğru olması demektir, geçerli olmak ise bir şemaya uymak demektir. Bu ikisi aynı şey değildir ve bu sayfada ayrı ayrı yazıyor: sözdizimi durumu ve şema durumu. Şema vermediyseniz ikinci satır açıkça şema denetimi yapılmadı diyor.
XSD şeması ile gerçekten denetliyor musunuz?
Evet, ve tarayıcınızın içinde. Şema seç düğmesiyle XSD dosyanızı verdiğinizde belge şemaya göre denetleniyor: ögelerin sırası, zorunlu öznitelikler, veri tipleri, izin verilmeyen fazla ögeler. Bulunan her sorun Türkçeye çevrilip satır numarasıyla listeleniyor. Şema dosyanız da belgeniz de sunucuya gitmiyor. Doğrulayıcı yaklaşık 800 KB ve yalnızca şema verdiğinizde iniyor, şemasız kullanımda hiç yüklenmiyor.
e-Fatura veya e-Arşiv dosyamı denetleyebilir miyim?
Evet, elinizde ilgili XSD dosyası varsa. e-Fatura, e-Arşiv ve e-Defter dosyalarının tamamı XSD şemasına tabidir ve iyi biçimli olmak bu dosyalar için yeterli değildir. UBL-TR şema dosyalarını Gelir İdaresi Başkanlığı yayımlıyor; indirip buraya verdiğinizde belge şemaya göre denetlenir. Şema birden fazla dosyaya bölünmüşse şu an yalnızca tek dosya verilebiliyor, bu durumda içe aktarma satırları çözülemeyebilir.
Küçültme belgemi bozar mı?
Hayır. Küçültme karışık içerikli ögelerin içine dokunmuyor. Karışık içerik, bir ögenin içinde hem metin hem başka öge bulunması demektir, örneğin bir paragrafın içindeki kalın yazı. Orada kelimeler arasındaki boşluk anlamlıdır ve silinirse kelimeler birleşir. Bu araç karışık içerikli ögeleri tanıyıp içlerine dokunmuyor, kaç tane bulduğunu da yazıyor.
Yorumlarım, CDATA bölümlerim ve ad alanlarım korunuyor mu?
Evet, hepsi. Her işlemden sonra çıktı yeniden okunup girdiyle düğüm düğüm karşılaştırılıyor: öge adları, öznitelikler, metin içeriği, yorumlar, CDATA bölümleri ve işlem talimatları. Bir tanesi bile değişmişse üstte kırmızı uyarı çıkıyor. XML bildirimi ve DOCTYPE satırı da olduğu gibi kalıyor; kodlama bildirimi düşerse Türkçe karakterler başka bir sistemde bozuk okunabilirdi.
Boş etiketler neden kendiliğinden kapanan biçime dönüyor?
XML açısından boş bir etiketi tek parça yazmakla açıp hemen kapatmak aynı şeydir, çıktıda tek parça biçim kullanılıyor. Yine de bazı eski SOAP yığınları ve XML veritabanları ikisine farklı davranır, o yüzden kaç ögenin dönüştüğünü üstte yazıyoruz.
XPath sorgum neden boş dönüyor?
Belgeniz varsayılan ad alanı kullanıyorsa, yani kök ögede xmlns yazıyorsa, çıplak öge adıyla arama yapan XPath sorguları hiçbir şey döndürmez ve hata da vermez. Tarayıcılar XPath 1.0 uygular ve orada varsayılan ad alanındaki ögeler önek olmadan seçilemez. Bu araç belgede varsayılan ad alanı bulduğunda uyarı veriyor, böylece sorgunuzun neden boş döndüğünü aramakla vakit kaybetmiyorsunuz.
DOCTYPE uyarısı ne anlama geliyor?
Belgenizde varlık tanımı veya dışarıdan bir adres çağıran DOCTYPE satırı var demektir. Bazı XML ayrıştırıcıları bu tanımları çözerken sunucudaki dosyaları okur veya ağ isteği yapar; bu, XXE adıyla bilinen bir güvenlik sorunudur. Bu araç hiçbir varlığı çözmez ve hiçbir adrese istek atmaz, sadece varlığını bildirir. Kaynağı belirsiz bir XML dosyasını kendi uygulamanıza vermeden önce görmeniz için.
JSON'a çevirince ne kaybediyorum?
Önemli bir şey: XML kardinalite bildirmez, JSON nesne ile diziyi ayırır. Tek bir alt öge varsa nesne, iki tane varsa dizi üretilir; yani aynı şemadan gelen iki belge farklı JSON yapısı verebilir ve bu çıktıyı okuyan kodun iki durumu da ele alması gerekir. Araç hangi ögelerin tek örnekle geldiğini ve bu yüzden nesne olarak yazıldığını listeliyor. Ayrıca yorumlar aktarılmaz, ad alanı bildirimleri sıradan özniteliğe dönüşür.
Verilerim sunucuya gidiyor mu?
Hayır. Ayrıştırma, biçimlendirme, küçültme, şema denetimi ve ağaç görünümünün tamamı tarayıcınızın içinde çalışır. Şema doğrulayıcı da tarayıcıda çalışan bir WebAssembly modülüdür, belgeniz ona bile ağ üzerinden gitmez. Sınır 4 MB, 249 KB ve on iki bin ögelik bir dosya yaklaşık otuz milisaniyede denetleniyor.