Servicio Web para pasar CSV a RDF:
http://rhizomik-gae.appspot.com/rdf123
Hoja de cálculo con libros en formato CSV:
http://spreadsheets.google.com/pub?key=0AgG7pjGeDor0cGpteXU4aklnR3RGY1UyUktZSWVkRmc&output=csv
Reglas mapeo CSV a RDF:
@prefix tut: <http://rhizomik.net/tutorialWebSem#>.
<Ex:tut+$1> a tut:Libro;
tut:isbn 'Ex:$1';
tut:titulo 'Ex:$2';
tut:valoracion 'Ex:$3'.
Crear objeto URL que llama al servicio (java.net.URL). Cuidado con caracteres especiales, utilizar URL.encode().
Invocar servicio leyendo URL y guardando en Modelo RDF:
modelo.read(url.toExternalForm())
Consulta para listar ISBNs de los libros cargados:
prefix tut: <http://rhizomik.net/tutorialWebSem#>
SELECT ?isbn WHERE { ?b tut:isbn ?isbn }
Lanzar consulta:
Query consulta = QueryFactory.create(sparql);
QueryExecution qexec = QueryExecutionFactory.create(consulta, modelo);
ResultSet resultados = qexec.execSelect();
Recorrer resultados y obtener la variable "isbn":
while (resultados.hasNext())
{
String isbn = resultados.next().get("isbn").toString();
... //Cargar metadatos para ISBN desde RDF Amazon
}
Servicio RDF desde Amazon para libro por ISBN:
Dos descripciones se refieren al mismo si tienen el mismo ISBN:
prefix owl: <http://www.w3.org/2002/07/owl#>
prefix tut: <http://rhizomik.net/tutorialWebSem#>
prefix dc: <http://purl.org/dc/elements/1.1/>
CONSTRUCT { ?b1 owl:sameAs ?b2 }
WHERE {
?b1 tut:isbn ?isbn1.
?b2 dc:identifier ?isbn2.
FILTER(?isbn1 = ?isbn2) }
Ejecutar CONSTRUCT y guardar resultado:
...
Model modeloEquivalencias = qexec.execConstruct();
modelo.add(modeloEquivalencias);
Razonador lógico interpreta equivalencia entre descripciones de libros:
Reasoner reasoner = ReasonerRegistry.getOWLReasoner();
InfModel modeloInferencia = ModelFactory.createInfModel(reasoner, modelo);
Una vez que el razonador a interpretado equivalencias, preguntar por la descripción de cada libro:
... //Consulta SELECT de las cosas de tipo libro en el modelo, ejecutarla
... //Para cada libro
Query describe = QueryFactory.create("DESCRIBE <"+libro+">");
qexec = QueryExecutionFactory.create(describe, modeloInferencia);
Model descripcionLibro = qexec.execDescribe();
smooshed.add(descripcionLibro);