XML-ben nincs szükség olyan hagyományos értelemben vett adattípusokra, mint például a Pascal integer vagy real típusú változói. Nincsenek megkötések a dátumformátumra (bár készíthetünk szűrőket). Hogy miért? Mert az XML csak azt mondja meg, hogy az adat milyen jelölőelemek közé van zárva, továbbiak a feldolgozó alkalmazásra hárulnak.
Az XML fájlok szöveges formátumúak, ami némileg behatárolja a bináris adatok tárolását. Ennek ellenére nem lehetetlen akár képeket, ikonokat, stb. elhelyezni a forráskódban. Példának vehetjük a Windows XP MMC felügyeleti konzoljait. Keresünk meg a %systemroot%\system32 mappában valamelyik MSC kiterjesztésű állományt és nyissuk meg egy szövegszerkesztővel. Látható, hogy a kód nagyobbik felét ikonok alkotják, melyek ASCII karakterekkel vannak leírva:
</Binary>
<Binary Name="CONSOLE_FILE_ICON_SMALL">
SUwBAQEAAgABABAAEAD/////EQD//////////0JNNgAAAAAAAAA2AAAAKAAAAEAAAAAQAAAAAQAQ
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQhhjGGMYYxhjGGMYYxBC
....
Legtöbb esetben tökéletesen tárolhatók így az adatok, főleg, ha figyelembe vesszük, hogy lehet akár tömöríteni is, értelmezni úgyis a feldolgozó program fogja.
Programozók saját alkalmazásaikhoz kénytelenek konvertáló és értelmező modulokat készíteni, főleg, ha egyedi adatokkal dolgoznak (pl.: x értéke minimum 1 és maximum 5 lehet). Ekkor jöhet jól egy külső program, amelyik képes figyelni az XML fájlba kerülő adatokat és a meglévőket ellenőrzi, megfelelnek-e a feltételeknek.
Az alapvető tárolási mód tehát a sztring. Bizonyos esetekben szükség lehet ezen változtatni és előírni, hogy az adott érték számot takar. Ilyen helyzet, ha sorba rendezzük egy lista elemeit. Vegyük például a következő felsorolás:
<lista>
<elem>Toth Jozsef</elem>
<elem>Zalka Mate</elem>
<elem>Nyomasek Bobo</elem>
<elem>Alkalmi Jeno</elem>
</lista>
Sorbarendezésnél (sort parancs) ezek ábécé sorrendben jelennek meg:
<template match="lista">
<apply-templates><sort/></apply-templates>
</template>
A kimeneti dokumentumban az "Alkalmi Jeno" elem jelenik meg elsőként.
Ha viszont felbontjuk a neveket vezeték és keresztnévre, akkor megadhatjuk, hogy elsőként a vezetéknevek szerint történjen a rendezés, ha van köztük egyező, akkor a keresztnevek döntsenek:
<template match="lista">
<apply-templates>
<sort select="vezeteknev"/>
<sort select="keresztnev"/>
</apply-templates>
</template>
Eddig minden elem sztringként tárolódott, ha viszont a rendezést számok szerint akarjuk végeztetni, akkor a "number" elemet kell közbeszúrni:
<template match="lista">
<number/><apply-templates>
</template>
Ezzel utasítjuk a feldolgozót, hogy számokként értelmezze az adatokat. Nyilván a fenti nevek nem felelnek meg a kritériumnak.
DataType
Nézzük meg a következő kódot:
<?xml version="1.0"?>
<weather xmlns="x-schema:weatherSchema.xml">
<date>2002-08-01</date>
<degrees>28.5</degrees>
</weather>
Eltároltunk egy évszámot és egy nem egész számot. Utóbbi az adott dátumhoz tartozó átlaghőmérséklet. A "weatherSchema.xml" tartalma az alábbi:
<Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes">
<ElementType name="date" content="textOnly" dt:type="date"/>
<ElementType name="degrees" content="textOnly" dt:type="float"/>
<ElementType name="weather" content="eltOnly">
<element type="date"/>
<element type="degrees"/>
</ElementType>
</Schema>
A dt kifejezés az "urn:schemas-microsoft-com:datatypes" névtér által meghatározott adattípusokra vonatkozik. Eszerint beszélünk "date", "float" és "eltOnly" típusokról. Alapértelmezésben ezek nincsenek benne az XML nyelvben, de a megadott névtérben igen és a fenti módon használhatók. Szintén a névtér specifikációja határozza meg, hogy mit is jelent pontosan a "date", milyen dátumformátumot fogad el, stb.
A következő két példákban az adattípusok deklarálása eltérő módon történik. Elsőként jelölőelemek példányai foglalják magukba az adatelemeket (ilyet láttunk fent):
<shoes xmlns:dt="urn:schemas-microsoft-com:datatypes" id="f1121" sizes="mens"/>
<sizes id="mens">
<size dt:dt="int">8</size>
<size dt:dt="int">10</size>
<size dt:dt="int">12</size>
</sizes>
Majd úgy deklaráljuk a típusokat, mint a jelölőelemeket:
<shoes xmlns:dt="urn:schemas-microsoft-com:datatypes" id="f1121" sizes="array1"/>
<array id="array1">
<dt:int>8</dt:int>
<dt:int>10</dt:int>
<dt:int>12</dt:int>
</array>
Fenti példáinkból kiviláglik, hogy az XML nem definiál saját adattípusokat, de a forráskód megfelelő alakításával és a feldolgozó programok vagy XML névterek használatával tetszőleges típusok állíthatók elő.