miércoles, 2 de octubre de 2013

Una forma rapida de dar semantica a tu web

RDF (Resource Description Framework) es la forma de dar semantica a tu pagina. Con RDF se puede describir cualquier concepto, relacion o objeto del universo.

Hay tres cosas principales en las que se basa RDF, sujeto, predicado y objeto.

Sujeto: Es lo que se quiere describir.
Predicado: Generalmente se refiera a un atributo de lo que estas describiendo.
Objeto: Es lo que estas referenciando con el Predicado.

Jorge le gustan las manzanas.

Jorge - es el sujeto, lo que se esta describiendo
le gustan - es el predicado un atributo de Mauricio
las manzanas: es el objeto al cual se le aplica el predicado

Usando esta simple idea podemos definir cualquier cosa.

RDF usa URI (es igual que URL pero en vez de ser una local, la URI referencia a un recurso, de facto, una URL es un tipo de URI) para especificar sujetos y predicados.

Un ejemplo de URI:

http://www.ejemplo.org/uris/largas/son/muy/pesadas/de/escribir


Como podemos ver que las URI son muy largas, y pueden ser muy pesadas, por eso en RDF hay las CURI (Compacta URI). CURI es la forma de escribir mas corto la URI.

un ejemplo de una CURI es:

 foaf:name

http://xmlns.com/foaf/0.1/name

Como podemos ver foaf:name es la abreviación de la uri http://xmlns.com/foaf/0.1/name , donde foaf  equivale a http://xmlns.com/foaf/0.1/ y lo que viene despues, en este caso, name, equivale a agregar a la URI, en este caso name.

Ahora no debemos preocuparnos que significa esa URI, ya que despues lo explicare.

RDF es un concepto no es una syntaxis, entonces debemos aprender a como escribir afirmaciones.

Recordemos que en RDF todo es SUJETO, PREDICADO, OBJETO.

Una afirmacion en RDF es una tripleta, si cojemos el ejemplo anterior, podemos darnos cuenta que hicimos una afirmacion en forma de tripleta. Entonces en RDF lo escribir de la siguiente manera:

@prefix pref: <http://ejemplo.org/vocabulary#> .
<#jorge> pref:gustan <#manzanas> .

El "@prefix" nos especifica quien va ser nuestra CURI pref que en este caso es <http://ejemplo.org/vocabulary#> . En la siguiente linea esta definida la tripleta, empezando con el sujeto <#jorge> , los signos de mayor y menor es para especificar que es una URI. El predicado es pref:gustan, que es tambien una URI y el objeto es <#manzanas> que tambien es una URI. Y al final de la tripleta hay un punto para indicar el final de la afirmacion. Pueden escribir cuantas tripletas quieran, mientras mas tripletas haya con un sujeto, mas informacion hay de ese sujeto.

Si nos fijamos pref apunta a algo que dice vocabulary, en español, vocabulario.
Un vocabulario, define que es lo que una tripleta realmente significa. Sin un vocabulario, la tripleta no tendria un concepto global para todos. Un famoso vocabulario se llama Friend of a Friend, también conocido como foaf.  (Si esto no queda claro, siga leyendo entendera mejor con el ejemplo)

foaf tiene muchas relaciones entre personas definidas y tiene muchos conceptos para definir personas. foaf sera el primer vocabulario que vamos a usar en este articulo.

Usando foaf es muy facil describir personas en la Web, todo lo que se necesita es una URI que hable sobre una persona y un URI para usar el predicado que nos convenga. Vamos hacer un ejemplo, especificando que Jorge es una persona y el nombre completo de Jorge.

Lo primero que vamos hacer es especificar que vamos a usar el vocabulario foaf . En nuestro HTML, hacemos esto usando nuestro atributo xmlns . Y lo especificamos de la siguiente manera xmlns:foaf="http://xmlns.com/foaf/0.1".

Tambien vamos a necesitar dos atributos RDF, about property . El primer atributo es about y se usa para especificar el sujeto. De la siguiente forma about="#jorge". El segundo atributo es property y se usa para especificar el predicado. De la siguiente manera property="foaf:name". Finalmente para asignar el valor, nosotros lo ponemos entre las etiquetas que tienen esos atributos. A seguir pongo el ejemplo completo:

<body xmlns:foaf="http://xmlns.com/foaf/0.1">
    <span   about="#jorge" property="foaf:name">
    Jorge McDreaming 
    </span>
<body>


Si ahora quisieran cambiar el nombre completo en iniciales JM no hay que cambiar nada, solamente la entrada del nombre y los datos estarian actualizados.
En tripleta seria

@prefix foaf: <http://xmlns.com/foaf/0.1> .
<#jorge> foaf:name "Jorge McDreaming" .

Pero tenemos que definir que Jorge es una persona, para eso debemos agregar typeof="foaf:Person" . type sirve para especificar un tipo, un tipo es la clase que debe pertenecer el sujeto, que es una relacion especial del sujeto. El tipo que estamos especificando en este caso es Persona.

<body xmlns:foaf="http://xmlns.com/foaf/0.1">
    <span   about="#jorge" property="foaf:name" typeof="foaf:Person">
    Jorge McDreaming 
    </span>
<body>

Ahora queremos definir una relacion entre esas dos personas. La relacion sera conoce, queremos especificar que Jorge conoce a Sheldon. Primero mostraremos como quedaran las afirmaciones que Jorge y Sheldon son personas.


<body xmlns:foaf="http://xmlns.com/foaf/0.1">

    <span   about="#jorge" property="foaf:name" typeof="foaf:Person">
    Jorge McDreaming 
    </span>

    <span   about="#sheldon" property="foaf:name" typeof="foaf:Person">
    Sheldon Cooper 
    </span>

<body>

Finalmente para espcificar que Jorge y Sheldon son amigos, usamos el atributo rel y el atributo resource. Tambien usamos un vocabulario que tiene foaf que es knows conocer. Luego quedaria especificado todo de la siguiente manera:

<body xmlns:foaf="http://xmlns.com/foaf/0.1">

    <span   about="#jorge" property="foaf:name" typeof="foaf:Person">
    Jorge McDreaming 
    </span>

    <span   about="#sheldon" property="foaf:name" typeof="foaf:Person">
    Sheldon Cooper 
    </span>
    
    <span about="#jorge" rel="foaf:knows" resource="#sheldon">
    Jorge conoce a Sheldon
    </span>   

<body>

Con esto ya tenemos las ideas basicas y podemos crear cualquier semantica compleja.

Asi es como una web semantica es construida, una tripleta atras de otra. Una tripleta relacionado con otra y asi. 

No hay comentarios:

Publicar un comentario