XML (eXtensible Markup Language, Genişletilebilir İşaretleme Dili), veriyi hem insanların hem de makinelerin okuyabileceği şekilde, etiketlerle yapılandırarak saklamaya ve taşımaya yarayan bir metin biçimidir. HTML'den farkı, etiketlerin önceden tanımlı olmamasıdır: <haber>, <baslik>, <yazar> gibi etiketleri ihtiyacınıza göre kendiniz belirlersiniz. Bu esneklik sayesinde XML; RSS beslemelerinden site haritalarına, e-faturadan ofis belgelerine kadar çok geniş bir alanda kullanılır.
Yazar Haber Ajansı'nın (YHA) XML beslemesini kullanmak istiyorsanız alan listesi ve kurulum için YHA RSS, Atom ve XML beslemeleri sayfasına bakabilirsiniz.
XML'in Kısa Tarihçesi
XML, 1990'larda belge işaretleme için kullanılan, güçlü ama karmaşık SGML standardının sadeleştirilmiş bir alt kümesi olarak geliştirildi. Amaç, SGML'in esnekliğini korurken web üzerinde kolayca kullanılabilen bir biçim ortaya koymaktı. XML 1.0, 10 Şubat 1998'de W3C (World Wide Web Consortium) tavsiyesi olarak yayımlandı; bugün geçerli olan 2008 tarihli beşinci baskısının metnine W3C XML 1.0 spesifikasyonundan ulaşabilirsiniz. O tarihten bu yana XML, sistemler arası veri alışverişinin temel taşlarından biri oldu.
XML Ne İşe Yarar?
XML'in temel işlevi, veriyi yapısıyla birlikte taşımaktır. Düz bir metin dosyasında "Merkez Bankası faiz kararını açıkladı, Ekonomi, 24 Ekim" yazdığınızda hangi parçanın başlık, hangisinin kategori olduğunu yazılımın tahmin etmesi gerekir. XML'de ise her veri parçası, ne olduğunu söyleyen bir etiketin içindedir. Bu sayede:
- Sistemler arası aktarım kolaylaşır: Farklı programlama dilleriyle yazılmış iki sistem aynı XML'i aynı şekilde anlar.
- Veri kendini tarif eder: Dosyayı açan bir insan, belgeye bakarak içeriği büyük ölçüde anlayabilir.
- Doğrulama yapılabilir: Bir şema ile belgenin beklenen yapıya uyup uymadığı otomatik olarak kontrol edilir.
- Dönüştürme yapılabilir: XSLT gibi araçlarla aynı XML verisi HTML sayfaya, PDF'e veya başka bir XML biçimine çevrilebilir.
XML Belgesinin Yapısı
Bir haberin XML ile nasıl temsil edilebileceğine bakalım. Aşağıdaki belge kavramı göstermek için hazırlanmış bir örnektir; etiket adları herhangi bir standarda ait değildir:
<?xml version="1.0" encoding="UTF-8"?>
<haberler>
<haber id="h-102938" dil="tr">
<baslik>Merkez Bankası faiz kararını açıkladı</baslik>
<ozet>Para Politikası Kurulu toplantısının ardından karar duyuruldu.</ozet>
<kategori>ekonomi</kategori>
<yayinTarihi>2026-10-24T14:05:00+03:00</yayinTarihi>
<yazar>Ekonomi Masası</yazar>
<gorsel url="https://cdn.ornek-ajans.com/faiz.jpg" genislik="1600" yukseklik="900"/>
<etiketler>
<etiket>faiz</etiket>
<etiket>para politikası</etiket>
</etiketler>
</haber>
</haberler>
Bu belgedeki temel yapı taşları şunlardır:
| Yapı taşı | Örnek | Açıklama |
|---|---|---|
| XML bildirimi | <?xml version="1.0" encoding="UTF-8"?> |
Sürümü ve karakter kodlamasını belirtir |
| Kök öğe | <haberler> |
Belgedeki tüm öğeleri kapsayan tek öğe |
| Öğe (element) | <baslik>...</baslik> |
Açılış ve kapanış etiketi arasındaki veri |
| Öznitelik (attribute) | id="h-102938" |
Öğeye ait ek bilgi |
| Boş öğe | <gorsel ... /> |
İçeriği olmayan, kendini kapatan öğe |
| İç içe öğeler | <etiketler><etiket> |
Hiyerarşik, ağaç biçiminde yapı |
XML belgesini bir ağaç gibi düşünebilirsiniz: kök öğe gövdedir, alt öğeler dallardır, metin değerleri de yapraklardır.
Öğe mi, Öznitelik mi?
Bir bilgiyi öğe olarak mı (<dil>tr</dil>) yoksa öznitelik olarak mı (dil="tr") yazacağınız tasarım tercihidir. Genel kabul gören yaklaşım şudur: verinin kendisi öğe olarak, veri hakkındaki kısa bilgi (kimlik, dil, birim) öznitelik olarak yazılır. Öznitelikler tekrar edemez ve iç içe yapı içeremez; bu yüzden birden fazla etiket gibi listeler her zaman öğe olarak yazılmalıdır.
XML Yazım Kuralları: "İyi Biçimlendirilmiş" Belge
XML, HTML'e göre çok daha katıdır. Tarayıcılar kapanmamış bir HTML etiketini çoğu zaman görmezden gelir; XML ayrıştırıcıları ise kuralı ihlal eden belgeyi hiç işlemez. Bir belgenin "iyi biçimlendirilmiş" (well-formed) sayılması için:
- Belgede tek bir kök öğe bulunmalıdır.
- Her açılan etiket kapatılmalıdır (
<baslik>...</baslik>veya<gorsel/>). - Etiketler doğru sırayla iç içe geçmelidir:
<a><b></b></a>doğru,<a><b></a></b>yanlıştır. - Etiket adları büyük-küçük harfe duyarlıdır:
<Baslik>ile<baslik>farklı etiketlerdir. - Öznitelik değerleri tırnak içinde yazılmalıdır.
- Özel karakterler kaçış dizisiyle yazılmalıdır.
Özel karakterler tablosu:
| Karakter | Yazılışı | Not |
|---|---|---|
& |
& |
En sık unutulan karakter; "Ar-Ge & İnovasyon" gibi başlıklarda belgeyi bozar |
< |
< |
Metin içinde etiket başlangıcıyla karışır |
> |
> |
Güvenlik için önerilir |
" |
" |
Çift tırnaklı öznitelik içinde |
' |
' |
Tek tırnaklı öznitelik içinde |
Çok sayıda özel karakter içeren metinler, örneğin HTML biçimli haber gövdesi, <![CDATA[ ... ]]> bloğu içine alınabilir. CDATA içindeki metin ayrıştırıcı tarafından işaretleme olarak yorumlanmaz.
Geçerli Belge: Şema ile Doğrulama
İyi biçimlendirilmiş olmak, belgenin sözdizimi açısından doğru olduğunu gösterir. Belgenin beklenen yapıya uyup uymadığını ise şemalar denetler. Örneğin "her haberin bir başlığı olmalı, yayın tarihi geçerli bir tarih olmalı" gibi kurallar şemayla tanımlanır. Yaygın şema dilleri:
- DTD (Document Type Definition): En eski yöntem; basit ama veri türü desteği sınırlı.
- XSD (XML Schema Definition): W3C standardı; tarih, sayı gibi veri türlerini ve ayrıntılı kuralları tanımlayabilir.
- RELAX NG: Daha sade sözdizimine sahip alternatif bir şema dili.
İki sistem arasında düzenli veri alışverişi yapılıyorsa şema, tarafların "sözleşmesi" gibi çalışır: gelen belge şemaya uymuyorsa sorun daha işleme alınmadan fark edilir.
Ad Alanları (Namespace)
Farklı kaynaklardan gelen XML sözlükleri bir belgede birleştiğinde etiket adları çakışabilir. Örneğin hem haber verisinde hem de medya verisinde <title> etiketi olabilir. Ad alanları, etiketlerin başına bir önek ekleyerek bu çakışmayı önler:
<item xmlns:media="http://search.yahoo.com/mrss/">
<title>Merkez Bankası faiz kararını açıkladı</title>
<media:title>Toplantı salonundan bir görüntü</media:title>
</item>
RSS beslemelerindeki media:content, dc:creator veya content:encoded gibi önekli etiketlerin hepsi ad alanı kullanımına örnektir.
XPath ve XSLT: XML'de Gezinmek ve Dönüştürmek
XML'in gücü yalnızca veriyi saklamakta değil, onu işlemeyi kolaylaştıran araç ekosistemindedir. Bu araçların en bilinen ikisi XPath ve XSLT'dir.
XPath, XML ağacında belirli öğeleri bulmaya yarayan bir sorgu dilidir. Örneğin /haberler/haber[kategori='ekonomi']/baslik ifadesi, yukarıdaki belgede kategorisi ekonomi olan haberlerin başlıklarını seçer. Bir dosya klasörünü yol yazarak gezmek gibi düşünebilirsiniz. Haber beslemesinden yalnızca belirli alanları çekmek isteyen bir yazılım, bunu birkaç satırlık XPath ifadesiyle yapabilir.
XSLT ise XML belgesini başka bir biçime dönüştürmek için kullanılan bir dildir. Aynı haber XML'i, bir XSLT şablonuyla web sayfasına uygun HTML'e, başka bir şablonla da farklı bir sistemin beklediği XML yapısına çevrilebilir. Böylece kaynak veri tek bir yerde tutulur, farklı çıktılar şablonlarla üretilir. Bazı tarayıcıların RSS beslemelerini veya XML site haritalarını okunaklı bir sayfa olarak göstermesinin arkasında da çoğu zaman bir XSLT şablonu vardır.
XML Nerelerde Kullanılır?
XML'i doğrudan görmeseniz bile her gün kullandığınız pek çok sistemin içinde yer alır:
| Kullanım alanı | XML'in rolü |
|---|---|
| RSS ve Atom beslemeleri | İçerik listelerinin dağıtımı |
| XML site haritaları | Arama motorlarına sayfa listesinin bildirilmesi |
| Haber ajansı veri değişimi | Haberin metin, medya ve meta verisiyle birlikte aktarılması |
| SVG görseller | Vektör çizimlerin tanımı |
| Ofis belgeleri | DOCX, XLSX gibi dosyalar sıkıştırılmış XML paketleridir |
| E-fatura | Türkiye'de e-fatura UBL-TR adlı XML biçimine dayanır |
| SOAP web servisleri | Kurumsal sistemler arası mesajlaşma |
| Yapılandırma dosyaları | Uygulama ve sunucu ayarları |
Haber dünyasında XML özel bir yere sahiptir. Uluslararası Basın Telekomünikasyon Konseyi (IPTC), haber içeriğinin ajanslar ve yayıncılar arasında taşınması için XML tabanlı NewsML standartlarını geliştirmiştir. Bu standartlar bir haberin metnini, görsellerini, kategori kodlarını, telif ve kullanım haklarını tek pakette taşıyabilir. Ayrıntıları IPTC'nin resmî sitesinde bulabilirsiniz.
RSS'in XML üzerine nasıl kurulduğunu RSS nedir yazımızda ayrıca anlattık.
XML ile JSON Arasındaki Fark
Bugün web API'lerinde JSON daha yaygındır; ancak XML pek çok alanda varlığını sürdürür. İkisini karşılaştıralım:
| Özellik | XML | JSON |
|---|---|---|
| Sözdizimi | Açılış/kapanış etiketleri | Süslü parantez, anahtar-değer çiftleri |
| Boyut | Etiket tekrarı nedeniyle daha uzun | Daha kısa |
| Veri türleri | Her şey metin; tür bilgisi şemayla | Metin, sayı, mantıksal değer, dizi, nesne, null |
| Öznitelik | Var | Yok |
| Yorum satırı | Desteklenir | Desteklenmez |
| Şema ile doğrulama | XSD, DTD, RELAX NG | JSON Schema |
| Karma içerik (metin + işaretleme) | Güçlü | Zayıf |
| Tipik kullanım | Belgeler, beslemeler, kurumsal entegrasyon | Web ve mobil API'ler |
Aynı haberin JSON karşılığını ve JSON'un kurallarını JSON nedir yazımızda görebilirsiniz. Belge benzeri içerik ve sıkı doğrulama gereken yerlerde XML; hafif, hızlı web iletişiminde JSON öne çıkar. İki biçim de sistemler arasında veri taşımanın aracıdır; hangisinin kullanılacağına hizmeti sunan taraf ve ihtiyaçlar karar verir. Hizmetlerin bu verileri nasıl sunduğu API nedir yazısında.
XML Dosyası Nasıl Açılır ve Okunur?
XML düz metin olduğu için herhangi bir metin düzenleyiciyle açılabilir. Daha rahat okumak için şu seçenekler kullanılabilir:
- Tarayıcı: Chrome, Firefox gibi tarayıcılar XML dosyasını ağaç yapısında gösterir.
- Kod düzenleyiciler: Visual Studio Code ve benzerleri renklendirme, katlama ve biçimlendirme sunar.
- Programlama dilleri: PHP'de SimpleXML, Python'da
xml.etree.ElementTree, JavaScript'te DOMParser gibi yerleşik araçlarla XML okunup işlenebilir.
Dışarıdan gelen XML işlenirken güvenlik ayrı bir konudur. Bazı ayrıştırıcılar varsayılan ayarlarda belge içinden harici kaynak çağrılmasına izin verir; bu durum XXE (XML External Entity) adı verilen saldırılara yol açabilir. Kullandığınız kütüphanenin harici varlıkları kapatma seçeneğini etkinleştirin.
Yazar Haber Ajansı'nda XML Nasıl Kullanılır?
Yazar Haber Ajansı'nda XML iki yerde karşınıza çıkar. Birincisi, haber yazılımlarının ve okuyucuların doğrudan okuyabildiği RSS 2.0 ya da Atom beslemesidir; besleme adresi, öğe alanları ve okuma kuralları YHA RSS, Atom ve XML beslemeleri sayfasında yer alıyor.
İkincisi dosya kanallarıdır: FTP, FTPS ya da SFTP ile teslimde her haber ayrı bir XML dosyası olarak gelir. Varsayılan biçim, IPTC'nin haber değişim standardı NewsML-G2'dir (2.34 sürümü şemasına uygun); eski haber yazılımları için NITF ya da ajansın kendi XML biçimi de seçilebilir. Haberin kategorisi, ili, önceliği, embargo ve kullanım bilgisi bu dosyalarda ayrı öğeler olarak taşınır; karakter kodlaması UTF-8, ISO-8859-9 ya da Windows-1254 olabilir. Profilin ayrıntıları NewsML-G2 profili sayfasında anlatılıyor.
Tüm seçenekleri Yazar Haber Ajansı geliştirici belgeleri sayfasında karşılaştırabilirsiniz.
Sıkça Sorulan Sorular
XML bir programlama dili mi?
Hayır. XML bir işaretleme dilidir; komut çalıştırmaz, hesap yapmaz. Yalnızca veriyi yapılandırılmış biçimde tutar.
XML ile HTML arasındaki fark nedir?
HTML, verinin nasıl görüneceğini tanımlar ve etiketleri önceden belirlenmiştir. XML ise verinin ne olduğunu tanımlar ve etiketleri siz belirlersiniz. XML'in yazım kuralları da HTML'den daha katıdır.
XML dosyası neden açılmıyor veya hata veriyor?
En yaygın sebepler; kapanmamış etiket, kaçış uygulanmamış & karakteri, birden fazla kök öğe ve dosyanın bildirilen kodlamadan farklı bir kodlamayla kaydedilmesidir.
XML hâlâ kullanılıyor mu?
Evet. Web API'lerinde JSON daha yaygın olsa da RSS, site haritaları, ofis belgeleri, e-fatura ve kurumsal entegrasyonlar XML ile çalışmaya devam ediyor.
