Tutorial sobre RDF utilizando RDFLib basado en el documento A tutorial on RDF with Jena .
RDFLib es un paquete de código abierto desarrollado para trabajar con RDF y se mantiene en un repositorio de GitHub. La version mas reciente y previa pueden encontrarse utilizando pip.
La mejor manera de instalar RDFLib es usando pip:
pip install rdflib
Durante este tutorial se utilizará un televisor como recurso. La URI utilizada para referirnos a este elemento es http://www.kingstv.com/plasma/PSM2000
. Para este recurso, se tomará el nombre, detalles y la persona que usa el dispositivo como sus propiedades. Esta situación se puede resumir en la siguiente tabla:
La tabla anterior es equivalente al siguiente grafico:
flowchart LR;
N((http://www.kingstv.com/plasma/PSM2000))--->|tv:model|P[PSM2000];
N--->|tv:user|G((http://www.kingstv.com/user/1));
N--->|tv:detail|H[This is a plasma TV.];
En la representación anterior se ha utilizado el prefijo tv
para reemplazar parte de la URI utilizada en los predicados del grafico con la intencion de reducir el espacio ocupado por la representacion.
Para representar la informacion mostrada anteriormente utilizando codigo, lo primero que debemos hacer es crear un grafo vacío haciendo uso de la clase Graph
como se muestra a continuacion:
from rdflib import Graph
""" Create a base Graph """
graph = Graph()
Luego de crear el grafo que se utilizará como base, debemos definir el namespace para las propiedades de la representacion. Para esto, importamos la clase Namespace
, creamos una instancia con la URI:http://www.kingstv.com/tv_property/ y utilizamos el metodo bind
de la clase Graph
para añadirla al grafo, como se muestra a continuacion:
from rdflib import Graph, Namespace
...
""" Create an Prefix to use for predicate in triples """
tv = Namespace("http://www.kingstv.com/tv_property/")
graph.bind("tv", tv)
Ahora se pueden definir los recursos con su propia URI utilizando la clase URIRef
como se muestra a continuacion:
from rdflib import Graph, Namespace, URIRef
...
""" Create an RDF node to use as the subject for triples """
psm2000 = URIRef("http://www.kingstv.com/plasma/PSM2000")
user1 = URIRef("http://www.kingstv.com/user/1")
Ademas, se pueden referir aquellos objetos que estan representados por literales. Para esto importamos la clase Literal
y la usamos como se muestra a continuacion:
from rdflib import Graph, Namespace, URIRef
...
""" Create literals"""
name = Literal("PSM2000")
detail = Literal("This is a plasma TV.")
Ahora solo debemos añadir los tripletes definidos en la tabla de este ejemplo. Para esta tarea, utilizamos el metodo add
disponible en la instancia de la clase Graph
, como se muestra a continuacion:
""" Create triples"""
graph.add((psm2000, tv.model, name));
graph.add((psm2000, tv.detail, detail));
graph.add((psm2000, tv.user, user1));
Finalmente, podemos imprimir la representacion del grafo utilizando distintos formatos de serializacion (se puede consultar la lista en este enlace). Para este ejemplo usaremos el formato RDF/XML:
print(graph.serialize(format='xml'))