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 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:
<!-- 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.
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
.svgdosyası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,.xlsxveya.pptxdosyası, 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.xmldosyası 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:
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:
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:
&→&,<→<,>→>,"→",'→'. 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.