**XML** je kratica za EXtensible Markup Language - odnosno jezik za označavanje podataka. Ideja je bila stvoriti jedan jezik koji će biti jednostavno čitljiv i ljudima i računalnim programima. Princip realizacije je vrlo jednostavan: odgovarajući sadržaj treba se uokviriti odgovarajućim oznakama koje ga opisuju i imaju poznato, ili lako shvatljivo značenje. 
Format oznaka u XMLu vrlo je sličan formatu oznaka u npr. HTML jeziku. Danas je XML jezik vrlo raširen i koristi se za različite namjene: odvajanje podataka od prezentacije, razmjenu podataka, pohranu podataka, povećavanje dostupnosti podataka i izradu novih specijaliziranih jezika za označavanje.
XML je standardizirani jezik i za njegovu standardizaciju brine se World Wide Web Consortium.

Povijest
--------

Ideja jezika za označavanje podataka je da se korisni sadržaj uokviri odgovarajućim oznakama. Oznake bi trebale biti jednostavno čitljive i razumljive i 
čovjeku koji ih gleda u bilo kojem programu za uređivanje teksta, a i računalni programi koji parsiraju taj sadržaj trebali bi moći na 
jednostavan način izvaditi određene podatke.

### Generalized Markup Language (GML)

60ih godina 20. stoljeća IBM je imao velik problem s ogromnom količinom različite tehničke dokumentacije koja se za svaku posebnu namjenu morala 
prepisivati i nanovo uređivati za što su trošili ogromnu količinu ljudskih resursa. Ideja do koje su došli bila je prvi šire korišteni jezik za označavanje podataka. Korisni sadržaj uokvirio bi se određenim oznakama koje ce ga opisivati. Nakon što se to učini, za određene namjene jednostavno će se povlačiti sadržaji određenog tipa. 
GML oznake opisivale su određene dijelove dokumenta kao npr. poglavlja, važna poglavlja, manje važna poglavlja, liste, tablice itd. Korištenjem GMLa iz istog sadržaja mogla se dobiti ispisanu različita dokumentacija, tehnička, ali i korisnička. 

### Standard Generalized Markup Language (SGML)

GML se pokazao kao uspješan proizvod tako da je razvoj u tom smjeru nastavljen. 80ih godina 20. stoljeća American National Standards Institute 
(ANSI) radio je na razvoju standarda jezika za označavanje podataka. Zahtjevi kojima su autori pokušali zadovoljiti bili su da nastali proizvod 
bude dovoljno formaliziran da može jamčiti vjernost dokumenta izvorniku, dovoljno strukturiran da se može nositi s kompleksnim dokumentima i dovoljno otvoren da može podržati rukovanje velikim količinama podataka.
Nastali jezik nazvan je Standard Generalized Markup Language (SGML) i 1986. objavljen je kao međunarodna norma ISO 8879. 
Problem SGMLa, kao i mnogih sličnih proizvoda koji su razvijani na takav način, od strane organizacija za standardizaciju je što je bio golem. Autori su
pokušali pokriti svaku moguću primjenu jezika i nastali proizvod je bio opširan, složen za korištenje te zbog toga skup u upotrebi. Zbog tih osobina SGML nije bio jako raširen u praksi i korisnici SGMLa bile su uglavnom velike kompanije, državne službe i znanstvene institucije.

### HyperText Markup Language (HTML)

HTML je nastao kada je Tim Berners Lee izabrao jedan mali skup oznaka iz SGML skupa koji je korišten na CERNu i primjenio ih na 
formatiranje dokumenata. HTML je imao mali skup oznaka koje su opisivale osnovne dijelove dokumenta. Programi koji su tumačili strukturu takvih dokumenata bili su HTML preglednici.

### Extensible Markup Language (XML)

Problem HTMLa je što ima mali skup **zadanih** oznaka. Kada se želi proširiti s novim oznakama mora se mijenjati standard što ga čini 
nepraktičnim. Osim toga, iako je HTML izvorno zamišljen kao jezik za opisivanje sadržaja, zbog potreba i želja tržišta te razvoja pregledničkih 
tehnologija (naročito za vremena "pregledničkog rata" između Microsofta i Netscapea proširivan je nestandardnim oznakama koje 
su prvenstveno služile za formatiranje sadržaja u smislu njegovog prikaza u internet pregledniku. 
Za opisivanje sadržaja SGML je bolji izbor od HTMLa, ali ima veliki nedostatak što je preglomazan za korištenje i izvršavanje unutar internet 
preglednika. Zbog toga je trebalo kreirati jezik koji će s jedne strane biti dovoljno malen i jednostavan da se može izvršavati unutar internet preglednika, a s druge strane dovoljno prilagodljiv da se može proširivati korisničkim oznakama.
Posla izrade specifikacije takvog jezika prihvatio se početkom 90ih godina 20. stoljeća World Wide Web Consortium. Željeli su razviti jezik koji će objediniti jednostavnost HTMLa i izražajnu snagu SGMLa. 
Na početku su odredili su 10 ciljeva kojih su se u razvoju trudili pridržavati:

1. XML mora biti izravno primjenjiv preko interneta.
2. XML mora podržavati širok spektar primjena.
3. XML mora biti kompatibilan s SGML-om.
4. Mora biti lako pisati programe koji procesiraju (parsiraju) XML dokumente.
5. Broj opcionalnih "feature-a" u XML-u mora biti apsolutno minimalan, u idealnom slučaju jednak nuli.
6. XML dokumenti moraju biti čitljivi ljudima, te u razumnoj mjeri jednostavni
7. Standard mora biti specificiran što prije
8. Dizajn XML-a mora biti formalan i precizan
9. Kreiranje XML dokumenata mora biti jednostavno
10. Sažetost kod označavanja dokumenta XML-om je od minimalnog značaja

World Wide Web Consortium je 10. veljače 1998. objavio prvu verziju XML preporuke.

XML dokument
------------

### Primjer XML dokumenta

```
<?xml version="1.0" encoding="UTF-8"?>
<poruka>
	<za>Pero</za>
	<od>Kate</od>
	<naslov>Podsjetnik</naslov>
	<tijelo>Otiđi kupiti kruh</tijelo>
</poruka>
```

XML dokument se sastoji od 2 dijela. Prvi dio je prolog ili zaglavlje. 

```
<?xml version="1.0" encoding="UTF-8"?>
```

U njemu se navode podaci koji opisuju XML dokument kao što su verzija XML preporuke prema čijim pravilima je dokument napravljen i kodnu stranicu. Ako se ne navede ispravna kodna stranica programi koji barataju s XML dokumentom kada naiđu na nestandardni znak (npr. naše slovo č) javiti će grešku.

Drugi dio je sadržaj dokumenta u kojem se nalazi korisni sadržaj omeđen XML oznakama.

```
<poruka>
	<za>Pero</za>
	<od>Kate</od>
	<naslov>Podsjetnik</naslov>
	<tijelo>Otiđi kupiti kruh</tijelo>
</poruka>
```

Svaki XML dokument **mora** imati **jedan** korijenski ili root element koji uokviruje kompletan sadržaj. Taj element opisuje XML dokument i npr. kaže "ovaj XML dokument je jedna **poruka**".

```
<poruka>
	
	...
	
</poruka>
```

Unutar korijenskog elementa ugniježđeni su svi ostali.

### XML elementi

XML elementi opisuju određeni dio XML dokumenta. Sastoje se od korisnog sadržaja omeđenog XML oznakama. Sadržaj mora biti omeđen s lijeve i s desne strane početnom i završnom oznakom.
Primjer XML elementa

```
<naslov>Podsjetnik</naslov>
```

*Ovaj element kaže da je sadržaj unutar njega naslov naše poruke*.

Početna oznaka je 

```
<naslov>
```

*Oznaka ima svoj naziv omeđen znakovima "trokutastih zagrada" (< >).*

Završna oznaka je

```
</naslov>
```

*Završna oznaka identična je početnoj osim što s lijeve strane prije naziva ima kosu crtu.*

Sadržaj ovog elementa je 

```
Podsjetnik
```

#### Međusobni odnos XML elemenata

XML elementi međusobno mogu biti u odnosu roditelj-dijete (eng. parent-child) ili sestrinskom (eng. siblings). 

Kod odnosa roditelj-dijete jedan element hijerarhijski je nadređen drugome.

```
<poruka>
 ...
 <naslov>Podsjetnik</naslov>
 ...
</poruka>
```

*U ovom primjeru element poruka je roditelj elementu naslov (nadređen je elementu naslov).*
Kaže se da je element naslov ugniježđeni unutar elementa poruka. U XMLu elementi moraju biti pravilno ugniježđeni što znači da ne smije doći do preklapanja oznaka.

Ovo je **neispravno**

```
**<poruka>**
 ...
 *<naslov>*Podsjetnik**</poruka>**
 ...
*</naslov>*
```

Ovo je **ispravno**

```
**<poruka>**
 ...
 *<naslov>*Podsjetnik*</naslov>*
 ...
**</poruka>**
```

Kod sestrinskog odnosa elementi se nalaze na istoj razini.

```
<naslov>Podsjetnik</naslov>
<tijelo>Otiđi kupiti kruh</tijelo>
```

*U ovom primjeru element i naslov i tijelo hijerarhijski se nalaze na istoj razini.*

### XML atributi

XML atributi nude podatke koji dodatno opisuju XML elemente. Podaci koji se navode kao atributi mogu biti zanimljivi čovjeku koji gleda sadržaj XML dokumenta (npr. ime osobe koja je kreirala poruku) ili računalnom programu koji parsira XML dokument (npr. vrsta i veličina fonta kojim se treba prikazati sadržaj poruke na ekranu).
Atributi imaju svoj naziv i vrijednost koja se navodi pod navodnicima.

```
<poruka>
	<za font_face="Arial" font_size="10">Pero</za>
	<od font_face="Arial" font_size="10">Kate</od>
	<naslov font_face="Arial" font_size="14">Podsjetnik</naslov>
	<tijelo font_face="Arial" font_size="10">Otiđi kupiti kruh</tijelo>
</poruka>
```

#### Mišljenja oko korištenje atributa unutar XML dokumenta

Oko korištenja atributa unutar XML dokumenta postoje 2 struje mišljenja. Jedna struja zastupa "čistoću elemenata" i smatra da se atributi ne bi smjeli koristiti za obogaćivanje smisla sadržaja. To u praksi znači da se npr. kao atribut našeg XML dokumenta poruke ne bi smjelo navoditi ime osobe koja je autor poruke već bi se to trebalo navesti kao poseban element u dokumentu. Atributi su dozvoljeni samo za dodavanje dodatnih informacija koje služe programima za parsiranje XML dokumenata da na željeni način prikažu sadržaje. Prema njihovom mišljenu npr. dozvoljen je atribut koji opisuje vrstu i veličinu fonta jer on ništa ne dodaje u osnovnu informaciju naše poruke. On samo pomaže da se poruka na odgovarajući način prikaže na određenom mediju.
Druga struja smatra da se atributi mogu slobodno koristiti za dodavanje korisnih informacija u XML dokument jer se time smanjuje inflacija elemenata. Prema njihovom mišljenju sasvim je u redu da se u XML dokument dodaju atributi koji nose korisni sadržaj. 
Naš XML dokument iz primjera mogao bi prema njima izgledati i ovako

```
<poruka za="Pero" od="Kate">
	<naslov>Podsjetnik</naslov>
	<tijelo>Otiđi kupiti kruh</tijelo>
</poruka>
```

### Sintaksna pravila

* na početku dokumenta mora se navesti prolog u kojem se navodi verzija XML preporuke prema čijim pravilima je dokument napravljen

```
<?xml **version="1.0"**?>
```

* ukoliko se u sadržaju XML dokumenta koriste nestandardna slova neengleske abecede potrebno je navesti i kodnu stranicu koja se koristi jer će bez nje javiti grešku.

```
<?xml version="1.0" **encoding="UTF-8"**?>
```

* **svaki** XML element mora imati početnu i završnu oznaku

```
**<naslov>**Podsjetnik**</naslov>**
```

* XML oznake su "case sensitive" odnosno razliku mala i velika slova

```
podsjetnik <> PODsjetnik
```

* svi elementi moraju biti pravilno ugniježđeni

Ovo je **neispravno**

```
**<poruka>**
 ...
 *<naslov>*Podsjetnik**</poruka>**
 ...
*</naslov>*
```

Ovo je **ispravno**

```
**<poruka>**
 ...
 *<naslov>*Podsjetnik*</naslov>*
 ...
**</poruka>**
```

* Svaki XML dokument **mora** imati **jedan** korijenski ili root element koji uokviruje kompletan sadržaj. Taj element opisuje XML dokument i npr. kaže "ovaj XML dokument je jedna **poruka**".

```
**<poruka>**
	<za>Pero</zaKoga>
	<od>Kate</odKoga>
	<naslov>Podsjetnik</naslov>
	<tijelo>Otiđi kupiti kruh</tijelo>
**</poruka>**
```

* vrijednosti atributa moraju se navoditi pod navodnicima

Ovo je **neispravno**

```
<za font_face=Arial font_size=10>Pero</zaKoga>
```

Ovo je **ispravno**

```
<za font_face="Arial" font_size="10">Pero</zaKoga>
```

* nazivi elemenata
	+ mogu sadržavati slova, brojeve i posebne znakove
	+ moraju počinjati slovom
	+ ne smiju počinjati tekstom xml niti XML
	+ ne smiju sadržavati praznine
	+ trebalo bi izbjegavati korištenje znakova - i .

|  |  |
| --- | --- |
| Ovo je **neispravno** | Ovo je **ispravno** |
| 
```
<23naziv>  </23naziv>
<XML-NAZIV>  </XML-NAZIV>
<naziv 23> </naziv 23>
<naziv.xml> </naziv.xml> 
```
 | 
```
<naziv>  </naziv>
<NAZIV>  </NAZIV>
<naziv_23> </naziv_23>
<naziv_xml> </naziv_xml> 
```
 |

* u tekstu se mogu koristiti i jednostruki i dvostruki navodnici, bitno je samo da se ne preklapaju

```
<tekst>Ovo je "stvarno 'dobar' dan"</tekst>
```

* komentari se prikazuju pomoću posebne oznake

```
<!-- ovo je komentar --> 
```

* kada je potrebno navesti sadržaj u kojem se nalaze kontrolni znakovi a želimo ih protumačiti kao običan tekst koristi se posebna naredba CDATA (character data) sekcija. Čitav tekst unutar CDATA dijela dokumenta interpretira se kao običan tekst. Sintaksa CDATA naredbe naslijeđe je SGMLa

```
<![CDATA[ Ovaj tekst se treba shvatiti kao običan <tekst>, a ne kao početak elementa <tekst> ]]>
```

* znakovi koji u XML-u imaju posebno značenje u tekstu se moraju prikazivati na poseban način, znakovnim ili numeričkim kodovima koji na početku imaju znak & (ampersand), a na kraju točku-zarez

|  |  |
| --- | --- |
| Zabranjeni posebni znakovi
 | Za prikaz koristiti znakovni kod
 |
| 
```
<
>
&
'
"
```
 | 
```
&lt;
&gt;
&amp;
&apos;
&quot;
```
 |

#### Provjera ispravnosti XML dokumenta

XML dokument koji je kreiran u skladu sa sintaksnim pravilima je formalno ispravno kreiran (Well Formed).
Osim te formalne ispravnosti, ispravnost XML dokument se može kontrolirati u odnosu na propisanu shemu. Shema određuje koje elemente smije sadržavati XML dokument te redoslijed i broj tih elemenata. Ispravnost se proverava u odnosu na određenu Document Type Definition (DTD) ili XML schemu. Dokument sheme se navodi u zaglavlju XML dokumenta.

Povezivanje XML dokumenta s DTD shemom

```
<?xml version="1.0" encoding="UTF-8"?>
**<!DOCTYPE poruka SYSTEM "PorukaPodsjetnik.dtd">**
<poruka>
	<za>Pero</za>
	<od>Kate</od>
	<naslov>Podsjetnik</naslov>
	<tijelo>Otiđi kupiti kruh</tijelo>
</poruka>
```

Povezivanje XML dokumenta s XML schemom

```
<?xml version="1.0" encoding="UTF-8"?>
**<poruka xmlns="" xmlns:xsi="" xsi:schemaLocation="poruka.xsd">**
<poruka>
	<za>Pero</za>
	<od>Kate</od>
	<naslov>Podsjetnik</naslov>
	<tijelo>Otiđi kupiti kruh</tijelo>
</poruka>
```

### XML i HTML

XML i HTML sintaksno su slični, iako su razvijeni s različitim namjenama. XML je prvenstveno razvijen za opisivanje podataka. XML ne radi ništa osim što opisuje podatke. Oznake kod XMLa su slobodne i korisnici ih moraju sami smisliti i kreirati. U HTMLu postoji predefinirani skup oznaka koje uglavnom služe za prikazivanje sadržaja u internet pregledniku na odgovarajući način. Sintaksna pravila XMLa vrlo su stroga i ako dokument nije formatiran u skladu s njima, računalni program neće moći pročitati XML dokument. S druge strane HTML dokument koji je sintaksno neispravan većina internet preglednika će uredno pročitati i pokušati protumačiti na najbolji mogući način iz ispravnih informacija.
EXtensible HyperText Markup Language (XHTML) je novi standard razvoja HTML jezika u skladu sa strožim pravilima XMLa. Namjena tog jezika je da s vremenom u potpunosti zamjeni stari HTML standard.

### Prikaz XMLa na web stranicama

XML je jezik namijenjen opisu podataka i u sebi ne nosi informacije o tome na koji način se određeni podaci trebaju prikazati. To se može napraviti pomoću odgovarajućih atributa, ali u tom slučaju potreban je poseban računalni program koji će na odgovarajući način protumačiti te atribute.
Kada se XML dokument gleda u internet pregledniku prikazuje se kao običan tekstualni dokument. Neki internet preglednici prikazuju stablo na kojem se klikom na odgovarajući čvor njemu podređene grane mogu prikazati ili sakriti od prikazivanja.
Želimo li prikazati sadržaj u odgovarajućem formatu, to možemo napraviti na nekoliko načina:

* pozvati XML sadržaj unutar HTML dokumenta. U Internet Explorer internet pregledniku pomoću neslužbene <xml></xml> oznake moguće je unutar HTML dokumenta umetnutu sadržaj XML dokumenta (tzv. podatkovni otoci (data islands). U drugim internet preglednicima moguće je učitati sadržaj pomoću JavaScript programa.

* u XML dokumentu navesti naziv CSS datoteke koja ga formatira na odgovarajući način. Povezivanje se radi unutar zaglavlja XML dokumenta.

```
<?xml version="1.0" encoding="UTF-8"?>
**<?xml-stylesheet type="text/css" href="poruka.css"?>**
<poruka>
	<za>Pero</zaKoga>
	<od>Kate</odKoga>
	<naslov>Podsjetnik</naslov>
	<tijelo>Otiđi kupiti kruh</tijelo>
</poruka>
```

* u XML dokumentu navesti naziv XSLT datoteke koja ga formatira na odgovarajući način

```
<?xml version="1.0" encoding="UTF-8"?>
**<?xml-stylesheet type="text/xsl" href="poruka.xslt"?>**
<poruka>
	<za>Pero</zaKoga>
	<od>Kate</odKoga>
	<naslov>Podsjetnik</naslov>
	<tijelo>Otiđi kupiti kruh</tijelo>
</poruka>
```

Korištenja XMLa
---------------

### Odvajanje podataka od prezentacije

Unutar HTML dokumenta sadržaj se može odvojiti od prezentacije. Na takav način web dizajneri imaju veću slobodu u formatiranju i promjenama izgleda web stranica. Kada se promjeni izgled web stranice, ne mora se mijenjati njezin sadržaj. Sadržaj bi se čuvao unutar XML dokumenta, a HTML dokument služio bi za prezentaciju toga sadržaja. 

### Razmjena podataka

XML dokument je obična tekstualna datoteka. Njezin sadržaj je vidljiv i pristupačan čovjeku, bez ikakvog posebnog programa kao i svakom računalnom programu koji može čitati tekstualne datoteke. Razmjena između sustava na različitim platformama najčešće ide na način da jedan sustav ispiše svoje podatke u dogovorenom formatu u tekstualnu datoteku, a drugi sustav ih pročita. Format tih datoteka obično je bio pozicijski (svi podaci u jednom retku, a svaki podatak ima određenu duljinu) ili delimiterski (podaci razdvojeni posebnim znakom - delimiterom npr. zarez ili točka-zarez). Problem kod toga je što je za svaku posebnu razmjenu potrebno raditi novi format prema dogovoru strana u razmjeni. osim toga ti formati su neintuitivni. Kada pogledate tekstualnu datoteku u pozicijskom formatu bez dokumentacije toga formata nećete moći niti naslutiti kakvi podaci se u njoj nalaze.
XML omogućuje da svaka strana opiše podatke koje ima, odnosno one koje im trebaju odgovarajućim oznakama koje su čitljive i čovjeku i koje dosta dobro opisuju podatak koji se unutar određene oznake nalazi.

### Pohrana podataka

XML dokument opisuje sadržaj i kao takav može se koristiti za njegovu pohranu. Najjednostavniji način je izravna pohrana u tekstualne datoteke koje se spremaju na disk. Podaci iz datoteka mogu se čitati izravno, korištenjem običnog programa za uređivanje teksta ili korištenjem nekog od posebnih programa za rad s XML podacima. Nešto napredniji način pohrane je da se XML elementi pohranjuju u relacijsku bazu podataka. Nedostatak tog pristupa je da relacijska struktura baze ne odgovara hijerarhijskom pristupu XML dokumenata.
Zbog toga su se počele kreirati posebne XML baze podataka koje su svojim načinom rada posebno prilagođene pohrani i radu s XML podacima.

### Povećavanje dostupnosti podataka

XML podatke pohranjuje u običnu tekstualnu datoteku koja je čitljiva gotovo na svakoj platformi. Format je jasno vidljiv i jednostavno je napraviti računalni program koji će na odgovarajući način interpretirati podatke. Postoji nekoliko inicijativa s idejom da se za pohranu podataka umjesto zatvorenih binarnih formata (npr. doc, xls,...) za pohranu podataka koristi XML format. Danas sve više računalnih programa koristi taj format za pohranu podataka.

### Izradu novih specijaliziranih jezika za označavanje

XML je jezik ali i platforma koja služi za stvaranje novih, specijaliziranih jezika za označavanje. 
Neki od jezika koji su kreirani iz XMLa

* Wireless Markup Language (WML) je jezik koji se koristi u WAP mrežama za pristup internetu s prijenosnih uređaja (mobitela, ručnih računala,...)
* MathML je jezik koji omogućuje jednostavno kodiranje matematičkih izraza s ciljem jednostavne razmjene, prikazivanje i korištenje na web stranicama
* User Interface Markup Language (UIML) je jezik namijenjen modeliranju korisničkih sučelja računalnih programa
* Chemical Markup Language (CML) je jezik namijenjen prikazu kemijskih formula
* HelpML (Help Markup Language) je jezik namijenjen opisu dokumenata pomoći.

XML proširenja i tehnologije
----------------------------

* XPath je jezik koji omogućuje jednostavnije pretraživanje sadržaja u XML dokumentu.
* XQuery je upitni jezik za pretraživanje XML dokumenta. On je za XML isto ono što je SQL za relacijske baze podataka
* XSLT je jezik koji omogućuje transformacije XML dokumenata iz jednog formata u drugi (npr. iz XMLa u XHTML)
* XSL-FO je jezik koji služi za formatiranje izlaznog rezultata XML dokumenta
* XML Linking Language je jezik koji opisuje standardni način kreiranja hiperlinkova u XML dokumentima
* XML Pointer Language je jezik koji opisuje standardni način na koji hiperlinkovi pokazuju na određeno mjesto unutar XML dokumenta
* XML Document Object Model (DOM) je sučelje koje omogućuje računalnim programima pristup i ažuriranje sadržaja i strukture XML dokumenta
* SOAP je jednostavan protokol baziran na XMLu koji omogućuje aplikacijama razmjenu podataka u tekstualnom obliku preko HTTP protokola
* Web Services Description Language (WSDL) je jezik baziran na XMLu koji omogućuje opis web servisa i sučelja za njihovo korištenje
* Really Simple Syndication (RSS) je način za distribuciju sadržaja s jednog web-a na druge pomoću XMLa
* Wireless Application Protocol (WAP) je protokol razvijen s namjerom pristupa internetskim sadržajima pomoću prijenosnih uređaja (mobitela, ručnih računala i sl.)
* XML Signature definira sintaksu i pravila za kreiranje digitalnog potpisa XML sadržaja
* XML Encryption definira sintaksu i pravila za šifriranje XML sadržaja

Prednosti i nedostaci XMLa
--------------------------

### Prednosti

* jednostavno je čitljiv i čovjeku u običnom tekstualnom editoru i računalu
* XML dokument je obična tekstualna datoteka čitljiva na svakoj platformi koja može čitati tekstualne podatke. To ga čini neosjetljivim na tehnološke promjene jer bez obzira na napredak tehnologije, tekstualni podaci će još jako dugo ostati nešto što će svaki računalni sustav trebati moći pročitati
* podržava Unicode i omogućuje prikaz teksta na svim danas poznatim jezicima
* format je samodokumentirajući. Oznake opisuju sadržaj koji se nalazi unutar njih.
* ima stroga sintaksna pravila tako da je jednostavno kontrolirati ispravnost nastalog dokumenta. Računalni programi koji obrađuju dokument zbog toga mogu jednostavno obrađivati XML sadržaj
* međunarodno prihvaćen standard. Mnogi proizvođači programa su ga prihvatili i koriste u svojim proizvodima
* hijerarhijska struktura je pogodna za opisivanje mnogih sadržaja (ali ne i svih!)
* kompatibilan je sa SGMLom koji se koristi od 80ih godina 20. stoljeća, a za SGML postoji dosta računalnih programa koji ga mogu obrađivati. tako da kada je XML standard objavljen već je postojala određena baza korisnika koji nisu gotovo ništa morali učiti o novom jeziku niti kreirati nove programe već su ga jednostavno usvojili

### Nedostaci

* sintaksa je redundantna i opširna što može zamarati i zbunjivati osobu koja čita XML dokument. računalni program koji obrađuje dokument morati će obraditi veliku količinu podataka što će ga djelomično usporiti
* da bi dokument bio dovoljno dobro "samoopisan" nazivi oznaka moraju biti dovoljno precizni što dovodi do dugih "kobasičastih" naziva (npr. u nekom dokument nije dovoljan opis podatka Ime\_i\_prezime jer to može biti ime i prezime osobe koja je kreirala dokument, ali i osobe na koju se slog odnosi, osobe kojoj se dokument šalje,... Nije dovoljno osloniti se na "samoopisivanje" sadržaja
* redundancija i velika količina podataka stvaraju velike zahtjeve za propusnosti mreže (iako to danas uglavnom više nije problem)
* programi koji obrađuju XML podatke su dosta složeni jer moraju obrađivati velike količine ugniježđenih podataka u više razina
* nedostatak formalno propisanih formata za podatke može stvarati probleme ako sudionici u razmjeni nisu dobro opisali (npr. da li se decimalni brojevi prikazuju s decimalnom točkom ili zarezom
* pohrana XML podataka u relacijske baze podataka nije prirodan način i to dovodi do smanjenja performansi sustava koji koriste takav način pohrane. S druge strane XML baze podataka koje su razvijene za pohranu XML podataka još su u fazi razvoja
* Još o nedostacima XMLa

Verzije XMLa
------------

Postoje 2 verzije XMLa. Prva XML 1.0 inicijalno je kreirana 1998. godine. Do danas je imala nekoliko manjih revizija. Širom je prihvaćena i još i danas se preporučuje za korištenje. Verzija XML 1.0 bazira se na filozofiji da je zabranjeno sve što nije dozvoljeno. S razvojem drugih standarda na koje se oslanja (prvenstveno Unicode koji je u međuvremenu s verzije 2.0 došao do verzije 4.0 dolazilo je prvenstveno na velikim sustavima (IBM mainframe) do određenih problema jer se nisu mogli koristiti oni znakovi koju u vrijeme definiranja standarda nisu postojali. 
Druga verzija XML 1.1 inicijalno je objavljena 2004. godine i ima određena svojstva koja olakšavaju rad programima na velikim računalima. Njezin pristup je da je dozvoljeno sve što nije zabranjeno. Na takav način omogućuje se korištenje svih budućih Unicode znakova koji će se bilo kada u budućnosti definirati.
Zbog svoje raširenosti uglavnom se još uvijek koristi verzija XML 1.0 jer je zadovoljavajuća za većinu korisnika. Korisnici na velikim računalnim serverima koji imaju problema s ograničenjima verzije XML 1.0 uglavnom su prešli na korištenje verzije XML 1.1

Vanjske poveznice
-----------------

* XeML.net Arhivirano 2018-03-16 na Wayback Machine-u
* W3C stranica o XMLu
* W3C XML 1.0 preporuka
* W3C XML 1.1 preporuka
* Mnoštvo informacija o XMLu
* Naučite XML
* XML Java Arhivirano 2014-04-07 na Wayback Machine-u

***XML*** na Wikimedijinoj ostavi