XML
- Introducció
- Estructura i sintaxi
- Normes de sintaxi bàsiques en XML
- Atributs en XML
- Declaració XML
- Referència a altres entitats
- Comentaris en XML
- Seccions CDATA en XML
- Ferramentes d’edició
- Elaboració de documents XML ben formats
- Utilització d’espais de noms en XML
- Bibliografia, webgrafia i crèdits
Introducció
XML (eXtensible Markup Language, Llenguatge de Marcat extensible) és un llenguatge desenvolupat per W3C (World Wide Web Consortium) que està basat en SGML (Standard Generalized Markup Language, Llenguatge de Marcat Generalitzat Estàndard).
El World Web Consortium
El World Wide Web Consortium (W3C) és la principal organització internacional d’estàndards per a la World Wide Web. Fundat el 1994 i actualment dirigit per Tim Berners-Lee, el consorci està format per organitzacions membres que mantenen personal a temps complet treballant junts en el desenvolupament d’estàndards per a la World Wide Web. El W3C també es dedica a l’educació i divulgació, desenvolupa programari i serveix de fòrum obert per a la discussió sobre la web.
XML és un llenguatge utilitzat per a l’emmagatzematge i intercanvi de dades estructurades entre diferents plataformes.
XML és un metallenguatge, és a dir, pot ser emprat per a definir altres llenguatges, anomenats dialectes XML. Per exemple, alguns llenguatges basats en XML són:
- GML (Geography Markup Language, Llenguatge de Marcat Geogràfic).
- MathML (Mathematical Markup Language, Llenguatge de Marcat Matemàtic).
- RSS (Really Simple Syndication, Sindicació Realment Simple).
- SVG (Scalable Vector Graphics, Gràfics vectorials escalables).
- XHTML (eXtensible HyperText Markup Language, Llenguatge de Marcat d’Hipertext extensible).
Estructura i sintaxi
Els documents XML estan formats per text pla (sense format) i contenen marques (etiquetes) definides pel desenvolupador. Cada etiqueta representa un element. Aquestes marques, és recomanable que siguen el més descriptives possible i, per escriure-les, s’utilitzen els caràcters menor que “<”, major que “>” i barra inclinada (slash) “/”.
Si en un document XML es vol guardar el nom Elsa, es pot escriure:
<nom> Elsa </nom>
La sintaxi utilitzada en l’exemple és la bàsica per escriure un element en XML:
<etiqueta> valor </etiqueta>
Cal observar que, entre l’etiqueta d’inici (<nom>
) i l’etiqueta de fi (</ nom>
) s’ha escrit la dada (valor
) que es vol emmagatzemar. En aquest cas Elsa
.
Elements buits
En un document XML, un element pot no contenir cap valor. En aquest cas cal escriure:
<etiqueta> </ etiqueta>
Es pot expressar el mateix escrivint:
<etiqueta />
Per escriure l’element nom
buit, es pot escriure:
<nom> </nom>
O també:
<nom />
Relacions pare-fill entre elements
D’altra banda, un element (pare) pot contenir a un altre o altres elements (fills):
<persona>
<nom> Elsa </nom>
<dona />
<data-de-naixement>
<dia> 18 </dia>
<mes> 6 </mes>
<any> 1996 </any>
</data-de-naixement>
<ciutat> Pamplona </ciutat>
</persona>
En aquest exemple, l’element “persona” conté quatre elements (fills): “nom”, “dona”, “data de naixement” i “ciutat”. I l’element “data de naixement” conté altres tres elements (fills): “dia”, “mes” i “any”.
Vegeu que, de tots els elements que apareixen en aquest exemple, només l’element “dona” està buit.
Element arrel d’un document XML
Tot document XML ha de tenir un únic element arrel (pare) del que descendiran tots els altres. En aquest cas, l’element arrel és “persona”. Gràficament, l’estructura d’elements d’aquest document es pot representar com es mostra a continuació:
D’aquesta manera, l’estructura de qualsevol document XML es pot representar com un arbre invertit d’elements. Es diu que els elements són els que donen estructura semàntica a el document.
Elements amb contingut mixt
Un element pot contenir contingut mixt, és a dir, text i altres elements:
<persona>
<nom>Elsa</ nom> viu a <ciutat>Pamplona</ ciutat>.
</ persona>
En aquest exemple, l’element “persona” conté els elements “nom” i “ciutat”, a més dels textos “viu en” i “.”.
Normes de sintaxi bàsiques en XML
En un document XML, tots els noms dels elements són case sensitive, és a dir, sensibles a lletres minúscules i majúscules, havent de complir les següents normes:
Poden contenir lletres minúscules, lletres majúscules, números, punts “.”, Guions mitjans “-“ i guions baixos “_”.
Així mateix, poden contenir el caràcter dos punts “:”. No obstant això, el seu ús es reserva per quan es defineixin espais de noms.
El primer caràcter ha de ser una lletra o un guió baix “_”.
D’altra banda, cal tenir en compte que darrere del nom d’una etiqueta es permet escriure un espai en blanc o un salt de línia. Per exemple, sintàcticament és correcte escriure:
<ciutat> Pamplona </ ciutat
>
Ara bé, no hi pot haver un salt de línia o un espai en blanc abans del nom d’una etiqueta:
<
ciutat> Pamplona </ ciutat>
Els següents elements no estan escrits correctament per incomplir alguna regla de sintaxi:
<ciudad>Pamplona</ciudad>
<día>18</dia>
<mes>6<mes/>
<ciudad>Pamplona</finciudad>
<_rojo>
<2colores>Rojo y Naranja</2colores>
< Aficiones >Cine, Bailar, Nadar</ Aficiones >
<persona><nombre>Elsa</persona></nombre>
<color favorito>azul</color favorito>
S’hauria d’escriure:
<ciudad>Pamplona</ciudad>
<día>18</día>
<mes>6</mes>
<ciudad>Pamplona</ciudad>
<_rojo/>
<colores2>Rojo y Naranja</colores2>
<Aficiones >Cine, Bailar, Nadar</Aficiones >
<persona><nombre>Elsa</nombre></persona>
<color.favorito>azul</color.favorito>
<color-favorito>azul</color-favorito>
<color_favorito>azul</color_favorito>
Les lletres no angleses (á, Á, ñ, Ñ …) estan permeses. No obstant això, és recomanable no utilitzar-les per reduir possibles incompatibilitats amb programes que puguin no reconèixer-les.
Pel que fa al caràcter guió “-“ i a punt “.”, Encara que també estan permesos per nomenar etiquetes, igualment s’aconsella evitar el seu ús; el guió perquè podria confondre amb el signe menys, i el punt perquè, per exemple a l’escriure color.favorito, podria interpretar-se que favorito és una propietat de l’objecte color.
Activitat 2. Errors de sintaxi
Revisa el següent document XML, detecta els errors i reescriu-lo correctament
<?xml version="1.0" encoding="UTF-8"?>
<frutas>
</frutas>
< frutas >
< fruta >
< nombre >cereza< nombre \>
< fruta \>
< fruta >
< nombre >naranja< nombre \>
< fruta \>
< frutas \>
Atributs en XML
Els elements d’un document XML poden tenir atributs definits en l’etiqueta d’inici. Un atribut serveix per proporcionar informació extra sobre l’element que el conté.
Donats els següents dades d’un producte:
- Codi: G45
- Nom: Barret de llana
- Color: negre
- Preu: 12.56
La seva representació en un document XML podria ser, per exemple:
<producte cod = "G45">
<nom color = "negre" preu = "12.56"> Barret de llana </ nom>
</ producte>
En aquest exemple s’han escrit tres atributs: codi, color i preu. Cal observar que, els seus valors ( “G45”, “negre” i “12.56”) s’han escrit entre cometes dobles (“). Tanmateix, també poden anar entre cometes simples ( ‘).
Si, per exemple, l’atribut codi
es volgués representar com un element, es podria escriure:
<producte>
<codi> G45 </ codi>
<nom color="negre" preu="12.56">Barret de llana</ nom>
</ producte>
Com es pot apreciar, ara el valor del codi no s’ha escrit entre cometes dobles.
Elements i atributs
Un element és un component lògic d’un document XML. Els elements solen tenir entitat pròpia. El contingut d’un element és tot el que es troba entre les etiquetes d’obertura i tancament, inclús si contenen altres elements (fills).
Per contra, els atributs solen representar propietats o característiques dels elements.
Normes de sintaxi
Els noms dels atributs han de complir les mateixes normes de sintaxi que els noms dels elements. A més, tots els atributs d’un element han de ser únics. Per exemple, és incorrecte escriure:
<dades x="3" x="4" i="5" />
No obstant això, sí que és correcte escriure:
<dades x="3" X="4" i="5" />
Els atributs continguts en un element, com en aquest cas x, X i y, han de separar amb espais en blanc, i no és significatiu el seu ordre.
Activitat 3. Creació de documents XML
Escriu un document XML que emmagatzeme la següent informació:
Ciutats
Nom | País | Continent |
---|---|---|
Nueva Delhi | India | Àsia |
Lisboa | Portugal | Europa |
El Cairo | Egipto | África |
Nota: el continent es respresentarà mitjançant un atribut.
Fets històrics
Nota: la descripció de cada fet cal representar-la mitjançant un atribut, la resta d’informació no.
Declaració XML
La declaració XML que es pot escriure al principi d’un document XML comença amb els caràcters “<?” i acaba amb “?>”.
Versió i codificació
Un document XML podria contenir la següent declaració XML:
<?xml version="1.0" encoding="UTF-8"?>
En aquesta declaració XML, està indicant que 1.0 és la versió de XML utilitzada en el document i UTF-8 (8-bit Unicode Transformation Format, Formato de Transformación Unicode de 8 bits) és la codificació de caràcters empleada.
En un document XML no és obligatori que aparega la declaració XML. Ara bé, si la inclou, ha d’aparèixer en la primera línia del document, i el caràcter “<” ha de ser el primer de dita línia, és dir, abans no poden aparèixer espais en blanc.
Atribut standalone
En una declaració XML, a més de la versió i la codificació dels atributs, també es pot escriure l’atribut standalone
, que pot prendre dos valors (“yes” o “no”):
<?xml version= "1.0" encoding="UTF-8" standalone="yes"?>
En escriure standalone="yes"
s’està indicant que el document és independent d’altres, com per exemple d’una DTD (Document Type Definition, Definició de Tipo de Documento) externa (o vorem més endavant). En cas contrari, significarà que el document no és independent.
En un document XML, escriure la declaració XML és opcional. Pero, si s’escriu, l’atribut version
és obligatori. No obstant, els atributs encoding
i standalone
són opcionals i, per defecte, els seus valors són “UTF-8” i “no”, respectivament.
Per una altra part, quan s’escriu l’atribut encoding
, sempre haurà d’aparèixer després de la versió. I, l’atribut standalone
, sempre que existisca, haurá d’estar en l’últim lloc.
Referència a altres entitats
En XML alguns caràcters que són especials pel seu significat (veure taula) i, per escriure’ls en un document XML, es poden utilitzar les referències a entitats mostrades en la següent taula:
Carácter | Entidad | Referencia a entidad |
---|---|---|
< (menor que) | lt (less than) | < |
> (mayor que) | gt (greater than) | > |
” (comilla doble) | quot (quotation mark) | " |
’ (comilla simple) | apos (apostrophe) | ' |
& (ampersand) | amp (ampersand) | & |
Donat l’arxiu “entidades.xml”:
<?xml version="1.0" encoding="UTF-8"?>
<entidades>
<menor_que><</menor_que>
<mayor_que>></mayor_que>
<comilla_doble>"</comilla_doble>
<comilla_simple>'</comilla_simple>
<ampersand>&</ampersand>
</entidades>
En obrir-lo en Google Chrome es podrà visualitzar:
Al navegador web, es pot veure que on s’han escrit les referències a entitats en el document XML (per exemple), es mostren els caràcters corresponents (per exemple <).
Caràcters problemàtics en XML: menor que (<) i ampersand (&)
En un document XML, el caràcter “<” és problemàtic perquè indica el començament d’una etiqueta. Per tant, en comptes d’escriure, per exemple:
<condicion>a<b</condicion>
Caldria utilitzar la referència a entitat escrivint:
<condicion>a<b</condicion>
El caràcter “>” sí que pot utilitzar-se en el text contingut en un element, i no és incorrecte escriure, per exemple:
<condicion>a>b</condicion>
Ara bé, es recomana fer ús de la seva referència a entitat (>
)
En un document XML, el caràcter ampersand també és problemàtic, ja que s’utilitza per indicar el començament d’una referència a entitat. Per exemple, no és correcte escriure:
<condicion>a==1 && b==2</condicion>
En el seu lloc s’ha d’escriure el següent:
<condicion>a==1 && b==2</condicion>
Ús de la cometa doble ( “) i de la cometa simple ( ‘) en atributs
Si el valor d’un atribut s’escriu entre cometes dobles ( “), aquest valor no podrà contenir aquest caràcter. Per exemple, no és correcte escriure:
<dato caracter="comilla doble(")"/>
Per a això, cal utilitzar la referència a entitat com es mostra a continuació:
<dato caracter="comilla doble(")"/>
De la mateixa manera passa amb la cometa simple ( ‘), sent incorrecte escriure, per exemple:
<dato caracter='comilla simple(')'/>
Pel que, en aquest cas, caldria usar com es mostra tot seguit:
<dato caracter='comilla simple(')'/>
D’altra banda, els valors d’atributs escrits entre cometes dobles ( “) sí que poden contenir el caràcter cometa simple ( ‘) i al revés. Per exemple, és correcte escriure:
<dato caracter="comilla simple(')"/>
<dato caracter='comilla doble(")'/>
En aquests casos, no és obligatori fer servir les referències a entitats, però sí recomanable.
Referències de caràcters en XML
En un document XML es poden escriure referències de caràcters Unicode amb els símbols & #, seguits de la valor decimal o hexadecimal de l’caràcter Unicode que es vulgui representar i, finalment, afegint el caràcter punt i coma “;”.
Representació del caràcter Euro (€) en XML
Donat el document XML “productos.xml”:
<?xml version="1.0" encoding="UTF-8"?>
<productos>
<nombre precio="12.56€">Gorro de lana</nombre>
<nombre precio="16.99€">Gorro polar</nombre>
</productos>
En visualitzar en un navegador web, es podrà veure el següent:
Cal observar que, en aquest cas, per representar el símbol de l’Euro (€), la primera vegada s’ha utilitzat el seu valor decimal (€
) en Unicode i, la segona vegada, el seu valor hexadecimal (€
).
Comentaris en XML
Per escriure comentaris en un document XML, aquests s’han d’escriure entre els caràcters “<!-“ i “->”. Per exemple:
<!-- Això és un comentari escrit en un document XML -->
Donat el fitxer XML “letras.xml”:
<?xml version="1.0" encoding="UTF-8"?>
<!--Ejemplo uso de comentarios.-->
<a>
<b>
<c cantidad="4">cccc</c>
<d cantidad="2">dd</d>
</b>
<e>
<f cantidad="8">ffffffff</f>
<!--g puede aparecer varias veces.-->
<g cantidad="5">ggggg</g>
<g cantidad="2">gg</g>
</e>
</a>
En un navegador es veurà:
En un document XML, no es poden escriure comentaris dins de les etiquetes. Per exemple, no és correcte escriure:
<element <!-- element buit -> />
D’altra banda, cal tenir en compte que en els comentaris d’un document XML no està permès utilitzar dos guions seguits:
<!-- dos guions seguits -- en un comentari dóna error ->
De manera que, no és possible niar comentaris en un document XML.
Seccions CDATA en XML
Un document XML pot contenir seccions CDATA (Character DATA) per escriure text que no es desitja que sigui analitzat. Per exemple, això pot ser útil quan es vol escriure text que continga algun dels caràcters problemàtics: menor que <
o ampersand &
.
En un document XML, per incloure una secció CDATA, s’escriu començant amb la cadena de caràcters “<! [CDATA [” i acabant amb els caràcters “]]>”.
Una secció CDATA pot contenir, per exemple, el codi font d’un programa escrit en llenguatge C:
<?xml version="1.0" encoding="UTF-8"?>
<ejemplo_CDATA>
<![CDATA[
#include <stdio.h>
int main()
{
float nota;
printf( "\n Introduzca nota (real): " );
scanf( "%f", ¬a );
if ( 5 <= nota )
printf( "\n APROBADO" );
return 0;
}
]]>
</ejemplo_CDATA>
En un navegador web es visualitzarà cosa semblant a:
Dins d’una secció CDATA no es pot escriure la cadena “]]>”. En conseqüència, no es poden niar seccions CDATA.
D’altra banda, no està permès escriure espais en blanc o salts de línia en les cadenes d’inici “<! [CDATA [” o fi “]]>” d’una secció CDATA
Ferramentes d’edició
Per a editar documents XML és suficient en disposar d’un editor de text pla, com Pluma o GEdit, però també podem utilitzar alguns editors específics com XML Copy Editor o un IDE amb algun connector com Visual Studido Code amb XML Tools.
Elaboració de documents XML ben formats
Es diu que un document XML està ben format (well-formed document) quan no té errors de sintaxi. Això inclou els següents aspectes:
- Els noms dels elements i els seus atributs han d’estar escrits correctament.
- Els valors dels atributs han d’estar escrits entre cometes dobles o simples.
- Els atributs d’un element s’han de separar amb espais en blanc.
- S’han d’utilitzar referències a entitats on siga necessari.
- Hi ha d’haver un únic element arrel.
- Tot element ha de tenir un element pare, excepte l’element arrel.
- Tots els elements han de tenir una etiqueta d’obertura i una altra de tancament.
- Les etiquetes han d’estar correctament niades.
- La declaració XML ha d’estar en la primera línia escrita correctament.
- Les seccions
CDATA
i els comentaris han d’estar correctament escrits.
Activitat 4: Els mòduls de DAW
Crea un document XML que emmagatzeme els mòduls del cicle de DAW indicant les hores de cada mòduls i el curs en què s’imparteix.
Utilització d’espais de noms en XML
Els espais de noms XML són un mecanisme per assegurar que els elements i els atributs d’un document XML tinguen noms únics. Estan definits en una recomanació del W3C. El problema que resolen és l’ambigüitat que sorgeix quan un document XML conté noms d’elements o d’atributs provinents de diversos vocabularis i en resulten diversos elements o atributs homònims (amb el mateix nom): si a cada vocabulari se li dóna un espai de noms diferent, es resol l’ambigüitat.
Per exemple:
<carta>
<palo>Corazones</palo>
<numero>7</numero>
</carta>
<carta>
<carnes>
<filete_de_ternera precio="12.95"/>
<solomillo_a_la_pimienta precio="13.60"/>
</carnes>
<pescados>
<lenguado_al_horno precio="16.20"/>
<merluza_en_salsa_verde precio="15.85"/>
</pescados>
</carta>
De forma que, si se inclouen els elements <carta>
en un document XML, s’origina un conflicte de noms. Per a resoldre’l, es poden utilitzar espais de noms (XML Namespaces). Per exemple, escrivint:
<?xml version="1.0" encoding="UTF-8"?>
<e1:ejemplo xmlns:e1="http://www.abrirllave.com/ejemplo1"
xmlns:e2="http://www.abrirllave.com/ejemplo2">
<e1:carta>
<e1:palo>Corazones</e1:palo>
<e1:numero>7</e1:numero>
</e1:carta>
<e2:carta>
<e2:carnes>
<e2:filete_de_ternera precio="12.95"/>
<e2:solomillo_a_la_pimienta precio="13.60"/>
</e2:carnes>
<e2:pescados>
<e2:lenguado_al_horno precio="16.20"/>
<e2:merluza_en_salsa_verde precio="15.85"/>
</e2:pescados>
</e2:carta>
</e1:ejemplo>
Per a definir un espai de noms s’utilitza la següent sintaxí:
xmlns:prefijo="URI"
En l’exemple, observa que, xmlns
és un atribut que s’ha utilitzat en l’etiqueta d’inici de l’element <ejemplo>
i, en aquest cas, s’han definit dos espais de noms que fan referència a los siguientes URI (Uniform Resource Identifier, Identificador Uniforme de Recurs):
- http://www.abrirllave.com/ejemplo1
- http://www.abrirllave.com/ejemplo2
Los prefixes definits són e1 i e2, respectivament. S’han afegit els prefixes a les etiquetes que apareixen en el document: <e1:carta>
, <e2:carta>
, <e1:palo>
, etc.
Definició d’un espai de noms per defecte
D’altra banda, es pot definir un espai de noms per defecte mitjançant la següent sintaxi:
xmlns = "URI"
D’aquesta manera, tant l’element on s’ha definit l’espai de noms, com tots els seus successors (fills, fills de fills, etc.), han de pertànyer a aquest espai de noms. Per exemple:
<?xml version="1.0" encoding="UTF-8"?>
<ejemplo xmlns="http://www.abrirllave.com/ejemplo1">
<carta>
<palo>Corazones</palo>
<numero>7</numero>
</carta>
</ejemplo>
En el següent exemple, inicialment es defineix un espai de noms per defecte per a l’element <ejemplo>
i els continguts en ell. Ara bé, posteriorment, es defineix un segon espai de noms, que per defecte afecta el segon element
<?xml version="1.0" encoding="UTF-8"?>
<ejemplo xmlns="http://www.abrirllave.com/ejemplo1">
<carta>
<palo>Corazones</palo>
<numero>7</numero>
</carta>
<carta xmlns="http://www.abrirllave.com/ejemplo2">
<carnes>
<filete_de_ternera precio="12.95"/>
<solomillo_a_la_pimienta precio="13.60"/>
</carnes>
<pescados>
<lenguado_al_horno precio="16.20"/>
<merluza_en_salsa_verde precio="15.85"/>
</pescados>
</carta>
</ejemplo>
En un document XML, per indicar que determinats elements -o tots- no pertanyen a cap espai de noms, s’escriu l’atribut xmlns
buit, és a dir, xmlns = ""
.
<?xml version="1.0" encoding="UTF-8"?>
<ejemplo xmlns="http://www.abrirllave.com/ejemplo1">
<carta>
<palo>Corazones</palo>
<numero>7</numero>
</carta>
<carta xmlns="http://www.abrirllave.com/ejemplo2">
<carnes>
<filete_de_ternera precio="12.95"/>
<solomillo_a_la_pimienta precio="13.60"/>
</carnes>
<pescados xmlns="">
<lenguado_al_horno precio="16.20"/>
<merluza_en_salsa_verde precio="15.85"/>
</pescados>
</carta>
</ejemplo>
En aquest cas, l’element
Bibliografia, webgrafia i crèdits
- Wikipedia contributors. (2020, September 13). Markup language. In Wikipedia, The Free Encyclopedia. Retrieved 15:51, September 15, 2020, from https://en.wikipedia.org/w/index.php?title=Markup_language&oldid=978142210
- Carlos Pes. (Febrer de 2017). Lenguajes de Marcas y Sistemas de Gestión de Información (LMSGI) disponible en Tutorial de LMSGI
- Bartolomé Sintés Marco. (Juny de 2020). XML: Lenguaje de marcas extensible, disponible en https://www.mclibre.org/consultar/xml/