Volver al índice Hojas de estilo CSS en XML


CSS en XML

Las hojas de estilo CSS se desarrollaron para utilizarse junto con el lenguaje de marcas HTML, pero un documento XML también puede hacer referencia a una hoja de estilo CSS y visualizarse en el navegador.

El W3C aprobó en junio de 1999 la recomendación Associating Style Sheets with XML documents 1.0, editada por James Clark y en octubre de 2010 aprobó la recomendación Associating Style Sheets with XML documents 1.0 (2º edición), editada por James Clark, que definen cómo vincular documentos XML con hojas de estilo CSS.


Documentos XML sin hojas de estilo

Cuando un documento XML no enlaza a una hoja de estilo, los navegadores muestran el contenido del documento (etiquetas y texto en Firefox e Internet Explorer, sólo texto en Google Chrome).

Por ejemplo, el documento siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<biblioteca>
  <libro>
    <titulo>La vida está en otra parte</titulo>
    <autor>Milan Kundera</autor>
    <fechaPublicacion año="1973"/>
  </libro>
  <libro>
    <titulo>Pantaleón y las visitadoras</titulo>
    <autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>
    <fechaPublicacion año="1973"/>
  </libro>
  <libro>
    <titulo>Conversación en la catedral</titulo>
    <autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>
    <fechaPublicacion año="1969"/>
  </libro>
</biblioteca>

se vería así: Enlace a ejemplo 1.

ERROR (no puede mostrarse el objeto)

Volver al principio de la página


Documentos XML con hojas de estilo

De acuerdo con la recomendación Associating Style Sheets with XML documents 1.0 (2º edición), los enlaces a las hojas de estilo se realizan mediante la instrucción de procesamiento <?xml-stylesheet ?>. Esta instrucción permite enlazar hojas de estilo de forma similar a como se hace en una página web XHTML con la etiqueta <link />. En ambos casos el atributo href incluye el camino absoluto o relativo a la hoja de estilo CSS.

La diferencia es que la etiqueta <link /> forma parte del encabezamiento (etiqueta <head>), mientras que la instrucción de procesamiento <?xml-stylesheet ... ?> va al principio del documento, después de la declaración XML, como muestra el siguiente ejemplo:

Ejemplo de enlace a CSS en XHTML Ejemplo de enlace a CSS en XML
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
  <title>Ejemplo</title>
  <link href="ejemplo.css" rel="stylesheet" type="text/css" />
</head>

<body>
</body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="ejemplo.css"?>
<libro>
  <titulo>La vida está en otra parte</titulo>
  <autor>Milan Kundera</autor>
  <fechaPublicacion año="1973"/>
</libro>

Si un documento XML enlaza a una hoja de estilo, los navegadores ya no muestran las etiquetas, pero aplican la hoja de estilo.

Salvo si el documento XML utiliza el espacio de nombres del html (como se comenta más adelante), los navegadores no aplican la hoja de estilo predeterminada, por lo que en principio se verá todo el texto seguido (salvo que la hoja de estilo modifique la presentación, como se comenta en el apartado siguiente).

ejemplo.css Enlace a ejemplo 2-1 (xml)
titulo {
  color: red; 
}
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="ejemplo.css"?>
<libro>
  <titulo>La vida está en otra parte</titulo>
  <autor>Milan Kundera</autor>
  <fechaPublicacion año="1973"/>
</libro>

se vería así: Enlace a ejemplo 1.

ERROR (no puede mostrarse el objeto)


Como ocurre en el HTML,


Si el documento XML utiliza el espacio de nombres del html y utiliza etiquetas html, el navegador aplica la hoja de estilo predeterminada del navegador a esos elementos, como muestra el siguiente ejemplo:

Enlace a ejemplo 2-5 (xml)
<?xml version="1.0" encoding="UTF-8"?>
<libro xmlns="http://www.w3.org/1999/xhtml">
  <h1>La vida está en otra parte</h1>
  <autor>Milan Kundera</autor>
  <fechaPublicacion año="1973"/>
</libro>

Pero si no se utiliza el espacio de nombres, no lo hace, como muestra el siguiente ejemplo:

Enlace a ejemplo 2-6 (xml)
<?xml version="1.0" encoding="UTF-8"?>
<libro>
  <h1>La vida está en otra parte</h1>
  <autor>Milan Kundera</autor>
  <fechaPublicacion año="1973"/>
</libro>

Volver al principio de la página


Ejemplos de hojas de estilo para XML

Al escribir una hoja de estilo para un documento XML hay que tener en cuenta que los navegadores no aplican generalmente la hoja de estilo predeterminada (salvo que se utilicen etiquetas html asociandolas al espacio de nombres del xhtml como en los ejemplos anteriores), así que al escribir una hoja de estilo para un documento XML hay que definir propiedades que normalmente no se suelen definir.

La más importante es la propiedad display, que establece el modo de visualización del elemento.

Los valores posibles de la propiedad display son none, block, compact, inline, inline-block, inline-table, list-item | marker(-), run-in, table, table-caption, table-cell, table-column, table-column-group, table-footer-group, table-header-group, table-row y table-row-group.

Los modos de visualización más utilizados son:

Los ejemplos a continuación muestran el documento siguiente utilizando diferentes hojas de estilo

<?xml version="1.0" encoding="UTF-8"?>
<biblioteca>
  <libro>
    <titulo>La vida está en otra parte</titulo>
    <autor>Milan Kundera</autor>
    <fechaPublicacion>1973</fechaPublicacion>
  </libro>
  <libro>
    <titulo>Pantaleón y las visitadoras</titulo>
    <autor>Mario Vargas Llosa</autor>
    <fechaPublicacion>1973</fechaPublicacion>
  </libro>
  <libro>
    <titulo>Conversación en la catedral</titulo>
    <autor>Mario Vargas Llosa</autor>
    <fechaPublicacion>1969</fechaPublicacion>
  </libro>
</biblioteca>

Volver al principio de la página

Esta página forma parte del curso "XML: Lenguaje de Marcas Extensible" disponible en http://www.mclibre.org
Autor: Bartolomé Sintes Marco
Última modificación: 11 de marzo de 2012

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.