Eski kurumsal API'lerle çalıştıysanız, RSS beslemeleri tükettiyseniz, bir .docx dosyası açtıysanız ya da SVG çizdiyseniz, farkında olmasanız bile XML kullandınız. XML, çoğu geliştiricinin fark ettiğinden çok daha fazla yazılım dünyasına güç verir. JSON'dan daha eski, daha ayrıntılı ve daha karmaşıktır — ama belirli bağlamlarda daha da yeteneklidir. Bu, XML'in gerçekte ne olduğuna, nasıl çalıştığına ve ne zaman kullanmaya değer olduğuna dair pratik bir kılavuzdur.

XML, eXtensible Markup Language (Genişletilebilir İşaretleme Dili) anlamına gelir. W3C, XML 1.0 spesifikasyonunu 1998'de yayımladı ve erken web döneminin baskın veri alışveriş formatı haline geldi. "Genişletilebilir" kısmı önemlidir: sabit bir etiket seti olan HTML'den farklı olarak XML, ihtiyacınız olan herhangi bir veri yapısını tanımlamak için kendi etiketlerinizi oluşturmanıza olanak tanır.

XML Nasıl Görünür

İşte bir e-ticaret API'sinden bir ürünü temsil eden eksiksiz bir XML belgesi. Bu, karşılaşacağınız tüm temel sözdizim özelliklerini kapsar:

xml
<?xml version="1.0" encoding="UTF-8"?>
<product id="SKU-8821" inStock="true">
  <name>Wireless Noise-Cancelling Headphones</name>
  <brand>SoundCore</brand>
  <price currency="USD">149.99</price>
  <categories>
    <category>Electronics</category>
    <category>Audio</category>
    <category>Accessories</category>
  </categories>
  <specs>
    <spec name="battery">30 hours</spec>
    <spec name="connectivity">Bluetooth 5.2</spec>
    <spec name="weight">250g</spec>
  </specs>
  <description>
    Premium wireless headphones with active noise cancellation,
    30-hour battery life, and foldable design.
  </description>
</product>

Temel kısımları inceleyelim. İlk satır XML bildirimidir — ayrıştırıcılara bunun UTF-8 kodlamalı XML 1.0 olduğunu söyler. <product> etiketi kök elementtir (her XML belgesinde tam olarak bir tane bulunur). Aynı etiketteki id ve inStock kısımları niteliklerdir. Açma ve kapama etiketlerinin içindeki her şey ya alt element, nitelik ya da metin içeriğidir.

Elementler ve Nitelikler — Gerçek Bir Tasarım Kararı

Yeni XML yazarlarını şaşırtan bir şey: aynı veriyi element veya nitelik olarak temsil edebilirsiniz. Aynı veri parçası için bunların ikisi de geçerli XML'dir:

xml
<!-- Nitelik olarak -->
<price currency="USD">149.99</price>

<!-- Alt element olarak -->
<price>
  <amount>149.99</amount>
  <currency>USD</currency>
</price>

Geleneksel anlayış: element hakkındaki meta veriler için nitelikleri kullanın (tanımlayıcılar, bayraklar, birimler), gerçek veri içeriği için ise alt elementleri kullanın — özellikle içerik karmaşık hale gelebilecekse, tekrarlayabilecekse ya da gelecekte kendi niteliklerine ihtiyaç duyabilecekse. Nitelikler yalnızca düz metin içerebilir; alt elementler herhangi bir XML yapısı içerebilir.

İyi Biçimlilik ve Geçerlilik — İki Farklı Standart

XML'in sıklıkla karıştırılan iki doğruluk düzeyi vardır:

  • İyi biçimli XML, temel sözdizim kurallarını izler: bir kök element, tüm etiketler düzgün kapatılmış, nitelikler tırnak içinde, yasadışı karakter yok. Herhangi bir XML ayrıştırıcısı bunu kontrol edebilir.
  • Geçerli XML, belirli bir şemaya uygundur — ya bir DTD (Document Type Definition) ya da bir XML Schema (XSD). Geçerlilik denetimi hem belgeyi hem de şemayı gerektirir. Belirli bir şemaya göre geçerli olmayan iyi biçimli XML'e sahip olabilirsiniz.
Pratikte: kurumsal XML entegrasyonlarının çoğu yalnızca iyi biçimlilikle değil, geçerlilikle ilgilenir. Bir SOAP entegrasyonu oluşturuyorsanız veya HL7 sağlık kayıtları değiş tokuş ediyorsanız, şema tam olarak hangi elementlerin gerekli olduğunu, hangi türleri tuttuklarını ve hangi değerlere izin verildiğini tanımlar. Geçerliliği hızlıca kontrol etmek için XML Doğrulayıcı'yı kullanın.

XML'in Gerçek Dünyada Göründüğü Yerler

  • SOAP web servisleri. Kurumsal yazılımın eski yarısı hâlâ SOAP üzerinde çalışır — bankacılık API'leri, ERP sistemleri, ödeme ağ geçitleri. Her SOAP mesajı Envelope, Header ve Body içeren iyi tanımlanmış bir XML belgesidir.
  • RSS ve Atom beslemeleri. Her podcast beslemesi, haber sitesi beslemesi ve YouTube kanal aboneliği bir XML belgesidir. RSS 2.0 ve Atom, 2000'lerin başından beri var olan XML tabanlı formatlardır.
  • SVG görüntüleri. Scalable Vector Graphics XML'dir. Bir .svg dosyasını metin editöründe açtığınızda XML okuyorsunuz demektir. Bu nedenle SVG'leri CSS ile biçimlendirebilir ve JavaScript ile değiştirebilirsiniz.
  • Office belgeleri. Bir .docx, .xlsx veya .pptx dosyası, XML dosyaları içeren bir ZIP arşividir. Office Open XML, Microsoft'un tüm modern Office belge formatlarını sakladığı yöntemdir.
  • Android düzenleri. Android UI düzenleri XML dosyalarında tanımlanır. Android geliştirme yaptıysanız, çok fazla XML yazdınız.
  • Maven ve pom.xml. Java'nın Maven derleme sistemi, proje bağımlılıklarını ve derleme yapılandırmasını tanımlamak için bir pom.xml dosyası kullanır — her Java geliştiricisine tanıdık gelir.

JavaScript'te XML Ayrıştırma — DOMParser

Tarayıcıda, yerleşik DOMParser API'sini kullanarak XML dizelerini ayrıştırabilirsiniz. HTML ayrıştırmayla aynı şekilde çalışır:

js
const xmlString = `<?xml version="1.0"?>
<product id="SKU-8821">
  <name>Wireless Headphones</name>
  <price currency="USD">149.99</price>
  <categories>
    <category>Electronics</category>
    <category>Audio</category>
  </categories>
</product>`;

const parser = new DOMParser();
const doc = parser.parseFromString(xmlString, 'application/xml');

// Ayrıştırma hatalarını kontrol et
const parseError = doc.querySelector('parsererror');
if (parseError) {
  console.error('XML parse error:', parseError.textContent);
} else {
  const name = doc.querySelector('name').textContent;
  const currency = doc.querySelector('price').getAttribute('currency');
  const categories = [...doc.querySelectorAll('category')].map(el => el.textContent);

  console.log(name);       // Wireless Headphones
  console.log(currency);   // USD
  console.log(categories); // ['Electronics', 'Audio']
}

Python'da XML Ayrıştırma — ElementTree

Python'ın standart kütüphanesi xml.etree.ElementTree'yi içerir — temel XML ayrıştırma için üçüncü taraf paketlere gerek yoktur:

python
import xml.etree.ElementTree as ET

xml_string = """<?xml version="1.0"?>
<product id="SKU-8821">
  <name>Wireless Headphones</name>
  <price currency="USD">149.99</price>
  <categories>
    <category>Electronics</category>
    <category>Audio</category>
  </categories>
</product>"""

root = ET.fromstring(xml_string)

name = root.find('name').text
currency = root.find('price').get('currency')
categories = [el.text for el in root.findall('categories/category')]

print(name)        # Wireless Headphones
print(currency)    # USD
print(categories)  # ['Electronics', 'Audio']

XML Yazarlarını Tuzağa Düşüren Hatalar

  • Varlık kodlaması. XML metninde ve nitelik değerlerinde beş karakterin kaçırılması gerekir: &&amp;, <&lt;, >&gt;, "&quot;, '&apos;. Bir URL'deki ve işaretini (&) kaçırmayı unutmak tüm belgeyi bozar.
  • Ad alanları (Namespaces). Ad alanlı XML şöyle görünür: <soap:Envelope xmlns:soap="...">. Ad alanı farkındalığı olmayan sorgular elementleri bulamaz. Bu en yaygın XML ayrıştırma hatalarından biridir.
  • Boşluk hassasiyeti. XML'de elementler arasındaki boşluklar teknik olarak anlamlıdır (HTML'den farklı olarak). Çoğu ayrıştırıcı bunu makul şekilde ele alır ancak belgeleri karşılaştırırken sürprizlere yol açabilir.
  • Karakter kodlaması. XML bildirimi gerçek dosya kodlamasıyla eşleşmelidir. ISO-8859-1 olarak bildirilen bir UTF-8 dosyası, ASCII olmayan karakterler için yanlış ayrıştırılacaktır.
  • Yerel dizi türü yok. XML'de dizi yoktur. Listeler elementleri tekrarlayarak temsil edilir; bu nedenle ayrıştırıcılar JavaScript dizileri yerine NodeList döndürür — her zaman Array.from() veya spread ile dönüştürün.

Bilmeye Değer XML Araçları

XML ile düzenli çalışıyor musunuz? Bu araçlar size zaman kazandırır: XML Biçimlendirici küçültülmüş XML yanıtlarını güzelce biçimlendirmek için, XML Doğrulayıcı iyi biçimliliği kontrol etmek için, XML'den JSON'a XML yanıtlarını daha kolay işleme için JSON'a dönüştürmek için, ve XML XPath bir belge üzerinde XPath sorgularını test etmek için.

Özet

XML, JSON'a kıyasla ayrıntılı ve karmaşıktır, ancak eski bir dipnot değildir — SVG'nin, Office belgelerinin, RSS beslemelerinin, SOAP servislerinin ve Android arayüzlerinin temelidir. Element/nitelik ayrımını, iyi biçimlilik ile geçerli XML arasındaki farkı ve varlık kodlaması ile ad alanları etrafındaki yaygın tuzakları anlamak, XML çalışmanızda karşınıza çıktığında size yardımcı olacak. Ve karşınıza çıkacak.