Guía XSLT Transformaciones - Irene-Frias/1DAM GitHub Wiki
XML Schema (XSD - XML Schema Definition) es un lenguaje utilizado para definir la estructura, contenido y restricciones de un documento XML. Su propósito es garantizar que los datos almacenados o intercambiados en XML sigan un formato específico y sean válidos según reglas predefinidas.
A diferencia de DTD (Document Type Definition), XML Schema ofrece una sintaxis más avanzada y expresiva, ya que:
- Está basado en XML, lo que facilita su legibilidad e integración.
- Permite definir tipos de datos (números, fechas, booleanos, etc.).
- Soporta estructuras complejas y reutilización de elementos.
- Es compatible con namespaces, lo que evita conflictos entre esquemas.
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html"/>
<xsl:template match="/">
<!-- Aquí va el contenido HTML que se genera -->
</xsl:template>
</xsl:stylesheet>
A continuación explicaremos un poco las etiquetas más relevantes sobre la estructura del documento XSLT.
Elementos del documento | Definición de las etiquetas |
---|---|
<xsl:stylesheet> |
Es la raíz del documento xslt |
(xmlns:xsl="...") |
Son espacios de nombres de xslt |
<xsl:output> |
El formato que da la salida del documento |
<xsl:template match="/"> |
La plantilla inicial está indicando que se aplica al nodo raíz |
Se suelen utilizar una serie de instrucciones en las que muestre el contenido de los elementos que queramos.
- Muestra el valor indicado del contenido indicado.
<xsl:value-of select="elemento"/>
- Dependiendo de si se cumple o no la condición ejecutará una cosa u otra. Hay varias formas de representar las condicionales una de ellas con un
<xsl:if>
y otra de ellas<xsl:choose>
. Un simple<xsl:if>
sería tal que así:
<xsl:if test="precio > 100">
<span class="rojo">Precio alto</span>
</xsl:if>
Uno complejo <xsl:choose>
, este es un equivalente a un if...else if...else
<xsl:choose>
<xsl:when test="condicion">...</xsl:when>
<xsl:otherwise>...</xsl:otherwise>
</xsl:choose>
- Para recorrer los elementos, repetirá una acción para cada nodo que coincida.
<xsl:for-each select="elementos/elemento">
<p><xsl:value-of select="nombre"/></p>
</xsl:for-each>
- Si queremos ordenar los resultados dentro de una sentencia para ordenar los nodos utilizarnos el elemento
<xsl:sort>
.
<xsl:sort select="nombre" data-type="text" order="ascending"/>
Hay otras expresiones dentro de bucles en los que se utilizan comúnmente para el formateo y la lógica de control.
- La expresión
<xsl:if test="position() != last()">, </xsl:if>
. Como se puede ver en el ejemplo, imprime cada autor separado por una coma, pero la condición<xsl:if test="position() != last()">, </xsl:if>
con las funcionalidades deposition()
y que sea!= last()
no imprimirá última coma.
<xsl:for-each select="autor">
<xsl:value-of select="nombre"/> <xsl:value-of select="apellido"/>
<xsl:if test="position() != last()">, </xsl:if>
</xsl:for-each>
- La expresión
<xsl:if test="contains(cadena, 'texto')"> ... </xsl:if>
. Comprueba una cadena específica que contiene una subcadena específica. Y cuando se quiera mostrar o filtrar los elementos que se mencionan en cierto campo.
<xsl:if test="contains(nombre, 'Web')">
<p>Este ciclo está relacionado con la web.</p>
</xsl:if>
- La expresión
<xsl:if test="starts-with(cadena, 'X')"> ... </xsl:if>
. Comprueba que la cadena comienza con un texto específico. Los elementos que comienzan por un prefijo determinado se clasifica o aplican estilos a los elementos que comienzan.
<xsl:if test="starts-with(nombre, 'Admin')">
<p>Este ciclo comienza por "Admin".</p>
</xsl:if>
- La expresión <xsl:if test="number(...) [condición]"> ... </xsl:if>`. Convierte el valor de un número de texto a número para poder compararlo.
<xsl:if test="number(precio) > 50">
<p>Este libro es caro.</p>
</xsl:if>
- La expresión <xsl:if test="string-length(...) [condición]"> ... </xsl:if>
. Devuelve el número de caracteres de una cadena en la que devuelve la longitud del contenido de la misma. Además permite validar si un campo está vacío
string-length(.) = 0`. Detectar texto largos para truncarlos o aplicar estilos.
<xsl:if test="string-length(titulo) > 10">
<p>Título largo</p>
</xsl:if>
Carácter | Código decimal | Código hexadecimal |
---|---|---|
á | á |
á |
é | é |
é |
í | í |
í |
ó | ó |
ó |
ú | ú |
ú |
ñ | ñ |
ñ |
ü | ü |
ü |
ç | ç |
ç |
También existen entidades con nombre. Se recomiendan las entidades numéricas porque no todas las entidades con nombre están definidas.
→ espacio no separable
©
→ ©
ñ
→ ñ