Guía de HTML Data

En los últimos años microformatos, microformatos-2, RDFa o microdatos se han convertido en elementos básicos de la construcción del HTML siempre que hemos querido darle información semántica a las máquinas, a los robots de búsqueda. Pero ¿estás usándolos realmente de forma correcta?

La respuesta a esta pregunta siempre la hemos de buscar en la información que el organismo de crear los estándares de desarrollo web nos ofrece, y para esto existe la HTML data Guide donde nos encontramos con un resumen bastante interesante de su funcionamiento.

Antes de nada, poner los enlaces a las páginas oficiales de cada uno de estos lenguajes de marcas que os he comentado al inicio:

Todos estos elementos tienen una cosa en común, y es que permiten extraer información de páginas HTML de forma sencilla, y me atrevería a decir que información inteligente y semántica.

En la actualidad, como vengo comentando, existen tres sintaxis principales:

Microformatos

Los microformatos usan @class, @rel y otros atributos para codificar datos en HTML. Además pueden usarse con cualquier lenguaje de marcas que use atributos @class. Hsta el momento los microformatos tenían varios vocabularios para hacer diferentes cosas, pero con los Microformatos 2 esto se ha estandarizado a un sistema único de proceso.

RDFa

El RDFa reutiliza código HTML existente como @href y @rel añadiéndole pequeñas partes más que permiten extraer información (como ya ocurre con el RDF). Estaba pensado originalmente para el XHTML 1.1 y es compatible con HTML 5 y SVG.

microdatos

Los microdatos añaden atributos al HTML 5, de forma que cualquier elemento pueda tener una serie de propiedades y valores. Estos están diseñados para añadir información detallada que pueda ser procesada por los usuarios.

NOTA 1: Los microdatos SÓLO funcionan con HTML 5, por lo que aunque pongas cosas como Schema, si tu web no es HTML 5 buscadores como Bing o Google no “interpretarán” la información que les has dado porque no cumplen con el estándar.

NOTA 2: Bing tiene la herramienta Markup Validator, Google el Rich Snippets Testing Tool y Yandex el Microformat validator para verificar la mayoría de estas sistaxis. Además existen herramientas como el RDFa Validator o el Living Validator, este último aceptando en principio todos los formatos y sistemas.

La forma de aplicar estos sistemas es triple también. Se puede hacer mediante la inclusión en la cabecera de la página de metadatos, como por ejemplo en elemento link con un rel=”alternate”:

<link rel="alternate" type="text/calendar" value="calendar.ics">

La otra opción es la de incrustar código dentro del propio código HTML, aún en la cabecera. Para ello se podrían usar elementos como JSON o Turtle, algo similar a esto:

<script type="text/turtle">
  @prefix foaf: <http://xmlns.com/foaf/0.1/> .
  @prefix gr: <http://purl.org/goodrelations/v1#> .
  @prefix vcard: <http://www.w3.org/2006/vcard/ns#> .
  @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
  <#company> gr:hasPOS <#store> .
  <#store> a gr:Location ;
    gr:name "Hair Masters" ;
    vcard:adr [
      a vcard:Address ;
      vcard:country-name "USA" ;
      vcard:locality "Sebastpol" ;
      vcard:postal-code "95472" ;
      vcard:street-address "6980 Mckinley Ave" ;
    ] ;
    foaf:page <> ;
    .
</script>

Para acabar, quizá la actualmente más conocida, es la de incrustar meta información en el cuerpo de la página, a través de los atributos custom data válidos sólo en HTML 5.

<div class="spaceship" data-ship-id="92432"
     data-weapons="laser 2" data-shields="50%"
     data-x="30" data-y="10" data-z="90">
 <button class="fire"
      onclick="spaceships[this.parentNode.dataset.shipId].fire()"> Fire
 </button>
</div>

Para acabar, un poco de terminología, para entender bien las palabras que debemos usar cuando hablemos de esto:

  • Formato es la combinación de Sintaxis, Tipos, Propiedades de una o más Vocabularios.
  • Sintaxis son las distintas formas de organizar la información. En este caso hemos hablado de microformatos, RDFa y microdatos.
  • Vocabulario es cada uno de los conjuntos que permite cada sintaxis formado por entidades. Por ejemplo el microdato “producto” o el microformato “hcard”.
  • Entidad es cada uno de los pequeños elementos por las que se forma un Vocabulario. Por ejemplo el nombre de una persona, una dirección… Cada entidad tiene uno o más Tipos de datos, y estos tipos de datos tienen una serie de Propiedades con sus respectivos Valores.

A la hora de publicar información lo más sencillo es publicar y mantener tan sólo un tipo de vocabulario por página. En caso de estar utilizando HTML 5 es más que recomendable usar los microdatos, ya que son los que permiten mayor extensibilidad; en cualquier otro dato los microformatos son la opción más adecuada. El RDFa prácticamente no se utiliza.

NOTA 3: Por ahora mi experiencia personal es que Google sólo lee el primero de los vocabularios que se incluyen en una página. Hay que recordar que muchas entidades se pueden anidar, por lo que es mejor utilizar el vocabulario principal y no usar varios.

Aunque el estándar permite el cruce de distintas sintaxis en una página, hoy en día, teniendo en cuenta que la mayoría de webmasters que publicarán vocabularios en sus páginas lo hacen por un tema puro y duro de SEO, casi es mejor limitarse a uno de ellos que, como decía antes, si se dispone de HTML 5 en el sitio, es el óptimo.

Una gran diferencia entre microformatos + RDFa y los microdatos es que las propiedades de cada entidad están bastante establecidas; esto significa que los microformatos no son extensibles y han de adaptarse al 100% a lo que el estándar permite, pero, en contra, los microdatos pueden seguir el estándar y pueden tener valores no estándar, lo que permite su escalabilidad de forma infinita.

En cambio, hay una cosa en contra de los microdatos, y es que es bastante más difícil el uso de los multi idiomas en la información. Los microformatos permiten el uso de @lang como una propiedad, algo que los microdatos no permiten, por lo que se complica el uso.

Otra cosa a tener en cuenta es el diseño, el visual. Para una ficha de persona, por ejemplo, poner el nombre de la persona en negrita, en las tres sintaxis tendríamos un código tal que este:

microformatos:

.hcard .n { font-weight: bold; }

RDFa:

[typeof~="foaf:Person"] [property~="foaf:name"]

microdata:

[itemtype~="http://microformats.org/profile/hcard"] [itemprop~="n"]

Esto hace que, a nivel de uso de los CSS los microformatos sean una herramienta mucho más sencilla que el resto. Claro está, se pueden incluir clases y similares, pero sería información añadida que sólo sería útil en diseño y no en código fuente.

A la hora de gestionar fechas y horas, si queremos mezclar información y hacerla 100% compatible entre distintos formatos podríamos usar algo parecido a esto (que mezcla HTML 5 con otros elementos, haciéndolo completamente compatible; hay que tener en cuenta que el elemento abbr puede usarse para patrones de fechas).

<time itemprop="dtstart" property="startDate" content="2016-04-21T20:00:00">
  <abbr class="dtstart" title="2016-04-21T20:00:00">
    Thu, 04/21/16 8:00 p.m.
  </abbr>
</time>

En lo que respecta a relaciones de enlaces, HTML 5 incluye bastantes elementos @rel que son comprensibles, pero que no son compatibles con otros sistemas como RDFa. Lo que sí es compatible es el uso del @vocab, donde se informa del tipo de contenido que llevaría el enlace. Con esto podríamos conseguir algo similar a:

<a vocab="http://purl.org/dc/terms/"
   rel="date" href="http://reference.data.gov.uk/id/day/2011-11-15">
15th November 2011</a>

Con esto conseguiríamos que la relación del enlace fuera de tipo dc:date, es decir, que es una fecha, (basándonos en la información Dublin Core).

A la hora de publicar contenido (o información) incrustado en el HTML debemos tener muy presente que las buenas prácticas imperan sobre cualquier cosa, ya que si el lenguaje de marcas es incorrecto la extracción de información se vuelve muy compleja. Por eso hay que tener muy presente el uso de un HTML válido. Todas las sintáxis necesitan de una estructura, ya que esto se basa en los datos estructurados, así que es básico cumplir con los estándares de HTML.

Como primera recomendación, es casi básico utilizar sistemas de lectura que permitan HTML 5, es decir, navegadores de última generación. Varios ejemplos son que, Firefox (y otros) no es capaz de procesar los elementos que no se pueden dejar dentro de una tabla y los sacan fuera de ella. Incluso, hay navegadores antiguos que los elementos meta o rel no pueden ser procesados en el body y son “movidos” al head, con las consecuencias de errores de proceso que ello genera.

Otra buena práctica es la de definir la licencia de uso de dicha información. Al fin y al cabo la información que se introduce es pública pero no por ello tiene porqué permitirse la reutilización de la misma. Así que, ya que todas las sintaxis lo permiten, es más que recomendable informar de la licencia de uso.

A la hora de procesar la información que nos ofrece el HTML mediante cualquiera de la sintaxis debemos tener en cuenta que hay dos formas principales de procesarse. La primera de ellas hace referencia a los microformatos 2 y a los microdatos. En ambos casos la información puede procesarse como JSON lo que permite un manejo muy sencillo de la información estructurada. En cambio, el RDFa puede expandise en múltiples opciones. Entre ellas la más habitual es la de convertirlo a RDF/XML o a Turtle, aunque también se podría llegar a extraer vía SPARQL o RDFa API.

Y si no encuentras tu vocabulario… ¿se pueden crear o proponer? Pues la respuesta es simple: sí. Aunque hay varias formas de llegar a hacer propuestas y a distintos niveles. Por ejemplo, existe una página en la que se detalla cómo proponer un microformato, el W3C tiene su Semantic Web Interest Group para crear elementos ya más oficiales e incluso el grupo de Schema (en el que participan los principales motores de búsqueda) tiene el Extension Mechanism en el que no sólo se puede crear un nuevo schema, sino que se pueden extender los actuales, y si mucha gente lo adopta el propio sistema lo tomaría para crear el estándar. En cualquier caso, y mirando hacia el futuro, si vas a crear algo, mi recomendación es que te bases en el estándar de microdata del W3C, responsable del cuál, además, es Ian Hickson (trabajador de Google).

Y en principio todo esto es lo que hay que saber sobre el tratamiento y la incrustación de datos dentro del HTML. Por supuesto no he tratado en detalle ninguno de los vocabularios, pero eso ya depende de cada proyecto y desarrollador (e incluso usuario). Lo que sí que voy a decirte es que, si tienes información estructurada, exista ya o no un sistema estándar, asímate a utilizar el que hay y sino créatelo tú mismo siguiendo las bases que existen.

Schema, el paradigma de la Web Semántica

Desde poco antes del año 2000 que llevo escuchando sobre la Web Semántica. Cuando alguien me preguntaba sobre ello le decía que para eso faltaban todavía muchos años, porque la gente no estaba capacitada para generar sitios web que pudieran ser comprensibles.

A principios de 2008 Yahoo! comenzó a dar soporte a los MicroFormatos más habituales, ya que era complejo el uso de RDFa y, al poco tiempo, en unas charlas muy interesantes comencé a entender de qué iba todo esto. Semanas después lancé OJOmicroformatos (hoy en día desaparecido e integrado en OJObuscador), aunque todavía queda cierta parte de información disponible.

Hace meses, interesándome con el HTML 5 vi que se lanzaban los “microdatos” de forma oficial por el W3C, y que leyéndo la documentación oficial del W3C podemos encontrar cosas como el rel="nofollow" integrado en el HTML 5, pero sin tener tanto que ver con lo que Google decía en sus inicios…

Ahora aparece Schema.org, un proyecto que viene de la mano de Bing, Google y Yahoo! en el que se pretende unificar toda la información de “metadatos” para que los motores de búsqueda los entiendan. También se ha dado a conocer que dan soporte a rel="author" (otra de las cosas que se ha estandarizado con HTML 5).

El objetivo de los microdatos es poder dar información semántica a algo que por sí no lo tiene. Un ejemplo claro podría ser este:

Contenido original:
<div>
<h1>Avatar</h1>
<span>Director: James Cameron (born August 16, 1954)</span>
<span>Science fiction</span>
<a href="http://example.com/movies/avatar-theatrical-trailer.html">Trailer</a>
</div>

Contenido microdatizado:
<div itemscope itemtype ="http://schema.org/Movie">
<h1 itemprop="name">Avatar</h1>
<div itemprop="director" itemscope itemtype="http://schema.org/Person">
Director: <span itemprop="name">James Cameron</span> (born <span itemprop="birthDate">August 16, 1954)</span>
</div>
<span itemprop="genre">Science fiction</span>
<a href="../movies/avatar-theatrical-trailer.html" itemprop="trailer">Trailer</a>
</div>

En principio lo que se muestra por pantalla no debería cambiar, pero a la hora de hacerse entender estamos indicando información de una película y de una persona relacionada con la misma, lo que puede generar una mayor facilidad de comprensión a la hora de entender qué estamos queriéndole decir “a las máquinas” (porque, como digo, esto es para máquinas y no para usuarios, a priori).

Por suerte la lista de MicroDatos se ha convertido en algo extenso y han “aprobado” muchos de aquellos MicroFormatos que no eran estándar… ahora sólo queda ponerse manos a la obra e integrar los más habituales en nuestros sitios web.

HTML semántico

Cuando desarrollamos sitios web normalmente no pensamos en usar etiquetas o herramientas que se salen del HTML que todo el mundo conoce. Pero lo que muchos no saben es que el HTML permite algunas cosas semánticas que habitualmente no se utilizan. También lo permite el XHTML, que fue el precursor de esto hace ya algún tiempo, aunque en este caso existen algunas reglas.

Antes de comenzar con lo que se podría hacer en un futuro en el HTML5, voy a poner un ejemplo en XHTML y a explicar brevemente su funcionamiento, ya que es algo distinto si comparamos la versión XHTML de la del HTML:

<ul role="navigation sitemap">
  <li href="/downloads/">Downloads</li>
  <li href="/docs/">Documentation</li>
  <li href="/news/">News</li>
</ul>

Como se puede ver, tampoco es que que haya mucho cambio… simplemente se incluye un atributo nuevo llamado role que permite una serie de parámetros. Y aquí llega lo interesante: la lista de parámetros es el secreto de la semántica, ya que es bastante extensa y permite hacer bastantes cosas.

Voy a destacar aquellos que me parecen más interesantes de cara a aplicaciones y a buscadores ya que, de cara al usuario esto no se verá nunca y no tiene aplicación. En resumen: esto está creado para las máquinas.

Los que habitualmente se usan como link rel=”algo”:

  • bookmark: Indica que ese enlace contiene información extendida del contenido actual.
  • cite: Indica que el contenido de destino es el origen de la cita actual.
  • contents: indica dónde encontrar la tabla de contenidos.
  • stylesheet: Indica la hoja de estilos que se ha de utilizar.

Los que podrían usarse dentro de contenedores (div y similares):

  • banner: Indica que ese bloque de contenido tiene el nombre del sitio y la título principal.
  • complementary: Indica que ese contenido no es el principal, pero lo complementa.
  • contentinfo: Ofrece meta-información del contenido de la página.
  • definition: Da la definición de una palabra o concepto.
  • main: Es el contenido principal de la página.
  • navigation: Indica que eso es la navegación principal de la página.
  • note: Ese contenido es una anotación, acotación o nota del contenido principal.
  • search: Indica que esa zona marca permite realizar búsquedas.

Para acabar, encontramos los elementos más especiales… en este caso habría que ver dónde ubicarlos (pueden ser contenedores o simples span):

  • alert: Mensajes importante y normalmente limitados en tiempo.
  • article: Sección de la página que forma parte del contenido principal pero que tiene significado independiente.
  • heading: La cabecera de la una sección de la página.
  • img: Una colección de imágenes que unidas formas una imagen única.
  • log: Sección que indica una serie de información antigua en relación con el contenido principal.
  • menubar: Menú, habitualmente horizontal, que suele estar siempre visible.
  • region: Una sección grande de la página o del sitio que el autor cree lo suficientemente importante para ser incluida en un sumario.
  • separator: Separador de secciones o de grupos de “menuitems”.
  • status: Contiene información interesante, pero no tan importante como un “alert”.

La cuestión principal es que esto está pensado para el XHTML… pero, ¿se puede usar en HTML5? La respuesta es sí. Aunque hay que decir que normalmente las etiquetas ya llevan implícitos algunos roles… por ejemplo, un <h1> ya lleva implícito un “heading”. O sea, que si se cumples las normas (no sobreeescribir lo que ya se da por implícito y no poner roles a cosas que no se permiten), debería funcionar. Un ejemplo:

<figure role="img" aria-labelledby="fish-caption">
  <pre>
 o           .'`/
     '      /  (
   O    .-'` ` `'-._      .')
      _/ (o)        '.  .' /
      )       )))     >< <
      `\  |_\      _.'  '. \
        '-._  _ .-'       '.)
            `\__\
  </pre>
  <figcaption id="fish-caption">
    Joan G. Stark, "fish".
    October 1997. ASCII on electrons. 28×8.
  </figcaption>
</figure>

Para tener esto en cuenta, es importante ver las anotaciones ARIA según lo que nos espera en HTML5, donde vienen detalladas las excepciones de las que os hablaba antes…

Sin duda, bastante interesante esto que aportan los roles, y su actuación sobre los buscadores, ya que ayudan a mejorar las búsquedas de aquellos contenidos que se encuentran en los roles más concretos y a los que se les da más importancia…

HTML MicroDatos: Personas y Empresas

Tras ver el otro día qué son los MicroDatos, hoy voy a explicaros lo que antiguamente eran los hCard. Este microformato es de los más extendidos y extensibles, y ahora se ha convertido, usando la misma base, en un MicroDato bastante interesante, sobretodo porque ya viene documentado en el HTML 5.

En la actualidad conozco 3 formatos en los que se habla de cómo dar formato a las fichas de personas y/o empresas… que son:

Teniendo en cuenta que de los 3, el primero es el más completo, y que tal como dice Google en los otros 2, es capaz de interpretar similitudes entre unos y otros, voy a enfocarme en el más completo de todos.

  • fn: Es el nombre completo (u organización), el campo principal.
  • n: Es un contenedor para indicar el nombre (u organización) de forma más específica… puede incorporar los siguientes sub-elementos:
    • family-name: Da el apellido(s) familiar de la persona o el nombre completo de la organización.
    • given-name: El nombre (de pila) que habitualmente se usa con la persona.
    • additional-name: Si tiene un nombre adicional.
    • honorific-prefix: Si tiene un prefijo honorífico.
    • honorific-suffix: Si tiene un sufijo honorífico.
  • nickname: El nick o sobrenombre de la persona u organización.
  • photo: Será una URL con la fotografía de la persona u organización.
  • bday: Fecha de cumpleaños de la persona o de creación de la organización.
  • adr: indica la dirección postal de la persona u organización. Es un contenedor formado por:
    • type: Indica el tipo de dirección, que puede ser uno de los siguientes:
      • dom: Doméstico.
      • intl: Internacional.
      • postal: Entrega postal.
      • parcel: Entrega de paquetería.
      • home: Residencial.
      • work: Trabajo.
      • pref: De todas las opciones, la preferida.
    • post-office-box: Apartado de correos.
    • extended-address: Dirección extendida.
    • street-address : La calle.
    • locality: Población.
    • region: Provincia.
    • postal-code: Código postal.
    • country-name: País.
  • label: Dirección de entregas de la persona u organización (viene a ser el nombre del sitio de entrega). Puede contener:
    • type: Son los mismos que los anteriores de direcciones.
    • value: La información, con formato.
  • tel: El teléfono (esta era muy obvia)… Puede incorporar un par de elementos:
    • type: Indica el tipo de teléfono, que puede ser uno de los siguientes:
      • home: El de casa.
      • msg: Envío de SMS.
      • work: Trabajo.
      • voice: De voz.
      • fax: Fax.
      • cell: Móvil / Celular.
      • video: Vídeo conferencia.
      • pager: Buscapersonas.
      • bbs: BBS.
      • modem: Módem.
      • car: Teléfono en el coche.
      • isdn: Línea RDSI.
      • pcs: Servicio de comunicación personal.
      • pref: De todas las opciones, la preferida.
    • value: La información, con el formato correspondiente.
  • email: La dirección de correo electrónico. También es un contenedor y puede llevar lo siguiente:
    • type: Indica el tipo de correo electrónico, que puede ser uno de los siguientes:
      • internet: La mayoría de cuentas de correo.
      • x400: cuenta de tipo x.400.
      • pref: De todas las opciones, la preferida.
    • value: La información, con el formato correspondiente.
  • mailer: Indica el software de correo que usa la persona.
  • tz: Indica el desfase horario de la persona (la Zona horaria con respecto al UTC). Por ejemplo: +06:30.
  • geo: Indica la la latitud y longitud. Por ejemplo: +41.383333;+2.183333.
  • title: El puesto de trabajo o función de la persona.
  • role: El rol, departamento o categoría profesional.
  • logo: El logotipo de la persona u organización, que será una dirección URL.
  • agent: Persona que actúa de intermediario de contacto (secretaria, etc…).
  • org: Nombre detallado de la organización. Puede incorporar algunos elementos:
    • organization-name: Nombre de la organización / empresa.
    • organization-unit: Unidad o Subsector de la empresa u organización.
  • categories: Categorías, palabras clave o lugar donde categorizar esa persona u organización.
  • note: Añade algunos comentarios a la ficha de la persona u organización.
  • rev: Última fecha de revisión de la información que se ofrece.
  • sort-string: Forma de ordenar la información de la persona u organización.
  • sound: Sonido relacionado con la persona u organización. Ha de corresponder con una dirección URL.
  • url: La dirección URL de la persona u organización.
  • class: Cómo ha de tratarse la información que se ofrece. Puede tener estos valores:
    • public: Pública.
    • private: Privada.
    • confidential: Confidencial.
  • impp: Ofrece el sistema de comunicación instantánea con la persona u organización.
    • type: Indica el tipo de sistema, que puede ser uno de los siguientes:
      • personal o business: Si es personal o de negocios.
      • home o work o mobile: Si está en casa, en el trabajo o es móvil.
      • pref: De todas las opciones, la preferida.
    • value: La dirección URL, con el formato correspondiente.

Y ahora el ejemplo:

<section id="jack" itemscope itemtype="http://microformats.org/profile/hcard">
  <h1 itemprop="fn">Jack Bauer</h1>
  <div itemprop="n">
    <meta itemprop="given-name" content="Jack">
    <meta itemprop="family-name" content="Bauer">
  </div>
  <img itemprop="photo" alt="" src="jack-bauer.jpg">
  <p itemprop="org" itemscope>
    <span itemprop="organization-name">Counter-Terrorist Unit</span>
    (<span itemprop="organization-unit">Los Angeles Division</span>)
  </p>
  <p>
    <span itemprop="adr" itemscope>
      <span itemprop="street-address">10201 W. Pico Blvd.</span><br>
      <span itemprop="locality">Los Angeles</span>,
      <span itemprop="region">CA</span>
      <span itemprop="postal-code">90064</span><br>
      <span itemprop="country-name">United States</span><br>
    </span>
    <span itemprop="geo">34.052339;-118.410623</span>
  </p>
  <h2>Assorted Contact Methods</h2>
  <ul>
    <li itemprop="tel" itemscope>
      <span itemprop="value">+1 (310) 597 3781</span> <span itemprop="type">work</span>
      <meta itemprop="type" content="pref">
    </li>
    <li><a itemprop="url" href="http://en.wikipedia.org/wiki/Jack_Bauer">I'm on Wikipedia</a>
    so you can leave a message on my user talk page.</li>
    <li><a itemprop="url" href="http://www.jackbauerfacts.com/">Jack Bauer Facts</a></li>
    <li itemprop="email"><a href="mailto:j.bauer@la.ctu.gov.invalid">j.bauer@la.ctu.gov.invalid</a></li>
    <li itemprop="tel" itemscope>
      <span itemprop="value">+1 (310) 555 3781</span> <span>
      <meta itemprop="type" content="cell">mobile phone</span>
    </li>
  </ul>
  <p itemprop="note">If I'm out in the field, you may be better off contacting <span
  itemprop="agent" itemscope itemtype="http://microformats.org/profile/hcard"><a
  itemprop="email" href="mailto:c.obrian@la.ctu.gov.invalid"><span
  itemprop="fn"><span itemprop="n" itemscope><span
  itemprop="given-name">Chloe</span> <span
  itemprop="family=name">O'Brian</span></span></span></a></span>
  if it's about work, or ask <span itemprop="agent">Tony Almeida</span>
  if you're interested in the CTU five-a-side football team we're trying to get going.</p>
  <ins datetime="2008-07-20T21:00:00+01:00">
    <span itemprop="rev" itemscope>
      <meta itemprop="type" content="date-time">
      <meta itemprop="value" content="2008-07-20T21:00:00+01:00">
    </span>
    <p itemprop="tel" itemscope><strong>Update!</strong>
    My new <span itemprop="type">home</span> phone number is
    <span itemprop="value">01632 960 123</span>.</p>
  </ins>
</section>

Si queremos comprobar si este fragmento sería válido de cara a Google, podemos usar su herramienta para comprobarlo…

http://javiercasares.net/jack-bauer.html

Que en los resultados de Google quedaría similar a esto:

HTML MicroDatos (antes MicroFormatos, antes RDFa)

Los que me conocéis sabéis que desde hace tiempo he sido un seguidos de los microformatos, y una de las mejoras que descubrí al hacer la serie de artículos de HTML 5 fue la incorporación “oficial” de lo que antiguamente se denominaba microformatos en lo que actualmente pasan a ser los midrodatos (microdata en inglés) y que vienen de la antigua implementación denominada RDFa.

Pero ¿qué son los microdatos? Pues básicamente son pequeñas mejoras del HTML que, en apariencia no han de modificar nada, pero que hacen que las máquinas (buscadores, navegadores, aplicaciones…) sean capaces de interpretar y mejorar semánticamente el significado de parte de la información que se muestra por pantalla.

Hasta ahora los microformatos eran bastante complejos de integrar ya que no existía un sistema estándar, algo que con los microdatos se acaba consiguiendo. Algunos ejemplos muy básicos podrían ser estos:

<div itemscope>
  <p>My name is <span itemprop="name">Elizabeth</span>.</p>
</div>

o este:

<div itemscope>
  <p>My name is <span itemprop="name">Neil</span>.</p>
  <p>My band is called <span itemprop="band">Four Parts Water</span>.</p>
  <p>I am <span itemprop="nationality">British</span>.</p>
</div>

o este:

<div itemscope>
  <img itemprop="image" src="google-logo.png" alt="Google">
</div>

Hasta aquí no hay mucho que decir… aunque estos ejemplos son tan sencillos como, casi, me atrevería a decir que inútiles, ya que no se especifica ningún sistema identificativo para que se pudieran interpretar de forma semántica.

Los microdatos pueden anidarse entre sí, lo que los convierte en una herramienta escalable, además de poderse agrupar por distintos elementos:

<div itemscope id="amanda" itemref="a b"></div>
<p id="a">Name: <span itemprop="name">Amanda</span></p>
<div id="b" itemprop="band" itemscope itemref="c"></div>
<div id="c">
  <p>Band: <span itemprop="name">Jazz Band</span></p>
  <p>Size: <span itemprop="size">12</span> players</p>
</div>

Como decía, hasta ahora los ejemplos son “inútiles” ya que no siguen un estándar… para ello se integra la posibilidad de informar de un “tipo”. Los tipo se darán en referencia a una dirección URL en la que se informa de la estructura de cada elemento.

<section itemscope itemtype="http://example.org/animals#cat">
  <h1 itemprop="name">Hedral</h1>
  <p itemprop="desc">Hedral is a male american domestic shorthair, with a fluffy black fur with white paws and belly.</p>
  <img itemprop="img" src="hedral.jpeg" alt="" title="Hedral, age 18 months">
</section>

¿Y qué elementos son los que han de incorporar los microdatos?

  • itemscope
  • itemtype
  • itemid
  • itemref
  • itemprop

itemscope

Este será el indicador de que el bloque, ese elemento, será el contenedor de información importante. Es un elemento booleano, es decir, se pone o no se pone… y ya está.

itemtype

Al indicar un itemscope podemos querer indicar qué tipo de información vamos a encontrar, que diccionario, que vocabulario vamos a utilizar. Para ello indicaremos este atributo que contendrá una dirección URL donde encontrar la información correspondiente.

itemid

Este atributo puede dar información sobre un elemento común que encontremos en el resto de Internet. Viene a ser como crear una ficha única (o no) que contenga la información que queremos dar.

itemref

Si dentro del contenido queremos hacer referencia a varios elementos, podemos asignarles como un nombre a cada uno de ellos. Para eso usaremos el itemref, que será el que haga referencia a los distintos elementos.

itemprop

Es la propiedad y el valor en sí que queremos indicar. Simple y llanamente.

Y, como último ejemplo:

<!DOCTYPE HTML>
<html>
  <head>
    <title>Photo gallery</title>
  </head>
  <body>
    <h1>My photos</h1>
    <figure itemscope itemtype="http://n.whatwg.org/work" itemref="licenses">
      <img itemprop="work" src="images/house.jpeg" alt="A white house, boarded up, sits in a forest.">
      <figcaption itemprop="title">The house I found.</figcaption>
    </figure>
    <figure itemscope itemtype="http://n.whatwg.org/work" itemref="licenses">
      <img itemprop="work" src="images/mailbox.jpeg" alt="Outside the house is a mailbox. It has a leaflet inside.">
      <figcaption itemprop="title">The mailbox.</figcaption>
    </figure>
    <footer>
      <p id="licenses">All images licensed under the <a itemprop="license" href="http://www.opensource.org/licenses/mit-license.php">MIT license</a>.</p>
    </footer>
  </body>
</html>

El resultado de este ejemplo es que, según la información que encontremos en esta URL: http://n.whatwg.org/work tenemos que:

  • work: images/house.jpeg
  • title: The house I found.
  • license: http://www.opensource.org/licenses/mit-license.php

y

  • work: images/mailbox.jpeg
  • title: The mailbox.
  • license: http://www.opensource.org/licenses/mit-license.php

Y esto es todo… y a lo largo de los próximos días os pondré ejemplos de elementos que ya han sido creados para un objetivo claro, y que los buscadores podrían ya utilizar para extraer información.