La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Tutorial de JENA Santiago Atella Nicolás Genta Diego González INCO - FING - UDELAR.

Presentaciones similares


Presentación del tema: "Tutorial de JENA Santiago Atella Nicolás Genta Diego González INCO - FING - UDELAR."— Transcripción de la presentación:

1 Tutorial de JENA Santiago Atella Nicolás Genta Diego González INCO - FING - UDELAR

2 JENA Framework desarrollado por HP Labs para manipular metadata desde una aplicación Java. Dos versiones: –JENA 1 Principalmente soporte para RDF. Capacidades de razonamiento limitadas. –JENA 2 Incluye además una API para el manejo de Ontologias. Soporta el lenguaje OWL.

3 JENA Incluye varios componentes: –ARP: Un Parser de RDF. –API RDF. –API de Ontologias con soporte para OWL, DAML y RDF Schema. –Subsistema de Razonamiento. –Soporte para Persistencia. –RDQL: Lenguaje de consultas de RDF.

4 RDF Recurso: –Todo aquello que se puede describir por una expresión RDF. Propiedad: –Una característica, atributo o relación usada para describir un recurso. Literal: –Un tipo de datos simple (String, Integer, etc). Statements: –Un recurso junto con una propiedad y con un valor asociado.

5 Statements Cada statement tiene tres partes: –Sujeto, Predicado y Objeto. Un modelo RDF es un conjunto de statements.

6 API RDF de Jena Permite crear y manipular modelos RDF desde una aplicación Java. Proporciona clases java para representar: –Modelos. –Recursos. –Propiedades. –Literales. –Statements.

7 Ejemplo: vcards

8 Crear un modelo RDF String personURI = "http://somewhere/JohnSmith"; String givenName = "John"; String familyName = "Smith"; String fullName = givenName + " " + familyName; Model model = ModelFactory.createDefaultModel(); Resource johnSmith = model.createResource(personURI); johnSmith.addProperty(VCARD.FN, fullName); johnSmith.addProperty(VCARD.N, model.createResource().addProperty(VCARD.Given, givenName).addProperty(VCARD.Family, familyName));

9 Escribir y Leer un modelo Para serializar el modelo a XML: model.write(System.out); Para cargar un modelo en memoria: Model model = ModelFactory.createDefaultModel(); InputStream in = Tutorial05.class.getClassLoader(). getResourceAsStream(ejemplo.owl); model.read(new InputStreamReader(in), "");

10 Navegar un modelo A partir de la URI de un recurso: // recuperar el recurso John Smith String johnSmithURI = "http://somewhere/JohnSmith"; Resource jSmith = model.getResource(johnSmithURI); // recuperar el valor de la propiedad N Resource name = (Resource) jSmith.getProperty(VCARD.N).getObject(); // recuperar el valor de la propiedad FN String fullName = (String) jSmith.getProperty(VCARD.FN).getObject();

11 Consultar un modelo Buscar información en un modelo: // recuperar todos los recursos de tipo vcard (asumiendo que // solo ellos tienen la propiedad FN y que todos la tienen) ResIterator it = model.listSubjectsWithProperty(VCARD.FN); while (it.hasNext()) { Resource r = it.nextResource(); System.out.println(r); } Consultas más avanzadas: –Utilizar la primitiva listStatements(Selector s). –Utilizar el lenguaje de consulta RDQL.

12 Operaciones sobre modelos Los modelos son conjuntos de statements. Podemos realizar las siguientes operaciones: –Unión. –Intersección. –Diferencia. // leer los modelos de los archivos RDF model1.read(new InputStreamReader(in1), ""); model2.read(new InputStreamReader(in2), ""); // unir los modelos Model model = model1.union(model2);

13 API de Ontologías de Jena Soporta RDF Schema, DAML y OWL. Es independiente del lenguaje. Los recursos no están ligados estáticamente a una clase java particular. –Ejemplo:

14 API de Ontologías de Jena Problema: –El recurso no cambió, pero la clase Java para modelarlo es otra. –No podemos modificar la clase dinamicamente. Jena considera que la abstracción Java del recurso es solo una vista del mismo. –Ejemplo: Resource r = model.getResource(myNS + "DigitalCamera"); OntClass c = (OntClass) r.as(OntClass.class); Restriction rest = (Restriction) c.as(Restriction.class);

15 Ejemplo: Ontología de Cámaras

16 Crear un modelo ontológico Se usa el método createOntologyModel(). Permite especificar: –Lenguaje a utilizar. –Razonador asociado. String fileName = "c:/ejemplo.owl"; String baseURI = "file:///" + fileName; OntModel model = ModelFactory.createOntologyModel(ProfileRegistry.OWL_DL_LANG); model.read(new FileReader(schemaFileName), baseURI);

17 Clases Son los bloques constructivos básicos. Se representan con la interfase OntClass. –Ejemplo: Obtener las subclases de Camera. OntClass camera = model.getOntClass(camNS + "Camera"); for (Iterator i = camera.listSubClasses(); i.hasNext();) { OntClass c = (OntClass) i.next(); System.out.println(c.getLocalName()); }

18 Propiedades Se representan mediante la interfase OntProperty. –Ejemplo: Crear las propiedades part y body. OntModel m = ModelFactory.createOntologyModel(); OntClass Camera = m.createClass(camNS + "Camera"); OntClass Body = m.createClass(camNS + "Body"); ObjectProperty part = m.createObjectProperty(camNS + "part"); ObjectProperty body = m.createObjectProperty(camNS + "body"); body.addSuperProperty(part); body.addDomain(Camera); body.addRange(Body);

19 Propiedades DatatypeProperties ObjectProperties –FunctionalProperty –TransitiveProperty –SymmetricProperty –InverseFunctionalProperty Proporciona métodos isXXX para testear el tipo de una propiedad: –Ejemplo: isTransitiveProperty()

20 Clases complejas Se pueden definir clases mediante operaciones de unión, intersección y complemento. Ejemplo:

21 // crear la instancia throughTheLens OntClass Window = m.createClass(camNS + "Window"); Individual throughTheLens = m.createIndividual(camNS + "ThroughTheLens", Window); // crear la propiedad viewfinder ObjectProperty viewfinder = m.createObjectProperty(camNS + "viewfinder"); // crear la restriccion hasValue HasValueRestriction viewThroughLens = m.createHasValueRestriction(null, viewfinder, throughTheLens); // crear la clase Camera OntClass Camera = m.createClass(camNS + "Camera"); // crear la interseccion para definir la clase SLR IntersectionClass SLR = m.createIntersectionClass(camNS + "SLR", m.createList(new RDFNode[] {viewThroughLens, Camera}));

22 Schema vs Instancia Schema –Se puede definir las: Clases Propiedades (DataTypeProperty, ObjectProperty) Restricciones –Tipos de Datos –Cardinalidad Instancia –Definimos la instancias (individuos) de los elementos del Schema.

23 Kodak

24

25 Manejando Instancias URI = OntClass c = model.getOntClass(URI +#Camera") OntProperty p = model.getOntProperty(URI +#name") Individual ind = model.getIndividual(URI +#camera1") if (ind.hasProperty(p)) Statement st = ind.getProperty(p); Object l = (Object)st.getObject();

26 Manejando Instancias Otras operaciones: –model.listIndividuals() Todas las instancias del Modelo –individual.hasProperty(Property p,Object o) Retorna True si el objeto individual tiene la propiedad p con valor o –ontClass.listInstances(); Todas las instancias de la clase

27 Validando OWL Validación Básica de OWL –http://owl.bbn.com/validator/ –Valida sintaxis no infiere ni razona. Para validaciones mas complejas: –Jena 2 Inference Support –Detecta la violación de las restricciones definidas en el schema por las instancias

28 Jena Inference Support Inferir Deducir información adicional –El código que realiza la tarea de inferir se le llama razonador (Reasoner) –Jena incluye un conjunto básico de razonadores OWL Reasoner DAML Reasoner RDF Rule Reasoner Generic Rule Reasoner –Da un mecanismo para incluir nuevos razonadores

29 Validación en Jena Model schema = ModelLoader.loadModel("file:c:/Schema.owl"); Model data = ModelLoader.loadModel("file:c:/ejemplo.owl"); Reasoner reasoner = ReasonerRegistry.getOWLReasoner(); reasoner = reasoner.bindSchema(schema); InfModel modelInf = ModelFactory.createInfModel(reasoner, data); ValidityReport vrp1 = modelInf.validate(); if (vrp1.isValid()){ System.out.println(OWL VALIDO"); }else { System.out.println(OWL NO VALIDO"); for (Iterator i = vrp1.getReports(); i.hasNext();){ System.out.println(" - " + i.next()); }

30 KODAK Error (range check): Incorrectly typed literal due to range (prop, value) Culprit = Implicated node: Implicated node: 'KODAK

31 1 KODAK OLIMPUS Error (too many values): Too many values on max-N property (prop, class) Culprit = Implicated node: Implicated node:

32 Ejemplo: Ontología de Cámaras

33 KODAK Lente_1

34 Paradigma Orientado a Objetos rdfs:domain significaría this is the class of objects to which this property can be applied. rdfs:domain no describe que es legal. El statement significa all things to which P is applied can be inferred to have class C.

35 Jena Inference Support Inferir Deducir información adicional –El código que realiza la tarea de inferir se le llama razonador (Reasoner) –Jena incluye un conjunto básico de razonadores OWL Reasoner DAML Reasoner RDF Rule Reasoner Generic Rule Reasoner –Da un mecanismo para incluir nuevos razonadores

36 Jena Inference Support Para hacer inferencias debemos crear un Modelo Inferido a partir de un razonador Ej: Reasoner reasoner = ReasonerRegistry.getOWLReasoner(); reasoner = reasoner.bindSchema(schema); InfModel modelInf = ModelFactory.createInfModel(reasoner, data); Todas las consultas que le hacemos al modelo inferido, infiere información

37 Jena Inference Support OWL FB REASONER GENERIC RULE REASONER

38 Jena Inference Support Generic Rule Reasoner: –Inferencia basada en Reglas. Cada regla es una lista de Premisas y Conclusiones –T1,T2 ………., TN TO »T = triple patterns como (?x rdf:type ?C) –Si T1…….TN matchea en el conjunto de datos entonces T0 puede ser deducido

39 Jena Inference Support SubClass (?A rdfs:subClassOf ?B) (?B rdfs:subClassOf ?C) (?A rdfs:subClassOf ?C)

40 Jena Inference Support Generic Rule Reasoner: –Dos Motores de Inferencia Forward Chaining engine –Se chequea cada una de las reglas para ver si los datos satisfacen las premisas de alguna de las reglas. – Si una regla es satisfecha, es ejecutada derivando nuevos hechos que pueden ser utilizados por otras reglas para derivar hechos adicionales. Backward Chaining engine –parte de los objetivos y trata de cumplir las condiciones necesarias para llegar a ellos. –Cuando el Modelo Inferido es consultado, transforma la consulta en un Objetivo –Ejecución similar a los motores PROLOG

41 objetivo: A is C ? datos: A is B B is C reglas : is2 = (?A p ?B) (?A is ?C) is1 = (?A is ?B) (?B is ?C) (?A is ?C) Forward Chaining engine Aplica la regla is2 y no llega a cumplir el objetivo Aplica la regla is1 y llega a cumplir el objetivo Backward Chaining engine el objetivo se matchea con el objetivo de is2, luego a partir de los hechos no se cumple las premisas el objetivo se matchea con el objetivo de is1, luego a partir de los hechos se cumple las premisas

42 Jena Inference Support Generic Rule Reasoner: –Se puede usar los dos motores a la vez –Ejemplo: (?p rdfs:subPropertyOf ?q),notEqual(?p,?q) [ (?a ?q ?b) (?a ?p ?b) ]

43 Jena Inference Support Como invocar al Generic Rule Reasoner: //Creo el String de las reglas String ruleSrc = [rule1: (?a eg:p ?b) (?b eg:p ?c) (?a eg:p ?c)]; //Parseo el String de las reglas List rules = Rule.parseRules(ruleSrc); //Construyo el Razonador Reasoner reasoner = new GenericRuleReasoner(rules);

44 Jena Inference Support Archivos de reglas para los razonadores predefinidos DIR_INSTALACION\Jena-2.1\etc Ejemplo : owl-fb.rules

45 RDQL RDF Data Query Language. Es un lenguaje de consultas para RDF. Enfoque totalmente declarativo. Considera un modelo RDF como un conjunto de tripletas: –(Sujeto Propiedad Valor) Permite especificar patrones que son matcheados contra las tripletas del modelo para retornar un resultado.

46 Ejemplo

47 q1 contiene la consulta: SELECT ?x WHERE (?x "John Smith") Para ejecutar q1 sobre el modelo m1.rdf: java jena.rdfquery --data m1.rdf --query q1 La salida es: x =============================

48 Ejemplo Retornar todos los recursos que tienen la propiedad FN y su valor: SELECT ?x, ?fname WHERE (?x ?fname) La salida es: x | fname ================================================ | "John Smith" | "Sarah Jones" | "Matt Jones"

49 Ejemplo Retornar los nombres de los Jones: SELECT ?givenName WHERE (?y "Jones"), (?y ?givenName) La salida es: givenName ========= "Matthew" "Sarah"

50 Uso desde Java Se pueden realizar consultas en RDQL desde una aplicación Java. Se usan las siguientes clases: –Query –QueryExecution –QueryEngine –QueryResults –ResultBinding

51 Ejemplo SELECT ?x, ?fname WHERE (?x ?fname) Query query = new Query("SELECT...") ; query.setSource(model); QueryExecution qe = new QueryEngine(query) ; QueryResults results = qe.exec(); for (Iterator iter = results; iter.hasNext();) { ResultBinding res = (ResultBinding) iter.next(); Resource x = (Resource) res.get("x"); Literal fname = (Literal) res.get("fname"); System.out.println("x: " + x + " fname: " + fname); }

52 Modelos Persistentes Jena permite crear modelos persistentes: –Son persistidos de forma transparente en una base de datos relacional. Jena 2 soporta: –MySQL –Oracle –PostgreSQL Para crear un modelo persistente se usa: –ModelFactory.createModelRDBMaker(conn).createModel()

53 Ejemplo // Crear la conexión a la BD DBConnection c = new DBConnection(DB_URL, DB_USER, DB_PASS, DB_TYPE); // Crear un ModelMaker para modelos persistentes ModelMaker maker = ModelFactory.createModelRDBMaker(c); // Crear un nuevo modelo Model model = maker.createModel("modelo_1"); // Comenzar una transacción model.begin(); // Leer el modelo de un archivo XML model.read(in, null); // Hacer el commit de la transacción model.commit();

54 Referencias Sitio Oficial de Jena 2 Jena 2 Ontology API An Introduction to RDF and the Jena RDF API

55 Referencias A Programmer's Introduction to RDQL Jena2 Database Interface Jena 2 Inference support


Descargar ppt "Tutorial de JENA Santiago Atella Nicolás Genta Diego González INCO - FING - UDELAR."

Presentaciones similares


Anuncios Google