sábado, 23 de junio de 2007

Introducción a SparQL

¿Qué es?

SPARQL (Simple Protocol and RDF Query Language) es un lenguaje de recuperación basado en RDF. Se trata de una recomendación para crear un lenguaje de consulta dentro de la Web semántica que está ya implementada en muchos lenguajes y bases de datos. Desde 2005 está en proceso de estandarización por el W3C.

Con SPARQL los desarrolladores y usuarios finales pueden representar y utilizar los resultados obtenidos en las búsquedas a través de una gran variedad de información como son datos personales, redes sociales y metadatos sobre recursos digitales como música e imágenes. Es de utilidad para la recuperación y organización de información.

SPARQL consiste en tres especificaciones complementarias, que contienen diferentes partes de su funcionalidad. SPARQL lo forman un lenguaje de consultas, un formato para las respuestas, y un medio para el transporte de consultas y respuestas:
  • SPARQL Query Language: Núcleo de SPARQL. Explica la sintaxis para la composición de sentencias y su concordancia. (Espec.: http://www.w3.org/TR/rdf-sparql-query/)
  • SPARQL Protocol: Formato utilizado para la devolución de los resultados de las búsquedas (queries SELECT o ASK), a partir de un esquema de XML. (Espec.: http://www.w3.org/TR/rdf-sparql-protocol/)
  • SPARQL Query XML Results Format: Describe el acceso remoto de datos y la transmisión de consultas de los clientes a los procesadores. Utiliza WSDL para definir protocolos remotos para la consulta de bases de datos basadas en RDF. (Espec: http://www.w3.org/TR/rdf-sparql-XMLres/)
Las consultas SPARQL cubren tres objetivos:
  • Extraer información en forma de URIs y literales.
  • Extraer sub-estructuras RDF.
  • Construir nuevas estructuras RDF partiendo de resultados de consultas.
Una limitación de la actual especificación es que únicamente se permiten consultas de lectura. Así pues sólo se pueden leer informaciones y comparar datos. En resumen SPARQL es una vía rápida para localizar información específica. Por último apuntar que existen varias implementaciones (Python, PHP, Java), pero destaca Jena Semantic Web Toolkit para plataforma Java sobre las demás.

¿Cómo funciona? : Anatomía de una consulta sencilla SPARQL

Como ejemplo podemos tomar el modelo de bloggers.rdf de PlanetRDF. Es bastante directo, con los vocabularios de FOAF y de Dublin Core para proporcionar un nombre, un título del blog con URL, y un canal RSS con los últimos posts de cada blogger. El siguiente gráfico muestra la estructura gráfo básica para un solo contribuidor. El modelo completo repite simplemente esta estructura para cada blog que agreguemos.


Ahora una consulta muy simple de SPARQL sobre el modelo de bloggers. La pregunta, en inglés, dice “encontrar el URL del blog de la persona nombrada Jon Foobar”:

PREFIX foaf:
SELECT ?url
FROM
WHERE {
?contributor foaf:name "Jon Foobar" .
?contributor foaf:weblog ?url .
}

Existen numerosas herramientas online de uso SparQL, como son validadores, formularios de consulta, etc. Algunas páginas interesantes son http://sparql.org/ y http://dannyayers.com/code/sparql-editor.
Una aplicación con GUI que utiliza Jena es Twinkle, que facilita enormemente la utilización de SPARQL. Además es gratuita y de libre distribución.
(http://www.ldodds.com/projects/twinkle/)

Vista de Twinkle

jueves, 21 de junio de 2007

FOAF : descripción de personas en Internet

¿Qué es?

El nombre FOAF es el acrónimo de la frase Friendof a Friend (Amigo de un Amigo), que es un proyecto experimental y un vocabulario que encaja en lo que se denomina web semántica. FOAF sirve para describir Personas, Documentos, etc., siendo su uso en la descripción de personas el más interesante hoy por hoy. Así pues hoy por hoy FOAF es una manera de describirse a uno mismo utilizando para ello RDF con sintaxis XML. Cuando hablamos de describir no estamos hablando de los atributos físicos de la persona, sino de datos más profundos: a quien conoce, de quien es amigo y de quien no, cuales son sus proyectos actuales y cuales los pasados, etc. Todo, o casi todo, puede ser definido en un archivo FOAF. La adopción de XML como lenguaje de representación de FOAF permite al software procesar estas descripciones, tal vez como parte de un motor de búsqueda automatizado, para descubrir información acerca suyo y de las comunidades de las cuales es miembro. Los campos contemplados por la especificación de FOAF son los siguientes, agrupados por áreas. Como se puede ver son bastante descriptivos y su utilización es trivial:






















¿Cómo funciona?


FOAF-a-matic es una simple aplicación de Javascript que nos permite crear una descripción FOAF de nosotros mismos.

Un ejemplo de fichero FOAF generado con la herramienta FOAF-a-Matic:

<?xml version="1.0" standalone="yes"?>

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"

xmlns:foaf="http://xmlns.com/foaf/0.1/"

xmlns:admin="http://webns.net/mvcb/">

<foaf:Person>

<foaf:name>Gustavo Adolfo Bécquer</foaf:name>

<foaf:givenname>Gustavo Adolfo</foaf:givenname>

<foaf:family_name>Bécquer</foaf:family_name>

<foaf:nick>arcoe</foaf:nick>

                  <foaf:mbox rdf:resource="mailto:becquer@romanticos.com"/>

<foaf:homepage rdf:resource="http://www.arcoeland.org"/>

<foaf:workplaceHomepage rdf:resource="http://www.romanticos.com"/>

<foaf:knows>

                   <foaf:Person>
                        <foaf:name>Mariano José de Larra</foaf:name>
                        <foaf:mbox rdf:resource="mailto:larra@romanticos.com"/>
                   </foaf:Person>
              </foaf:knows>

</foaf:Person>

</rdf:RDF>




En el código de descripción FOAF de Gustavo Adolfo Bécquer, podemos observar algunos datos suyos, más una relación de “conoce a” Mariano José de Larra.

Todas aquellas personas que tienen su descripción en formato FOAF pueden publicarlo en Internet para hacer esta información disponible a todo el mundo.

El proyecto Foaf-project (http://www.foaf-project.org) reúne multitud de aplicaciones que utilizan descripciones FOAF con diferentes propósitos extrayendo información.

Existen otras redes comerciales que parten de descripciones de personas igual que lo hace FOAF. Un ejemplo es Neurona.com, una comunidad virtual gratuita que nace con el objetivo de promover el reencuentro de antiguos compañeros de estudios y trabajo y posibilitar la creación de una Red de contactos personales y profesionales que ayude a sus miembros a encontrar nuevas oportunidades a través de sus contactos.

miércoles, 20 de junio de 2007

Celdas con gradiente de color de fondo (Sólo IE)

Pueden definirse gradientes de color en celdas (incluso tabla entera).
Lo malo es que sólo se ven en Internet Explorer:

Ejemplo:
prueba gradiente prueba gradiente prueba gradiente prueba gradiente prueba gradiente prueba gradiente prueba gradiente prueba gradiente prueba gradiente prueba gradiente prueba gradiente prueba gradiente prueba gradiente prueba gradiente prueba

El código para hacerlo es el siguiente:
<table>
<tr>
<td style="border-bottom: 1 px solid #999999; filter:progid:DXImageTransform.Microsoft.Gradient( startColorStr='#336699', endColorStr='#FFFFFF', gradientType='0', gradientSize'3');">
prueba gradiente prueba gradiente prueba gradiente prueba gradiente prueba gradiente prueba gradiente prueba gradiente prueba gradiente prueba gradiente prueba gradiente prueba gradiente prueba gradiente prueba gradiente prueba gradiente
</td>
</tr>
</table>

martes, 19 de junio de 2007

Utilizar base de datos desde Java (1)

Para utilizar una base de datos desde un programa Java, o página JSP, lo que haremos fundamentalmente será:

  • crear una conexión con la base de datos
            //se define driver del tipo de base de datos
    Class.forName("org.gjt.mm.mysql.Driver"); //mysql
    //obtener conexión
    dbcon = DriverManager.getConnection( "loginUrl", "loginUser", "loginPasswd"); //creamos una instancia
    statement = dbcon.createStatement();


  • obtener/modificar datos de la base de datos
            ResultSet resultado = statement.executeQuery("SELECT nombre,edad FROM usuarios");    while (resultado.next()){    System.out.println(resultado.getString("nombre") + ": "+ resultado.getInt("edad") + " años" );    }    


  • cerrar la conexión
            statement.close();    dbcon.close();    



Podemos hacer estas tres cosas 'a capón' siempre que necesitemos interactuar con la base de datos, pero no es nada recomendable hacerlo sin control (a veces es útil, evidentemente), pues abrir y cerrar conexiones continuamente para realizar consultas consume recursos y tiempo. Por eso suele utilizarse una clase que gestione la conexión y nos abstraiga de conectar y desconectar, e incluso nos abstraiga del tipo d base de datos que utilizaremos (MySQL, Prostgre, Oracle, etc.)

Si utilizamos una clase sencilla para usar la base de datos, esa clase tendrá estos métodos:
/* Método que inicializa la conexión */private void init_db() {   /* ... */   try{   /* ... */   }catch (SQLException ex) {      /* ... */   }catch (java.lang.Exception ex) {      /* ... */   }}

/* Método paraa finalizar la conexión */private void end_db() { /* ... */ try { /* ... */ }catch (SQLException ex) { /* ... */ }catch (java.lang.Exception ex) { /* ... */ }}

/* Métodos que utilizan la conexión */void getUsuarios(){ /* ... */}int nuevoUsuario(String nombre,String apellido){ /* ... */}

Se puede mejorar la clase implementando un patrón de singleton, para no provocar una nueva conexión cada vez que queramos realizar una consulta a la misma base de datos. Ver patrón singleton para más señas ;)

Patrón singleton para portal web

El patrón de diseño singleton (instancia única) está diseñado para restringir la creación de objetos pertenecientes a una clase o el valor de un tipo a un único objeto.

Su intención consiste en garantizar que una clase sólo tenga una instancia y proporcionar un punto de acceso global a ella.

Así puede comenzar a crearse la clase en java que implementa el singleton:

public class Portal{
//Interfaz con la base de datos
private static IBasedatos bbdd; //instancia única de la clase Portal
private static Portal instancia;
private Portal() {
bbdd = new Basedatos();
}

public static Portal getInstance(){
if (instancia == null) {
instancia = new Portal();
return instancia;
}else{
return instancia;
}
}
}

Contacto con PLSQL

SQL es un lenguaje de consulta para los sistemas de bases de datos relacionales, pero que no posee la potencia de los lenguajes de programación.

Es necesario conocer previamente SQL.

PL/SQL amplía SQL con los elementos característicos de los lenguajes de programación, variables, sentencias de control de flujo, bucles ...

PL/SQL es el lenguaje de programación que proporciona Oracle para extender el SQL estándar con otro tipo de instrucciones.

Más información en Wikipedia y Devjocker