Exercici XML RESOLT
Enunciat
Volem gestionar un inventari de productes electrònics per a una botiga. Cada producte té diferents atributs com nom, preu, marca i disponibilitat.
Exemple de tres productes:
Producte | Preu | Marca | Disponibilitat |
---|---|---|---|
Laptop Dell XPS 15 | 1399 EUR | Dell | 10 unitats |
Smartphone iPhone 13 | 999 EUR | Apple | 15 unitats |
TV Sony Bravia 4K (65”) | 1299 EUR | Sony | 5 unitats |
Solució 1. Utilitzant elements separats
<?xml version="1.0" encoding="UTF-8"?>
<inventari>
<!-- Cada producte té subelements per a cada dada -->
<producte>
<nom>Laptop Dell XPS 15</nom>
<preu>1399 EUR</preu>
<marca>Dell</marca>
<disponibilitat>10 unitats</disponibilitat>
</producte>
<producte>
<nom>Smartphone iPhone 13</nom>
<preu>999 EUR</preu>
<marca>Apple</marca>
<disponibilitat>15 unitats</disponibilitat>
</producte>
<producte>
<nom>TV Sony Bravia 4K de 65 polzades</nom>
<preu>1299 EUR</preu>
<marca>Sony</marca>
<disponibilitat>5 unitats</disponibilitat>
</producte>
</inventari>
Avantatges
- Molt clar i llegible: cada dada està en el seu element.
- Fàcil d’ampliar amb més informació (color, mida, característiques tècniques).
Desavantatges
- El document XML es fa més llarg amb molts productes/atributs.
- Pot ser menys eficient en conjunts de dades molt grans.
Solució 2. Utilitzant atributs i elements
<?xml version="1.0" encoding="UTF-8"?>
<inventari>
<!-- El nom es guarda com a atribut i la resta com a elements -->
<producte nom="Laptop Dell XPS 15">
<preu>1399 EUR</preu>
<marca>Dell</marca>
<disponibilitat>10 unitats</disponibilitat>
</producte>
<producte nom="Smartphone iPhone 13">
<preu>999 EUR</preu>
<marca>Apple</marca>
<disponibilitat>15 unitats</disponibilitat>
</producte>
<producte nom="TV Sony Bravia 4K de 65 polzades">
<preu>1299 EUR</preu>
<marca>Sony</marca>
<disponibilitat>5 unitats</disponibilitat>
</producte>
</inventari>
Avantatges
- Més concís que la Solució 1 (el nom no ocupa línia extra).
- Equilibri: combina atributs per a dades identificadores i elements per a dades de contingut.
Desavantatges
- Pot resultar inconsistent si barregem massa atributs i elements.
- No tan clar si el nombre d’atributs creix molt.
Solució 3. Utilitzant només atributs
<?xml version="1.0" encoding="UTF-8"?>
<inventari>
<!-- Tota la informació està dins dels atributs -->
<producte
nom="Laptop Dell XPS 15"
preu="1399"
moneda="EUR"
marca="Dell"
disponibilitat="10"
unitats="unitats"/>
<producte
nom="Smartphone iPhone 13"
preu="999"
moneda="EUR"
marca="Apple"
disponibilitat="15"
unitats="unitats"/>
<producte
nom="TV Sony Bravia 4K de 65 polzades"
preu="1299"
moneda="EUR"
marca="Sony"
disponibilitat="5"
unitats="unitats"/>
</inventari>
Avantatges
- Molt compacte: tota la informació en una sola línia per producte.
- Processament més senzill si sols cal llegir valors ràpidament.
Desavantatges
- Menys llegible per a humans.
- Poc flexible: difícil afegir descripcions llargues, llistes o subelements.
Comparació entre les tres solucions
Solució | Estil principal | Llegibilitat | Compactació | Flexibilitat |
---|---|---|---|---|
1 | Tot amb elements | Molt alta | Baixa | Molt alta |
2 | Mixt atributs/elements | Bona | Mitjana | Mitjana |
3 | Tot amb atributs | Baixa | Molt alta | Baixa |
## Qüestions resoltes
1. És ben format? Marca com a correctes o incorrectes i corregeix
<article>Disquet</article>
<article>Disquet</Article>
<article quantitat=3>Disquet</article>
Solució:
<article>Disquet</article>
→ Correcte<article>Disquet</Article>
→ Incorrecte (majúscules/minúscules). Correcte:<article>Disquet</article>
<article quantitat=3>Disquet</article>
→ Incorrecte (atribut sense cometes). Correcte:<article quantitat="3">Disquet</article>
2. Entitats: escriu correctament en XML
5 < 10 & "hola"
Solució:
<frase>5 < 10 & "hola"</frase>
3. CDATA: inclou aquest HTML dins d’un element <exemple>
usant CDATA
<p>Hola món</p>
Solució:
<exemple>
<![CDATA[
<p>Hola món</p>
]]>
</exemple>
4. Namespaces: combina dos elements <nom>
(alumnes i professors) en un mateix document XML evitant conflictes amb namespaces
Solució:
<classe xmlns:al="http://exemple.org/alumnes"
xmlns:pr="http://exemple.org/professors">
<al:nom>Ana</al:nom>
<pr:nom>Laura</pr:nom>
</classe>
5. Validació amb eina: crea un fitxer alumne.xml
i comprova amb xmllint
si està ben format
Solució:
xmllint --noout alumne.xml
Altres
1. Declaració XML: escriu la declaració recomanada per a un document en UTF-8 independent.
Solució:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2. Arrel única: corregeix l’error (dues arrels).
<persona>Ana</persona>
<persona>Pere</persona>
Solució:
<persones>
<persona>Ana</persona>
<persona>Pere</persona>
</persones>
3. Etiquetes niades: és correcte? Corregeix si cal.
<inventari>
<article>Disquet</inventari>
</article>
Solució: Incorrecte (mal niat).
<inventari>
<article>Disquet</article>
</inventari>
4. Noms vàlids: quins són invàlids?
<1Cotxe/>
<_usuari/>
<Aitor Tilla/>
<producte-123/>
Solució:
<1Cotxe/>
→ invàlid (no pot començar per número).<Aitor Tilla/>
→ invàlid (espais prohibits). Vàlids:<_usuari/>
,<producte-123/>
.
5. Majúscules/minúscules: són el mateix element?
<Article>Hola</Article>
<article>Hola</article>
Solució: No, són diferents perquè XML és case-sensitive.
6. Atributs: corregeix l’error.
<alumne id=1 nom=Lola/>
Solució:
<alumne id="1" nom="Lola"/>
7. Entitats: escriu correctament.
Resultat: 5 < 10 & 3 > 2
Solució:
<res>Resultat: 5 < 10 & 3 > 2</res>
8. CDATA: inclou aquest codi dins d’un element <script>
sense errors XML.
if (x < 10 && y > 5) alert("Hola");
Solució:
<script>
<![CDATA[
if (x < 10 && y > 5) alert("Hola");
]]>
</script>
9. Comentaris: escriu un comentari vàlid que diga “Temporal”.
Solució:
<!-- Temporal -->
10. Processing Instruction: afegeix un full d’estil estils.css
a un XML.
Solució:
<?xml-stylesheet type="text/css" href="estils.css"?>
11. Namespaces: escriu un document amb un <al:nom>
(alumnes) i <pr:nom>
(professors).
Solució:
<classe xmlns:al="http://exemple.org/alumnes"
xmlns:pr="http://exemple.org/professors">
<al:nom>Ana</al:nom>
<pr:nom>Laura</pr:nom>
</classe>
12. Namespace per defecte: fes que <nom>
siga d’alumnes i <pr:nom>
de professors.
Solució:
<classe xmlns="http://exemple.org/alumnes"
xmlns:pr="http://exemple.org/professors">
<nom>Ana</nom>
<pr:nom>Laura</pr:nom>
</classe>
13. Errors de ben formació: detecta i corregeix.
<!- Error ->
<text>Hola & adeu</text>
<Article>Hola</article>
Solució:
<!-- Error -->
<text>Hola & adeu</text>
<Article>Hola</Article>
14. Validació amb eina: comprova si alumne.xml
és ben format.
Solució:
xmllint --noout alumne.xml
15. Document complet: crea un XML amb arrel <inventari>
que continga un producte amb nom “Ratolí”, preu “25 EUR” i estoc “12 unitats”.
Solució:
<?xml version="1.0" encoding="UTF-8"?>
<inventari>
<producte nom="Ratolí">
<preu moneda="EUR">25</preu>
<estoc unitat="unitats">12</estoc>
</producte>
</inventari>