Algo de tipo obra tiene
....etc
Information Management: A Proposal,
--Tim Berners-Lee, CERN, Marzo 1989
Foafnaut muestra información como elementos (nodos) relacionados...
<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>
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 |
Algo que no tiene identificación, sólo descripción (nodo anónimo)
Usamos
Mira un ejemplo de foaf, o un ejemplo de EARL, si no quieres crear nuevos)
- declaraciones de origen independiente
- se pronuncia como "cum"
python cwm.py --rdf rdf-ejem.rdf rdf2-ejem.rdf
resultado: los dos ficheros mezclados
- lo importante es la semántica
Usando otra forma de RDF llamada n3, cwm puede
N3 usa una sintaxis consistente para todo, pero no es XML
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 ].
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> .
[ <predicado> <objeto> ]
<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> .
<x> <pred2> <obj2> .
"texto"@es
Cwm tiene algunas opciones en las instrucciones
{ ?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 } .
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
=>
<http://www.w3.org/2000/10/swap/log#implies>
?algo
{ <x> <y> <z> }
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#>
.
<x> <pred> <objUno> .
<x> <pred> <objDos> .
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 } .
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 } .
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
{ ?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>
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
Recuerde
Etc...
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>
tres atributos similares para identificar lo que se describe
p.ej. <rdf:Description rdf:ID="aquí">
define
#aquí en el documento
p.ej. <rdf:Description
rdf:about="http://www.example.com/#aquí">
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>
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)
Dos cosas distintas, con uso similar
<foaf:Person><foaf:name>Charles</foaf:name></foaf:Person>
<algo:Anónimo><dc:title rdf:value="Un
titulo"/></algo:Anónimo>
first
, rest
, nil
, ...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
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>
Un lengauje RDF que puede definir mejor un vocabulario
Por ejemplo
- o describe algo que es equivalente...
¿Crear (¡usa rdfs:label
y rdfs:comment
!) o
buscar?
Buscar por preferencía, pero ¿dónde?