XML (eXtensible Markup Language), özel etiketler kullanarak yapılandırılmış verileri depolamak ve iletmek için bir metin biçimidir. Yapılandırma dosyalarında, web servislerinde ve Android geliştirmede yaygın olarak kullanılır. W3C konsorsiyumuna göre, XML şartnamesi 2008 yılından beri istikrarlı bir standart olarak kalmaktadır. XML, şemalar aracılığıyla doğrulama yeteneği ile katı bir veri yapısı sağlar.
Anahtar Noktalar
XML, belgeleri hem insan hem de makine tarafından okunabilir bir biçimde kodlamak için bir dizi kural tanımlayan bir işaretleme dilidir. HTML'nin aksine, XML'in sabit bir etiket kümesi yoktur — geliştiriciler veri yapısına karşılık gelen kendi etiketlerini oluşturur.
XML, 1996 yılında W3C konsorsiyumu tarafından SGML'nin (Standard Generalized Markup Language) basitleştirilmiş bir alt kümesi olarak geliştirilmiştir. XML'in ana amacı, içeriği veri sunumundan ayırmaktır. Görünümü tanımlayan HTML'nin aksine, XML verilerin yapısını ve anlamını tanımlar.
XML'in temel özelliği genişletilebilirliktir. Bir projede yeni veri türleri ortaya çıkarsa, geliştirici mevcut yapıyı değiştirmeden yeni etiketler ekler. Bu, XML'i uzun vadeli veri depolama ve farklı sistemler arasında değişim için uygun hale getirir.
XML sözdizimi HTML'den daha katıdır. Her açılış etiketinin karşılık gelen bir kapanış etiketi olmalı, öznitelikler tırnak içine alınmalı ve etiket adları büyük/küçük harf duyarlıdır. Belge, diğerlerini içeren tam olarak bir kök elemana sahip olmalıdır.
Bir XML belgesi, XML sürümünü ve kodlamasını belirten bir bildirimle başlayabilir. Ardından, içinde iç içe elemanlar, öznitelikler, metin içeriği ve yorumlar bulunabilen kök eleman gelir. Boş elemanlar <element /> olarak yazılır.
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<book id="bk001">
<title>XML Developer Guide</title>
<author>John Smith</author>
<price currency="USD">29.99</price>
<published>2026-03-15</published>
</book>
<book id="bk002">
<title>Advanced XML Schemas</title>
<author>Jane Doe</author>
<price currency="USD">49.99</price>
</book>
</catalog>
Düzgün biçimlendirilmiş (Well-formed) XML temel kurallara uymalıdır: her açılış etiketi için kapanış etiketi zorunludur, iç içe yerleştirme katıdır (etiket çakışması yasaktır), öznitelik değerleri her zaman tırnak içindedir. Herhangi bir kuralın ihlali belgeyi geçersiz ve ayrıştırılamaz hale getirir.
XML ad alanları, bir belgede farklı sözlüklerden öğeler kullanıldığında ad çakışması sorununu çözer. Bir ad alanı, sözlüğü benzersiz şekilde tanımlayan bir URI ile xmlns özniteliği tarafından tanımlanır.
XML Schema (XSD), bir XML belgesinin yapısını tanımlamak için kullanılan bir dildir. XSD, hangi eleman ve özniteliklerin izin verildiğini, bunların veri türlerini, zorunluluğunu ve kısıtlamalarını tanımlar. Şemalar, işleme öncesinde belgenin otomatik olarak doğrulanmasını sağlar ve bu entegrasyon çözümleri için kritiktir.
| Teknoloji | Amaç | Örnek |
|---|---|---|
| DTD | Temel yapı doğrulaması | Eski, daha az özellik |
| XSD | Katı tipleme ve doğrulama | Endüstri standardı |
| RELAX NG | XSD'ye kompakt alternatif | XSD'den daha basit ve okunabilir |
| XSLT | XML'in diğer biçimlere dönüştürülmesi | XML'den HTML, PDF, CSV'ye |
| XPath | Gezinme ve düğüm seçimi | XML ağacına sorgular |
XML, Android geliştirmede anahtar bir rol oynar. Android işletim sistemi, kullanıcı arayüzünü (düzen dosyaları), uygulama yapılandırmasını (AndroidManifest.xml), kaynakları (strings, colors, themes) ve vektör grafiklerini (VectorDrawable) tanımlamak için XML kullanır. iOS'ta XML daha az sıklıkla, esas olarak Storyboard ve yapılandırma plist dosyaları için kullanılır.
Android'de, her uygulama ekranı bir View bileşenleri hiyerarşisi (ConstraintLayout, LinearLayout, TextView, Button) ile bir XML dosyasıyla tanımlanır. Bu yaklaşım, uygulama mantığını sunumdan ayırarak bakımı ve farklı ekranlara uyarlamayı basitleştirir. Kaynak XML dosyaları, kodu değiştirmeden uygulamanın yerelleştirilmesine olanak tanır.
Tipik bir düzen dosyası, her biri konum, boyut ve stil özniteliklerine sahip iç içe elemanlarla bir kök ConstraintLayout içerir. Android, başlangıçta performansı optimize etmek için XML'i AXML ikili biçiminde derler.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/welcome"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/click"
app:layout_constraintTop_toBottomOf="@id/title"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
XML ayrıştırma mobil platformlarda iki ana yaklaşımla yapılır: DOM (Document Object Model) tüm belgeyi bir ağaç olarak belleğe yükler, SAX (Simple API for XML) belgeyi akış şeklinde okur ve olay işleyicileri çağırır. DOM küçük belgeler için uygundur, SAX ise bellek kısıtlaması olan büyük dosyalar için.
Android'de yerleşik ayrıştırıcılar bulunur: akış ayrıştırması için XmlPullParser ve DOM yaklaşımı için DocumentBuilder. iOS, bir temsilci protokolüyle Foundation XMLParser kullanır. Nesneleri XML'e serileştirmek için, PHP'de SimpleXML veya Java'da Jackson XML gibi kütüphaneler sıklıkla kullanılır.
Android, verimli XML ayrıştırma için XmlPullParser kullanılmasını önerir. Ayrıştırıcı, olay odaklı modda çalışır: sonraki öğeye geçmek için next() işlevini çağırır ve olay türünü (START_TAG, TEXT, END_TAG) döndürür. Bu, minimum bellek tüketimiyle her boyuttaki belgenin işlenmesine olanak tanır.
import org.xmlpull.v1.XmlPullParser
import org.xmlpull.v1.XmlPullParserException
import java.io.IOException
fun parseCatalog(parser: XmlPullParser): List<Book> {
val books = mutableListOf<Book>()
var eventType = parser.getEventType()
var currentBook: Book? = null
while (eventType != XmlPullParser.END_DOCUMENT) {
when (eventType) {
XmlPullParser.START_TAG -> {
when (parser.getName()) {
"book" -> currentBook = Book()
"title" -> parser.next()
"author" -> parser.next()
}
}
XmlPullParser.TEXT -> {
currentBook?.apply {
title = parser.getText() ?: ""
}
}
XmlPullParser.END_TAG -> {
if (parser.getName() == "book") {
currentBook?.let { books.add(it) }
}
}
}
eventType = parser.next()
}
return books
}
XML kullanım örnekleri, gerçek projelerdeki rolünü gösterir. Android geliştirmenin yanı sıra, XML derleme yapılandırması, veri tanımı ve belge iş akışı için kullanılır. XML sözdizimini anlamak, Maven, SOAP servisleri ve birçok kurumsal araçla çalışmak için gereklidir.
pom.xml dosyası bir Maven projesini tanımlar: bağımlılıklar, eklentiler, sürümler ve derleme profilleri. Her bağımlılık groupId, artifactId ve version etiketleriyle belirtilir. Maven, belirtilen kütüphaneleri depolardan otomatik olarak indirir.
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0.0</version>
<dependencies>
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>retrofit</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>
</project>
XML ve JSON arasındaki seçim, projenin belirli gereksinimlerine bağlıdır. JSON, kompaktlık ve hızın önemli olduğu REST API'leri, mobil uygulamalar ve yapılandırmalar için uygundur. XML, katı doğrulama, ad alanları ve veri dönüşümünün gerektiği Kurumsal sistemlerde, belge iş akışında ve Android geliştirmede vazgeçilmezdir.
XML, uzun vadeli belge depolama senaryolarında kazanır. XSD şemaları sayesinde, XML belgeleri otomatik olarak doğrulanabilir, bu tıbbi, finansal ve hukuki sistemler için kritiktir. XSLT dönüşümleri, tek bir XML kaynağından HTML, PDF ve diğer biçimlerin oluşturulmasına olanak tanır ve belge iş akışını basitleştirir.
JSON ise web API'leri ve mobil uygulamalar için standart haline gelmiştir. JavaScript ile kolay entegrasyon, daha küçük boyut ve yüksek ayrıştırma hızı, JSON'u REST API'leri, WebSocket mesajları ve yapılandırma dosyaları için tercih edilen seçenek haline getirir. Çoğu yeni proje için, JSON ile başlamanız ve yalnızca belirli gereksinimler ortaya çıktığında XML'e geçmeniz önerilir.
Sıkça sorulan sorular
XML verilerin yapısını ve içeriğini tanımlar, HTML görünümü ve sunumu tanımlar. XML herhangi bir etiket oluşturmaya izin verir, HTML sabit bir kümeye sahiptir. XML sözdiziminde daha katıdır: tüm etiketler kapatılmalıdır, HTML kapatılmamış etiketlere izin verir. XML veriler için, HTML görüntüleme içindir.
XSD (XML Schema Definition), bir XML belgesinin yapısını tanımlamak için kullanılan bir dildir. XSD, hangi eleman ve özniteliklerin izin verildiğini, bunların veri türlerini, zorunluluğunu ve kısıtlamalarını tanımlar. Şema, işleme öncesinde bir XML belgesinin otomatik olarak doğrulanmasına olanak tanır, hataları önler ve veri bütünlüğünü sağlar.
Android'de, XML ayrıştırma için XmlPullParser kullanın — yerleşik bir akış ayrıştırıcısı. Olay odaklı çalışır: bir döngüde START_TAG, TEXT ve END_TAG'i işler, belleği verimli bir şekilde yönetir. Küçük belgeler için, DocumentBuilderFactory aracılığıyla DOM ayrıştırıcısı uygundur ve tüm belgeyi bir düğüm ağacı olarak belleğe yükler.
DTD (Document Type Definition), sınırlı yeteneklere sahip eski bir doğrulama mekanizmasıdır: veri türlerini (her şey dizelerdir) ve ad alanlarını desteklemez. XSD, veri türleri (sayılar, tarihler, numaralandırmalar), ad alanları ve genişletilebilirlik desteği ile modern bir alternatiftir. XSD'nin kendisi bir XML belgesidir, DTD ise kendi sözdizimini kullanır.
Ad alanları, bir XML belgesi farklı kaynaklardan öğeleri birleştirdiğinde ad çakışmalarını önler. Örneğin, bir Android düzeninde View etiketi hem android.view'den hem de bir kütüphaneden gelebilir. Bir URI ile xmlns özniteliği, her eleman ve özniteliğin kaynağını benzersiz şekilde tanımlar.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun