Introducción a la Web Semántica

Ideas principales

RDF describe recursos

A través de URIs

RDF consists of "triples" of Information Subject:

Something

Predicate:

has some
relationship to
to

Object:

something else

Las declaraciones se mezclan

label "creator" "creador" lang "es" label same as primary Author contributor subClass

Por ejemplo

Algo de tipo obra tiene

Se ve como

the previous slide in pictures

Para llegar a la Web como fue imaginada

Information Management: A Proposal,

--Tim Berners-Lee, CERN, Marzo 1989

Resources linked to each other in useful ways

En Acción

Foafnaut muestra información como elementos (nodos) relacionados...

Una herramienta grafica para tratar RDF de tipo determinado

¡¿No tiene estructura?!

¿Pero es XML, no?

<rdf:RDF 
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns:foaf="http://xmlns.com/foaf/0.1/" >
   <foaf:Person>
      <foaf:mbox rdf:resource="mailto:charles@w3.org"/> 
      <foaf:givenname xml:lang="en">Charles</foaf:givenname>
   </foaf:Person>
</rdf:RDF>

¿Qué quiere decir?

Una herramienta útil - el validador RDF

Los "triples" (las declaraciones):

Sujeto Predicado Objeto
1 genid:ARP14847 http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://xmlns.com/foaf/0.1/Person
2 genid:ARP14847 http://xmlns.com/foaf/0.1/mbox mailto:charles@w3.org
3 genid:ARP14847 http://xmlns.com/foaf/0.1/givenname "Charles"@en

¡¿genid:Qué?!

Algo que no tiene identificación, sólo descripción (nodo anónimo)

something has the rdf type Person, the foaf mbox property charles@w3.org and the foaf given_name (in english) Charles

Creamos RDF

Usamos

foaf-a-matic
Crea information FOAF, sobre personas
Por Leigh Dodds, traducido por Inkel
Hera
Crea information EARL sobre accesibilidad de una pagina web
Por Emmanuelle Gutiérrez y Carlos Benvidez

Mira un ejemplo de foaf, o un ejemplo de EARL, si no quieres crear nuevos)

Miramos los resultados

Mezclar la información

Presento "cwm"

python cwm.py --rdf rdf-ejem.rdf rdf2-ejem.rdf

resultado: los dos ficheros mezclados

De dónde sacó "rdf:Description"?

Cwm, n3 y reglas

Usando otra forma de RDF llamada n3, cwm puede

N3 usa una sintaxis consistente para todo, pero no es XML

Cómo es n3?

python cwm.py --rdf rdf-ejem.rdf rdf2-ejem.rdf --n3

(es comodo crear una instrucción cwm en vez de python cwm.py...)

da:

      [      a <http://xmlns.com/foaf/0.1/Person>;
             <http://xmlns.com/foaf/0.1/givenname> "Charles"@en;
             <http://xmlns.com/foaf/0.1/mbox> <mailto:charles@w3.org> ].
    
      [      a <http://xmlns.com/foaf/0.1/Person>;
             <http://xmlns.com/foaf/0.1/mbox> <mailto:charles@w3.org>;
             <http://xmlns.com/foaf/0.1/name> "Charles McCathieNevile"@fr ].

¡¿ [ < a ; . @ ?!

La idea de n3 era crear algo mas fácil de escribir y leer.

(Pero en todo caso yo prefiero usar una herramienta)

La sintaxis en basica: <url1> <url2> <url3> .

Para dos declaraciones:

<url1> <url2> <url3> . 
<url4> <url5> <url6> .

Atajos de la sintaxis N3

[ <predicado> <objeto> ]
Nodo anónimo - el sujeto no está identificado
<x> a <y> .
<x> es miembro de la clase <y> - es decir
<x> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <y> .
<x> <pred1> <obj1> ; <pred2> <obj2> .
abreviatura de
<x> <pred1> <obj1> .
<x> <pred2> <obj2> .
"texto"@es
el texto tiene idioma especificado

Reglas --think, --filter, ...

Cwm tiene algunas opciones en las instrucciones

nombre de fichero
leerlo e inlcuirlo en el proceso
--n3
usa n3 (para leer ficheros o presentar resultados)
--rdf
usa RDF/XML (se puede cambiar muchas veces en una linea)
--think
aplica las reglas para sacar conclusiones
--purge
dejar "la basura" (todo de tipo "http://www.w3.org/2000/10/swap/log#Chaff")
--filter
filtrar los resultados

Una regla sencilla...

{ ?x a <http://xmlns.com/foaf/0.1/Person> ;
       <http://xmlns.com/foaf/0.1/mbox> ?dirección ;
       <http://xmlns.com/foaf/0.1/name> ?nombre  .

  ?y a  <http://xmlns.com/foaf/0.1/Person> ; 
       <http://xmlns.com/foaf/0.1/mbox> ?dirección ;
       <http://xmlns.com/foaf/0.1/givenname> ?apellido  .
} =>
{ ?x a <http://xmlns.com/foaf/0.1/Person> ;
       <http://xmlns.com/foaf/0.1/mbox> ?dirección ;
       <http://xmlns.com/foaf/0.1/givenname> ?apellido ;
       <http://xmlns.com/foaf/0.1/name> ?nombre } .

...explicada

Si ?x es una Person, con un mbox determinada y un name,

y ?y es una Person con la misma mbox y un givenname,

?x tiene también este givenname

=>
abreviatura para <http://www.w3.org/2000/10/swap/log#implies>
?algo
usa "algo" como nombre de variable (en n3 - no existe en RDF hoy)
{ <x> <y> <z> }
una expresión que se evalua para aplicar reglas (sólo en N3)

Para aplicarla

cwm --rdf rdf-ejem.rdf rdf2-ejem.rdf --n3 regla-ejem.n3 --think

El resultado incluye toda la información dada.

@prefix log: <http://www.w3.org/2000/10/swap/log#> .
Como declarar un espacio de nombres en n3
Nota parece que hoy los espacios de nombres que no terminan en # no funcionan en reglas :-( @@
<x> <pred> <objUno> , <objDos> .
Abreviatura para
<x> <pred> <objUno> .
<x> <pred> <objDos> .

Filtrar los resultados

Para incluir sólo los resultados interesantes, podemos usar

cwm --rdf rdf-ejem.rdf rdf2-ejem.rdf --n3 regla-ejem.n3 --think --filter=regla-ejem.n3

Así, da sólo las declaraciones corespondientes a una implicación de regla-ejem.n3

Nota Si quieres otras declaraciones, hay que inlcuirlas:

{  ?z a ical:Vcalendar } =>
{  ?z a ical:Vcalendar } .

Usar el poder...

Las reglas en el fichero evaluador.n3 incluyen un nodo anónimo

{ [ a <http://xmlns.com/foaf/0.1/Person> ;
    <http://xmlns.com/foaf/0.1/mbox> ?dirección ;
    ?relación ?objeto ] .

     ?y a earl:Assertor ; 
        earl:email ?dirección } 

=> { ?y ?relación ?objeto } .

... para saber más

Podemos usar el fichero foaf, y lo de EARL.

cwm --rdf earl-ejem.rdf foaf-ejem2.rdf --n3 > cwm-ejem.n3
cwm cwm-ejem.n3 evaluador.n3 --think --filter=evaluador.n3

Para buscar todos las declaraciones con el evaluador como sujeto

Reglas mas complejas

{ ?ev a act:ActionItem ; dc:title ?title ;
    log:racine ?desde . ?desde dc:date ?fecha} =>
{ ?ev a ical:Vtodo ; ical:summary ?title ;
    ical:dtstart [ ical:dateTime ?fecha ]; 
     is ical:component of <foo> } .

Nota <objeto> is <relacion> of <subjeto>

Para continuar con cwm?

Mas información sobre cwm (en inglés)

Es código abierto, pero por lo que sé desarollado en inglés (Dan Connolly intentaré de entender español, pero no tiene en verdad el tiempo. Tim habla francés...)

Tiene funcionalidades arithmeticas, y otras posibilidades interesantes

RDF y vocabularios

Recuerde

Etc...

Definir vocabularios

RDF Basico:

Subjeto - Predicado - Objeto

<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
            xmlns:exterms="http://www.example.org/terms/">

  <rdf:Description rdf:about="http://www.example.org/index.html">
      <exterms:creation-date>August 16, 1999</exterms:creation-date>
  </rdf:Description>

</rdf:RDF>

about, ID, nodeID

tres atributos similares para identificar lo que se describe

ID
Como ID de XML. Puede aparecer una vez en un documento, y se refiere de fuera

p.ej. <rdf:Description rdf:ID="aquí"> define #aquí en el documento

about
Describe el URIRef (puede ser relativa) que es su valor.
Puede aperecer muchas veces.

p.ej. <rdf:Description rdf:about="http://www.example.com/#aquí">

nodeID
Identifica un nodo dentro de un documento.
Puede aperecer muchas veces.
No puede usarlo para referencía fuera del documento.

Propiedades

Propiedades son las relaciones

Tiene un URI - entonces se decribe en RDF

<rdf:Description rdf:about="http://www.w3.org/1999/02/22-rdf-syntax-ns#Property">
  <rdfs:comment xml:lang="es">Una relación entre 2 cosas identificados (normalmente) por URIs</rdf:label>
</rdf:Description>

Y clases

Una clase es un tipo de recurso.

Por ejemplo, cada clase RDF es de tipo

http://www.w3.org/1999/02/22-rdf-syntax-ns#Class

(y quizas de otras clases a la vez)

type y datatype (y xml:lang)

Dos cosas distintas, con uso similar

type
Se usa para decir que algo pertenece a una clase.
(Algo puede pertenecer a muchas clases a la vez)
datatype
Para dar mas información sobre cómo interepretar algo
Por ejemplo un texto de datatype gDate es una fecha
xml:lang
Para identificar el tipo de data de texto (objetos literales)

Literales, XMLLiteral, listas, etc

Literal
El objeto (sólo) de una declaración puede ser texto.
<foaf:Person><foaf:name>Charles</foaf:name></foaf:Person>
o <algo:Anónimo><dc:title rdf:value="Un titulo"/></algo:Anónimo>
XMLLiteral
Hay un metodo de incluir texto XML sin intentar de interpretarlo
Listas
Y el objeto puede ser una lista de objetos, definido como en LISP por first, rest, nil, ...

subClass - jerarquía en RDFS

Una clase puede ser una subclase de otras

Por ejemplo, podemos decir que "myclass" es una subclase de Class

implica que todo de tipo myclass es de tipo Class (pero no viceversa)

Hay también subProperty para propiedades

¡RDFS! ¿Y qué más?

Hay 6 especificaciones para RDF, y 6 más para OWL...

RDFS es un apodo del lenguaje para definir vocabularios

Tiene propiedades label y comment, que son utiles para presentar un vocabulario en ina interfaz, o describirlo de una manera semántica.

<rdf:Description rdf:about="http://www.w3.org/2000/01/rdf-schema#label">
  <rdfs:label xml:lang="es">Titulo</rdfs:label>
  <rdfs:comment xml:lang="es">Un titulo breve para un termino en un vocabulario RDF</rdfs:comment>
</rdf:Description>

Además, hay OWL...

Un lengauje RDF que puede definir mejor un vocabulario

Por ejemplo

Vocabularios

¿Crear (¡usa rdfs:label y rdfs:comment!) o buscar?

Buscar por preferencía, pero ¿dónde?