Qué es?
FOAF es una aplicación de XML y
RDF. Basicamente es un archivo XML (en realidad, RDF escrito en XML) con el cual
se describen Personas, Documentos, etc, siendo su uso en la descripción de personas el más
interesante hoy por hoy.
Cuando hablamos de describir no estamos hablando de los atributos fisicos de la persona, sino de datos más profundos: a quien
conoce, de quien es amigo y de quien no, cuales son sus proyectos actuales y cuales los pasados, etc, etc, etc. Todo, o casi todo, puede ser
definido en un archivo FOAF.
Introducción
Antes de entrar en aspectos técnicos o teóricos acerca de XML, FOAF y RDF, veamos un ejemplo de como es un archivo FOAF:
<?xml version="1.0" standalone="yes"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:foaf="http://xmlns.com/foaf/0.1/"> <foaf:Person> <foaf:name>Leandro Mariano Lopez</foaf:name> </foaf:Person> </rdf:RDF>
(Para poder comprender más y mejor la estructura del documento es necesario conocer acerca de XML y Namespaces)
Este es un archivo muy simple, tal vez demasiado, en el cual tan solo estamos describiendo el nombre de una persona como «Leandro Mariano
Lopez». La verdad que no es muy util, no solo por la falta de información sino porque no sabemos de quien estamos hablando. Puesto que
puede haber más de un «Leandro Mariano Lopez» dando vueltas por el mundo, cómo podemos saber de quien hablamos?
Identificando Personas
Existen en el mundo cientos de miles de personas que comparten los mismos atributos, como el nombre, color de ojos, pelo, altura,
intereses, etc. Sabiendo esto, como podemos llegar a distinguir de quien estamos hablando? Como identificar de un modo univoco a
alguien? Pues bien, como FOAF es un proyecto basado en internet, los desarrolladores buscaron algun atributo propio de los usuarios
de internet, y lo encontraron: el email. Citando el documento que describe a FOAF (en ingles)
FOAF is expressed as an RDF Schema, annotated with DAML to express the fact that a foaf:mbox uniquely picks out an individual.
FOAF:mbox is an UnambiguousProperty, in the DAML+OIL sense. Furthermore it is a ‘static unambiguous property’, in that it picks
out at most a single individual, across time and change.
Dicho en un lenguaje menos técnico: el email es considerado una propiedad no ambigua acerca de una persona, en el sentido que
toma a lo sumo una sola persona como destinatario, a lo largo del tiempo. Esto podria parecer poco cierto, si sabemos que existen
emails corporativos o que se distribuyen a varias personas a pesar de tener una sola direccion, pero tambien es cierto que cualquier
puede obtener un email propio en los cientos de servidores que brindan cuentas de email gratuitas. Asi que, por lo visto, el email
funciona (y de hecho lo hace muy bien) como un identificador unico de alguien.
Ahora ya sabemos como identificar a una persona, pero cómo indicarlo en un archivo FOAF? He aquí un ejemplo:
<?xml version="1.0" standalone="yes"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:foaf="http://xmlns.com/foaf/0.1/"> <foaf:Person> <foaf:name>Leandro Mariano Lopez</foaf:name> <foaf:mbox rdf:resource="mailto:yo@inkel.com.ar"/> </foaf:Person> </rdf:RDF>
El lector atento y estudioso habra notado que indicamos el email como un recurso de RDF. Esto es asi debido a que en el mundo de RDF (y por
extensión de FOAF) hablamos de recursos (RDF, Resource Description Framework), y estos se indican por medio de
URIs.
Bien, ya tenemos una forma de identificar univocamente a una persona, a traves de su dirección de correo electrónico. Y no solo eso,
sino que podemos indicar todos los emails correspondientes a esa persona, dado que todos son identificadores unicos y exclusivos de ella. Bienvenido
al interesante y prometedor proyecto FOAF.
Hasta aquí reconozco que, honestamente, no hay nada de interesante en FOAF, aunque tambien es cierto que esto es un articulo introductorio.
Las ventajas que a futuro presenta FOAF es la rápida y efectiva constitución de comunidades virtuales, busqueda de personas con los mismos
intereses que nosotros, documentos escritos por otros, entre otros, y teniendo la tranquilidad de saber que lo que aún no esta hecho, se puede
hacer: tan solo es cuestión de definir un esquema, utilizarlo y motivar a otros a que lo hagan. Pero eso es madera para otro articulo.
Una de los proyectos con mayor actividad en la actualidad, es el diagrama de relaciones entre diversas personas, y a traves de quienes se hayan
unidos (ver FOAFCorp para tener una idea). Esto permite entre otras cosas realizar inferencias de
confiabilidad, amistad, entre otras posibilidades. Uno de los proyectos más interesantes es foafnaut!, que permite
una veloz identificacón de quienes conocen y a quien conoce una determinada persona, ver fotografís donde se encuentren ambos, etc. A
continuación veremos como podemos entrar en el.
Expresando relaciones
La forma expresar que conocemos a alguien en FOAF es por medio de la propiedad knows
. Como hemos estado haciendo hasta ahora,
veamos un ejemplo.
<?xml version="1.0" standalone="yes"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:foaf="http://xmlns.com/foaf/0.1/"> <foaf:Person> <foaf:name>Leandro Mariano Lopez</foaf:name> <foaf:mbox rdf:resource="mailto:yo@inkel.com.ar"/> <foaf:knows> <foaf:Person> <foaf:name>Jim Ley</foaf:name> <foaf:mbox rdf:resource="mailto:jim@jibbering.com"/> </foaf:Person> </foaf:knows> </foaf:Person> </rdf:RDF>
Analicemos este ejemplo: la persona asociada al email yo@inkel.com.ar, de nombre Leandro Mariano Lopez, conoce
a la persona asociada al email jim@jibbering.com, cuyo nombre es Jim Ley. Como vemos es bastante simple, pero en eso se basa tambien
su efectividad: expresa correctamente, y sin ambigüedades quien conoce a quien.
La pregunta por excelencia que surge en este momento es: y como sabemos a quien conoce Jim Ley? Una solución que los más
atentos tal vez hayan pensado, es definir (en FOAF) a Jim Ley dentro del envoltorio <foaf:Person>
en el que expresamos su
nombre y correo electrónico para expresar la relación. De más esta decir que es una idea poco feliz: imaginense si conocieramos
a 10 personas???
Indicando datos externos
¿Cómo hacemos en internet para navegar de página en página? Seguimos un link. ¿Se imaginan como es en FOAF? Si,
por medio de links. Pero estos links no se expresan igual que los links en HTML, sino que por
medio del esquema de RDF, o RDFS, y su propiedad <rdfs:seeAlso>
.
Vayamos al ejemplo de turno:
<?xml version="1.0" standalone="yes"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:foaf="http://xmlns.com/foaf/0.1/"> <foaf:Person> <foaf:name>Leandro Mariano Lopez</foaf:name> <foaf:mbox rdf:resource="mailto:yo@inkel.com.ar"/> <foaf:Person> <foaf:name>Jim Ley</foaf:name> <foaf:mbox rdf:resource="mailto:jim@jibbering.com"/> <rdfs:seeAlso rdf:resource='http://jibbering.com/foaf.rdf' /> </foaf:Person> </foaf:Person> </rdf:RDF>
Como les prometi, es tan simple como en HTML, tan solo es una cuestión de adaptarse a la sintaxis. Ahora los programas que recorren la web
analizando documentos FOAF (comunmente denominados scutter) sabran donde buscar la definición de Jim.
No al SPAM
Quien posea una dirección de correo electrónico seguramente ha sufrido el peor mal de internet: el SPAM. Como hemos repetido a lo largo
de este documento incansables veces, el email es nuestro documento de identidad en el universo de FOAF. Si dejamos nuestro email asi tan libremente, no
somos presa del SPAM? Quisiera poder decir que no, pero eso no es cierto: escribir el email tan limpiamente nos expone a nosotros (y a nuestros
conocidos) al bombardeo publicitario no deseado. ¿Cómo podemos protegernos (y proteger a otros) del SPAM con FOAF? Bueno, los creadores
de FOAF tuvieron en cuenta este problema y decidieron incluir un metodo alternativo para la protección de los emails en FOAF: la propiedad
<foaf:mbox_sha1sum>
, que expresa la suma SHA de la dirección de correo y es tambien,
única. Veamos como quedaria el ejemplo anterior
<?xml version="1.0" standalone="yes"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:foaf="http://xmlns.com/foaf/0.1/"> <foaf:Person> <foaf:name>Leandro Mariano Lopez</foaf:name> <foaf:mbox_sha1sum>d3e392addda8ca656b212bb09ba2fcd259185c81<foaf:mbox_sha1sum> <foaf:Person> <foaf:name>Jim Ley</foaf:name> <foaf:mbox_sha1sum>35022e505e6a64c05837eccf4beb5d8f981a4e5a<foaf:mbox_sha1sum> <rdfs:seeAlso rdf:resource='http://jibbering.com/foaf.rdf' /> </foaf:Person> </foaf:Person> </rdf:RDF>
El algoritmo SHA computa un valor único y no puede ser revertido, por lo tanto suplanta suficientemente a <foaf:mbox>, y con esto
tenemos un modo de seguir identificandonos univócamente, ademas de proteger nuestras preciadas casillas de email contra el SPAM. Más
adelante veremos como podemos hacer que cierta infomación sensible (email, teléfono, etc) sea solo visible por quienes deseemos.
Como nota final de este apartado queria dar una razón más acerca de por que es preferible el uso de <foaf:mbox_sha1sum>, en
particular para identificar a otras personas que no seamos nosotros: no abusar de la confianza. Como suele suceder en todas las comunidades, la
desconfianza es uno de los mayores males, y puede ser la razón de la disolución de la comunidad, por lo tanto, nunca expongamos las
direcciones de los demas de un modo claro, siempre que podamos ocultemos esta informaón. Y a modo de bonus track, 2 formas de computar la suma
SHA, en Python y en PHP:
Python
import sha mbox = 'mailto:mail@example.org' mbox_sha1sum = sha.new(mbox).hexdigest() print "SHA1 sum for address %s is %s" % (mbox, mbox_sha1sum)
PHP 4.0 o anteriores
<?php // Debe estar cargada la libreria mhash $mbox = 'mailto:mail@example.org'; $mbox_sha1sum = mhash(MHASH_SHA, $mbox); print "SHA1 sum for address $mbox is $mbox_sha1sum"; ?>
PHP 4.0.3
<?php $mbox = 'mailto:mail@example.org'; $mbox_sha1sum = sha($mbox); print "SHA1 sum for address $mbox is $mbox_sha1sum"; ?>
Y para todos aquellos que o no poseen conocimientos de programación o tienen fiaca, pueden obtener los mismos resultados en
la siguiente página: Hash Generator, de Bill Kearney
Extendiendo FOAF
Aplicaciones
A continuación un listado descriptivo de algunas aplicaciones de y para FOAF de la actualidad
FOAF People Map
http://jibbering.org/2002/8/foaf-people-map.svg
Presenta un mapa completo de la Tierra ubicando a todos aquellos usuarios que completaron sus datos de
nearestAirport
en la latitud y longitud correspondiente. De aquí se linkea a foafnaut!
para poder ver más información del usuario. Necesita tener un navegador con soporte de SVG (ver foafnaut para mayor información).
foafnaut!
Una de las mejores herramientas de la actualidad, permite ver un usuario y todos aquellos a quien conoce o quienes lo conocen, e ir armando una «red» entre usuarios. Permite tambien ver cual es el «camino más corto» entre dos usuarios distintos. Actualmente se encuentra funcionando normalmente, pero no se pueden agregar nuevos usuarios ni modificar los existentes. Honestamente vale la pena probarlo, es muy entretenido y en cuanto este la nueva versión, creo que se va a convertir en una de las aplicaciones más utiles.
Para poder visualizar este sitio deberas tener instalado soporte de SVG en tu navegador. Puedes instalar el plugin de Adobe (el más recomenable), o instalarte el Mozilla con soporte de SVG, o utilizar Batik.
FoaF Explorer
http://xml.mfd-consult.dk/foaf/explorer/
FoaF Explorer te permite ver la información contenida en un archivo FOAF sin necesidad de instalar ningún plugin ni enviar el archivo para ser procesado. Todo lo hace en tiempo real, basandose en PHP y XSLT.
Haz click aquí para ver mi archivo FOAF
FOAF Web View
FOAF Web View muestra los datos de una persona de modo similar a FoaF Explorer, solo que en este servicio debes de enviar primero la URL del archivo FOAF que deseas visualizar, ya que los datos son almacenados y procesados en el servidor.
Haz click aquí para ver mi archivo FOAF
URL permanente a este documento: http://purl.org/net/inkel/2003/01/27/foaf.html
Muchas gracias por la informacion. Está explicada de forma muy amena
Comentarios por Marlene — 2008.07.16 @ 8.59 am
De nada Marlene. Está muy desactualizada a decir verdad. ¡Gracias por el comentario!
Comentarios por Leandro López — 2008.07.16 @ 9.10 am
me gusto, has presentado las cosas de manera tan sencilla ^^! Tendrias que colgarlo en Wikipedia
Comentarios por Celeste — 2008.08.23 @ 9.00 am
Muchas gracias por tu comentario Celeste. ¿Vos crees que está para la Wikipedia? ¡Gracias por el piropo! Lamentablemente, este documento tiene alrededor de 8 años, por lo que está muy desactualizado, pero tendré en cuenta tu comentario :)
Comentarios por Leandro López — 2008.08.23 @ 9.25 am
tiens mas informacion sobre estos temas y web semantica … esto realizando una investigacion para hacer un proyecto si podes ponerte en contaco serial genial
Comentarios por carlos — 2010.05.31 @ 12.00 pm
Estimado Carlos, hace tiempo que no participo activamente en la Web Semántica. De todas maneras sigo manteniendo un interés, por lo que tengo algunos contactos más. No sé si es el tipo de información que necesitás. Saludos.
Comentarios por Leandro López (inkel) — 2010.05.31 @ 4.42 pm
[…] FOAF-a-Matic: (http://www.ldodds.com/foaf/foaf-a-matic.es.html) /(https://wses.wordpress.com/que-es/foaf/) Share this:TwitterFacebookLike this:LikeBe the first to like this […]
Pingback por Caminos de la Web Semántica « saithetan — 2011.10.10 @ 6.16 pm
[…] buena manera es empezar con nosotros mismos, creando lo que llamamos un archivo “foaf“, que muestra al mundo quienes somos. FOAF es una aplicación de XML y RDF. Básicamente […]
Pingback por Como hacer tu blog accesible semánticamente en LinkedData. Un ejemplo sencillo y práctico. « Inteligencia en el Negocio. Descifrando el 3.0… — 2013.10.01 @ 8.23 am