XML - Extensible Markup Language
Glossari ràpid
Element: etiqueta amb contingut o fills (
<nom>…</nom>
).
Atribut: metadada en un element (<persona id="p1">
).
Node de text: text dins d’un element.
Arrel: element pare de tot el document.
PI: instrucció de procés (<?xml-stylesheet …?>
).
Entitat: seqüència per escriure caràcters especials (<
,&
).
CDATA: secció de text “sense interpretar”.
Namespace: “cognom” per a etiquetes d’un vocabulari (xmlns:al="…"
,<al:nom>
).
1.- Què és XML?
XML, Extensible Markup Language, és un llenguatge de marques utilitzat per emmagatzemar i intercanviar dades estructurades de manera llegible tant per humans com per màquines.
Principals característiques d’XML
- És un llenguatge de marques: utilitza etiquetes per definir i estructurar les dades.
- És extensible: permet definir etiquetes i estructures pròpies per adaptar-se a diferents aplicacions.
- És jeràrquic: segueix una estructura en forma d’arbre (arrel, pares, fills, germans).
- Llegible per humans: el format és clar i es pot editar manualment.
- Interoperable: és un estàndard àmpliament acceptat i entés per moltes aplicacions.
- Usos variats: configuració de programari, intercanvi de dades entre sistemes, serveis web, representació de documents XHTML, RSS/Atom, SVG, etc.
- Compatibilitat amb Unicode: pot usar UTF-8, UTF-16 i altres codificacions, permetent representar caràcters de quasi tots els idiomes.
En resum, XML és un llenguatge de marques versàtil i estandarditzat per representar i intercanviar dades estructurades de manera clara i flexible.
XML NO és
- No és un llenguatge de programació.
- No és un protocol de xarxa.
-
No és una base de dades.
XML pot emmagatzemar informació estructurada, però no és una BD en sentit estricte.
Ecosistema i tecnologies relacionades
- XPath i XQuery: per seleccionar i consultar dades dins de documents XML.
- XPointer i XLink: per identificar parts concretes d’un document i afegir enllaços.
- DTD i XML Schema (XSD): per definir l’estructura i validesa dels documents.
- XSLT i XSL-FO: per transformar documents XML a altres formats i aplicar estils.
2.- Anàlisi i validació d’XML
2.1 Què és un parser i per a què serveix?
Un parser (analitzador) és un programa o llibreria que llegeix un document XML i el comprova contra les regles del llenguatge. Després, el converteix a una estructura que el codi pot manipular (un arbre de nodes, esdeveniments de lectura, etc.).
Utilitats principals:
- Comprovació de ben formació: detecta errors de sintaxi (arrel única, tancaments, niat, atributs entre cometes…).
- Validació: pot comprovar l’XML contra un DTD o un XSD per assegurar l’estructura esperada.
- Accés a dades: exposa el contingut de l’XML al programa (per a llegir, transformar, importar a BD, etc.).
2.2 Tipus de parsers (visió pràctica)
- DOM: carrega tot el document a memòria i l’exposa com un arbre (fàcil de manipular; cost en memòria).
- SAX: processament basat en esdeveniments (seqüencial, molt eficient en memòria; més complex per modificar).
- StAX (pull parsing): semblant a SAX però el codi controla quan llegir el pròxim esdeveniment (equilibri entre DOM i SAX).
2.3 Nivells de comprovació
Ben format (well-formed) Document que compleix les regles bàsiques d’XML. Exemple correcte:
<article>Disquet</article>
Exemple incorrecte:
<article>Disquet
Vàlid (valid) Document ben format que, a més, compleix l’estructura definida en un DTD o XSD. Exemple: si l’esquema indica que <persona>
ha de tindre <nom>
i <edat>
, un document sense <edat>
és ben format però no vàlid.
2.4 Tractament d’errors
- Errors de ben formació: fatals; el parser ha d’aturar-se.
- Errors de validesa: el parser pot continuar, però el document es qualifica com a invàlid.
2.5 Analitzadors XML habituals
- xmllint (libxml2).
- Apache Xerces (Java, C++).
- Expat (C).
Comandes bàsiques amb xmllint:
xmllint --noout exemple.xml # comprova ben formació
xmllint --schema esquema.xsd exemple.xml # comprova validesa
3.- Regles bàsiques d’XML
Un document XML està format per text, etiquetes i atributs.
Exemple:
<nom carrec="coordinadora">Isabel S.</nom>
- Etiquetes:
<nom>...</nom>
- Atributs:
carrec="coordinadora"
- Text:
Isabel S.
3.1 Regles fonamentals
- Etiqueta arrel única
Correcte:
<persona>
<nom>Ana</nom>
</persona>
Incorrecte (dues arrels):
<persona>
<nom>Ana</nom>
</persona>
<nom>Lola</nom>
- Etiquetes tancades
Correcte:
<article>Disquet</article>
Incorrecte:
<article nom="disquet">
Etiqueta buida:
<article nom="disquet"/>
o també:
<article/>
- Etiquetes correctament niades
Correcte:
<inventari>
<article>Disquet</article>
</inventari>
Incorrecte:
<inventari>
<article>Disquet</inventari>
</article>
- Noms d’elements i atributs
- Han de començar per lletra o _.
- Poden incloure lletres, dígits,
-
,_
,.
i:
(este últim només quan es treballa amb namespaces). - No poden contindre espais.
- No poden començar per
xml
(en qualsevol combinació de majúscules/minúscules).El caràcter
:
està reservat per a namespaces. No l’utilitzes en noms si no declares un prefix ambxmlns:
.
Correctes:
<Ciutat></Ciutat>
<Item12></Item12>
<_Hola></_Hola>
Incorrectes:
<1Osset></1Osset>
<Aitor Tilla></Aitor Tilla>
<$Diners></$Diners>
- Distinció majúscules/minúscules
<Article>Disquet</Article>
<article>Disquet</article> <!-- elements diferents -->
- Seria incorrecte:
<Article>Disquet</article> <!-- Distingeix majuscules i minuscules -->
- Atributs sempre va entre cometes i amb valor
Correcte:
<Article quantitat="3">Disquet</Article>
Incorrectes:
<Article quantitat=3>Disquet</Article> <!-- Valor del atribut sense cometes -->
<Article quantitat>Disquet</Article> <!-- Atribut sense valor -->
Exemple:
<?xml version="1.0" encoding="UTF-8"?>
<persona nacionalitat="Espanya">
<nom>Ana</nom>
<edat>20</edat>
</persona>
4.- Creació de documents XML
Aquesta secció recull elements freqüents d’un document XML i explica per a què serveix cadascun amb exemples pràctics.
4.1 Declaració XML
Línia opcional però recomanable al principi del fitxer. Indica versió, codificació de caràcters i si el document depén d’entitats externes.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
- version: habitualment
"1.0"
. - encoding: codificació de caràcters (per defecte, UTF-8).
- standalone:
"yes"
si el document és autosuficient;"no"
si depén, per exemple, d’un DTD extern.
Utilitat: garantir una interpretació correcta de caràcters (accents, símbols), interoperabilitat entre sistemes i claredat sobre dependències externes.
4.2 Atributs
Aporten metadades o paràmetres a un element en forma de parell clau="valor"
i sempre entre cometes.
<persona nom="Lola" cognom="Mento" edat="30"/>
Quan usar atributs o elements:
Tria ATRIBUT quan… | Tria ELEMENT quan… |
---|---|
És metadada curta (id, tipus, lang) | És contingut o estructura |
Es consulta sovint com a clau | Necessites fills o text llarg |
No admet subetiquetes | Lògica de llista/array |
Exemples d’atributs especials definits pel mateix XML:
xml:lang
: idioma del contingut.xml:id
: identificador únic.xml:base
: URL base per a rutes relatives.xml:space
: control d’espais en blanc (default
/preserve
).
4.3 Entitats
Serveixen per escriure caràcters reservats o problemàtics dins del text.
Entitat | Caràcter | Ús típic |
---|---|---|
< | < | Mostrar < en text sense iniciar una etiqueta |
> | > | Mostrar > en text |
& | & | En URLs amb paràmetres: ?q=1&cat=2 |
" | " | Cometes dins d’un atribut |
' | ' | Apòstrof |
Correcte:
<frase>5 < 10 & 3 > 2</frase>
<url>https://exemple.com?q=1&cat=2</url>
Incorrecte:
<frase>5 < 10</frase> <!-- el parser interpreta "< 10" com a marca -->
4.4 CDATA
Una secció CDATA indica al parser que no ha d’interpretar el contingut com a marques, sinó com a text literal. És útil per incrustar fragments amb <
, >
, &
sense haver-los d’escapar.
<script>
<![CDATA[
if (5 < 10) {
alert("Hola món");
}
]]>
</script>
Limitacions: dins d’una CDATA no pot aparéixer la seqüència ]]>
i no es poden niar.
CDATA no es pot usar en atributs. És equivalent a escriure el mateix contingut escapant
<
,&
, etc.; només és una forma més còmoda per a fragments llargs.
4.5 Comentaris
Informació per a persones lectores; els parsers els ignoren.
<!-- Aquest és un comentari -->
<persona>
<nom>Ana</nom>
<!-- <edat>20</edat> comentat temporalment -->
</persona>
4.6 Instruccions de procés (Processing Instructions, PI)
Informen aplicacions de com tractar el document. Les més comunes associen fulls d’estil (CSS o XSLT).
Exemple amb CSS:
<?xml-stylesheet type="text/css" href="estilo-animales.css"?>
<animales>
<animal>
<nombre>Perro</nombre>
<patas>4</patas>
</animal>
</animales>
Fitxer estilo-animales.css
:
nombre { color: blue; font-size: 40px }
patas { color: red; font-size: 22px }
Un navegador compatible aplicarà l’estil als elements mostrant “nombre” en blau i “patas” en roig.
Exemple amb XSLT:
<?xml-stylesheet type="text/xsl" href="transformacio.xsl"?>
Això indica que el document es pot transformar a HTML (o altre format) usant l’estil XSLT indicat.
5.- Espais de noms (Namespaces)
En XML qualsevol pot inventar etiquetes amb qualsevol nom. El problema és que, si combines documents diferents, pots tindre etiquetes amb el mateix nom però amb significat diferent.
Exemple sense namespaces (conflicte):
<nom>Ana</nom> <!-- és un alumne -->
<nom>Laura</nom> <!-- és un professor -->
El processador no sap distingir-los.
Els espais de noms (namespaces) servixen per diferenciar vocabularis (conjunts d’etiquetes).
Amb els namespaces evitarem conflictes de noms quan barregem vocabularis: el prefix és el “cognom” de l’etiqueta i la URI és un identificador únic (no té per què ser una web).
5.1. Sintaxi bàsica
Declarem un namespace amb l’atribut xmlns
:
<classe xmlns:al="http://exemple.org/alumnes"
xmlns:pr="http://exemple.org/professors">
<al:nom>Ana</al:nom>
<pr:nom>Laura</pr:nom>
</classe>
-
xmlns:al="http://exemple.org/alumnes"
Tot el que comence ambal:
és del vocabulari d’alumnes. -
xmlns:pr="http://exemple.org/professors"
Tot el que comence ambpr:
és del vocabulari de professors.
Ara queda clar quin nom
pertany a cada grup.
5.2. Namespace per defecte
També podem definir un namespace per defecte (sense prefix).
<classe xmlns="http://exemple.org/alumnes"
xmlns:pr="http://exemple.org/professors">
<nom>Ana</nom> <!-- del vocabulari d’alumnes -->
<pr:nom>Laura</pr:nom> <!-- del vocabulari de professors -->
</classe>
Tin en compte que:
-
La cadena (
http://exemple.org/alumnes
) és només un identificador únic. No cal que siga una web real ni que continga res. -
El vocabulari és simplement el conjunt d’etiquetes que formen part d’eixe namespace (
al:nom
,al:alumne
,al:grup
, etc.). -
La utilitat pràctica: permet barrejar diferents llenguatges dins d’un mateix document XML sense conflictes.
5.3. Exemple amb llenguatges reals
Un document XML que combina XHTML i SVG:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:svg="http://www.w3.org/2000/svg">
<body>
<h1>Exemple mixt</h1>
<svg:svg width="120" height="60">
<svg:rect x="10" y="10" width="100" height="40"/>
</svg:svg>
</body>
</html>
- Les etiquetes sense prefix (
<html>
,<body>
,<h1>
) pertanyen a XHTML. - Les etiquetes amb prefix
svg:
pertanyen a SVG.
Alguns espais de noms coneguts:
- XML →
http://www.w3.org/XML/1998/namespace
- XHTML →
http://www.w3.org/1999/xhtml
- SVG →
http://www.w3.org/2000/svg
- XSLT →
http://www.w3.org/1999/XSL/Transform
En resum
- Un namespace és com un cognom per a les etiquetes.
- Servix per diferenciar etiquetes amb el mateix nom però de vocabularis diferents.
- La URI (
http://exemple.org/alumnes
) és només un identificador únic, no cal que existisca com a web. - Així podem combinar vocabularis (p. ex. XHTML + SVG) en un mateix document XML sense errors.
6.- Errors típics en XML
Dues etiquetes arrel
<persona>Ana</persona>
<persona>Pere</persona> <!-- ERROR -->
Etiquetes mal niades
<article><titol>Hola</article></titol> <!-- ERROR -->
Atributs sense cometes
<article quantitat=3>Disquet</article> <!-- ERROR -->
Caràcters especials sense entitats
<text>5 < 10</text> <!-- ERROR -->
Prefix de namespace sense declarar
<A:nom>Ana</A:nom> <!-- ERROR: falta xmlns:A -->
En resum…
- Una única arrel.
- Etiquetes tancades i niades correctament.
- Atributs entre cometes i amb valor.
- Entitats per a
<
,>
,&
,"
,'
. - Prefixos de namespace declarats abans d’usar-los.
- Document ben format abans de validar contra DTD/XSD.