Cómo estructurar datos con RDFa según Schema.org

RDFa, que corresponde a las siglas de Resource Description Framework in Attributes, es un lenguaje de marcado recomendado por el Word Wide Web Consortium (W3C) como estándar para la incorporación de etiquetas RDF en HTML, en XHTML y en diversos dialectos XML. RDF es utilizado por los programadores para especificar contenidos web mediante metadatos. Es así como los navegadores o los robots de los buscadores también pueden interpretar contenidos semánticos, lo que constituye el fundamento de la llamada web semántica.

A pesar de ser introducido en 2004 como módulo de XHTML, no fue recomendado por el W3C hasta 2008. Este lenguaje de marcado es compatible con HTML y HTML5 desde la versión 1.1, introducida en 2012 de forma paralela a una versión más sencilla denominada RDFa Lite. 

RDF en HTML

RDFa constituye solo una de las muchas posibilidades de marcar enunciados con RDF. Los términos propios de este formato se incorporan al lenguaje HTML para transformar los contenidos de la página web en datos estructurados comprensibles por las máquinas. Esta incorporación tiene lugar mediante atributos en etiquetas HTML. Es por esto que este formato de estructuración de datos es comparable con otros como microformatos o microdatos. Lo que hace RDFa es disponer la metasintaxis para la notación semántica.

Para describir información semántica mediante metadatos es necesario un vocabulario homogéneo. Para ello, los programadores disponen de varios estándares como FOAX, SKOS, Dublin Core o SIOC. Sin embargo, Google, Bing, Yahoo y Yandex recomiendan una notación según schema.org, un sistema creado por iniciativa de los cuatro buscadores mayoritarios para unificar el etiquetado de datos estructurados.

¿Cómo utilizar RDFa?

En la incorporación de metadatos, la especificación de RDFa introduce una serie de nuevos atributos que amplían el repertorio de los lenguajes de marcado existentes hasta el momento como HTML, XHTML o HTML5. La siguiente lista muestra los atributos que se utilizan en la versión reducida RDFa Lite:

AtributoDescripción
vocabEl atributo vocab define el vocabulario en el que se basa el marcado de elementos con RDFa, por ejemplo, schema.org.
typeofMediante el atributo typeof se ordenan elementos en una determinada categoría o “type” según el vocabulario escogido.
propertyCon el atributo property se le otorgan propiedades a un elemento.
resourceEl atributo resource permite a los programadores asignar denominaciones individuales, los llamados “identifier”, a los elementos.
prefixEl atributo prefix permite a los programadores usar más de un vocabulario, en caso de que los términos del vocabulario que se escogió al principio no sean suficientes

Como elementos portadores de atributos RDFa se usan preferentemente tags de HTML sin semántica propia. Por eso, suelen encontrarse metadatos en etiquetas div- o span-, aunque, en principio, RDFa se puede integrar en cualquier tag de HTML. Esto se realiza, por regla general, según el siguiente esquema.

Esquema básico de la sintaxis de RDFa:

01<div vocab="http://schema.org/" typeof="Schema">
02  <span property="Eigenschaft">Textelement</span>
03<div>  

Estructurar una dirección postal con RDFa

En este ejemplo se muestra un cuerpo de datos de contacto en formato HTML clásico, tal como se encuentra en multitud de páginas web.

Código HTML de una dirección postal:

01<p>
02  Google Inc.<br>
03  P.O. Box 1234<br>
04  Mountain View, CA<br>
05  94043<br>
06  United States<br>
07</p>

Mientras que una persona reconoce a primera vista que el texto marcado con la etiqueta <p> hace referencia a una dirección postal americana, las máquinas (navegadores y robots) necesitan metadatos adicionales para poder interpretar el significado de estos datos. Con RDFa se haría de la siguiente forma.

Marcado de una dirección postal con RDFa:

01<p vocab="http://schema.org/" typeof="PostalAddress"><br>
02  <span property="name">Google Inc.</span><br>
03  P.O. Box <span property="postOfficeBoxNumber">1234</span><br>
04  <span property="addressLocality">Mountain View</span>,<br>
05  <span property="addressRegion">CA</span><br>
06  <span property="postalCode">94043</span><br>
07  <span property="addressCountry">United States</span><br>
08</p>

En la línea 01, el tag de HTML <p> sirve de elemento portador para los atributos RDFa “vocab” y “typeof”. Así, las máquinas que pueden interpretar este tipo de código “comprenden” que todos los datos incluidos dentro del tag <p> siguen el vocabulario de schema.org y que la información se encierra en la categoría “PostalAddress“ (dirección postal). Según schema.org, a cada esquema o categoría le pertenecen determinadas características. En este caso, típico de las direcciones postales es que incluyan ciertos datos postales. Para hacerlas aptas para las máquinas, se usa el atributo RDFa “property”. En este ejemplo, los datos “name”, “postOfficeBoxNumber”, “addressLocality", “addressRegion", “postalCode" y “addressCountry" con sus correspondientes valores son características de “PostalAddress”. Por lo tanto, un programa que lea código HTML puede valorar cómo mostrar información como “Google Inc.” o “94043”.  

Rich snippets con RDFa

Los datos estructurados así son especialmente relevantes para la búsqueda, pues si una página web está estructurada semánticamente, los robots de los buscadores pueden extraer fácilmente la información más importante y mostrarla en forma de rich snippets. Estos son extractos de los contenidos de una web que amplían los resultados de una búsqueda y destacan sobre los demás. En este sentido, el marcado semántico tiene mucho que ver con la optimización de una web para los buscadores.

Google soporta una estructuración de datos para rich snippets mediante RDFa para productos, recetas, valoraciones de usuarios, software y noticias. Para mostrar rich snippets de vídeos se requieren formatos más actuales como microdatos y JSON-LD. Este último es el formato necesario para generar rich snippets para eventos.

Para entender cómo se estructuran los contenidos de una web para mostrarse como rich snippet, presentamos el ejemplo de una valoración de producto.

Generar un rich snippet de una valoración de producto mediante RDFa

Por regla general, las valoraciones de producto que aparecen en las SERP como rich snippet contienen el nombre del producto, una imagen, una puntuación, así como un cuerpo de texto, que además de la crítica en sí, también incluye el nombre del autor, el título y la fecha. Con el siguiente fragmento de código se muestra cómo se estructura esta información con RDFa para las máquinas: 

Estructuración de una valoración de producto mediante RDFa:

01<div vocab="http://schema.org/" typeof="Product">
02  <img property="image" src="https://www.ionos.es/digitalguide/www.anbieter.de/produktbild.jpg" alt="Bildbeschreibung"/>
03  <span property="name">Name des Produkts</span>
04  <div property="review" typeof="Review"> Review:
05    <span property="reviewRating" typeof="Rating">
06      <span property="ratingValue">5</span> -
07    </span>
08    <b>"<span property="name">Titel der Bewertung</span>"</b> von
09    <span property="author" typeof="Person">
10      <span property="name">Name des Autors</span>
11    </span>, geschrieben am 
12    <meta property="datePublished" content="2006-05-04">4. Mai 2006
13    <div property="reviewBody">Bewertungstext</div>
14    <span property="publisher" typeof="Organization">
15      <meta property="name" content="Name des Herausgebers">
16    </span>
17  </div>
18</div>

Como en el ejemplo anterior, en la linea 01 se establece schema.org como el vocabulario en el que se basa el marcado. El atributo typeof define los datos entre la línea 01 y la 17 como pertenecientes al esquema estándar “Product”.

Según schema.org, los productos tienen una serie de características o propiedades (properties). En este ejemplo, a este producto le hemos otorgado, y hemos señalado semánticamente, un nombre (property="name"), una imagen (property=”image”) y un comentario (property="review").

La sintaxis RDFa también considera que las propiedades también pueden ser tipos en sí y recibir propiedades. Es así como la característica “review” de la línea 04 se puede definir como esquema “Review” y ser especificada en más detalle

Fragmento:

04  <div property="review" typeof="Review"> Review:

Es habitual encontrar un sistema de estrellas para valorar experiencias de usuario en la web. Para que las máquinas puedan interpretarlas, a “Review” se le otorga la propiedad “reviewRating” que, a su vez, se convierte en la categoría “Rating” y puede ser definida con la propiedad “ratingValue” y un valor determinado (líneas 04 a 06). 

Fragmento:

04  <div property="review" typeof="Review"> Review:
05    <span property="reviewRating" typeof="Rating">
06      <span property="ratingValue">5</span> -

Otras características de la categoría “Review” son el título (property="name"), el autor (property=”author”), la fecha de publicación (property="datePublished"), el texto mismo (property="reviewBody") y el editor (property="publisher"). Tanto el autor como el editor se pueden definir mediante un atributo typeof propio como categoría específica (persona u organización) y reciben propiedades como “name”.

Es evidente la complejidad del marcado con RDFa, un formato que, a la vez que permite una notación semántica extremadamente detallada, requiere claramente mucho más esfuerzo a la hora de aplicarlo que formatos más modernos como JSON-LD.