XSLT Nedir ve e-Faturada Ne İşe Yarar?

XSLT (Extensible Stylesheet Language Transformations), XML verisini başka bir formata dönüştürmeye yarayan bir şablon dilidir. e-Faturada görevi nettir: XML içindeki ham veriyi alıp, insanın okuyabileceği bir fatura görüntüsüne çevirir.

GİB düzenlemesi gereği her e-Fatura XML'i kendi XSLT şablonunu içinde taşımak zorundadır. Bu yazıda XSLT'nin ne olduğunu, e-faturada neden zorunlu tutulduğunu ve pratikte nasıl kullanıldığını anlatıyoruz.

XSLT tam olarak ne yapar?

Bir XML dosyası düşünün: içinde etiketlerle işaretlenmiş fatura numarası, tarih, satır kalemleri ve tutarlar var. Bu veri makine için mükemmeldir ama insan için okunaksızdır.

XSLT, bu veriye uygulanan bir kurallar setidir. 'Fatura numarası alanını al, sayfanın sağ üstüne kalın puntoyla yaz', 'her satır kalemi için tabloya bir satır ekle' gibi talimatlar içerir. Bu kurallar işletildiğinde ortaya HTML çıkar ve tarayıcıda kağıt faturaya benzeyen bir görüntü belirir.

Yani XSLT bir programlama dili değil, bir dönüşüm tarifidir. Girdi XML, çıktı ise görüntülenebilir bir belgedir.

e-Faturada neden zorunlu?

Elektronik faturanın kağıt faturanın yerini alabilmesi için, taraflar arasında belgenin nasıl görüneceği konusunda anlaşmazlık çıkmaması gerekir. Eğer görüntü şablonu belgeden ayrı dursaydı, satıcının gördüğü fatura ile alıcının gördüğü fatura farklı olabilirdi.

GİB bu riski, şablonu belgenin içine gömerek çözdü. Fatura nereye giderse gitsin, görüntüsünü üreten tarif de yanında gider. On yıl sonra arşivden çıkarılan bir belge bile, üretildiği günkü görüntüsüyle açılabilir.

Şablon XML'in neresinde durur?

XSLT, XML içinde base64 formatında kodlanmış bir metin bloğu olarak gömülüdür. Base64, ikili veriyi düz metne çeviren bir kodlama biçimidir; şablonun XML yapısını bozmadan taşınmasını sağlar.

Dosyayı bir metin düzenleyicide açtığınızda, bu bölüm anlamsız görünen uzun bir karakter dizisi olarak karşınıza çıkar. Çözüldüğünde ise okunabilir bir XSLT şablonu ortaya çıkar.

Görüntü ile veri çelişirse hangisi geçerli?

XML içindeki veri geçerlidir. XSLT ile üretilen görüntü yalnızca sunum katmanıdır ve hukuki olarak bağlayıcı olan, belgedeki yapılandırılmış veridir.

Bu ayrım önemlidir çünkü kötü niyetli bir şablonla, XML'de 100 TL yazan bir tutarı ekranda 10 TL gibi göstermek teknik olarak mümkündür. Denetimde bakılan şey görüntü değil, veridir. Bu yüzden bir faturayı doğrularken XML alanlarını okumak, ekran görüntüsüne güvenmekten daha sağlıklıdır.

XSLT şablonunu çıkarma ve inceleme

Şablonu incelemek isteyen geliştiriciler için klasik yol şudur: XML içindeki base64 bloğu bulunur, çözülür ve .xslt uzantılı bir dosya olarak kaydedilir. Ardından şablon bir metin düzenleyicide açılıp incelenebilir veya düzenlenebilir.

Firmalar bu şablonu genellikle kurumsal kimliklerine göre özelleştirir: logo ekler, renk düzenini değiştirir, IBAN ve iletişim bilgilerini yerleştirir. Özelleştirmede dikkat edilmesi gereken tek kural, görüntülenen değerlerin XML'deki veriyle birebir aynı kalmasıdır.

Şablonla uğraşmadan faturayı görmek

Günlük işte çoğu kullanıcının XSLT ile uğraşmaya ihtiyacı yoktur; sadece faturayı görmek ister. PDFXMLPro'nun ücretsiz e-Fatura görüntüleyicisi, XML'i yüklediğiniz anda içindeki şablonu otomatik işler ve belgeyi GİB'deki orijinal görünümüyle ekrana getirir.

  • Dosya tarayıcınızda işlenir, sunucuya gönderilmez
  • Kurulum ve kayıt gerekmez
  • Faturayı PDF olarak kaydedebilir veya yazdırabilirsiniz
  • XML içine gömülü PDF varsa ayrıca çıkarabilirsiniz

XSLT ile XSL ve XPath farkı

Üç terim sık karıştırılır. XSL, stil sayfası ailesinin genel adıdır. XSLT bu ailenin dönüşüm yapan üyesidir. XPath ise XML içinde belirli bir alana ulaşmak için kullanılan adresleme dilidir — XSLT, veriyi bulmak için XPath'i kullanır.

e-Fatura bağlamında pratikte hep XSLT'den bahsedilir; XPath ise şablonun içinde, 'fatura numarası şu etiketin altındadır' gibi adreslemeleri yaparken devreye girer.

Özet

XSLT, e-faturanın görünen yüzünü üreten şablondur ve her belgenin içinde zorunlu olarak bulunur. Veriyi değiştirmez, yalnızca sunar. Faturanın hukuki içeriği her zaman XML'deki veridir; görüntü ise o verinin okunabilir hale getirilmiş halidir.

XSLT şablonu bozuksa ne olur?

Şablonun bozuk olması belgenin geçersiz olduğu anlamına gelmez. Veri yerindeyse fatura hukuken geçerlidir; yalnızca görüntülenemez. Bu durumda belgeyi genel bir XML görüntüleyiciyle açıp alanları ham hâliyle okumak mümkündür.

Uygulamada bu, özelleştirilmiş şablonlarda karşılaşılan bir sorundur. Firma logosunu veya renk düzenini değiştirirken şablonun yapısı bozulabilir ve belge bazı görüntüleyicilerde açılmaz. Şablon özelleştirmesi sonrası birkaç belgeyi farklı araçlarla test etmek iyi bir alışkanlıktır.

Görüntüyü PDF olarak saklamak

XSLT ile üretilen görüntü, PDF olarak kaydedilip paylaşılabilir. Müşteriye fatura gönderirken veya bir belgeyi e-postayla iletirken pratik bir yoldur.

Ancak PDF, arşivde XML'in yerini tutmaz. Yasal saklama yükümlülüğü orijinal XML içindir; PDF yalnızca okuma ve paylaşım kolaylığı sağlar. Arşiv düzeninde ikisini birlikte tutmak en sağlıklı yaklaşımdır.

XSLT ve güvenlik

Şablonun belgeye gömülü olması pratik bir çözümdür ama bir riski de beraberinde getirir: görüntü, veriden bağımsız olarak hazırlanır. Kötü niyetli bir şablon, XML'deki değerlerden farklı rakamlar gösterecek şekilde yazılabilir.

Bu yüzden yüksek tutarlı belgelerde yalnızca ekran görüntüsüne bakmak yeterli değildir. Tutarları XML alanlarından doğrulamak, özellikle ilk kez çalışılan tedarikçilerde iyi bir alışkanlıktır.

Görüntüleyicimiz belgeyi orijinal şablonuyla açar; aynı zamanda XML alanlarını da inceleyebildiğiniz için iki katmanı karşılaştırmanız mümkündür.

Sıkça Sorulan Sorular

XSLT nedir?

XML verisini başka bir formata, e-faturada HTML görüntüsüne dönüştüren şablon dilidir. Veriyi değiştirmez, yalnızca nasıl görüneceğini tanımlar.

e-Fatura XML'inde XSLT zorunlu mu?

Evet. GİB düzenlemesi gereği her e-Fatura XML'i, görüntüsünü üreten XSLT şablonunu base64 kodlu olarak içinde barındırmak zorundadır.

Görüntü ile XML'deki tutar farklıysa hangisi esas alınır?

XML içindeki veri esas alınır. Görüntü yalnızca sunum katmanıdır ve hukuki bağlayıcılığı yoktur.

XSLT şablonunu özelleştirebilir miyim?

Evet, firmalar logo ve kurumsal renk gibi öğeler ekleyebilir. Ancak görüntülenen değerlerin XML'deki veriyle aynı kalması gerekir.