1. Lenguajes de marcado¶
HTML (HyperText Markup Language) es el lenguaje declarativo en el que están escritas las páginas web y es la piedra angular de la web. En este tema, aprenderemos sobre HTML centrándonos en las versiones más recientes del lenguaje.
Nota
HTML es un estándar vivo, mantenido por el grupo de trabajo WHATWG (Web Hypertext Application Technology Working Group). Échale un vistazo por encima a la especificación. Otra entidad, el W3C (World Wide Web Consortium), empaqueta la especificación estándar de vez en cuando y le asigna un número de versión (por ejemplo, 5.0 en 2014, 5.1 en 2016 o 5.2 en 2017). El W3C sí es el principal responsable de otros estándares de la web como CSS, que estudiaremos más adelante.
Importante
Las habilidades que deberías adquirir con este tema incluyen las siguientes:
Entender la diferencia entre un lenguaje de marcado con propósito semántico como HTML y un lenguaje de estilo.
Conocer la semántica de los elementos de HTML discutidos en clase.
Gestionar correctamente diferentes codificaciones de caracteres.
Saber crear documentos HTML válidos.
Usar correctamente las herramientas de desarrolladores integradas en navegadores; en particular, las Chrome DevTools.
Entender el papel jugado por un servidor web y cómo publicar en él contenido estático.
1.1. Sintaxis y elementos del lenguaje HTML¶
HTML es el lenguaje informático básico que se usa para escribir el contenido de las páginas web (por otro lado, CSS se usa para especificar los aspectos estéticos que afectan a la presentación de las páginas y JavaScript para programar los aspectos dinámicos). En esta actividad vas a conocer los elementos fundamentales de HTML. Te basarás para ello en el código de la página web mínima que aparece a continuación, que iremos ampliando con otros elementos del lenguaje.
Atención
La forma normal de trabajar con HTML es usar tu editor de texto favorito para editar el fichero y abrir el documento resultante (con extensión .html
) en un navegador. No obstante, cuando se dan los primeros pasos en el aprendizaje del lenguaje puede ser más cómodo usar entornos en línea como JSBin, que evitan tener que guardar y recargar constantemente. Hay otras herramientas similares como JSFiddle o CodePen, pero son menos recomendables desde el punto de vista educativo, ya que ocultan ciertas partes del documento HTML (por ejemplo, la cabecera) para no distraer al usuario con elementos obvios.
Una de los documentos web más sencillos que se pueden escribir es el siguiente. Comienza con la declaración de tipo de documento (doctype
). Le sigue el elemento (o etiqueta) raíz html
con un atributo opcional lang
que indica el idioma del texto. El elemento head
incluye metadatos sobre el documento: en este caso, la codificación de caracteres utilizada (hablaremos sobre ello más adelante) y el título del documento que aparecerá en la pestaña del navegador. El elemento body
contiene el texto principal del documento, que en este caso es un único párrafo (elemento p
) con un saludo.
1 2 3 4 5 6 7 8 9 10 | <!doctype html>
<html lang="es">
<head>
<meta charset="utf-8">
<title>Título del documento</title>
</head>
<body>
<p>¡Hola, mundo!</p>
</body>
</html>
|
Una de las ideas que tienes que tener más claras es que los diferentes elementos de HTML no representan propiedades estéticas de su contenido (como, por ejemplo, si un texto se muestra en negrita o si se ha de mostrar separado del texto precedente por un espacio vertical), sino únicamente propiedades semánticas (este texto enfatiza una determinada idea o este otro texto constituye un párrafo). Los aspectos estéticos se definen mediante lenguajes de estilo como CSS, que estudiaremos más adelante. Esta separación de presentación y contenido hace que el documento HTML sea independiente de la representación visual, táctil o auditiva que hagamos de él: en diferentes contextos podrían usarse diferentes hojas de estilo para el mismo documento; o un screen reader podría usar el contenido del bloque nav para permitir a una persona ciega elegir directamente qué sección del documento desea escuchar o consultar en un terminal braille; o un programa que procesa automáticamente un documento HTML (por poner un ejemplo, un buscador) no tendría que lidiar con aspectos secundarios meramente cosméticos. Además, gracias a la externalización de los estilos en un fichero aparte, es posible reutilizar los mismos estilos en múltiples documentos de HTML sin tener que duplicar su definición.
Atención
Una parte importante de la sociedad tiene alguna discapacidad (visual, motora, intelectual…), ya sea congénita o adquirida (por enfermedad, accidente o edad, por ejemplo), que le puede dificultar la interacción con una página o aplicación web si esta no se desarrolla adecuadamente bajo principios de accesibilidad que atiendan a la diversidad funcional de la sociedad. El uso de HTML como lenguaje de anotación semántica de contenido es uno de los principios fundamentales para cumplir este objetivo.
HTML tiene aproximadamente un centenar de elementos diferentes, cada uno de ellos con un propósito semántico bien definido. En este curso vamos a estudiar un subconjunto de ellos, cuyo cometido puedes consultar en MDN web docs y que se muestran en este documento más completo.
Hazlo tú ahora
La especificación estándar de HTML es un documento demasiado técnico para los propósitos de este curso y para la mayoría de los desarrolladores. La web MDN muestra esta información de forma más sencilla. En principio, acostúmbrate a usar esta web como referencia, frente a otras que pueden aparecer más arriba en los resultados de los buscadores. Usa la versión en inglés, ya que otros idiomas no siempre están actualizados. Estudia en MDN web docs todos los elementos de HTML que aparecen en este tema y asegúrate de que entiendes su propósito. Elementos adicionales, como los relacionados con los formularios, se estudiarán en otro tema. Reserva cita para tutoría si crees que no lo tienes todo claro.
El código del documento HTML más completo enlazado anteriormente es el siguiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 | <!DOCTYPE html>
<!-- <!DOCTYPE> informa al navegador de qué versión de HTML se usó para escribir el documento; desde
HTML5 se usa simplemente la forma anterior -->
<!-- Definiciones de elementos tomadas de MDN web docs, developer.mozilla.org -->
<!-- El elemento <html> contiene todo el documento HTML; el atributo lang indica el idioma del contenido -->
<html lang="es">
<!-- El elemento <head> provee información general (metadatos) acerca del documento, incluyendo su
título y enlaces a scripts y hojas de estilo -->
<head>
<!-- El elemento <meta> aporta metainformación del documento; el atributo charset de <meta> indica
la codificación de caracteres del documento: -->
<!-- <meta> es un ejemplo de "elemento vacío", que no requiere etiqueta de inicio y de fin;
en versiones anteriores del estándar, estos se elementos se representaban con una barra
al final: <meta charset="utf-8"/> -->
<meta charset="utf-8">
<meta name="author" content="Franz de Copenhague">
<!-- El elemento <title> indica el título del documento: -->
<title>Blog del profesor Franz de Copenhague</title>
<!-- El elemento <script> carga la librería de JavaScript MathJax que permite mostrar ecuaciones dentro de páginas
web: -->
<script src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-MML-AM_CHTML'></script>
<!-- La librería de JavaScript chessboard-element permite define un componente web que permite usar
el elemento personalizado chess-board (que no pertenece al estándar) en el documento -->
<script type="module" src="https://unpkg.com/chessboard-element?module"></script>
</head>
<!-- El elemento <body> representa el contenido de un documento HTML; solo puede haber un
elemento <body> en un documento: -->
<body>
<!-- El elemento <header> representa un grupo de datos introductorios o de navegación; puede
contener algunos elementos de encabezado, así como también un logo, un formulario de búsqueda, un
nombre de autor y otros componentes -->
<header>
<!-- Los elementos de encabezado implementan seis niveles de encabezado del documento; <h1> es el
más importante y <h6> el menos importante; un elemento de encabezado describe brevemente el
tema de la sección que presenta -->
<h1>Blog del profesor Franz de Copenhague</h1>
</header>
<!-- El elemento <nav> representa una sección de una página cuyo propósito es proporcionar enlaces de
navegación, ya sea dentro del documento actual o a otros documentos; ejemplos comunes de secciones
de navegación son menús, tablas de contenido e índices -->
<nav>
<!-- El elemento <ul>, de "unordered list", representa una lista no ordenada; cada elemento va
dentro del elemento <li> -->
<ul>
<!-- El elemento <a> es la base del hipertexto; a través del atributo "href" se indica el
documento al que se saltará si se activa el enlace; en este caso, se enlaza a un
elemento del documento actual etiquetado con un id -->
<li>Reflexiones sobre <a href="#física">física cuántica</a></li>
<li>Reflexiones sobre <a href="#ia">inteligencia artificial</a></li>
</ul>
</nav>
<!-- El elemento <main> representa el contenido principal del <body> de un documento o aplicación -->
<main>
<!-- El elemento <section> representa una sección genérica de un documento -->
<section>
<h1>Reflexiones sobre ciencia del profesor Franz de Copenhague</h1>
<!-- El atributo global id define un identificador único que no debe repetirse en todo el documento;
su propósito es identificar el elemento al vincularlo en scripts, hojas de estilo u enlaces -->
<section id="física">
<h2>Entradas sobre física cuántica ⚛</h2>
<!-- Teclear caracteres Unicode en Linux: Ctrl+Mayús+u 269b espacio: ⚛; otros sistemas operativos
tienen sus propias combinaciones de teclas -->
<!-- El elemento <p> es el apropiado para distribuir el texto en párrafos -->
<!-- El elemento <strong> es el apropiado para marcar con especial énfasis las partes más
importantes de un texto -->
<p>Esta sección incluye mis artículos <strong>recientes</strong> sobre física cuántica.</p>
<!-- El elemento <article> representa una composición auto-contenida en un documento, página,
o aplicación que se podría distribuir de forma independiente o reutilizable;
podría ser un mensaje en un foro, un artículo de una revista o un periódico, una entrada de
blog, un comentario de un usuario o cualquier otro elemento independiente del contenido -->
<article>
<h3>Consecuencias del entrelazamiento cuántico</h3>
<p>El entrelazamiento cuántico se define como lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed eiusmod tempor incidunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquid ex ea commodi consequat.</p>
<!-- El elemento <table> representa datos en dos o más dimensiones; cada fila se incluye dentro del
elemento <tr> y cada celda dentro del elemento <td> (o <th> para el encabezado de la tabla) -->
<table>
<!-- El elemento <thead> representa el encabezado de la tabla donde suelen aparecer los nombres de
cada campo -->
<thead>
<tr>
<th>Encabezado 1</th>
<th>Encabezado 2</th>
</tr>
</thead>
<!-- El elemento <tbody> encapsula una lista de filas de tabla que corresponden al cuerpo de la
tabla -->
<tbody>
<tr>
<td>a</td>
<td>b</td>
</tr>
<tr>
<td>c</td>
<td>d</td>
</tr>
</tbody>
<!-- El elemento <tfoot> representa el pie de la tabla -->
<tfoot>
<tr>
<td>Pie 1</td>
<td>Pie 2</td>
</tr>
</tfoot>
</table>
</article>
</section>
<section id="ia">
<h2>Entradas sobre inteligencia artificial ♟</h2>
<p>Esta sección incluye mis artículos recientes sobre inteligencia artificial.</p>
<article>
<h3>Hacia una inteligencia artificial de propósito general</h3>
<h4>Introducción</h4>
<p>Los recientes avances lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed eiusmod tempor incidunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquid ex ea commodi consequat. Quis aute iure
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint
obcaecat cupiditat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
En una charla reciente, Andrew Ng señalaba que:</p>
<!-- El elemento <blockquote> indica que el texto rodeado por el elemento es una cita; su atributo
cite indica la fuente de la cita -->
<!-- El atributo lang se define al principio para todo el documento, pero aquí se indica para la cita;
el valor del atributo ha de coincidir con alguno de los códigos de dos letras ISO 639-1:
https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes -->
<!-- “ es una entidad que permite introducir el signo de apertura de comillas en documentos
con codificaciones de caracteres que no incluyen dicho simbolo; existe un conjunto de entidades
definidas en el estándar como, por ejemplo, © para el símbolo de copyright -->
<blockquote cite="http://time.com/4631730/andrew-ng-artificial-intelligence-2017/" lang="en">
“We're making this analogy that artificial inteligence is the new electricity. Electricity
transformed industries: agriculture, transportation, communication, manufacturing. I think we are
now in that phase where artificial inteligence technology has advanced to the point where we see
a clear path for it to transform multiple industries.”
</blockquote>
<h4>Modelo matemático</h4>
<p>De todo lo anterior se deduce que lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed eiusmod tempor incidunt ut labore et dolore magna aliqua.</p>
<!-- Las ecuaciones para la librería MathJax se encierran dentro de $$ y usan una notación propia
de la librería (basada en el lenguaje LaTeX); atención: toda esta notación es específica de la
librería y no es HTML: -->
$$
[\boldsymbol{\nu}_t,\boldsymbol{\xi}_t] = \mathcal{N}\left(x_t,r^{1}_{t-1},\ldots,r^{R}_{t-1}\right)
$$
<!--
$$
I = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix}
$$
-->
<p>No obstante, lorem ipsum dolor sit amet, consectetur adipiscing elit, sed eiusmod tempor incidunt
ut labore et dolore magna aliqua.</p>
<!-- El elemento <pre> representa texto preformateado.; el texto en este elemento típicamente
se muestra en una fuente fija, no proporcional (monoespacio), exactamente como es mostrado en
el archivo: los espacios dentro de este elemento también son mostrados como están escritos -->
<!-- El elemento <code> indica que el contenido es código fuente -->
<pre><code>
interface PrimaryCore {
boolean verifyDataLine();
void sendData(in sequence<byte> data);
void initSelfDestruct();
}
</code></pre>
</article>
<article>
<h3>La memoria en las redes neuronales</h3>
<p>Tradicionalmente, las <em>redes neuronales</em> lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed eiusmod tempor incidunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquid ex ea commodi consequat.</p>
<!-- El elemento <figure> representa contenido independiente, a menudo con un título; si bien se
relaciona con el flujo principal, su posición es independiente de este; por lo general, se trata
de una imagen, una ilustración, un diagrama, un fragmento de código o un esquema al que se hace
referencia en el texto principal, pero que se puede mover a otra página o a un apéndice sin que
afecte al flujo principal -->
<figure>
<!-- El elemento <img> representa una imagen en el documento; su atributo src indica el URL de la
imagen; el atributo obligatorio alt define un texto alternativo que describe la imagen -->
<img src="https://media.springernature.com/lw685/springer-static/image/art%3A10.1038%2Fnature20101/MediaObjects/41586_2016_Article_BFnature20101_Fig4_HTML.jpg"
alt="Activaciones de los distintos cabezales de lectura/escritura
en una red neuronal derivable.">
<!-- El elemento <figcaption> representa un subtítulo o leyenda asociado al contenido del elemento
padre <figure>, pudiendo ser colocado como primer o último hijo -->
<figcaption>Esquema de una red neuronal derivable</figcaption>
</figure>
</article>
</section>
<!-- El elemento <aside> representa una sección de una página que consiste en contenido que está
indirectamente relacionado con el contenido principal del documento (por ejemplo, comentarios
al margen o publicidad) -->
<aside>
<p>Al hilo de las reflexiones anteriores, lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed eiusmod tempor incidunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquid ex ea commodi consequat.</p>
<!-- Uso del componente web definido en la librería chessboard-element; el uso de style no está
recomendado normalmente -->
<chess-board position="start" style="width: 256px"></chess-board>
</aside>
</section>
</main>
<!-- El elemento <footer> representa un pie de página para el contenido de sección más cercano o el
elemento raíz de sección; un pie de página típicamente contiene información acerca del autor de la
sección, datos de derechos de autor o enlaces a documentos relacionados -->
<footer>
<p>© 2020, Franz de Copenhague</p>
</footer>
</body>
</html>
|
1.2. Representación en memoria de un documento HTML¶
Imaginemos que tenemos que escribir un programa que cargue en memoria un documento HTML para luego realizar algún procesamiento sobre sus elementos (por ejemplo, mostrarlo en la ventana de un navegador, extraer los datos de una tabla desde un programa en Java u obtener sus palabras para indexarlas en la base de datos de un buscador). La estructura de datos que se utiliza para ello es un árbol en el que cada nodo es un objeto que representa una parte del documento. El DOM (Document Object Model) es un conjunto estándar de métodos (una interfaz) independientes del lenguaje para interactuar con este árbol que suele, por tanto, llamarse árbol DOM. En un tema posterior estudiaremos algunos de los métodos del DOM, pero por ahora centrémonos en la forma del árbol.
La siguiente figura muestra parte de un árbol DOM:
Árbol DOM por Birger Eriksson¶
Hazlo tú ahora
Dibuja el árbol DOM de los documentos HTML que hemos estudiado anteriormente y utiliza la herramienta Live DOM Viewer para comprobar si tu solución es correcta. Observa en especial el tratamiento que se hace de los espacios en blanco entre dos elementos: estos blancos tienen su propio nodo asociado lo que puede ser necesario tener en cuenta al movernos por el árbol. HTML es un lenguaje en el que, en general, las secuencias de más de un espacio en blanco, tabulador o salto de línea se tratan como si fueran un único espacio en blanco.
Consejo
Podría ser que en alguna ocasión necesites que entre dos elementos (por ejemplo, entre dos palabras) de tu página haya un espacio más grande lo habitual. Podrías en ese caso tener la tentación de usar la entidad
(también  
), repetida varias veces, para obtener aproximadamente este espacio extra. Comprueba una vez cómo funciona (observa la diferencia entre a b
y a b
) y luego no vuelvas a usarla nunca más (salvo para su verdadero propósito; sigue leyendo). Posteriormente veremos que, dentro del espíritu de separar presentación y contenido, son las hojas de estilo las que se han de encargar de definir de forma precisa la separación entre los elementos de una página. ¿Para qué existe entonces una entidad como
? Su propósito es indicar al navegador que nunca introduzca un salto de línea en el punto en el que aparece la entidad (cosa que el navegador puede decidir hacer con cualquier otro espacio en blanco) y la interprete estrictamente como un espacio en blanco. Escribe una latitud como 40° 41′ 21.4” N
en un documento HTML, cambia el ancho de la ventana del navegador e intenta que se separen sus componentes en dos líneas consecutivas.
1.3. Herramientas para desarrolladores¶
Los navegadores suelen incorporar de serie un conjunto de herramientas para facilitar el trabajo de los desarrolladores. En particular, a estas alturas del curso ya puedes usar el panel Elements de las Chrome DevTools para inspeccionar los distintos elementos de tu página; para ello, en el navegador Google Chrome (o Chromium) sitúa el puntero del ratón encima de alguna posición de tu página web y selecciona Inspeccionar en el menú contextual; otra opción para acceder a estas herramientas es abrirlas desde el menú del navegador o mediante el atajo de teclado Ctrl+Shift+I o F12. Existen extensiones similares para otros navegadores, como Firebug para Mozilla Firefox.
Hazlo tú ahora
Familiarízate, siguiendo esta página de su documentación, con la pestaña Elements del entorno de las Chrome DevTools, ya que te será extremadamente útil. Práctica después las distintas posibilidades con un documento de HTML más complejo como este.
Atención
El panel Elements de las Chrome DevTools muestra una información potencialmente distinta de la opción Ver código fuente la página que aparece en el menú contextual de una página (atajo de teclado Ctrl+U), ya que esta última opción muestra siempre el código inicial descargado por el navegador y no el HTML dinámico que el navegador tiene en memoria en un determinado momento, que puede ser diferente al inicial por manipulaciones del árbol DOM, como veremos en posteriores temas.
Importante
Durante el ciclo de desarrollo de una aplicación web es habitual realizar cambios en los ficheros de la aplicación (por ejemplo en el documento HTML, en las hojas de estilo o en el código de JavaScript) y comprobar a continuación cómo queda la aplicación tras recargarla. En algunas ocasiones el navegador puede optar, pese a la recarga, por utilizar el contenido previo almacenado en la caché lo que nos puede llevar a la falsa impresión de que nuestros cambios no tienen efecto. Dentro de la pestaña Network
de las Chrome DevTools existe una opción Disable cache
que hace que el navegador ignore el contenido de la caché, pero solo mientras las herramientas de desarrolladores estén abiertas. Es recomendable tenerla siempre marcada.
1.4. Codificación de caracteres¶
Aunque hoy día la mayor parte de los sistemas operativos trabajan con la codificación de caracteres de longitud variable UTF-8, que permite representar todos los caracteres del juego de caracteres Unicode, es importante que seas capaz de saber qué codificación de caracteres se usa en tus documentos web, en los de terceros, o en tu servidor web. No tener esto en cuenta puede hacer que tu web se visualice incorrectamente en algunos navegadores. En esta actividad hablaremos de codificación de caracteres siguiendo estas diapositivas.
Hazlo tú ahora
Observa que indicar una determinada codificación en el atributo charset
del elemento meta
no garantiza que los caracteres del documento usen realmente dicha codificación. Usa un editor de textos que permita redactar documentos bajo diferentes codificaciones y graba tu documento HTML usando las codificaciones UTF-8 e ISO-8859-15 (Latin-1); prueba a poner el valor correcto y el incorrecto en la directiva meta
y observa el resultado con los caracteres especiales al abrir el documento en el navegador. Estudia cómo se representan a nivel de bytes los caracteres en las distintas codificaciones con editores hexadecimales como HexEd.it.
1.5. Alojamiento en un servidor¶
Una página web normalmente se aloja en un servidor web. Si la máquina en la que lo hacemos fuera pública (nuestro ordenador personal normalmente no lo será), se podría acceder entonces al documento desde cualquier máquina conectada a internet usando convenientemente la URL del servidor. Existen muchos servidores web diferentes; algunos de los más conocidos son Apache HTTP Server (HTTPD), Internet Information Services, Apache Tomcat o Jetty. Mientras un programador desarrolla una aplicación web es habitual que lance un servidor en su máquina para ir probando sus cambios; en ese caso, el URL de acceso al servidor suele tener la forma http://localhost:8080
donde localhost
es el nombre de la propia máquina como host (IP 127.0.0.1) y 8080
es un puerto libre que es necesario indicar en el URL, ya que de no hacerlo el protocolo HTTP usa por defecto el puerto 80 (y HTTPS el 443), que estará normalmente reservado para comunicarse mediante HTTP con otros ordenadores.
Hazlo tú ahora
Una de las formas más sencillas de lanzar un servidor local es usar el que Python incluye por defecto. Colócate en el directorio raíz del contenido que quieres servir y haz:
python -m SimpleHTTPServer
1.6. Validación de documentos HTML¶
Un aspecto básico de los documentos HTML es que estos cumplan estrictamente con las directrices de HTML, tanto a nivel sintáctico (por ejemplo, las marcas de apertura y clausura respetan el anidamiento entre elementos) como semántico (no hay dos atributos id con el mismo valor o no se usan en un elemento atributos que correspondan a otros elementos). De esta manera, se allana el camino hacia la compatibilidad entre navegadores y la usabilidad de la página web; la validación, sin embargo, no asegura que el documento se vaya a ver como el desarrollador tiene en la cabeza ni que se muestre de igual manera en todos los navegadores.
Hazlo tú ahora
Usa el validador del W3C para validar alguna de las páginas web usadas en actividades anteriores; corrige todos los errores que te indique el validador hasta conseguir validarla. Algunas de las cosas que puedes probar son:
dejar una etiqueta sin cerrar
mover el elemento
meta
de la cabecera al cuerpo (body
) del documentomover un párrafo (
p
) a la cabecera (head
) del documentoeliminar el título (
title
) de la cabecera del documentoponer una imagen (
img
) sin el atributoalt
colocar un elemento de lista (
li
) fuera de la marca de lista (ul
)
Atención
En determinadas ocasiones el estándar de HTML permite omitir algunas etiquetas de clausura (por ejemplo, en ciertas ocasiones no es necesario cerrar la etiqueta </body>
de antes de </html>
y, aun así, el documento sigue siendo válido), pero son situaciones muy específicas, por lo que es más que recomendable crear siempre documentos que son válidos al margen de estas excepciones.
Nota
El lenguaje HTML evoluciona como cualquier otro lenguaje informático. Así, lo que hoy en día se representa como:
<meta charset=utf-8>
en XHTML o HTML4 se representaba como:
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" >
Ten en cuenta estas diferencias cuando encuentres código de ejemplo en HTML en alguna web. Los navegadores suelen procesar correctamente la mayor parte de la última versión del estándar existente cuando son publicados, pero no debes perder de vista que un gran número de usuarios tendrás probablemente versiones antiguas del navegador. Aunque no las veremos en este curso, existen maneras de desarrollar aplicaciones web teniendo en cuenta estas versiones antiguas sin renunciar necesariamente a la versatilidad de las recientes.