# XML

XML (Markaketa-lengoaia hedagarria, Extensible Markup Language) xede orokorreko markaketa-lengoaia da. Lengoaia hedagarri moduan sailkatuta dago --berez, metalengoaia bat da--, erabiltzaileak bere elementuak sortzeko aukera baitu. Egituratutako datuak informazio-sistema ezberdinen artean partekatzea da bere helburu nagusia, batez ere Interneten bitartez. Erabiltzen da bai dokumentuak kodetzeko, bai datuak serializatzeko. Azken kasu honetan, testuan oinarritzen diren beste serializatze-lengoaia batzuekin parekatu daiteke, hala nola JSON eta YAMLrekin.

## Aplikazioak

Hedagarria denez gero, XMLn oinarritutako ehunka formatu aplikazio (lengoaia, formatu) garatu dira helburu desberdinekin; adibidez, RSS, Atom, SOAP, SVG eta XHTML. XML aplikazioak bulegotikarako ere erabiltzen dira (Microsoft Officeko Office Open XML, OpenOffice eta LibreOfficeko OpenDocument); baita beste arlo batzuetan ere, komunikazio-protokoloak definitzeko, esaterako (XMPP). Bezero/zerbitzari ereduan erabiltzen diren SOA(Service-oriented architecture) protokoloan ere XML mezuak trukatzen dituzte makinek.
Bestelako industrietan ere XMLn oinarritutako lengoaiak erabiltzen dira informazio-trukerako, hala nola osasungintzan, turismoan, itzulpengintzan..., eta modu berezian komunikabideetan eta editorialetan.

## Historia

Sare eta teknologia protokoloak* :
| Aplikazio geruza | DNS, FTP, HTTP, HTTPS, IMAP, IRC, NFS, NNTP, NTP, POP3, SMB/CIFS, SMTP, SNMP, SSH, Telnet, SIP, gehiago |
| Aurkezpen geruza | ASN.1, MIME, SSL/TLS, XML, gehiago |
| Saio geruza | NetBIOS, gehiago |
| Garraio geruza | SCTP, SPX, TCP, UDP, gehiago |
| Sare geruza | AppleTalk, IP, IPX, NetBEUI, X.25, gehiago |
| Lotura geruza | ATM, Ethernet, Frame Relay, HDLC, PPP, Token Ring, Wi-Fi, STP, gehiago |
| Geruza fisikoa | Kable ardazkide, Zuntz optiko, Pare kordatu, Mikrouhin-sarea, Irrati bidezko sarea, RS-232, gehiago |
| *OSI ereduaren arabera ||
XML markaketa-lengoaia sortu baino askoz lehenago bazeuden beste markaketa-sistema batzuk, testu egituratua kasu. Testu hutsa idatziz sor daitezke webgunerako dokumentuak, HTML zer den jakin beharrik gabe. Testu arrunta idatzi, eta makinak HTML kode bihurtzen du. Testu egituratua erabiltzen den kasu ezagun bat wikiena da. Honetan, testuari "marka" edo "etiketa" ezberdinak gehitzen zaizkio burutu nahi den aldaketaren arabera, eta honen ondorioz hainbeste markaketa-lengoaia sortzen dira.
ANSI erakundeak, 1978. urtean, testu-prozesamenduan zebiltzan hainbat talde jarri zituen harremanetan, edozein motatako testuak kodetzeko, egituratzeko eta elkarren artean trukatzeko balioko zukeen lengoaia estandar eta orokor bat definitzeko helburuarekin.
Lengoaia horren lehenengo txostenak 1980. urtean argitaratu baziren ere, 1985. urtean argitaratu zen elkarlanaren emaitzaren azken bertsioa, ISO erakundeak estandartzat onartu zuena: ISO 8879 edo SGML (Standard Generalized Markup Language) lengoaia. Testuak osagaien bidez (paragrafoak, zerrendak, izenak, atalak, lerroak etab.) zatitu, eta zati horiek habiaratu daitezkeela da SGMLren oinarrizko hipotesia. SGMLk printzipio deskriptiboa bereganatu zuen hasieratik. Horrela, testuaren kodetze-lanetan dabilenak testu-objektua zer den markatuko du. Honen ondorioz, testu bera hamaika kodekera desberdinen arabera markatu daiteke, aplikazio ezberdinen beharrei aurre eginez.
Hala ere, SGML lengoaia aberatsegia eta zabalegia suertatu zen konputagailuekin tratatu behar zenean, eta, horrela, aplikazio gutxik inplementatu zuten SGMLk eskaintzen zituen aukera guztiak. Beraz, SGML lengoaiatik azpilengoaia bat sortu zen, XML deitutakoa, nolabait SGMLk eskaintzen zituen aukera zabalak mugatu nahian. XMLren 1.0 bertsioa 1998. urtean sortu zen, W3C-ren aholku moduan. SGML eta XML lengoaiak helburu ezberdinak betetzeko jaio ziren: lehenak edozein dokumentu markatzeko euskarria eskaintzen zuen bitartean, bigarrenaren xedea Interneten informazioa kudeatzea zen nagusiki. Horrela, bada, XML lengoaia weberako estandarra zen -eta oraindik den- HTMLren gabeziak gainditzeko asmoarekin jaio zen. HTMLk bere definizioak izan arren, nabigatzaileen tolerantziak gaizki egituratutako dokumentuek funtzionatzea ahalbidetu du. Hori dela eta, XML eta HTML batzeko ahaleginaren ondorioz XHTML sortu zen, "Extensible HyperText Markup Language" delakoa. Hau HTML erreproduzitu, zehaztu eta hedatzen duen modulu eta dokumentu familia da. XMLn oinarritutako lengoaia zorrotz berria da XHTML, eta nabigatzaileak askoz zorrotzagoak dira web-orrien kodearen sintaxia balioztatzeko orduan.
XML, SGML bezala, metalengoaia bat da, eta hainbat lengoaia definitzeko aukera ematen du.
HTML, aldiz, SGML bidez definitutako lengoaia soil bat da, esan bezala aplikazio konkretu bat, elementu (etiketak) eta atributu jakin batzuk definitzen dituena. HTML lengoaia bat da, eta Interneten argitaratzen diren dokumentuei itxura emateko erabiltzen da, informazioaren diseinu bisuala lantzeko sortu zen eta. Etiketetan oinarrituta dago, eta erabaki daiteke, esate baterako, zer letra-mota eramango duen testuak, edo atal jakin bat letra lodiz edo etzanez idatzi behar den, esate baterako. XMLk osatu egiten du HTML Interneten, egitura eransten dielako datu horiei, eta semantika eman. Horri esker, sistema ezberdinek ulertuko dute zer esan nahi duen dokumentu batek. HTMLk ez bezala, bestalde, XMLk etiketa kopuru mugagabea erabil dezake informazioa kodetzeko.

## Terminologia

Terminologia osoa definitzeko asmorik gabe, hona hemen termino nagusiak:

### Karakterea (character)

    XML dokumentu bat testua da, karaktere-segida bat. Bertan edozein Unicode karaktere ager daiteke.

### Prozesadorea (processor) eta aplikazioa (application)

    Prozesadoreak markak analizatzen ditu eta dagokion informazioa pasatzen dio aplikazioari. Prozesadoreari XML parser edo XML analizatzaile esan ohi zaio.

### Marka (markup) eta edukia (content)

    Karaktereak bi multzotan banatzen dira: markak eta edukia. Haien artean bereizteko erregela sintaktiko bat aplikatzen da: markak < karakterearekin hasten dira eta > karakterearekin amaitu, edo & karakterearekin hasi eta ; karakterearekin amaitu (azken horiei XML entitate esaten zaie).

### Etiketa (tag)

    Etiketa marka bat da, < karaktereaz hasi eta > karaktereaz amaitzen dena. Hiru motatakoak izan daitezke:
   * hasierako etiketa: <atala>, adib.;
   * amaierako etiketa: </atala>, adib.;
   * etiketa hutsa: <atalHutsa/>, adib.

### Elementua (element)

    Elementu bat osagai logiko bat da, hasierako etiketa batez hasi eta amaierako etiketa batez amaitua (edo etiketa huts batez osatua, besterik gabe). Bi etiketen arteko edukian beste elementu batzuk egon daitezke, habiaraturik. Barruko elementuei elementu ume esaten zaie. Adibidez, <agurra>Kaixo, mundua!</agurra>.

### Atributua (attribute)

    Atributu bat elementu baten atala da (hautazkoa), izen–balio bikote bat. Adibidez <img src="madonna.jpg" alt="Madonna"/> kodean, img elementuaren atributu dira src eta alt, eta dagozkien balioak "madonna.jpg" eta "Madonna", hurrenez hurren.

### XML deklarazioa (XML declaration)

    XML dokumentuen hasieran XML deklarazio bat agertu ohi da (ez nahitaez, baina gehienetan agertzen da), edukiaren deskribapenarekin. Adibidez, <?xml version="1.0" encoding="UTF-8"?>.

## Zuzentasun sintaktikoa eta erroreak

XML dokumentu bat XML espezifikazioarekin bat datorrenean ongi eratutako dokumentua dela esaten da, hau da, sintaktikoki zuzena dela formatuari dagokionez. Edozein kasutan, dokumentu guztiek bete beharreko arau batzuk hauek dira:
* Dokumentuan Unicode karaktere zuzenak baino ezin dira egon.
* Sintaxiaren oinarri diren karaktereak, < eta & esaterako, marketarako baino ezin dira erabili (bestela erabili behar izanez gero, entitateez baliatuz egin behar da: &lt; eta &amp;, kasu horietan).
* Hasierako etiketak, amaierakoak eta elementu hutsek ondo habiaratuak egon behar dute, gainjartzerik egon gabe.
* Etiketen izenetan letra larriak eta xeheak bereizten dira, eta berdin-berdin agertu behar dute hasierako etiketan zein amaierakoan.
* Etiketen izenetan ezin dira agertu ondoko karaktere hauek: !"#$%&'*+,/;<=>?@[\]^`{|}~. Ezta zuriunea ere, eta lehen karakterea ezin da "-", "." edo zifra bat izan.
Arau hauek betetzen ez dituzten dokumentuak ez dira XML dokumentutzat hartzen ez baitaude ongi eratuta, eta prozesadoreak errorea emango du prozesatzen saiatuz gero.

## Eskema eta baliozkotasuna

Ondo eratuta dagoen ala ez egiaztatzeaz gain, XML dokumentu baten baliozkotasuna ere egiazta daiteke. Horretarako, egituraren gramatika deskribatzen duen dokumentua behar da.
Egitura edo gramatika deskribatzen duen dokumentu hori, historikoki, DTD (Document Type Definition) formalismoaren bidez idatzi izan da (SGMLrako diseinatutako formalismoa, berez). DTD batean, dokumentuan agertzekoak diren elementuak eta atributuak zehazten dira, baita haien arteko erlazioak ere. Eskema zehaztuz gero, prozesadorea dokumentuaren baliozkotasuna egiaztatzen saiatuko da, eta lortuko ez balu errorea adieraziko luke. DTDa eskema adierazteko modu bat da, baina badaude beste aukera batzuk (XML Schema, Relax NG...).

### DTD: dokumentu motaren definizioa

DTD sistema SGMLtik mailegatu zen.
DTD sistemaren abantailak hauek dira:
* XML bertsio guztietan dabil, XML 1.0-n barne.
* Definitzeko modu trinkoa eskaintzen du.
* SGML elementuak ere deskriba daitezke.
Bestalde, hainbat muga ditu:
* Ez die euskarririk eskaintzen XMLk ekarritako berrikuntzei, batez ere izen-espazioei.
* Adierazgarritasun mugatua du, oinarrizko erlazioak baino ezin baitira adierazi.
* Irakurgarritasuna ez da egokia.
* Espresio erregularretan oinarritutako sintaxia eskaintzen du, eta hori ez da erabilgarria APIetan.
Edozein kasutan, DTDak asko erabiltzen dira, maiz bertsio zaharretatik oinordetzan jaso direlako.

### XML Schema (W3C)

XML dokumentuen eskema deskribatzeko lengoaia berriago bat da, W3C erakundeak bultzatua. Deskribapenak XSD (XML Schema Definition) izenarekin ezagutzen dira, eta DTDak baino ahaltsuagoak dira dokumentuak deskribatzean. Datu-moten sistema aberatsa du, eta horrela dokumentuen murriztapenak askoz modu zehatzagoan defini daitezke. Gainera, XSDak XML dokumentuak dira, eta, beraz, beren baliozkotasuna ere egiaztatzen ahal da.
Eskema bat (XML dokumentu familia baten egitura edo gramatika, finean) definitzeko, xs:schema elementuaren barruan egiten da:

## Kanpo-estekak

* XML oinarriak
* XML: DTD eta XML schema
* XML gida euskaraz
* (Ingelesez) W3C XML webgunea
* (Ingelesez) XML 1.0 espezifikazioa]
* (Ingelesez) XML 1.1 espezifikazioa]
* (Ingelesez) Oxygen XML Editor
* (Ingelesez) Liquid XML Editor
* (Ingelesez) XMLBlueprint XML Editor
* (Ingelesez) XeML.net
* Datuak: Q2115
* Multimedia: XML / Q2115