Salta el contingut

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:

  1. Declaració XML (opcional però recomanada)
  2. Pròleg (DTD o referència a schema, opcional)
  3. Element arrel (un únic element que conté tot)
  4. 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ó
&amp; & Et comercial
&lt; < Menor que
&gt; > Major que
&quot; " Cometes dobles
&apos; ' Apòstrof
<!-- Ús d'entitats predefinides -->
<formula>a &lt; b &amp;&amp; b &gt; c</formula>
<url>https://exemple.com?a=1&amp;b=2</url>
<cita>&quot;La llibertat és la facultat de triar.&quot;</cita>

Entitats numèriques

<!-- Per referència decimal -->
<simbol>&#169;</simbol>    <!-- © -->
<simbol>&#8364;</simbol>   <!-- € -->

<!-- Per referència hexadecimal -->
<simbol>&#xA9;</simbol>    <!-- © -->
<simbol>&#x20AC;</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 &lt; &amp; &gt; < & >
Declaració d'encoding encoding="UTF-8" (encoding incoherent)
<!-- Document ben format -->
<?xml version="1.0" encoding="UTF-8"?>
<notes>
    <nota id="1">
        <titol>Reunió &amp; 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.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
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).