¿Qué es RDF?

La semana pasada estuve investigando un poco sobre la web semántica y cómo utilizar los datos de ella para construir sistemas de pregunta-respuesta. Hoy, voy a leer un poquito más sobre qué es RDF.

Un triplet de RDF simplemente establece una relación entre dos recursos. El sujeto y el objeto son los elementos que relacionamos y el predicado es el tipo de relación que hay entre ellos. Esa relación entre el sujeto y el objeto representará lo que en RDF se llama una «propiedad«.

Sample triples (informal), pseudocode.

<Bob> <is a> <person>.
<Bob> <is a friend of> <Alice>.
<Bob> <is born on> <the 4th of July 1990>. 
<Bob> <is interested in> <the Mona Lisa>.
<the Mona Lisa> <was created by> <Leonardo da Vinci>.
<the video 'La Joconde à Washington'> <is about> <the Mona Lisa>

Estas relaciones conformarán grafos dirigidos (con una dirección concreta). Podemos hacer preguntas sobre la información de estos grafos con SPARQL.

Existen tres tipos de datos que pueden aparecer en estos nodos:

  • IRIs: el ID del recurso, similar a la URL de una web (de hecho una URL es un tipo específico de IRI), a lo que apunta. Pueden aparecer en el sujeto, el objeto o el predicado.
  • literales: strings, números, fechas, etc. Sólo pueden ser objetos.
  • nodos vacíos o variables. Representan elementos sin un identificador. Pueden ser objetos o sujetos. Esa parte del cuadro de la Mona Lisa es un ejemplo de nodo vacío.
Blank node example: cypress tree

Un dataset de RDF estará consituido por varios grafos. Cada grafo dentro de un dataset tendrá asociado su IRI. Por ejemplo:

Informal graph of the sample dataset

RDF SCHEMA

Los recursos serán clasificados en CLASES y subclases que especifican las categorías a las que pertenecen. Asimismo, existirán distintos TIPOS de propiedades. Así, se podrán crear jerarquías de clases y subclases y de tipos y subtipos de recursos. Las restricciones por tipo serán definidas por los DOMINIOS o los RANGOS de las propiedades. Queda más claro, en esta tabla:

ConstructSyntactic formDescription
Class (a class)C rdf:type rdfs:ClassC (a resource) is an RDF class
Property (a class)P rdf:type rdf:PropertyP (a resource) is an RDF property
type (a property)I rdf:type CI (a resource) is an instance of C (a class)
subClassOf (a property)C1 rdfs:subClassOf C2C1 (a class) is a subclass of C2 (a class)
subPropertyOf (a property)P1 rdfs:subPropertyOf P2P1 (a property) is a sub-property of P2 (a property)
domain (a property)P rdfs:domain Cdomain of P (a property) is C (a class)
range (a property)P rdfs:range Crange of P (a property) is C (a class)

Con este RDF Schema podremos crear modelos de datos RDF como el siguiente:

Example 5: RDF Schema triples (informal)

<Person> <type> <Class>
<is a friend of> <type> <Property>
<is a friend of> <domain> <Person>
<is a friend of> <range> <Person>
<is a good friend of> <subPropertyOf> <is a friend of>

Ejemplos de vocabularios RDF

Formatos para crear grafos RDF

Lo copio directamente de la web que estoy consultando:

  1. Turtle family of RDF languages (N-Triples, Turtle, TriG and N-Quads);
  2. JSON-LD (JSON-based RDF syntax);
  3. RDFa (for HTML and XML embedding);
  4. RDF/XML (XML syntax for RDF).

El que más me interesa es el JSON-LD, ya que es que el veo que más están pidiendo, así que sigo con este. El JSON-LD sigue la sintaxis de los documentos JSON para crear grafos y datasets de RDF. JSON-LD se puede utilizar para transformar documentos en JSON a RDF con cambios mínimos.

Example 12: JSON-LD

01    {
02      "@context": "example-context.json",
03      "@id": "http://example.org/bob#me",
04      "@type": "Person",
05      "birthdate": "1990-07-04",
06      "knows": "http://example.org/alice#me",
07      "interest": {
08        "@id": "http://www.wikidata.org/entity/Q12418",
09        "title": "Mona Lisa",
10        "subject_of": "http://data.europeana.eu/item/04802/243FA8618938F4117025F17A8B813C5F9AA4D619",
11        "creator": "http://dbpedia.org/resource/Leonardo_da_Vinci"
12      }
13    }

Ejemplos de datasets de RDF

  • Wikidata
  • DBpedia
  • WordNet
  • Europeana
  • VIAF

Debido a que los grafos son el resultado de distintas relaciones entre recursos, también podemos inducir propiedades de elementos que no están directamente relacionados en nuestro grafo. Por ejemplo, si sabemos que <Bob> <conoce a> <Ana>, entonces podemos deducir que <Bob> <es una> <persona> puesto que en nuestro grafo también definíamos el predicado <conoce a> como una relación entre dos <personas>.

Linked Data: RDF, SPARQL y Question Answering systems (1)

Hoy voy a hacer un alto en el curso y voy a prepararme un poco el tema de los sistemas de pregunta respuesta y su relación con el linked data. He estado leyendo el siguiente artículo: An Introduction to Question Answering over Linked Data

Las principales diferencias entre estos sistemas de pregunta-respuesta y los buscadores clásicos tipo Google:

  • los buscadores clásicos se basan en palabras clase, mientras que los sistemas de pregunta respuesta son capaces de «entender» preguntas con estructuras lingüísticas complejas.
  • el resultado de los buscadores clásicos son un conjunto de documentos, mientras que los sistemas de pregunta-respuesta nos darán directamente la respuesta.

Algunos ejemplos de sistemas de pregunta-respuesta son Wolfram Alpha o IBM Watson (ya hablé un poquito de este sistema aquí).

El mayor escollo que tienen que salvar los sistemas de pregunta-respuesta es traducir el lenguaje natural en el que se hace la pregunta al lenguaje SPARQL, el lenguaje que se usa para acceder a los datos de los documentos RDF (los documentos en los que se basa la Web Semántica o «linked data»). En muchos casos esta traducción implica:

  • mapear las expresiones de lenguaje natural con el vocabulario que tenemos en los datos, teniendo en cuenta los errores que pueda acarrear ese mapeo
  • manejar variaciones de significado, ambigüedades, expresiones demasiado vagas, expresiones anafóricas, etc.

¿Qué es RDF (Resource Description Framework)?

Es un standard para modelar datos. Tiene 3 componentes principales: sujeto, predicado y objeto (RDF Triples). Un sujeto se relacionará con un objeto a través de un predicado. Los predicados pueden ser de muchos tipos: «is in», «lives in», «is a»… Estas relaciones forman grafos enormes con un montón de información relacionada. Esta red de nodos relacionados unos con otros por distintos tipos de predicados es lo que se conoce como ontologías.

¿De dónde vienen esos RDF triples? De la web semántica o Linked Open Data, con sitios como DBpedia (datos de la Wikipedia), GeoNames, FOAF (Firend of a Friend, para describir personas) o Dublin Core entre otros. Se estima que en el Linked Open Data Cloud existen unos 3000 repositorios con 150 billones de datos.

Los sujetos y predicados de los RDF tienen que ser URIs o IRIs ( International Resource Identifier). Estos últimos son similares a los URIs pero incluyen caracteres no sólo de ASCII.

Los grafos RDF podemos crearlos en documentos JSON o XML. También TTL.

SPARQL es el lenguaje en el que consultaremos los grafos RDF. Es un lenguaje similar a SQL

Deberes:

  • Tom Grube: fundador de Siri.inc