XML: Sintaxi i Estructura
Concepte
XML (eXtensible Markup Language) és un meta-LM que permet crear vocabularis personalitzats per estructurar qualsevol tipus d'informació. El W3C va publicar l'especificació 1.0 el 1998.
A diferència d'HTML —on les etiquetes estan predefinides—, en XML l'autor defineix les seves pròpies etiquetes segons les necessitats del domini.
Estructura d'un document XML
Un document XML ben format consta de:
- Declaració XML (opcional però recomanada)
- Pròleg (DTD o referència a schema, opcional)
- Element arrel (un únic element que conté tot)
- Contingut (elements, atributs, text, comentaris)
<?xml version="1.0" encoding="UTF-8"?>
<!-- Pròleg: declaració del tipus de document -->
<!DOCTYPE biblioteca SYSTEM "biblioteca.dtd">
<!-- Element arrel -->
<biblioteca>
<!-- Elements fills -->
<llibre isbn="978-84-1234-567-8">
<titol>El nom de la rosa</titol>
<autor>
<nom>Umberto</nom>
<cognom>Eco</cognom>
</autor>
<any>1980</any>
<genere>Novel·la</genere>
</llibre>
</biblioteca>
Elements
Un element és la unitat bàsica d'XML. Té un nom i pot contenir text, altres elements, o les dues coses.
Sintaxi
<!-- Element amb contingut text -->
<titol>El nom de la rosa</titol>
<!-- Element buit (dos formats equivalents) -->
<separator></separator>
<separator/>
<!-- Element amb fills -->
<autor>
<nom>Umberto</nom>
<cognom>Eco</cognom>
</autor>
Regles per als noms d'elements
- Poden contenir lletres, dígits, guions
-, punts.i guions baixos_ - Han de començar per una lletra o guió baix
_ - No poden començar per un dígit ni per
xml(reservat) - Distingeixen majúscules i minúscules:
<Titol>≠<titol>
<!-- Noms vàlids -->
<titol/>
<_intern/>
<data-naixement/>
<codi.producte/>
<!-- Noms invàlids -->
<1element/> <!-- comença per dígit -->
<xml-config/> <!-- comença per "xml" -->
<el ement/> <!-- conté un espai -->
Atributs
Els atributs proporcionen informació addicional sobre un element. S'escriuen dins de l'etiqueta d'obertura com a parells nom="valor".
<!-- Un atribut -->
<llibre isbn="978-84-1234-567-8">...</llibre>
<!-- Múltiples atributs -->
<producte id="P001" categoria="electronica" preu="299.99" disponible="true"/>
<!-- Atributs amb valor buit -->
<camp obligatori="" tipus="text"/>
Element vs Atribut: quan usar cadascun?
| Usa un element per a... | Usa un atribut per a... |
|---|---|
| Contingut que es mostrarà | Metadades (identificadors, tipus) |
| Valors que es repetiran | Valors únics per a l'element |
| Informació que cal estructurar | Valors simples i escurts |
| Informació que pot evolucionar | Claus i referències |
<!-- Millor com a element (el contingut és rellevant) -->
<descripcio>Un ordinador portàtil d'alta gamma...</descripcio>
<!-- Millor com a atribut (és metadada d'identificació) -->
<producte id="P001" tipus="portàtil">
<nom>ThinkPad X1</nom>
</producte>
Comentaris
Els comentaris s'utilitzen per documentar el document XML. No poden contenir --.
<!-- Això és un comentari -->
<!--
Comentari
de múltiples línies
-->
<!-- No pot contenir -- això falla -- --> <!-- ERROR! -->
Entitats
Les entitats permeten referenciar caràcters especials o fragments de text reutilitzables.
Entitats predefinides
| Entitat | Caràcter | Descripció |
|---|---|---|
& |
& |
Et comercial |
< |
< |
Menor que |
> |
> |
Major que |
" |
" |
Cometes dobles |
' |
' |
Apòstrof |
<!-- Ús d'entitats predefinides -->
<formula>a < b && b > c</formula>
<url>https://exemple.com?a=1&b=2</url>
<cita>"La llibertat és la facultat de triar."</cita>
Entitats numèriques
<!-- Per referència decimal -->
<simbol>©</simbol> <!-- © -->
<simbol>€</simbol> <!-- € -->
<!-- Per referència hexadecimal -->
<simbol>©</simbol> <!-- © -->
<simbol>€</simbol> <!-- € -->
Seccions CDATA
Una secció CDATA (Character Data) conté text que l'analitzador XML no ha d'interpretar. S'usa quan el contingut té molts caràcters especials.
<codi_font><![CDATA[
if (a < b && c > d) {
printf("a=%d, b=%d\n", a, b);
}
]]></cdata>
<sql><![CDATA[
SELECT * FROM usuaris WHERE edat > 18 AND actiu = 1 & nom LIKE 'Jo%'
]]></sql>
Limitació de CDATA
Una secció CDATA no pot contenir la seqüència ]]> en el seu interior.
Documents ben formats (Well-Formed)
Un document XML és ben format quan compleix totes les regles sintàctiques de l'especificació XML. Si no és ben format, els analitzadors XML rebutgen el document completament (no hi ha tolerància d'errors com en HTML).
Regles de documents ben formats
| Regla | Correcte | Incorrecte |
|---|---|---|
| Un únic element arrel | <root><a/><b/></root> |
<a/><b/> |
| Etiquetes correctament niades | <a><b></b></a> |
<a><b></a></b> |
| Totes les etiquetes tancades | <br/> o <br></br> |
<br> |
| Noms d'atributs únics | <p id="1" classe="x"> |
<p id="1" id="2"> |
| Valors d'atributs entre cometes | id="1" o id='1' |
id=1 |
| Caràcters especials escapats | < & > |
< & > |
| Declaració d'encoding | encoding="UTF-8" |
(encoding incoherent) |
<!-- Document ben format -->
<?xml version="1.0" encoding="UTF-8"?>
<notes>
<nota id="1">
<titol>Reunió & planificació</titol>
<data>2026-06-01</data>
<cos><![CDATA[Reunió amb el client. Veure: a < b]]></cos>
</nota>
</notes>
<!-- Document MAL FORMAT — errors marcats -->
<?xml version="1.0"?>
<notes>
<nota id=1> <!-- ERROR: valor sense cometes -->
<titol>Nota 1 <!-- ERROR: etiqueta no tancada -->
<data>2026-06-01</data>
</nota>
<nota id="1"> <!-- ERROR: id duplicat (si és el mateix element) -->
<titol>Nota 2</tItol> <!-- ERROR: caixa diferent -->
</nota>
</notes>
La declaració XML
Tot i ser opcional, es recomana sempre incloure la declaració XML al principi del document.
| Atribut | Valors | Descripció |
|---|---|---|
version |
"1.0", "1.1" |
Versió de XML (1.0 és la més usada) |
encoding |
"UTF-8", "ISO-8859-1", etc. |
Codificació del fitxer |
standalone |
"yes", "no" |
Si el doc és independent (no necessita DTD externa) |
Usa sempre UTF-8
UTF-8 és la codificació recomanada. Permet representar qualsevol caràcter Unicode (accents, caràcters especials) sense problemes.
Instruccions de processament
Les instruccions de processament (PI) permeten passar informació a l'aplicació que processa el document.
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="estil.xsl"?>
<?xml-stylesheet type="text/css" href="estil.css"?>
<document>
<!-- contingut -->
</document>
Miniactivitat
Obre VS Code, crea un fitxer biblioteca.xml i introdueix una llista de 5 llibres amb: ISBN, títol, autor (nom i cognom), any, gènere i disponibilitat. Valida que el document és ben format amb l'extensió XML (Red Hat).