RDF Web Semantica

Introducción rápida al RDF

Traducción y adaptación al Español del original en Inglés de la “Introducción a RDF” de Joshua Tauberer.

Esta es una breve introducción al Resource Description Framework (RDF). También te puede interesar:

RDF es un método para expresar el conocimiento en un mundo descentralizado y es el fundamento de la Web Semántica, en el que las aplicaciones informáticas utilizan información estructurada distribuida por toda la Web. Sólo para aclarar de buen principio, RDF no es estrictamente un formato XML, no va sólo acerca de metadatos, tiene poco que ver con RSS y no es tan complicado como piensas.

A grandes rasgos

RDF es un método general para descomponer cualquier tipo de conocimiento en trozos pequeños, con algunas reglas acerca de la semántica o significado, de esas piezas. El punto es tener un método tan simple que puede expresar cualquier hecho, ya la vez tan estructurada que las aplicaciones informáticas pueden hacer cosas útiles con él. Aquí hay algo de RDF:

@prefix : <http://www.example.org/> .
:john    a           :Person .
:john    :hasMother  :susan .
:john    :hasFather  :richard .
:richard :hasBrother :luke .

El significado es obvio (Nota de traducción: el ejemplo afirma que John es una persona con una madre llamada Susan, un padre llamado Richard y un hermano llamado Luke).
Vamos a llegar a los detalles más tarde.

Si conoces el XML, he aquí una breve comparación. Al igual que RDF, el XML también está diseñado para ser simple y de propósito general. XML se puede abstraer más allá de su notación entre corchetes y barras a algo más abstracto, un “DOM” para estructurar un árbol de datos. Del mismo modo, la importancia de RDF no radica en cómo se escribe, su notación. Se trata de lo que representa, una información estructurada en red o grafo (gráfico). Puedes escribir RDF en XML, mucha gente lo hace. Esto es lo que podría ser:

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:ns="http://www.example.org/#">
  <ns:Person rdf:about="http://www.example.org/#john">
    <ns:hasMother rdf:resource="http://www.example.org/#susan" />
    <ns:hasFather>
      <rdf:Description rdf:about="http://www.example.org/#richard">
        <ns:hasBrother rdf:resource="http://www.example.org/#luke" />
      </rdf:Description>
    </ns:hasFather>
  </ns:Person>
</rdf:RDF>

Pero no tienes porqué utilizar XML. Yo mismo no lo hago. El primer formato visto anteriormente, llamado N3, es igual de bueno. Lo que realmente diferencia RDF de XML y otras cosas es que RDF está diseñado para representar el conocimiento en un mundo distribuido. Esto significa que RDF está especialmente enfocado al significado. Absolutamente todo lo que se menciona en RDF significa algo, ya sea una referencia a algo concreto en el mundo, un concepto abstracto, o un hecho. Los estándares construidos sobre RDF describen inferencias lógicas entre los hechos y la forma de buscar estos hechos en una gran base de datos de conocimiento RDF. Lo que lo hace al RDF adecuado para conocimiento distribuido es que las aplicaciones RDF puede juntar archivos RDF escritos por diferentes personas en todo Internet y fácilmente aprender de ellos nuevas cosas que ningún documento único permitiría aprender. Esto se hace de dos maneras, en primer lugar mediante la vinculación de documentos entre sí por los vocabularios comunes que utilizan, y en segundo lugar, al permitir a cualquier documento utilizar cualquier vocabulario. Esta flexibilidad es un rasgo único a favor de de RDF. Considera este segundo documento de RDF:

@prefix : <http://www.example.org/> .
:richard :hasSister :rebecca
{ ?a :hasFather ?b . ?b :hasSister ?c . } => { ?a :hasAunt ?c } .

Este documento RDF define lo que significa ser tía, en términos de otras dos relaciones. Se podría imaginar una aplicación que pusiera este documento junto con el primer documento RDF para determinar que :rebecca es la tía de :john. Lo que hace este trabajo es que los nombres de entidades son globales. Es decir, cuando :john y :hasFather se utilizan en un documento, las aplicaciones pueden asumir que tienen el mismo significado en cualquier otro documento RDF con el mismo @prefix.

Así que ¿por qué utilizar RDF? Aquí hay casos de uso, según los describe Richard Cyganiak en la lista de correo de la Web Semántica del W3C:

  • Integrar datos de diferentes fuentes sin necesidad de programación personalizada
  • Ofrecer tus datos para su reutilización por otras partes
  • Descentralizar los datos de forma que ningún parte se haga dueña de todos los datos
  • Hacer algo elegante con grandes cantidades de datos (navegación, consulta, emparejamiento, inserción, extracción,… ), por lo que desarrollas (o reutilizas) una herramienta genérica que permite hacer esto como añadido al modelo de datos de RDF (que tiene la ventaja de no estar atado a una tecnología propietaria de almacenamiento o representación de datos, como sería el caso de un dialecto de base de datos)

RDF Definido

RDF se puede definir en tres sencillas reglas:

  1. Un hecho se expresa en una tripleta de la forma (Sujeto, Predicado, Objeto). Es como una pequeña oración en Español.
  2. Los sujetos, predicados y objetos son los nombres de entidades, ya sean concretas o abstractas, en el mundo real. Los nombres son o bien I) globales y se refieren a la misma entidad en cualquier documento RDF en el que aparecen, o II) locales y la entidad a la que se refieren no puede ser referida directamente hacia fuera del documento RDF.
  3. Los objetos también pueden ser valores de texto, llamados valores literales.

Ya has visto hechos. Cada línea de las siguientes era un hecho:

:john    a           :Person .
:john    :hasMother  :susan .
  ...

Los nombres son de dos tipos. Nombres globales, que tienen el mismo significado en todas partes, son siempre identificadores uniformes de recursos (URI). Los URIs puede tener la misma sintaxis o formato que las direcciones de sitios web, por lo que verás archivos RDF que contienen URIs como http://www.w3.org/1999/02/22-rdf-syntax-ns#type, donde ese URI es el nombre global para alguna entidad. El hecho de que se parezca a una dirección web es totalmente accidental. Puede o no puede haber un sitio web real en esa dirección, no importa. Hay otros tipos de URI además de los de tipo http:. Los URN son un subtipo de URI usado para cosas como la identificación de libros por su número de ISBN, por ejemplo, urn:ISBN: 0143034650. Las etiquetas son un tipo de URI de uso general. Tienen este aspecto tag:govtrack.us,2005:congress/senators/frist. Los URI se utilizan como nombres globales, ya que proporcionan una manera de descomponer el espacio de todos los nombres posibles en unidades que tienen dueños evidentes. Los URI que comienzan con http://www.rdfabout.net/ son controlados implícitamente por mí.

Este punto es importante y requiere insistir sobre él: cualquiera que sea su forma, los URI que ves en documentos RDF son meramente nombres detallados para entidades, nada más. Olvídate de que tengan algo que ver con la web.

Ya que los URI puede ser bastante largos, en varias notaciones RDF están generalmente abreviados utilizando el concepto de espacios de nombres de XML. Eso es lo que los “:” (dos puntos) están haciendo en :john, :hasMother, y las demás entidades en el ejemplo. Los dos puntos indican que el nombre es una forma abreviada. En estos casos, los nombres eran http://www.example.org/#john, http://www.example.org/#hasMother, etc.

Cuando se escriben, en general los URI se encierran entre corchetes para distinguirlos de los nombres abreviados mediante espacios de nombres.

Los valores literales permiten incluir texto en RDF. Esto se usa mucho cuando el RDF se utiliza para los metadatos:

<http://www.rdfabout.net/> a :Website .
<http://www.rdfabout.net/> dc:title "rdf:about" .
<http://www.rdfabout.net/> dc:description "A website about
    Resource Description Framework." .

Y eso es básicamente RDF.

RDF como gráfico

Existen dos formas complementarias de observar la información RDF. El primero es como un conjunto de declaraciones, como la de arriba. Cada declaración representa un hecho. La segunda manera es como un gráfico.

Un gráfico es básicamente una red. Los gráficos consisten en nodos interconectados por bordes. En Internet, por ejemplo, los nodos son los ordenadores, y los bordes son los cables Ethernet que los interconectan. En RDF, los nodos son nombres (no entidades reales) y los bordes son declaraciones. He aquí un ejemplo:

Grafico RDF

Gráfico RDF

Cada flecha o borde es una declaración RDF. El nombre en el inicio de la flecha es el sujeto de la declaración, el nombre al final de la flecha es el objeto de la declaración, y el nombre que etiqueta la flecha es el predicado. El gráfico RDF expresa exactamente la misma información que RDF escrito como tripletas, pero la forma gráfica hace que sea más fácil para nosotros los humanos ver la estructura de los datos.

Un ejemplo rápido

Entonces ¿cómo puede ser útil RDF? Es la tecnología a utilizar cuando se quiere combinar y/o reorganizar información distribuida.

He aquí un escenario en el que la información distribuida cobra mucho sentido: una base de datos de productos de múltiples proveedores y revisiones de estos productos por múltiples colaboradores. Ningún proveedor de estos productos va a querer ser el responsable de mantener una base de datos centralizada para este proyecto, sobre todo porque contendrá información sobre productos de la competencia y críticas negativas. Del mismo modo, ningún colaborador-revisor tendrá recursos para mantener dicha base de datos actualizada.

RDF es especialmente adecuado para este proyecto. Cada vendedor y colaborador-revisor publicarán un archivo en RDF en sus propios sitios web. Los vendedores elegirán URIs para sus productos y los revisores usarán dichos URIs a la hora de redactar sus revisiones. Los vendedores no tienen que ponerse de acuerdo en un esquema de denominación común para los productos y los revisores no están atados a un formato de datos controlado por el proveedor. RDF permite que los vendedores y los revisores estén de acuerdo sobre lo que necesiten acordar, sin obligar a nadie a usar un vocabulario en particular.

Aquí están los archivos RDF que publican en el ejemplo:

**Vendor 1:**
vendor1:productX    dc:title    "Cool-O-Matic" .
vendor1:productX    retail:price    "$50.75" .
vendor1:productX    vendor1:partno  "TTK583" .
vendor1:productY    dc:title    "Fluffertron" .
vendor1:productY    retail:price    "$26.50" .
vendor1:productY    vendor1:partno  "AAL132" .

**Vendor 2:**
vendor2:product1    dc:title    "Can Closer" .
vendor2:product2    dc:title    "Dust Unbuster" .

**Reviewer 1:**
vendor1:productX    dc:description  "This product is good buy!" .

**Reviewer 2:**
vendor2:product2  dc:description  "Who needs something to unbust dust? 
                                  A dust buster would be a better idea,
                                  and I wish they posted the price." .
vendor2:product2  review:rating   review:Excellent .

Esto nos deja una pregunta abierta: ¿cómo una aplicación va a recuperar estos archivos? Pero voy a dejarla de lado. Una vez que una aplicación tiene estos archivos, tiene suficiente información para poder relacionar productos con revisiones y precios, e incluso puede relacionarlos a la información específica del proveedor como vendor1:partno. Con lo que deberías quedarte de este ejemplo es la flexibilidad y los pocos limites que impone el RDF, al tiempo que permite que las aplicaciones sean inmediatamente capaces de relacionar la información entre sí.

Los vendedores y los revisores no tienen que acordar gran cosa para que esto suceda. Tendrían que acordar utilizar RDF, pero no tendrían que estar de acuerdo en ningún formato de datos específico, o incluso en las URIs específicas. Fundamentalmente, ellos no tendrían que enumerar todo lo que un proveedor querría incluir acerca de sus productos, y el proveedor no podría bloquear la publicación de críticas por parte de los colaboradores-revisores.

Otra forma de ver esto desde el punto de vista de la interoperabilidad. El formato del “proveedor 1” es completamente interoperable con el formato de cualquiera, incluso si este “proveedor 1” no ha acordado un formato común con nadie. Cuando alguien aparece en escena y quiere operar con la información del “proveedor 1”, no se necesita un nuevo formato, sólo se tienen que elegir los sujetos, predicados y objetos adecuados.

Conclusión

Si pensabas RDF era complicado, espero que ahora veas que no tiene porqué serlo. RDF es fácil de escribir, flexible y nada limitante. Esto facilita la tarea de modelar el conocimiento y agregar fuentes de conocimiento distribuido.

RDF es un método para expresar el conocimiento en un mundo descentralizado y es el fundamento de la Web Semántica

RDF es un método general para descomponer cualquier tipo de conocimiento en trozos pequeños

RDF es la tecnología a utilizar cuando se quiere combinar y/o reorganizar información distribuida