En aquesta pràctica crearàs un catàleg de videojocs utilitzant XML i les tecnologies associades que hem estudiat al llarg del curs. El catàleg seguirà una estructura similar a la que utilitzen plataformes com Steam, incloent informació detallada sobre cada videojoc: títol, descripció, desenvolupador, plataformes, requisits del sistema, DLCs, valoracions, etc.
L’objectiu és demostrar el domini de tot l’ecosistema XML: des de la creació d’un document ben format fins a la seva validació amb esquemes (DTD i XSD), l’organització amb namespaces, i la visualització i transformació amb CSS i XSLT. La pràctica està estructurada en quatre blocs de dificultat progressiva, de manera que pots anar construint el projecte pas a pas i obtenir puntuació parcial segons el nivell assolit.
Objectius #
Els objectius generals de cada bloc són:
| Bloc | Objectius |
|---|---|
| 1 | Demostrar el domini de la sintaxi i estructura XML |
| 2 | Usar espais de noms per organitzar vocabularis i aplicar esquemes de validació |
| 3 | Visualitzar el document XML a través d’un full d’estils |
| 4 | Transformar el document XML en un document HTML |
Lliurables #
Els lliurables de la pràctica són els següents:
| Fitxer | Descripció | Bloc |
|---|---|---|
basic.xml |
Document XML bàsic sense namespaces | 1 |
cataleg.xml |
Document XML principal | 2 |
cataleg.dtd |
Esquema de validació DTD | 2 |
cataleg.xsd |
Esquema de validació XSD | 2 |
cataleg.css |
Full d’estils per a visualització | 3 |
cataleg.xsl |
Transformació XSLT amb CSS incrustat | 4 |
cataleg.html |
Resultat de la transformació XSLT | 4 |
Bloc 1: XML #
En aquesta pràctica crearàs un catàleg de videojocs utilitzant XML i les tecnologies associades que hem estudiat al llarg del curs. El catàleg seguirà una estructura similar a la que utilitzen plataformes com Steam, incloent informació detallada sobre cada videojoc.
Requisits del document XML:
-
Declaració XML amb versió 1.0 i codificació UTF-8.
-
Estructura jeràrquica amb almenys 3 nivells de profunditat.
-
Entre 15 i 20 videojocs amb la següent informació per a cadascun:
- Títol.
- Descripció.
- Desenvolupador.
- Distribuïdor.
- Data de llançament.
- Gèneres (pot ser més d’un).
- Plataformes disponibles (Windows, Mac, Linux, PlayStation, Xbox, Switch…).
- Preu (amb moneda).
- Puntuació (0-100).
- Nombre de ressenyes.
- Requisits mínims del sistema (versió de sistema operatiu, CPU, RAM en GB, VRAM en GB, espai en disc en GB).
- Etiquetes (cooperatiu, multijugador, un-jugador, món-obert, etc.).
-
DLCs o expansions per a almanco 3 videojocs, amb:
- Nom del DLC.
- Indicació de si és gratuït o no.
-
Ús coherent d’atributs per a:
- Identificadors únics (
id). - Moneda del preu.
- Altres metadades que consideris apropiades.
- Identificadors únics (
-
Comentaris XML explicant les seccions principals del document.
Bloc 2: Namespaces i schema #
Aquest bloc afegeix validació formal amb DTD i XSD, organització amb namespaces i ús d’atributs reservats XML.
Requisits del document XML amb espais de noms:
-
Dos namespaces per organitzar el vocabulari:
Prefix URI Propòsit cat:http://exemple.com/catalegEstructura del catàleg: element arrel, metadades, recursos joc:http://exemple.com/videojocDades dels videojocs: títol, gèneres, plataformes, preus, requisits, DLCs -
Col·lisió de noms resolta: Els namespaces han de resoldre almenys una col·lisió real. Per exemple,
cat:titol(títol del catàleg) ijoc:titol(títol del videojoc), ocat:descripcioijoc:descripcio. -
Atribut reservat
xml:lang: per indicar l’idioma:- A l’element arrel per definir l’idioma principal del document (per exemple,
ca). - A les descripcions dels videojocs per oferir versions en català i anglès.
- A l’element arrel per definir l’idioma principal del document (per exemple,
-
Atribut reservat
xml:baseper definir una URI base per a recursos externs. Secció de recursos (imatges, enllaços) que utilitzi URIs relatives resoltes contra la base definida. -
Secció de metadades amb el namespace
cat:, incloent:- Títol del catàleg.
- Autor (el teu nom).
- Data d’actualització.
- Descripció del catàleg en català i anglès (usant
xml:lang).
-
Validació DTD a través d’un fitxer
cataleg.dtdque:- Defineixi tots els elements i atributs del document.
- Estableixi la cardinalitat correcta (elements obligatoris, opcionals, repetibles).
- Declari els tipus d’atributs adequats (
ID,CDATA, enumeracions). - Sigui referenciat des del document XML amb
<!DOCTYPE>.
-
Validació XSD a través d’un fitxer
cataleg.xsdque, a més del que fa el DTD, inclogui:- Tipus de dades:
xs:dateper a dates,xs:decimalper a preus,xs:integerper a RAM/VRAM/disc/ressenyes. - Restriccions numèriques: puntuació entre 0 i 100, RAM i disc mínim 1.
- Patrons: codi de moneda amb
[A-Z]{3}(ISO 4217). - Enumeracions: plataformes (
Windows,Mac,Linux,PlayStation,Xbox,Switch), o gèneres principals. - Sigui referenciat des del document XML amb
xsi:schemaLocation.
- Tipus de dades:
Recorda que, per a validar amb DTD referenciat dins el document XML, pots usar:
xmllint --valid --noout cataleg.xmlI per a validar amb XSD, pots user:
xmllint --schema cataleg.xsd --noout cataleg.xmlBloc 3: CSS #
Aquest bloc requereix crear un full d’estils CSS que permeti visualitzar el document XML directament al navegador de manera presentable i funcional.
Requisits del document:
-
Instrucció de processament
<?xml-stylesheet?>al document XML per enllaçar el fitxer CSS. -
Propietat
displayaplicada correctament:- Elements contenidors com a
block. - Elements de dades en línia quan sigui apropiat.
- Ocultació d’elements no rellevants per a la visualització (per exemple, identificadors interns).
- Elements contenidors com a
-
Layout modern amb almenys una d’aquestes tècniques:
- CSS Grid per a la disposició general o les targetes de videojocs.
- Flexbox per a l’alineació d’elements.
-
Tipografia:
- Família tipogràfica adequada (sans-serif recomanat).
- Mides relatives (
em,rem,%) en comptes de píxels fixos. - Jerarquia visual clara (títols més grans, descripcions més petites).
-
Colors i variables CSS:
- Definició de variables CSS (custom properties) per a colors principals.
- Contrast adequat entre text i fons.
- Ús de colors per diferenciar seccions o categories.
-
Selectors:
- Selectors d’element per als elements XML.
- Selectors d’atribut per estilitzar segons valors (per exemple,
[moneda="EUR"]). - Selectors descendents per aplicar estils contextuals.
-
Pseudoelements
::beforei::after:- Afegir etiquetes o icones abans de certs camps (per exemple, “Preu:”, “🎮”, “⭐”).
- Mostrar el valor d’atributs amb
attr()(per exemple, mostrar la moneda del preu).
-
Pseudoclasse
:hoverper ressaltar elements en passar el ratolí (per exemple, els videojocs o els DLCs).
Bloc 4: XSLT #
Aquest bloc requereix crear una transformació XSLT que generi una pàgina HTML completa i funcional a partir del document XML.
Requisits de l’estructura de la transformació:
-
Declaració XSLT amb versió 1.0 i namespaces correctament definits per accedir als elements
cat:ijoc:. -
Sortida HTML5 amb
<xsl:output method="html" encoding="UTF-8"/>. -
Plantilles múltiples (
xsl:template):- Una plantilla principal que generi l’estructura HTML (
<html>,<head>,<body>). - Una plantilla específica per processar cada videojoc.
- Opcionalment, plantilles addicionals per a altres elements (DLCs, requisits…).
- Una plantilla principal que generi l’estructura HTML (
Elements XSLT obligatoris:
-
Iteració:
xsl:for-eachper recórrer col·leccions (gèneres, plataformes, etiquetes…).xsl:apply-templatesper aplicar la plantilla de videojoc a cada element.xsl:value-ofper extreure valors dels elements XML.
-
Ordenació:
xsl:sortper ordenar els videojocs per algun criteri (títol, puntuació o data). -
Condicionals:
xsl:ifper mostrar contingut només quan existeixi (per exemple, la secció de DLCs).xsl:choose/xsl:when/xsl:otherwiseper aplicar diferents estils o textos segons un valor (per exemple, classificar la puntuació com a “excel·lent”, “bo” o “regular”).
-
Variables globals:
xsl:variableper calcular estadístiques del catàleg: nombre total de videojocs (count()) i puntuació mitjana (sum() div count()). -
Atributs dinàmics: Attribute Value Templates
{}per generar atributs HTML amb valors del XML (per exemple,id="{@id}"oclass="puntuacio-{$categoria}").
Contingut de l’HTML generat:
-
Document HTML5 complet:
- Declaració
<!DOCTYPE html>. - Element
<html>amb atributlang="ca". - Secció
<head>amb<meta charset>,<title>dinàmic i estils CSS incrustats. - Secció
<body>amb el contingut.
Pots reutilitzar el full d’estils del bloc 3, adaptant els selectors.
- Declaració
-
Idioma únic: Mostrar només les descripcions en català, filtrant per
xml:lang="ca". -
Tres seccions de contingut:
- Capçalera: Una secció a dalt de la pàgina que mostri les metadades del catàleg (
cat:info): el títol, l’autor i la data d’actualització. Bàsicament, que l’alumne demostri que sap extreure i mostrar informació del bloc de metadades. - Llista o graella de videojocs (catàleg): El cos principal de la pàgina amb tots els videojocs. Pot ser una llista vertical o una graella (grid) de targetes, que mostri les dades principals de cada joc: títol, descripció, desenvolupador, plataformes, preu, puntuació i altres dades rellevants.No és necessari que mostri absolutament tots els camps.
- Estadístiques: Algun càlcul fet amb XSLT que demostri l’ús d’
xsl:variabledel punt 7 i funcions comcount()isum(). Per exemple, mostrar “Total: 17 jocs” i “Puntuació mitjana: 82/100”.
- Capçalera: Una secció a dalt de la pàgina que mostri les metadades del catàleg (
Recorda que, per a transformar el document XML en un document HTML pots usar:
xsltproc -o cataleg.html cataleg.xsl cataleg.xmlI que pots verificar la validesa del fitxer HTML generat amb el Markup Validation Service del W3C.
Autoavaluació #
A mesura que vagis avançant, recorda que pots seguir les passes descrites a l’autoavaluació de la pràctica per assegurar la correctesa dels documents abans de lliurar-los a través de l’aula virtual.