Nodos en blanco y valores literales

Tutorial¿Qué es RDF y para que es bueno?
 
bnodes

Hay algo más en RDF que las tres reglas ya mencionadas.  Hasta ahora hemos descrito tres tipos de elementos en RDF: Recursos(Cosas o conceptos) que existen en el mundo real, nombres globales para los recursos (URIs) y sentencias RDF (Triples, o filas en una tabla).  A continuación veremos dos cosas más.

Literales

Lo primero que veremos serán los valores literales.  Los literales son texto sin formato que pueden ser usados en lugar de objetos en triples.  A diferencia de los nombres (URIs) los cuales referencias a cosas en el mundo real, los valores literales solo son texto sin formato insertado en el grafo.  Los valores literales pueden ser usados para relacionar gente con sus nombres, libros con su número ISBN, etc.

Algunos usos de los literales
Algunos usos de los literales

Nodos anónimos/en blanco

La segunda cosa a la que nos referíamos eran los nodos anónimos o nodos en blanco.  Esos términos son sinónimos.  Las palabras anónimo o blanco indican que esos son nodos en un grafo sin nombre, ya sea porque el autor del documento no sabe, no conoce, no quiere o no necesita proveer un nombre.  En cierto sentido, esto es como decir “John tiene un amigo pero no te diré quién es”.  Cuando decimos que no tienen nombre, ten en cuenta dos cosas.  Primero, lo que denotamos con el nodo puede o no tener nombre.  En el ejemplo, el amigo de John tiene un nombre después de todo.  Segundo, cuando decimos que no tiene nombre nos referimos a las URIs. A los nodos en blanco se les puede asignar un identificador local para que puedan ser referidos en varias ocasiones en el documento.  Es solo que estos identificadores son explícitamente NO globales, y no tienen significado alguno fuera del documento en el cual aparecen.

Aquí vemos una manera de usar los literales y los nodos anónimos.  Un ejemplo de literal es Joshua Tauberer, y de nodo anónimo es _anon:123.

Nodos en blanco y valores literales
Nodos en blanco y valores literales

Para distinguir entre URIs, espacios de nombre, nodos anónimos y literales, usaremos la siguiente convención:

  • Las URIs completas se muestran entre paréntesis angulares
  • Los espacios de nombres son escritos tal cual, pero con el uso de los dos puntos puedes evitarlos
  • Los nodos anónimos son escritos como los espacios de nombres, pero usando el espacio “_” con un nombre local arbitrario después de los dos puntos.
  • Los literales son encerrados entre comillas

Deberías tomarte un momento para tratar de visualizar que grafo es descrito por la tabla.  Imagínate las flechas entre los nodos.  Hay un nodo anónimo en este ejemplo, _:anon123.  Lo que sabemos de este recursos es que es el autor de <urn:isbn:0143034650> y que se llama Lawrence Lessig.  Dado que ningún nombre global es usado para este recurso, no podemos saber con certeza de quién estamos hablando.  Si quisiéramos decir más sobre lo que sea que denota _:anon123, tendríamos que hacerlo en este documento RDF porque no hay manera de referirse a este particular Lawrence Lessig por fuera de él.

Más de los literales: Etiquetas de lenguaje y tipos de datos

Los valores literales pueden ser adornados opcionalmente con una o dos piezas de metadatos. El primero es una etiqueta de lenguaje, para especificar en que lenguaje está escrito el texto. La etiqueta debería ser vista como una vestigio de como se usaba RDF en el pasado. Hoy en día no es más que un truco.Se podrá ver  “chat”@en , el valor literal “chat” con una etiqueta que indica que se trata de una palabra en inglés, o   “chat”@fr , indicando esta vez que se trata del francés. Alternativamente, un valor literal puede ser etiquetado con una URO indicando un tipo de dato. Este tipo indica como interpretar el texto plano, como un número, una URI, una fecha u hora, etc. Los tipos de datos pueden ser cualquier URI, aunque los tipos de datos definidos en el XML Schema son usados como convención.  La notación para los tipos de datos es normalmente el valor literal entre comillas seguido por dos símbolos de intercalación, seguidos por la URI del tipo de dato (posiblemente abreviada):

Tipos de datos
Tipos de datos

 

Los tipos de datos son un poco confusos. Pensemos un momento en los números flotantes. En un nivel abstracto estos números son diferentes del texto que usamos para representarlos en el papel. Por ejemplo, el texto “5.1” representa el número 5.1, pero también “5.1000” y “05.10”. Aquí tenemos múltiples representaciones textuales, que son llamadas representaciones léxicas, para el mismo valor. Un tipo de dato nos dice como “mapear” representaciones léxicas a valores y viceversa.

La semántica de RDF toma las etiquetas y los tipos de datos en cuenta. Esto significa dos cosas. Primero, un valor literal sin etiqueta de lenguaje ni tipo de dato es diferente de un literal con una etiqueta de lenguaje y también es diferente de un literal con un tipo de dato. Estas cuatro sentencias dicen cuatro cosas diferentes y ninguna puede ser inferida de la otra:

Semántica Literal
Semántica Literal

Entonces, un literal sin tipo con o sin lenguaje no es lo mismo que un literal con tipo. La segunda parte de la semántica de los literales es que dos literales tipados que aparentemente son diferentes puede que sean lo mismo si su tipo de dato mapea sus representaciones léxicas al mismo valor. Las siguientes sentencias son equivalentes (por lo menos para una aplicación RDF que utiliza la semántica de los tipos de datos XSD):

Semántica de los tipos de datos

#john     ex:age     "10"^^xsd:float
#john     ex:age     "10.000"^^xsd:float

Esto significa que la edad de John es 10. Esto es, la representación textual del número no es el punto y no hace parte del significado codificado por los triples. Nótese que si el tipo de dato flotante no hubiese sido especificado  los triples no serían equivalentes y la representación textual del 10 sería mantenida como parte de la información del contenido.

Más de los nodos en blanco: Algunas advertencias

A diferencia de la regla para la URIs que dice que son global, los identificadores locales usados para nombrar nodos en blanco son explícitamente NO globales. Un nodo en blanco local usado en dos documentos diferentes pueden referirse a dos cosas. Aún así, el identificador por si mismo es arbitrario, y el identificador actual utilizado en cualquier caso en particular no es parte del contenido de la información del documento.

Los nodos anónimos son usados frecuentemente para evitar la asignación de URIs a la gente, como en el ejemplo de abajo. También se utilizan para representar relaciones más complejas:

Nodos en blanco para relaciones complejas

taubz:me         ex:hasName           _:anon234
_:anon234        ex:firstName         "Joshua"
_:anon234        ex:middleName        "Ian"
_:anon234        ex:lastName          "Tauberer"

Aquí los nodos anónimos fueron usados como un paso intermedio en la relación entre una persona y las partes de su nombre. El nodo representa el nombre de forma estructurada, en vez de usar un único y opaco valor literal “Josgua Ian Tauberer”. RDF solo permite relaciones binarias, por lo cual se hace necesario expresar relaciones más complejas utilizando nodos intermedios, y esos nodos la mayoría de las veces son anónimos.

Anuncios

2 Comentarios Agrega el tuyo

  1. Muchas gracias, me has dejado un poco mas claro el tema de los blank nodes. Tengo una pregunta, como puedo obtener los valores de un nodo en blanco por medio de sparql. ¿Como se traeria por ejemplo, el nombre y el apellido en el ultimo ejemplo donde usaste nodos en blanco para estructurar el nombre de una persona?

    1. krsarmiento dice:

      Puedes usar la siguiente consulta:

      SELECT ?a ?b
      WHERE {
      ?a :predicadoInicial/:predicadoBuscado ?b .
      }

      Saludos.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s