domingo 7 de marzo de 2010

HTML5 - WebDB

SQL está presente en HTML5, el lenguaje de consultas estructuradas más utilizado ha sido incluido en HTML5 por el consorcio W3C, y está disponible en los navegadores basados en WebKit (Chrome, Safari) y  Opera, esperemos que Firefox lo haga pronto.

html5webdb

La implementación está enfocada en el cliente del usuario mas no en el servidor, es decir todo dato que se almacene se hará en el navegador del usuario.

Puede ser utilizada para almacenar correos electrónicos localmente para alguna aplicación webmail o para el carrito de compras en un sitio de ventas en línea. La interacción de la API y la Base de Datos es asíncrona lo cual asegura que la interfaz del usuario no sea afectada con retrasos. Y porque la interacción con las bases de datos pueden darse simultáneamente en múltiples ventanas, la API soporta transacciones.

Para crear un objeto de base de datos se utiliza la llamada a la función (método) openDatabase() en el objeto window. Se pasan cuatro parámetros: El nombre de la base de datos, la versión de la base de datos, un nombre a mostrar, y el tamaño estimado en bytes.

var db = openDatabase(“notas”,””,”Ejemplo de notas”,1048576);


Ahora, con esa instancia podemos utilizar el método transaction(). Este método toma uno a tres parámetros: un retrollamado (callback :  puntero a una función ) de transacción, otra función para error, y otra para un retrollamado de éxito. La primera función requiere que se le pasen objetos SQL transaction en el que se ha de ejecutar las consultas con executeSQL(). Éste último método toma de uno a cuatro parámetros: Una consulta SQL, parámetros, una función que se hará cargo de la llamada (callback), y otra función si se presenta errores. La función que se hará cargo de la llamada a executeSQL(), necesita de el objeto de transacción y el objeto resultante de la consulta SQL el cual da acceso a las filas, al último ID ingresado, etcétera.



El ejemplo de aplicación “notas” es como sigue:



var html5 = {};
html5.db = null;

html5.open = function(){
var dbsize = 1024 * 1024; //1MB
html5.db = openDatabase("notas", "1.0", "Mis notas", dbsize);
}
html5.onError = function(tx, error){
alert('Error :'+error.message);
}
html5.onSuccess = function(tx, rs){
// mostramos los datos nuevamente
html5.mostrarNotas(tx, rs);
}
html5.createTable = function(){
html5.db.transaction(function(tx){
tx.executeSql("CREATE TABLE IF NOT EXISTS notas(ID INTEGER PRIMARY KEY, titulo TEXT, cuerpo TEXT)", []);
});
}
html5.addNote = function(titulo, nota){
html5.db.transaction(function(tx){
tx.executeSql("INSERT INTO notas(titulo, cuerpo) VALUES(?,?)",[titulo, nota],html5.onSuccess,html5.onError);
});
}
html5.mostrarNotas = function(renderFunc){
html5.db.transaction(function(tx){
tx.executeSql("SELECT * FROM notas ORDER BY ID DESC",[],renderFunc, html5.onError);
});
}
function mostrarNotas(tx, rs){
var salida = "";
for(var i = 0; i < rs.rows.length; i++){
salida += mostrar(rs.rows.item(i));
}
var notas = document.getElementById('notas');
notas.innerHTML = salida;
}
function mostrar(fila){
return "
  • "+fila.titulo + "

    "+fila.cuerpo+"

  • ";
    }
    html5.borrarNota = function(id){
    if(!confirm('Eliminar esta nota?'))return false;
    html5.db.transaction(function(tx){
    tx.executeSql("DELETE FROM notas WHERE ID=?",[id],mostrarNotas,html5.onError);
    });
    html5.mostrarNotas(mostrarNotas);
    }
    function init(){
    html5.open();
    html5.createTable();
    html5.mostrarNotas(mostrarNotas);
    }
    function agregarNota(){
    var titulo = document.getElementById('titulo');
    var cuerpo= document.getElementById('cuerpo');
    html5.addNote(titulo.value, cuerpo.value);
    titulo.value = "";
    cuerpo.value = "";
    html5.mostrarNotas(mostrarNotas);
    }


    Ver la demostración.



    Veamos qué hace cada una de ellas:



    Creamos una ámbito al cual llamaremos html5 para utilizarla más cómodamente.



    var html5 = {};
    html5.db = null;


    Luego le agregamos una función open() que nos permita abrir la base de datos.



    html5.open = function(){
    var dbsize = 1024 * 1024; //1MB
    html5.db = openDatabase("notas", "1.0", "Mis notas", dbsize);
    }


    Esta función onError() mostrará en una caja de alerta el error que se presente:



    html5.onError = function(tx, error){
    alert('Error :'+error.message);
    }


    onSuccess será invocado cada vez que termine una consulta, siempre en cuando sea satisfactoria:



    html5.onSuccess = function(tx, rs){
    // mostramos los datos nuevamente
    html5.mostrarNotas(tx, rs);
    }


    createTable nos permitirá crear la tabla si ésta aún no exista  :



    html5.createTable = function(){
    html5.db.transaction(function(tx){
    tx.executeSql("CREATE TABLE IF NOT EXISTS notas(ID INTEGER PRIMARY KEY, titulo TEXT, cuerpo TEXT)", []);
    });
    }


    addNote servirá para ingresar las notas, vea que se utiliza ? la misma que ha de ser reemplazada por los datos referidos entre corchetes “[]“:



    html5.addNote = function(titulo, nota){
    html5.db.transaction(function(tx){
    tx.executeSql("INSERT INTO notas(titulo, cuerpo) VALUES(?,?)",[titulo, nota],html5.onSuccess,html5.onError);
    });
    }


    mostrarNotas realiza la consulta que obtendrá los datos de la tabla notas:



    html5.mostrarNotas = function(renderFunc){
    html5.db.transaction(function(tx){
    tx.executeSql("SELECT * FROM notas ORDER BY ID DESC",[],renderFunc, html5.onError);
    });
    }


    Estas funciones “solas” que no pertenecen a var html5, procesa cada fila para poder generar una salida con formato, la misma que se muestra en el elemento div cuyo id es “notas”:



    function mostrarNotas(tx, rs){
    var salida = "";
    for(var i = 0; i < rs.rows.length; i++){
    salida += mostrar(rs.rows.item(i));
    }
    var notas = document.getElementById('notas');
    notas.innerHTML = salida;
    }
    function mostrar(fila){
    return "
  • "+fila.titulo + "

    "+fila.cuerpo+"

    ";
    }



  • borrarNota se encargará de eliminar una nota en base al ID que corresponda:



    html5.borrarNota = function(id){
    if(!confirm('Eliminar esta nota?'))return false;
    html5.db.transaction(function(tx){
    tx.executeSql("DELETE FROM notas WHERE ID=?",[id],mostrarNotas,html5.onError);
    });
    html5.mostrarNotas(mostrarNotas);
    }


    init() servirá para inicializar todo lo anterior, vemos que utilizando el ámbito var html5 el código es mucho más ordenado, init puede ser invocado al cargar el documento HTML (BODY) en respuesta al evento ONLOAD :




    function init(){
    html5.open();
    html5.createTable();
    html5.mostrarNotas(mostrarNotas);
    }


    agregarNota() es una función que permite ingresar los valores de titulo y cuerpo en la tabla notas con addNote, pero es necesario notar que utiliza elementos cuyos IDs son titulo y cuerpo respectivamente, basta crear un botón cuyo evento ONCLICK llame a esta función:



    function agregarNota(){
    var titulo = document.getElementById('titulo');
    var cuerpo= document.getElementById('cuerpo');
    html5.addNote(titulo.value, cuerpo.value);
    titulo.value = "";
    cuerpo.value = "";
    html5.mostrarNotas(mostrarNotas);
    }

    jueves 4 de marzo de 2010

    OneMangaReader – Descarga mangas a tu PC

    Esta es una aplicación para Windows que permite visualizar y descargar mangas a tu PC. image

    Requerimientos: Conexión a internet directa (sin proxies por ahora)

    El único inconveniente, LOS MANGAS ESTÁN EN INGLÉS.

    Aquí las instrucciones para los que se pierden con mucha facilidad.

    Primero: descargar el programa OneMangaReader y extraerlo en una carpeta vacía.

    image

    Luego hacer doble clic para ejecutar el programita.

    image

    A continuación les aparecerá una ventana como la de abajo. Como han de notar, no hay nada más que listas desplegables que no contienen nada.

    El funcionamiento que lo hice, no pensando en ustedes sino en mí (disculpen), es el siguiente.

    Primero hacen clic en Fetch de Manga list para obtener la lista de mangas disponibles desde el sitio del cual se sirve.

    image

    Verán la lista de los mangas disponibles y eligen un manga.

    Luego como en el anterior paso se sigue de manera ordenada:

    Hacen clic para Chapters y obtendrán la lista de capítulos publicados, eligen el capítulo a visualizar o descargar.

    image

    Y después la lista de páginas disponibles en tal capítulo.

    image

    Con el botón View se puede ver la página elegida  y también los botones [<] y [>] permiten ver la anterior o siguiente página respectivamente.

    Y por último el botón Download, permite descargar todas esas páginas dentro de la carpeta desde donde se ha iniciado el programa.

    image

    image

    Dentro de esa carpeta con el nombre del manga y ordenado por capítulos podrás leer el manga más cómodamente.

    Me olvidaba, el botón GetAll permite descargar varios capítulos en lote, para ello primero se ubica desde qué capítulo iniciar (de abajo hacia arriba en la lista desplegable de Chapters).

    NOTA: Siempre es bueno revisar dos veces como mínimo las descargas, ya que suele ocurrir que algunas páginas no son descargadas, eso depende de la velocidad de conexión. No se preocupe, si vuelve a descargar un capítulo ya descargado, solamente las páginas que no pudieron ser descargadas se obtendrán desde internet.

    Espero les sirva, lo hice para mi uso personal, pero es mejor compartirlo.

    Cualquier duda o queja, escríbanlas a Santa Claus.

    Recomiendo usar el visor Viewer2 si cuentas con una tarjeta de vídeo decente.

    image

    miércoles 24 de febrero de 2010

    URL Shortener – Extensión Chrome para acortar sitios

    URL Shortener es una extensión escrita para Google Chrome / Chromium que permite acortar direcciones de sitios web utilizando distintos servicios para ese propósito, tales como Goo.gl, Bit.Ly, Youtu.be, TinyURL entre otros muchos más.

    Además permite una vez obtenida la dirección acortada, poder publicarla en twitter, utilizando el título de la página + el enlace acortado, el cual es posible modificarlo antes de enviarlo.

    image

    Soporta los siguientes servicios para acortar direcciones:

    • Bit.Ly + history (only 100/day)
    • Goo.gl
    • Youtu.be
    • TinyURL
    • Cli.Gs
    • Is.Gd
    • Tr.Im
    • URL Corta
    • Migre.me
    • Buk.me
    • Ir.Pe
    • Coge.la
    • Durl.me
    • Bt.gd
    • Arm.in
    • Siki.ru
    • kissa.be!
    • Chilp.it
    • u.nu
    • fo.ly
    • j.mp
    • tllg
    • voizle

    Las mismas que pueden ser activadas/desactivadas desde las opciones de configuración de la extensión.

    Lo pueden obtener desde Softpedia, ó desde la lista oficial de extensiones para Google Chrome

    jueves 18 de febrero de 2010

    Convierte cualquier sitio a PDF con Web2PDFconvert

    Web2PDFConvert.com es un sitio que permite convertir URLs a PDF, desde luego que tiene limitaciones, tales como el no poder acceder a páginas protegidas por “login” o SSL que no permite el acceso directo de sitios como este. Pero en muchos sitios funciona, inclusive SSLs (https:).

    Sin embargo, como usuario del navegador Chrome tuve algunas dificultades, bueno, en relidad algunas molestias, tales como: Google Chrome no permite abrir la descarga del PDF (y cualquier otro archivo) directamente, siempre es necesario guardarlo en alguna carpeta para luego poder abrirlo, idea que no me agrada, y tampoco permite la inclusión de un visor de PDFs en el mismo navegador (talvez lo haga con Adobe PDF, pero no lo utilizo puesto que es pesado) pues utilizo otro visor PDF más ligero.

    Felizmente existe Google Docs, el cual nos permite ver PDFs, y también existen extensiones para Chrome, por tanto me di la tarea de hacer esta extensión para directamente convertir un sitio a PDF usando este servicio gratuito y luego enlazarlo a Google Docs PDF viewer para visualizarlo directamente en el navegador.

    image

    Además incluye opciones para regular la calidad de las imágenes (eso define el tamaño del archivo generado) asimismo permitir copiar objetos ActiveX como por ejemplo Flash.

    Solamente hay que hacer clic en el botón Convert to PDF y esperar hasta que el servicio devuelva el enlace del documento PDF obtenido, y puede demorar un poco, sea paciente y no cierre la extensión.

    image

    Una vez el Web2PDFconvert haya convertido el sitio a PDF nos devolverá el enlace, y se puede optar por descargarlo o visualizarlo en Google Docs. También puede ser que el sitio no pueda ser convertido, para ello también existe la opción del enlace a la página de conversión más abajo (ver imagen de arriba)

    image Además notará que muestra el tamaño del archivo resultante.

    image

    Ahí ven una captura del visor PDFde Google Docs visualizando el documento generado.

    Espero les sirva tanto como a mí.

    Extensión Web2PDFConvert -> https://chrome.google.com/extensions/detail/bkanhckocooacphbnclgcndnpfpoppdk

    sábado 13 de febrero de 2010

    MobileBuzz – Extension Google Chrome para Google Buzz

    MobileBuzz es una sencilla extensión para Google Chrome que permite ver y publicar en Google Buzz, aunque tiene algunas limitaciones, por la misma naturaleza de las extensiones.

    Para lograr hacerlo funcionar adecuadamente, primero haz de visitar al sitio oficial de la versión para móviles de Google Buzz.

    Google Buzz Mobile

    Si no has entrado en sesión con gmail, entonces ahí mismo podrás hacerlo.

    Una vez ingresado, la siguiente ventana aparecerá.

    image

    NO presiones Denegar, sino no va a funcionar la extensión.

    Elige ya sea Permitir o No permitir nunca a este sitio almacenar información en su equipo. Esto hará que esa configuración sea recordada en Google Chrome. De no hacerlo, esas ventanas de confirmación impedirián que el sitio sea mostrado en la extensión.

    Si se elige la opción Permitir, mostrará otra ventana de Gears, para permitir o no averiguar nuestra ubicación, la misma que se desplegará junto a nuestras publicaciones en Google Buzz, si se permite ello.

    image

    Pero he notado que la configuración Permitir a Gears almacenar información y NO permitir averiguar la ubicación, no deja que veamos nada en el sitio de google buzz móvil. Por lo tanto queda o bien no permitir almacenar información a gears en nuestro equipo Ó permitir a ambos, nótese que si no se permite lo primero, lo segundo no será necesario.

    Mas tarde se puede modificar esa configuración en las opciones de Google Chrome o Chromium.

    image

    Visitando la ventana opciones tal como se muestra en la imagen.

    image

    Se puede modificar esa configuración.

    imageimage 

    También he de mencionar que únicamente las opciones Following, Nearby, MyPosts están disponibles en el mismo sitio. No es un error de la extensión.

    image

    Ahora ya será posible utilizar MobileBuzz.

    image

    Importante: Pueda ser que esta extensión deje de funcionar por algún cambio hecho en el sitio oficial, si nota algún problema por favor verifique primero que no se muestren esas ventanas que obstruyen el acceso directo al sitio web.

    Sitio de descarga de MobieBuzz : https://chrome.google.com/extensions/detail/jeanfjhmicflioichibjklhfkbimaflc

    miércoles 3 de febrero de 2010

    MPEG-LA fortifica la decisión de tomar a Theora como la única opción de video en HTML5

    image A pesar del reciente interés mostrado en adoptar el tag de vídeo en HTML5, existe todavía un problema mayor: no hay un estándar de vídeo codec para utilizarlo. Los dos principales a elegir son el h264 que es software propietario y además patentado, y el otro es Theora que es libre y opensource. En un reciente comentario en un artículo de LWN.net acerca de la situación problemática, Trelane publicó un intercambio de correo electrónico que sostuvo con MPEG-LA, el cual de lejos asienta a Theora como la opción sensata y obvia.

    Como muchos de ustedes ya deben conocer, hay una guerra de codecs para el tag de vídeo HTML5. La disputa está entre el codec propietario h264 y Ogg Theora, que como ya lo mencioné, es libre y de código abierto. Theora tiene el beneficio porque es LIBRE y ABIERTO, mientras que h264 tiene la ventaja de tener un mejor soporte de hardware.

    La gran desventaja con la h264 es que se necesita pagar una gran cantidad de dinero por una licencia para que pueda ser distribuida y así permitir a los usuarios su utilización. Se necesita una licencia para codificar, distribuir en inclusive decodificar – lo cual muestra lo obvio de la problemática para los proyectos “open source.” Apple y Google ya han pagado por la licencia, y por ende, ambos Safari y Chrome tienen soporte de h264; sin embargo, la licencia no es extensible, de tal manera que las distribuciones de Linux no pueden incluir a Google Chrome. Chromium, la variante “open source” de Chrome, no tiene ese soporte. Ambos Mozilla y Opera se niegan a pagar por esa licencia.

    Gracias a Trelane, tenemos ahora las aseveraciones directamente de MPEG-LA con respecto a las posibilidades de extensibilidad ( o mejor dicho, la carencia) de h264. Él contactó a MPEG-LA y les preguntó si los desarrolladores y productos libres y “open source” necesitan pagar por las licencias también, ya que no se pudo encontrar dicha información en las preguntas frecuentes (FAQ). Y las respuestas fueron claras y contundentes.

    En respuesta a su pregunta específica, bajo la licencia las regalías son pagadas en todos los productos MPEG-4 Visual/AVC de esa característica, y las licencias no hacen ninguna distinción por los productos ofrecidos gratuitamente (ya sea “open source” o de otra índole),

    explica Allen Harkness, director de licenciamiento Global de MPEG-LA,

    Pero, hago notar que las licencias hace referencia a este problema al incluir un mínimo por debajo por el cual las regalías no son “pagables” con la finalidad de promover su adopción y minimizar el impacto en usuarios de menor volumen.

    En otras palabras, h264 simplemente no resulta una opción adecuada para sofware libre y “open source.” No es compatible con “Free”, y los costos de licencia son prohibitivos para la mayoría de proyectos Libres y “open source.” Esto significa que si la web se estandariza bajo este codec, estaríamos cayendo en la misma trampa que ya se vivió con Flash, GIF, e incluso Internet Explorer 6.

    I de acuerdo a Christopher Blizzard.

    […] Estos formatos fuertemente patentados ganan las mismas ventajas que los formatos libres – una gran cantidad de herramientas gratuitas e inmensas cantidades de soporte ad-hoc de la misma gente del software libre – pero sin dejar de lado la habilidad de aplicar y obtener beneficios económicos en regiones del planeta donde las patentes son aplicables,

    Blizzard nos advierte,

    De hecho es una brillante estrategia, a pesar de que el resultado es que los verdaderos costos de las patentes están ocultas a la vista de la mayoría de las personas.

    Por lo tanto la adopción de dicho codec, resultaría ser totalmente inconveniente para muchos proyectos libres y por ende se estaría dividiendo otra vez la preferencia de navegadores, dado el hecho de que Google ya está utilizando este codec en Google Chrome y además de ponerlo en “funcionamiento“ al habilitar la opción de reproducción de vídeos en Youtube bajo HTML5, utilizando precisamente h264. Mientras que por el contrario Firefox, Opera y hasta el mismo Chromium no permiten el codec mencionado, haciendo inútil dicha característica de Youtube con HTML5. En verdad esto es irónico, puesto que se busca estandarizar la web, pero con este comportamiento se está tratando de repetir la misma historia pero con otros actores. Esperemos que por una web saludable se logre tomar la decisión correcta (Theora).

    Fuente: OSNews

    martes 2 de febrero de 2010

    ¿Qué es HTML5?

    HTML5 es la quinta revisión de HTML (Hyper Text Markup Language). HTML5 está en desarrollo ya por algún tiempo y parecía lejano el día de cuando comencemos a utilizarlo, ahora ya estamos llegando al momento de cuando esto se convierta una práctica común entre los desarrolladores aunque muchos predicen que recién el 2022 se hará un uso masivo de ello, pero a pesar de ello ya existen navegadores con soporte completo del HTML5.

    Los webmasters ven esto como un gran paso hacia el desarrollo de aplicaciones ricas en multimedia y con mejores prestaciones. HTML5 cambiará la manera que trabajamos con el HTML ya que se convertirá en un estándar de codificación y no únicamente un markup para HTML4 sino un nuevo lenguaje HTML5 que hará más sencillo su uso para todos incluyendo navegadores y desarrolladores; ya existen muchos ejemplos hechas en Javascript y algunas APIs que ya utilizan el estándar a venir “HTML5.”

    HTML5 especifica dos variantes de sintaxis para HTML: un clásico HTML (text/html), la variante conocida como HTML5 y una variante XHTML conocida como sintaxis XHTML5 que deberá ser servida como XML (XHTML) (application/xhtml+xml) y es la primera vez que HTML y XHTML se han desarrollado en paralelo, cuyo desarrollo está siendo regulado por el consorcio W3C.

    La mayoría de los sitios están basadas en HTML y utilizan HTML 4, pero esto irá cambiando en los próximos meses y años, hasta ahora el código HTML apenas ha evolucionado de la versión HTML 2.0 únicamente corrigiendo algunos problemas hasta la versión HTML 4, junto a algunas nuevas características; HTML 5 se basa en el HTML 4 pero por su propia cuenta será completamente diferente y cambiará la manera que su navegador muestre los sitios web en el monitor de su PC. HTML 5 tendrá mayor inclinación al uso de JavaScript, y si tiene Javascript deshabilitado las páginas se mostrarán incorrectamente.

    Nuevos elementos

    HTML5 incluye un conjunto de nuevos elementos y atributos principalmente originados por las formas típicas de uso de los sitios web modernos. Algunos elementos son técnicamente similares a las etiquetas <div> y <span>, pero tienen un significado semántico, por ejemplo <nav> es un bloque de navegación del sitio web y <footer> la parte inferior de la página. Hay otros elementos nuevos que proporcionan nuevas funcionalidades a través de una interfaz estandarizada, como los elementos <audio> y <video> que además están disponibles en Javascript. Por otra parte se mejoró bastante el elemento <canvas>

    Algunos elementos de HTML 4.01 han quedado obsoletos tales como <font> y <center>, ya que las hojas de estilo son totalmente suficientes para ello. Y se enfatiza bastante en la importancia del scripting DOM para el comportamiento de la web.

    Diferencias con HTML 4 y XHTML

    Nuevos elementos: article, dialog

    Nuevos atributos: media, ping, autofocus, inputmode, min, max, pattern.

    Elementos eliminados: acronym, applet, basefont, big, center, dir, font, frame, frameset, isindex, noframes, s, strike, tt, u

    Atributos eliminados:

    • rev y charset en <link> y <a>
    • target en <link>
    • nohref en <area>
    • profile en <head>
    • version en <html>
    • name en <map>
    • scheme en <meta>
    • archiv, classid, codetype, declare y standby en <object>
    • valuetype en <param>
    • charset en <script>
    • summary en <header>
    • axis y abrr en <td> y <th>

    Borrador actual de especificaciones de HTML 5.

    Estructura

    Veamos cómo sería la estructura HTML 5 de un sitio web, en este ejemplo de una página de 2 columnas.

    La siguiente imagen muestra la actual manera de hacerla con HTML 4

    html4

    Y la siguiente figura muestra de cómo se haría lo mismo con HTML 5

    html5

    Como se nota, la última manera resultará siendo más limpia puesto que HTMl 5 efectivamente hace más sencillo estructurar una página web utilizando los nuevos elementos. Una vez que la mayoría de los navegadores soporten HTML 5 la web será más rica y más veloz.

    Navegadores compatibles con HTML 5

    Con el creciente interés en HTML 5 muchos navegadores se están perfilando a ese aspecto, actualmente Webkit (Safari, Google Chrome, Shiira, iCab4, …) es totalmente compatible con el HTML5, Mozilla Firefox 3.5 soporta pero no es 100% compatible mientras que como siempre Microsoft Internet Explorer todavía no reconoce el HTML 5 aunque comentan que para su versión 9 ya lo hará.

    Elementos HTML 5
    Tag Descripción
    <comment> Define un comentario
    <!DOCTYPE> Define el tipo de documento
    <a> Define un enlace
    <abbr> Define una abreviatura
    <address> Define un elemento de dirección
    <area> Define un área dentro de una imagen
    <article> Define un artículo
    <aside> Define el contenido de al lado (sidebar)
    <audio> Define contenido de sonido
    <b> Define texto en negrita
    <base> Define una URL base para todos los enlaces en una página
    <bdo> Define la dirección del texto a mostrar
    <blockquote> Define un bloque de cita
    <body> Define el elemento BODY
    <br> Define un salto de línea
    <button> Define un botón
    <canvas> Define un área para manipular(generar) gráficos
    <caption> Define una etiqueta para una tabla
    <cite> Define una citación
    <code> Define un texto de código
    <col> Define los atributos para las columnas de una tabla
    <colgroup> Define grupos de columnas de la tabla
    <command> Define un botón de comandos
    <datagrid> Define datos en una lista-árbol
    <datalist> Define una lista desplegable
    <datatemplate> Define una plantilla de datos
    <dd> Define una descripción de definiciones
    <del> Define un texto eliminado
    <details> Define los detalles de un elemento
    <dialog> Define una diálogo(conversación)
    <div> Define una sección en un documento
    <dfn> Define un término de definición
    <dl> Define una lista de definiciones
    <dt> Define un término de definiciones
    <em> Define texto enfatizado
    <embed> Define contenido externo interactivo o un plugin
    <eventsource> Define un destino para los eventos enviados por un servidor
    <fieldset> Define un campo establecido
    <figure> Define un grupo de contenido de medios, y sus etiquetas
    <footer> Define un pie para la sección o página
    <form> Define un formulario
    <h1> a <h6> Define encabezados 1 a 6
    <head> Define información acerca del documento
    <header> Define un encabezado para la sección o página
    <hr> Define una linea horizontal
    <html> Define el documento HTML
    <i> Define texto en cursiva
    <iframe> Define una sub ventana (frame)
    <img> Define una imagen
    <input> Define un campo de entrada
    <ins> Define texto insertado
    <kbd> Define texto de teclado
    <label> Define una etiqueta para un control de un formulario
    <legend> Define un título en un <fieldset>
    <li> Define un ítem de lista
    <link> Define una referencia a un recurso
    <mark> Define un texto marcado
    <map> Define un mapa para una imagen
    <menu> Define una lista menú
    <meta> Define información relevante
    <meter> Define las medidas dentro de un rango predefinido
    <nav> Define enlaces de navegación
    <nest> Define un punto de anidación en una plantilla de datos <datatemplate>
    <noscript> Define una sección sin scripts
    <object> Define un objeto a embeber
    <ol> Define una lista ordenada
    <optgroup> Define un grupo de opciones
    <option> Define una opción en una lista desplegable
    <output> Define algunos tipos de salida
    <p> Define un párrafo
    <param> Define un parámetro para un objeto
    <pre> Define texto preformateado
    <progress> Define el progreso de un tarea de cualquier tipo
    <q> Define una cita corta
    <rule> Define las reglas para actualizar una plantilla
    <samp> Define código de ejemplo
    <script> Define un script
    <section> Define una sección
    <select> Define una lista de selección
    <small> Define texto pequeño
    <source> Define orígenes de medios
    <span> Define una sección en un documento
    <strong> Define texto en negrita
    <style> Define una definición de estilos
    <sub> Define texto subscript (posicionado más abajo)
    <sup> Define texto superscript (posicionado más arriba)
    <table> Define una tabla
    <tbody> Define el cuerpo de la tabla
    <td> Define una celda de tabla
    <textarea> Define un área de texto (memo)
    <tfoot> Define el pie de una tabla
    <th> Define el encabezado de una tabla
    <thead> Define el encabezado de una tabla
    <time> Define la fecha/hora
    <title> Define el título del documento
    <tr> Define una fila de una tabla
    <ul> Define una lista desordenada
    <var> Define una variable
    <video> Define un vídeo

    Nota: Los campos en negrita son lo nuevo del HTML5

    Atributos
    Atributo Valor Descripción
    class nombre de clase Especifica un nombre de clase para un elemento (utilizado en una hoja de estilo CSS)
    contenteditable true, false Especifica si un usuario puede o no editar el contenido
    contextmenu menu_id Especifica el menú contextual para un elemento
    dir ltr, rtr Especifíca la dirección del texto en un elemento
    draggable true, false, auto Especifica si un usuario puede o no mover un elemento
    id id Especifica un único nombre de identificación para un elemento
    irrelevant true, false Especifica si un elemento es irrelevante, si lo es, dicho elemento no se muestra
    lang código de idioma Especifica un idioma para el contenido de un elemento
    ref URL, id Especifica una referencia a otro documento / otra parte de un documento (usado únicamente si se estableció el atributo template)
    registrationmark marca de registro Especifica una marca de registro para un elemento
    style definición de estilo Especifica un estilo en línea para un elemento
    tabindex número Especifica el orden de tabulación de un elemento
    template URL, id Especifica una referencia a otro documento / otra parte de un documento que deba ser aplicada a un elemento
    title texto Especifica información extra acerca de un elemento

    Nota: Sólo es una lista actual de la lista estándar de atributos. Los campos en negrita son exclusivos de HTML5.