Documentos de Académico
Documentos de Profesional
Documentos de Cultura
TopicosEspeciales Introduccion Web Semantica
TopicosEspeciales Introduccion Web Semantica
Programación de la
1
Web Semántica
Postgrado en Computación
Taniana Rodríguez
Semestre A2016
Abril-2016
2 Contenido del Curso
Tareas . 10%
Artículo de investigación de
estado del arte. 20%
Proyecto práctico y artículo 70%
4 Bibliografía
Contenido no estructurado
Imágenes
Desafíos de la Web
Heterogénea. La presentación
de los datos son presentados
en forma diferentes
Masiva. Gran cantidad de
información
Cambia rápido
Hecha por humanos
7 Agentes o Computadores entender
la Web?
Nombre
Nucleó Mérida
Definición
Expresividad
LD Inferencia
Teoría de Grafo WS Herramientas WS
Integración
Unicidad
Declaración Frameworks
Lenguajes IDE
Ontologías Razonadores
Instancias KB
Fuente: [John Hebeler, Matthew Fisher, Ryan Blace, Andrew Perez-Lopez, Mike Dean. Semantic
Web Programming]
10 Comparación de WWW y WS
Características WWW WS
Componente Contenido no Declaraciones formales
fundamental estructurado
Audiencia Humanos Aplicaciones
Enlaces Indica ubicación Indica ubicación y
significado
Vocabulario Instrucciones Semántica y lógica
Formateada
Lógica Informal/No estándar Lógica descriptiva
Semántica Web
Lenguajes
XML SPARQL
https://www.w3.org/
13 Linked Data
“Los Datos Enlazados es la forma que tiene la Web
Semántica de vincular los distintos datos que están
distribuidos en la Web”
(http://www.w3c.es/Divulgacion/GuiasBreves/LinkedD
ata)
Describe la forma de
exponer, compartir y
conectar piezas de
datos, información y
conocimiento a través
de la Web
Permite construir la
Web de Datos
14 Open Data
Fuente: [John Hebeler, Matthew Fisher, Ryan Blace, Andrew Perez-Lopez, Mike Dean. Sem
Web Programming]
21 Frameworks Web Semántica
Hay varios Framework para la Web Semántica pero los más usados son:
Jena Semantic Web Framework (http://jena.apache.org/) para
Java. Posee una interfaz SPARQL, APIs de RDF y OWL, soporta
inferencia, tiene múltiple almacenamiento y mecanismo de
razonamiento y también permite la integración de otros
mecanismos de razonamiento
Sesame Semantic Web Framework y servidor (http://rdf4j.org/).
Posee una interfaz SPARQL y una interfaz servidor HTTP. Posee
multiple almacenamiento y mecanismo de razonamiento y tambien
permite la integración de otros mecanismos de razonamiento
Otros Frameworks son los siguientes:
OWL API (http://owlapi.sourceforge.net/) para Java. Posee API OWL
que es contruido sobre el formato funcional de OWL 2 y contiene
una interfaz común interfaz para mecanismos de razonamiento
22 Frameworks Web Semántica
Otros Frameworks son los siguientes:
4Suite (http://4suite.org/) es un código abierto de XML y RDF, las
librerías de procesamiento para PYTHON.
RAP RDF API (http://wifo5-03.informatik.uni-
mannheim.de/bizer/rdfapi/). Es un códico abierto de API RDF y
un software para almacenar, consultar, y manipular RDF en PHP
Redland (http://librdf.org/). Colección de librerias de RDF para C.
con interfaz para otros lenguajes. Posee API RDF. Parser y una
interfaz de consultas
LinqToRDF (https://code.google.com/archive/p/linqtordf/) para
.NET construido sobre el Microsoft Language-Integrated Query
(LINQ)
23 Almacenamiento de RDF
AllegroGraph(http://franz.com/agraph/allegrograph): esta
disponible para implementación java y Lisp y posee una interfaz
SPARQL y razonamiento basado en RDFS
Mulgara (http://www.mulgara.org ): Esto es un código abierto,
almacenamiento RDF en Java con un procesador de consulta
SPARQL
OpenLink Virtouso (https://www.w3.org/wiki/VirtuosoUniversalServer)
Posee código abierto y una versión comercial de basado RDB para
el almacenamiento RDF. Posee SPARQL dentro SQL como método
de consulta de datos RDF
24 Almacenamiento de RDF
Pellet (https://www.w3.org/2001/sw/wiki/Pellet) : es un
razonador en Java que soporta OWL DL, OWL
incluyendo OW2.
RacerPro (http://franz.com/agraph/racer): es un
razonador comercial que soporta un gran subconjunto
OWL DL.
Vampire (http://kaon2.semanticweb.org) : es un
razonador comercial, para realizar razonamiento en
ontologías OWL DL.
27 Jena Semantic Web Framework
Este Framework proporciona un entorno de
programación para RDF, RDFS y OWL, SPARQL e
incluye un motor de inferencia basado en reglas.
Esta compuesto por:
Una API RDF y OWL que permite crear y poblar
modelos RDF.
Leer y escribir RDF en formato RDF/XML, N3 y
N-Triples.
Un motor de persistencia en memoria y disco.
Consultar modelos usando tanto el lenguaje
propietario RDQL como SPARQL
Razonar sobre ontologías bien a través de
motores de reglas o razonamiento OWL
Ambiente de Desarrollo para la Web
28
Semántica
Editor de Ontología I.D:E
Ontologías Consola
Jar
D.I.G.
Motor de búsqueda
Almacenamiento
Administrador de
Ontologías
Razonador
Motor de reglas
swp2:me rdf:type foaf:Person .
swp2:me foaf:depiction <http://semwebprogramming.org/senweb.jpg >.
swp2:me foaf:family_name “Web” .
swp2:me foaf:givenname “Semantic” .
swp2:Statement
swp2:Ontology
swp2:Reasoner
foaf:Person
foaf:knows
foaf:knows
foaf:knows
rdf:type
foaf:homepage
swp2:me
<http://semwebprogramming.org>
foaf:givenname
foaf:family_name
“Webby”
“Semantic Web”
30 Continuación del ejemplo
swp2:Reasoner rdf:type foaf:Person .
swp2:Reasoner foaf:seeAlso
<http://reasoner.com > .
foaf:Person swp2:Reasoner foaf:mbox
<mailto:reason@hotmail.com> .
swp2:Reasoner foaf:name “Ican Reason” .
rdf:type
“Ican Reason”
swp2:Statement
foaf:name
swp2:Ontology
swp2:Reasoner
foaf:knows
foaf:knows
foaf:knows
rdf:type
foaf:mailto
foaf:seeAls foaf:homepage
o swp2:me
<mailto:reason@hotmail.com> <http://semwebprogramming.org>
foaf:givenname
<http://reasoner.com> foaf:family_name
<http://semwebprogramming.org/senweb.jpg> foaf:name
foaf:nick “…”
“Webby”
“Semantic Web”
31 Continuación del Ejemplo
swp2:Statement rdf:type foaf:Person .
swp2:Statement foaf:seeAlso <http://statament.com > .
swp2:Statement foaf:mbox foaf:Person
<mailto:mstatement@gmail.com> .
swp2:Statement foaf:name “Makea Statament” . rdf:type “Makea Statament”
foaf:name
rdf:type
“Ican Reason”
swp2:Statement
foaf:name
foaf:mailto
swp2:Ontology
foaf:knows
swp2:Reasoner foaf:seeAlso <mailto:mstatement@gmail.com>
foaf:knows
foaf:knows <http://statament.com>
rdf:type
foaf:mailto
foaf:seeAlso foaf:homepage
swp2:me
<mailto:reason@hotmail.com> <http://semwebprogramming.org>
foaf:givenname
<http://reasoner.com> foaf:family_name
<http://semwebprogramming.org/senweb.jpg> foaf:name
foaf:nick “…”
“Webby”
“Semantic Web”
32 Continuación del Ejemplo
swp2:Ontology rdf:type foaf:Person .
swp2:Ontology foaf:seeAlso <http://ont.com > .
swp2:Ontology foaf:mbox foaf:Person
<mailto:ont@gmail.com> . “Makea
swp2:Ontology foaf:name “I. M. Ontology” . Statament”
rdf:type
rdf:type foaf:name
rdf:type
“Ican Reason” “I. M. Ontolgy”
swp2:Statement
foaf:name foaf:name
rdf:type foaf:mailto
foaf:seeAlso swp2:Ontology
foaf:knows
swp2:Reasoner foaf:seeAlso <mailto:mstatement@gmail.com>
<http://ont.com> foaf:knows
foaf:mailto
<http://statament.com>
<mailto:ont@gmail.com>
foaf:knows
foaf:mailto
foaf:seeAlso foaf:homepage
swp2:me
<mailto:reason@hotmail.com> <http://semwebprogramming.org>
foaf:givenname
<http://reasoner.com> foaf:family_name
<http://semwebprogramming.org/senweb.jpg> foaf:name
foaf:nick “…”
“Webby”
“Semantic Web”
swp2:me rdf:type foaf:Person .
swp2:me foaf:depiction <http://semwebprogramming.org/senweb.jpg >.
swp2:me foaf:family_name “Web” .
Consulta 1
swp2:me foaf:givenname “Semantic” .
33 swp2:me foaf:homepage <http://semwebprogramming.org >.
swp2:me foaf:knows “Reasoner” .
swp2:me foaf:knows “Statement” .
swp2:me foaf:knows “Ontology” .
select DISTINCT ?name swp2:me foaf:name “Semantic Web” .
swp2:me foaf:nick “Webby” .
where{ swp2:me foaf:phone “<tel:410-679-8999>” .
swp2:me foaf:name swp2:me foaf:schoolInfoHomepage <http://www.web.edu > .
swp2:me foaf:title “Dr.” .
?name swp2:me foaf:workInfoHomepage
} <http://semwebprogramming.com/dataweb.html> .
swp2:me foaf:workplaceHomepage <http://semwebprogramming.com > .
swp2:Ontology swp2:Statement
swp2:Reasoner
foaf:Person
foaf:name
foaf:knows
foaf:knows swp2:me ?name
foaf:knows
rdf:type
foaf:homepag
swp2:me e swp2:me
<http://semwebprogramming.org>
foaf:givenname
foaf:family_name
“Webby”
“Semantic
“Semantic Web”
Web”
34 Función ejecutar la consulta
static String defaultNameSpace = "http://org.semwebprogramming/chapter2/swp2#";
Model _friends = null;
Model schema = null;
private void runQuery(String queryRequest, Model model){
StringBuffer queryStr = new StringBuffer();
// Establish Prefixes
//Set default Name space first
queryStr.append("PREFIX people" + ": <" + defaultNameSpace + "> ");
queryStr.append("PREFIX rdfs" + ": <" + "http://www.w3.org/2000/01/rdf-schema#" + "> ");
queryStr.append("PREFIX rdf" + ": <" + "http://www.w3.org/1999/02/22-rdf-syntax-ns#" + "> ");
queryStr.append("PREFIX foaf" + ": <" + "http://xmlns.com/foaf/0.1/" + "> ");
//Now add query
queryStr.append(queryRequest);
Query query = QueryFactory.create(queryStr.toString());
QueryExecution qexec = QueryExecutionFactory.create(query, model);
try {
ResultSet response = qexec.execSelect();
while( response.hasNext()){
QuerySolution soln = response.nextSolution();
RDFNode name = soln.get("?name");
if( name != null ){
System.out.println( "Hello to " + name.toString() );
}
else
System.out.println("No Friends found!");
}
} finally { qexec.close();}
}
35 Ejecutar la consulta 1
private void populateFOAFFriends(){
_friends = ModelFactory.createOntologyModel();
InputStream inFoafInstance = Cargar la ontología
FileManager.get().open("Ontologies/FOAFFriends.rdf");
_friends.read(inFoafInstance,defaultNameSpace);
}
foaf:name
foaf:name
“I. M. Ontolgy”
foaf:name
foaf:knows swp2:me
where{ foaf:name
swp2:me foaf:knows ?friend
?friend foaf:name ?name foaf:Person “Makea Statament”
}
“Makea Statament”
rdf:type
rdf:type foaf:name
rdf:type
“Ican Reason”
“I. M. Ontolgy” swp2:Statement
foaf:name foaf:name
rdf:type foaf:mailto
foaf:seeAlso swp2:Ontology
foaf:knows
swp2:Reasoner foaf:seeAlso <mailto:mstatement@gmail.com>
<http://ont.com> foaf:knows
foaf:mailto
<http://statament.com>
<mailto:ont@gmail.com>
foaf:knows
foaf:mailto
foaf:seeAlso foaf:homepag
<mailto:reason@hotmail.co swp2:me e
<http://semwebprogramming.org>
m>
foaf:givenname
<http://reasoner.com> foaf:family_name
<http://semwebprogramming.org/senweb.jpg> foaf:name
foaf:nick “…”
“Webby”
“Semantic Web”
37 Ejecutar Consulta 2
People:Individual Instancia
“Mr. OWL”
rdf:type
rdf:type people:hasName
people:Individual_7
rdf:type Esquema
people:Individual_6
people:hasfriends
people:hasNam people:hasfriends
e people:Individual
people:hasfriends
“Web O. Data”
people:Individual_5 people:hasName
people:hasName
“Sem Web”
Esquema Esquema
foaf:knows
people:hasfriends
foaf:Person
people:Individual
foaf:mbox
foaf:Name
people:hasName
41 ¿Porque no se muestra los
amigos adicionales?
private void populateNewFriendsSchema() throws IOException {
InputStream inFoafInstance = FileManager.get().open("Ontologies/additionalFriendsSchema.owl");
_friends.read(inFoafInstance,defaultNameSpace);
inFoafInstance.close();
}
Esquema Esquema
foaf:knows
people:hasfriends
foaf:Person
people:Individual
foaf:mbox
foaf:Name
people:hasName
rdfs:supPropertyOf
foaf:knows
people:hasfriends
owl:equivalenteClass
foaf:Person
people:Individual
owl:equivalenteProperty
foaf:mbox foaf:Name
rdf:type people:hasName
rdf:type
owl:sameAs
swp2:me
people:Individual_5
people:hasName
foaf:name
“Sem Web”
“Semantic Web”
45 Función de Alineación
private void addAlignment(){
public static void main(String[] args) throws See if the ontologies help to say hello to all my
IOException { friends - Nope!
HolaWebSemantica hello = new Hello to Makea Statement
HolaWebSemantica(); Hello to Ican Reason
……… Hello to I. M. Ontology
//Align the ontologies to bind my friends Ok, lets add alignment statements for the two
together ontologies.
System.out.println("\nOk, lets add alignment
statements for the two ontologies."); Try again - Hello to all my friends - nope still not
hello.addAlignment(); all!
Hello to Makea Statement
//Now say hello to my friends - nope still no new Hello to Ican Reason
friends! Hello to I. M. Ontology
System.out.println("\nTry again - Hello to all my
friends - nope still not all!"); Run a Reasoner
hello.myFriends(hello._friends); Finally- Hello to all my friends!
//Run reasoner to align the instances Hello to I. M. Ontology
System.out.println("\nRun a Reasoner"); Hello to Ican Reason
hello.bindReasoner(); Hello to Makea Statement
System.out.println("\fFinally- Hello to all my Hello to Mr. Owl
friends!"); Hello to Web O. Data
hello.myFriends(hello.inferredFriends);
System.out.println("\nEstablishing a restriction Establishing a restriction to just get email friends
to just get email friends"); Hello to Makea Statement
hello.setRestriction(hello.inferredFriends); Hello to Ican Reason
hello.myEmailFriends(hello.inferredFriends); Hello to I. M. Ontology
}
50 Definiendo reglas