Geleneksel olarak veri tablolarda tutulur. Bir okuldaki öğrenciler
123 Barış Manço
234 Cem Karaca
542 Edip Akbayram
423 Ersen Tablo tarzı veriler düz bir dosya'da (flat file'da) saklanabilir. Her kayıt bir satıra konur ve bir kayıtta her alan arasına boşluk, sekme (tab), noktalı virgül (;), virgül(,) gibi ifadeler konur. Olmayan değerler boş geçilir. O zaman bir programın bunları anlaması kolay olur. Düz tabloların gelişmesiye veritabanları doğmuştur. Bir veri tabanında tablolarda hangi alanların olacağı ve bu alanlarda bulunabilecek verinin (metin,tamsayı veya kesirli sayı gibi) tipleri belirenir. Bunlara erişmek için SQL diye bir dil bulunmaktadır. 542 numaralı öğrencinin adını öğrenmek için
select Name form Student şeklinde bir 'sorgu' (query) yazılır.
Zamanla, tablo yapısının çok kısıtlı olduğu ortaya çıkmıştır. Birbirine eşdeğer maddelerden oluşmayan veriler için tablo yapısı yetmez. Basit bir liste bile tablolarla kolay olarak gösterilemez. Bir şeyin altında başka birşey, onun altında da başka bir şey varsa tablolar gittikçe karmaşıklaşmaya, düzenli veri saklamak yerine giderek düzensizleşmeye başlar. Bir sınavın sorularını saklamayı düşünelim. Diyelim ki her sınavda bölümler, bölümlerde sorular, sorularda da şıklar olsun. Bunun için nasıl bir tablo yapmamız gerekir? Bir tabloda hem soru hem de şıklar saklanamaz. Bu yüzden birden çok sayıda tablo yapmak zorunda kalırız ver aralarında 'ilişki' (relation) kurmak gerekli hale gelir. Tablolar Sınav, Bölüm, Soru ve Şık şeklinde dört adettir. Üstelik aynı sınavın sorusu bir tabloda şıkkı başka tablodayken, bir sınavın sorusu ile başka sınavın sorusu aynı tabloda yer alır. Bir sınavdaki soruları öğrenmek için dört tablodan veri toplanması gerekir. Oysa XML ne kadar karmaşık yapıda olursa olsun veriyi bir arada tutar ve kolayca erişim sağlar.