Informe de Seminario Computador Universitario
Universidad Nacional de Salta – Facultad de Ciencias Exactas
Informatización y Administración Centralizada
de las Organizaciones y Lugares de la
Universidad Nacional de Salta
Alumno: Garcia, Maria Lorena
Año : 2004
Director: Ing. Diego Saravia
Índice
Introducción
Finalidad del Proyecto
Descripción del Proyecto
Licencia
Tecnologías Utilizadas
HTML
CSS Hojas de estilos
Template
CGI: Common Gateway Interface
Apache
PostgreSQL
¿ Qué es PostgreSQL
Bases de Datos relacionales SQL. PostgreSQL
Características de PostgreSQL
Perl
Introducción
Características de Perl
Tipos de Datos
Expresiones Regulares
Archivos
Funciones y procedimientos
Módulos
DBI: bases de datos
Conexión a la base de datos
Ekeko
¿Que es Ekeko?
Características
Esquema y Módulos
Estructura de Directorios
Aplicaciones
Diseño de las Bases de datos
Diseño de la Base Alias
Diseño de la Base de Datos Punsa
Tablas
Base Alias
Base Punsa
Codificación de la aplicación
Modulos Alias y Punsa
Subrutinas Modulo Alias
Subrutinas Modulo Punsa
Conclusion
El uso extensivo en nuestros días de aplicaciones que trabajan sobre redes de comunicación, en especial Internet y el auge de los servicios de telecomunicaciones, han hecho aumentar en gran medida la necesidad de creación de sistemas capaces de cubrir de forma adecuada las demandas que solicita el mercado.
Otra gran relevancia en el ámbito tecnológico, se encuentra en la demanda creciente de sistemas con soporte de trabajo colaborativo. Estas aplicaciones deben ser capaces de compartir, entre varios usuarios situados en lugares o localizaciones diferentes, información y/o datos, de forma tal que sea posible utilizarlos de forma conjunta.
La reutilización de componentes, permite un desarrollo más rápido, eficiente y fiable de los nuevos servicios. Por tanto es necesario obtener estructuras de tratamiento de datos aun mas generales (Template ,CSS) y herramientas que faciliten aun mas la implementación de servicios.
El proyecto Organizaciones y Lugares de la Universidad Nacional de Salta, es parte de un Sistema de información que tiene como objetivo mejorar la calidad de la información que circula en el sistema universitario. Parte de la necesidad de poner en práctica tecnologías capaces de transformar los datos producidos por las instituciones en información confiable, centralizada y oportuna.
Parte del Nro 11470
Resolución Rectoral - Proyecto Mojotoro
Las organizaciones y los distintos lugares de la universidad son parte fundamental para que el Sistema de información pueda relacionar los diferentes subsistemas que se incluyen, Patrimonio, Cargos, Expedientes y Registro Civil. De manera que el sistema pueda centralizar toda la información y este dirigido a toda entidad relacionada con el ámbito universitario.
El proyecto consiste en mantener una base centralizada de las organizaciones de los distintos lugares que integran físicamente la universidad, dotándolo de características de colaboración especial y dinámica de las personas de forma tal que puedan compartir una información y/o aplicación de datos imprescindibles para la concreción de una tarea especifica y correcta .
Todo software desarrollado en este proyecto se distribuye bajo la licencia GPL, incluyendo el Ekeko.
Las paginas Web son los que constituyen la World Wide Web (WWW), una pagina es un documento multimedia porque esta constituido por imágenes, sonido, texto, animaciones, etc. Pero también es un documento en el cual se puede añadir enlaces a otras páginas y secciones, convirtiéndolo así en hiper-media. Las páginas Web están escritas en un lenguaje de programación llamado HTML.
Para obtener el resultado final, es decir, visualizar la página Web, es necesario la existencia de un programa, denominado navegador. Este programa es el encargado de recoger el documento en formato HTML e interpretarlo, para ofrecer al usuario el resultado final.
El lenguaje HTML, del inglés Hypertext Markup Language (Lenguaje de Marcación General de Hipertexto), fue desarrollado por Tim Barners-Lee junto a un grupo de científicos del Centro Europeo de Investigación Nuclear (CERN) allá por el año 1992.
Hasta la versión 4.0, los elementos de lo que se llama estilo (los que controlan la presentación de la información por parte del navegador) se encontraban diseminados en la especificación de HTML y cada diseñador de páginas recurría a ciertos "trucos personales” para obtener efectos atractivos. Con esta versión, aparece un lenguaje específico para definir el estilo (llamado CSS, Cascading Style Sheets) y elementos, tanto marcas como atributos, para incorporarlo en un documento.
Por un lado, CSS es un lenguaje completo para la definición de la apariencia que deben tener los elementos de un documento HTML. Está basado, al igual que en el caso de las marcas HTML, en un conjunto de atributos y valores que definen las propiedades de presentación.
Una definición en CSS consta de una lista de pares atributo-valor separados por punto y coma (el carácter ;). El atributo se separa del valor por medio de dos puntos (el carácter :): atributo1: valor1; atributo2: valor2; ...; atributoN: valorN
CSS ofrece atributos para prácticamente cualquier elemento de presentación del documento, como pueden ser:
Fuentes, tanto en cuanto a su tipo como a su tamaño.
Colores, de los caracteres, del fondo de la página, de los enlaces, etc.
Alineación entre los diferentes elementos del documento: texto, imágenes, tablas, etc.
Bordes y marcos para la representación de objetos.
Sangrados e interlineados de párrafos.
Tipos de presentación alternativos, de manera que puedan escogerse diferentes estilos según el equipo usado para acceder la información, e incluso opciones de accesibilidad para personas discapacitadas.
Cualquier marca HTML puede ir acompañada de una especificación de estilo usando CSS por medio del atributo STYLE.
Referencias a especificaciones de estilo que se encuentren disponibles en la red. De esta forma, es posible definir un estilo común para un conjunto de páginas, sin necesidad de modificarlas todas si en cualquier momento es necesario cambiar el estilo.
Script para actualizar páginas Web usando plantillas, escrito en Perl para facilitar la tarea de mantener páginas Web estáticas .
Su tarea es mantener cambios en la estructura de páginas Web, mientras sus contenidos permanecen invariables. Esto ayuda mucho en el mantenimiento de sitios Web estáticos en los que no es posible o deseable el uso de scripts del lado del servidor.
En todo servidor Web, disponemos de un directorio donde podemos ubicar nuestras páginas HTML. El servidor puede ofrecer una gran variedad de documentos HTML, pero una característica clave de estos ficheros es que su contenido es estático, es decir, el documento no cambia a menos que el administrador lo edite y lo cambie explícitamente.
Sin embargo, a menudo el contenido de los documentos no puede conocerse por adelantado. Por ejemplo, si un sitio Web proporciona búsqueda de documentos (como Altavista), el resultado depende de las palabras clave que el usuario haya introducido en el formulario de búsqueda. Para permitir esto, el servidor Web cuenta con programas externos llamados de pasarela o gateway.
Un programa de pasarela admite una entrada del usuario y reacciona devolviéndole los datos que había pedido formateados en un documento HTML. A menudo, el programa de pasarela actúa como un puente entre el servidor Web y otro depósito de información, como una base de datos.
Los programas de pasarela trabajan en el servidor Web. Para permitir que cualquiera pueda escribir un programa de este tipo, es necesaria una especificación que describa las normas de interacción entre el servidor Web y el programa de pasarela. Aquí es donde interviene la Interface de Pasarela Común (CGI, Common Gateway Interface en inglés). CGI define la comunicación entre el servidor Web y los programas de pasarela externos.
Como se puede observar en la figura, el visor Web intercambia información con el servidor Web utilizando el protocolo HTTP. El servidor Web y los programas CGI normalmente funcionan en el mismo sistema en el que reside el servidor Web. Dependiendo del tipo de petición que realice el visor, el servidor Web proporciona un documento de su propio directorio de archivos o ejecuta un programa CGI.
Conviene destacar que el protocolo CGI no impone el uso de un determinado lenguaje de programación cuando se construya un programa de pasarela, por lo que podremos utilizar el que nos resulte más conveniente.
El servidor Web Apache es uno de los mayores triunfos del software libre. En Diciembre de 1997 tenía una cuota de mercado cercana al 45% y en la actualidad (Julio 2000) ya está por encima del 60%, según los estudios de Netcraft [3] que ya se han establecido como la referencia dentro del mercado de servidores Web.
Esta es la primera cifra que hace que cualquier responsable de la estrategia Internet de una empresa tenga que tomar a Apache como el servidor de referencia.
Apache es un servidor Web flexible, rápido y eficiente, continuamente actualizado y adaptado a los nuevos protocolos.
Entre sus características se destacan:
Multiplataforma
Es un servidor de Web conforme al protocolo HTTP/1.1
Modular: Puede ser adaptado a diferentes entornos y necesidades, con los diferentes módulos de apoyo que proporciona, y con la API de programación de módulos, para el desarrollo de módulos específicos.
Basado en hebras en la versión 2.0
Incentiva la realimentación de los usuarios, obteniendo nuevas ideas, informes de fallos y parches para la solución de los mismos.
Se desarrolla de forma abierta
Extensible: gracias a ser modular se han desarrollado diversas extensiones entre las que destaca PHP,Perl
PostgreSQL es un sistema de gestión de base de datos de tipo objeto-relacional basada en POSTGRES, Versión 4.2, desarrollada e el Departamento de Informática de la Universidad de California (Berkeley) . POSTGRES fue un proyecto dirigido por el Profesor Michael Stonebraker y contó con el apoyo de diversos organismos y empresas de EE.UU.
Los sistemas de base de datos objeto-relacionales ( u ORDBMS), no deben ser confundidos con los sistemas gestores de base de datos orientados a objetos. Los ORDBMS sólo incluyen algunas características típicas de la orientación a objetos.
PostgreSQL es software libre que proviene del código original de Berkeley. Proporciona soporte para SQL92 y SQL99, además de un conjunto de características actuales.
POSTGRES incorporó gran parte de los conceptos de objetos-relacionales que hoy día incluyen algunos gestores de base de datos comerciales. Los gestores de base de datos relacionales tradicionales (RDBMS) permiten la existencia de una colección de relaciones identificadas por un nombre, las cuales poseen atributos a los que se le asocia un determinado tipo de datos.
Los sistemas de base de datos actuales permiten tipos de datos tales como números en coma flotante, enteros, cadenas de caracteres, monedas y fechas; pero como es bien sabido, esto no basta para satisfacer las necesidades de las aplicaciones del futuro.
Por esta razón, PostgreSQL proporciona un conjunto de nuevos conceptos que permitirán a los usuarios ampliar de forma cómoda sus aplicaciones.
Entre estos nuevos conceptos cabe destacar:
herencia
nuevos tipos de datos
funciones
Otras características que proporcionan flexibilidad y solidez al sistema son:
restricciones
disparadores
reglas de integridad
integridad en las transacciones
Como se ha citado en el apartado anterior, PostgreSQL incluye nuevas características que proporcionan una mayor facilidad para crear aplicaciones modernas, mayor potencia y una mayor flexibilidad. Vamos, seguidamente a detallas cuáles las características principales con respecto a un sistema tradicional de base de datos relacional. Para ello tomaremos como referencia las características del estándar SQL92.
Nuevos tipos de datos A parte de los tipos de datos que incluye SQL, PostgreSQL soporta un conjunto extendido de nuevos tipos , entre los que podemos destacar:
Tipos geométricos: Estos tipos permiten representar objetos especiales de bidimensionales. El tipo point (punto) es la base del resto. Los tipos soportados son point (), line (), lseg (), box (), path (), polygon (), circle ().
Además, se proporciona un conjunto de operadores y funciones que permiten realizar operaciones geométricas ( escalado, translaciones, rotaciones, hallar puntos de intersección).
Tipos de dirección de red: PostgreSQL aporta tipos para almacenar direcciones P y direcciones MAC, para evitar el uso del tipo cadena de caracteres para esta tarea, puesto que aporta restricciones y funciones asociadas a estos tipos de datos.
Los tipos incluidos son cidr (), inet () y macaddr (). 3. Tipo de datos Boolean: Este tipo de datos está incluido en las especificaciones de SQL99.
Potente manejo de los tipos de datos sobre fechas.
Incluye dentro del tipo de datos numérico el tipo serial, que permite crear identificadores únicos para entradas en las tablas.
Tipo text, dentro del tipo de datos cadena de caracteres. Este tipo no está especificado por el estándar SQL, pero si es soportado por muchos RDBMS. Este tipo de datos admite una cadena de caracteres de longitud variable e ilimitada ( limitado por la capa de hardware).
Se permite definir columnas como arrays multidimensionales de longitud variable. Los arrays podrán ser de cualquier tipo predefinido en PostgreSQL o de un tipo definido por el usuario. No conviene abusar de es esta característica.
Funciones y operadores PostgreSQL proporciona un amplio conjunto de funciones y operadores para los tipos de datos soportados. Además, los usuarios pueden definir sus propias funciones y operadores.
No obstante, hay que ser consciente que la mayoría de los operadores y funciones ofrecidas, exceptuando los operadores aritméticos básicos y de comparación, así como algunas funciones determinadas, no están incluidas en el estándar de SQL, con el consiguiente problema de portabilidad. De todos modo, la mayoría del los RDBMS incluyen funciones compatibles o muy similares.
Herencia: Una tabla puede heredar atributos de otra.
Perl es un lenguaje de alto nivel. Este lenguaje permite hacer fácilmente las tareas cotidianas como son el manejo de números y texto, ficheros y directorios, y redes de trabajo, y especialmente programas. Esto quiere decir que Perl permite hacer fácilmente aquellas cosas comunes, pero no haciendo imposible aquellas tareas complejas. Esta es la característica principal de Perl, puesto que la mayoría de los lenguajes de ordenador permiten hacer cualquier aplicación, pero no siempre estos, permiten hacer ciertos trabajos de forma fácil o cómoda, sin que se vean reducidas las posibilidades de realización de otras tareas más complicadas.
Otra gran ventaja de Perl, es que es potable a la mayoría de los sistemas operativos actuales, como VMS, OS/2, Windows, MS-DOS, etc, además de, por supuesto, para los sistemas Linux, para los cuales fue inicialmente diseñado.
Decimos que Perl es un lenguaje simple porque no es necesario tener muchos conocimientos para compilar un programa, puesto que este se puede ejecutar del mismo modo que un shell script. La estructura de datos que utiliza es muy fácil de entender, y no se imponen restricciones arbitrarias a los datos (por ejemplo los arrays y las cadenas pueden crecer en su tamaño de forma dinámica, mientras haya memoria disponible en la máquina).
Perl no adopta una sintaxis y una semántica nueva, sino que deriva de lenguajes ampliamente conocidos por todo el mundo, como C. Además, un usuario que quiera escribir una aplicación, no tiene por qué conocer todos los entresijos del lenguaje, para poder construir aplicaciones útiles (se puede ir de menos a más).
Por otro lado, decimos que Perl es un lenguaje rico, porque, no sólo permite de forma cómoda procesar texto, crear y obtener datos dinámicos e informes con formato que accedan a estos datos, sino que también permite la manipulación de ficheros y directorios, el desarrollo de procesos de gestión, administradores de bases de datos, aplicaciones cliente-servidor, programas de seguridad, aplicaciones Web, etc.
Perl es, incluso, un lenguaje orientado a objetos, además de permitir la programación funcional. Está diseñado, desde el principio, para que sea extensible de forma modular. Existe la posibilidad de incrustar código Perl en otros lenguajes y viceversa, así como, usar módulos externos como si fuesen construidos en Perl, gracias al mecanismo de importación.
Perl, no es estrictamente hablando, un lenguaje interpretado, tal como puede ocurrir con el shell script. Perl compila previamente todo el programa en un formato intermedio.
Al igual que otros compiladores, se llevan a cabo un conjunto de optimizaciones, así como la generación de los mensajes de errores sintácticos y semánticos existentes. Si un programa Perl, pasa correctamente todas las fases de compilación, se pasa el código intermedio al intérprete, para que pueda ser ejecutado. También posible transformar este código intermedio en código C o código binario. Aunque pueda parecer, todo esto un poco complejo, la verdad es que todos estos pasos se llevan a cabo de forma muy eficiente, por lo que suele tardar pocos segundos una compilación-ejecución típica.
Nos vamos a detener un poco más en ver algunas de las características propias de Perl, las cuales han sido aprovechadas directamente para la realización del Proyecto, entre ellas: los tipos de datos, expresiones regulares , entrada/salida, funciones, paquetes, módulos y clases de objetos.
Perl posee tres tipos de datos básicos: escalares, arrays de escalares y hashes de escalares. Este último tipo, se conoce también como arrays asociativos. No obstante, Perl permite definir nuevos tipos de datos más complejos.
Los escalares pueden almacenar un único dato, fundamentalmente un número, una cadena o una referencia a otro elemento). Un array es una lista ordenada de escalares, los cuales pueden ser accedidos mediante una referencia numérica.
Por último, un array asociativo (hashed) es un conjunto no ordenado de pares clave/valor, que puede ser accedido utilizando una cadena (la clave) como referencia, para obtener finalmente el valor asociado a una clave dada.
Las expresiones regulares son utilizadas en muchos programas de Unix, tales como grep,sed,awk y editores como vi o emacs. Una expresión regular permite describir a un conjunto de cadenas, sin la necesidad de tener que listar todas las cadenas en su conjunto.
Perl utiliza las expresiones regulares de varios modos. Por un lado se utilizarán en condiciones, para determinar si una cadena encaja dentro de un patrón.
Para ello se utiliza los operadores de pattern-matching. Por otro lado, se pueden utilizar las expresiones regulares, para encontrar subcadenas dentro de una cadena, permitiendo sustituir dicha subcadena por otra. Para esta tarea se utilizará el operador de sustitución.
También se puede utilizar estas expresiones regulares para determinar que partes de una cadena no encajan dentro de un patrón, permitiendo así, por ejemplo, determinar fronteras dentro de una cadena. Para esta tarea se utiliza el operador split.
En la mayoría de las aplicaciones, es necesario comunicarse con el mundo exterior. Perl permite comunicarse con el exterior mediante los filehandle(descriptor de ficheros, en castellano). Un descriptor de ficheros, no es más que asociar un nombre a un fichero, dispositivo, socket, pipe, etc, para ayudarnos a saber con cual de ellos estamos tratando; además nos ocultará las características complejas de estos elementos. Los descriptores de ficheros, facilitan el envío y recogida de datos sobre diferentes fuentes.
Se puede asociar un nombre a un fichero mediante la función open. A esta función le proporcionamos el descriptor del fichero y el nombre del fichero al cual se quiere asociar.
Existen descriptores de ficheros predefinidos por Perl, tales como STDIN(entrada estándar del sistema),STDOUT (salida estándar del sistema) y STDERR(salida estándar de error). Al abrir un fichero, también es necesario especificar de qué modo queremos utilizarlo: entrada, salida, tubería.
Otro modo importante de entrada de datos es mediar el uso del operador de entrada de comandos. Este comando permite que la cadena que encierra sea interpretada como un comando del shell, de modo que el resultado será la salida que genera dicho comando. En contexto de escalar, todo la salida generada se devuelve como una cadena, mientras que en un contexto de lista, se devuelve una lista de valores, una por cada línea de salida. (Se puede modificar el valor de la variable $/ para establecer diferentes tipos de terminadores de línea.)
Perl, al igual que otros lenguajes, permite la definición de subrutinas por parte del usuario. Las subrutinas pueden ser definidas en cualquier parte del programa principal, cargadas desde otro fichero, mediante las palabras reservadas do, requiere o use. También se pueden crear subrutinas anónimas, pudiendo accederse a ellas únicamente a través de referencias. Así, se puede invocar indirectamente una subrutina a través de una variable, la cual contenga el nombre de una función, o bien, una referencia a dicha función.
Declaración de una subrutina:
sub NOMBRE;
sub NOMBRE (PROTOTIPO); # Declaración con prototipo
Declaración y definición de una subrutina:
sub NOMBRE BLOQUE-CÓDIGO
sub NOMBRE (PROTOTIPO) BLOQUECÓDIGO
Declaración y definición con prototipo
Importación de subrutinas definidas en otros paquetes:
use PAQUETE qw(NOMBRE1 NOMBRE2 NOMBRE3 ...);
Llamada a una subrutina de forma directa:(LISTA); # & es opcional, si se usan
los paréntesis NOMBRE LISTA; # paréntesis opcionales
si fue declarada o importada
&NOMBRE; # pasa como lista el contenido actual de @_
Llamada a una subrutina de forma indirecta:
&$subref(LISTA); # & no es opcional en llamadas
indirectas
&$subref; # se pasa el contenido actual de @_
En cuanto al paso de parámetros, tenemos que tener en cuenta lo siguiente: Los parámetros se pasan como una lista de escalares. Dentro de la subrutina,se puede acceder a los parámetros mediante el array especial @_.
Si pasamos varios arrays o varios arrays asociativos, se fundirán en un lista, de forma, perdiendo así su identidad. No obstante, la mayoría de las ocasiones, esta transformación es útil. Existe un mecanismo para evitar que esto ocurra.
Los parámetros de salida se devuelven en forma de lista.
Tanto la lista de parámetros de entrada, como la de salida, pueden tener un tamaño variable. Esto siempre es cierto, a menos que se utilice un prototipo a la hora de la declaración.
El valor de una subrutina es el resultado de la última expresión. Es posible devolver valores explícitamente, mediante el uso de la sentencia return ( además fuerza la salida de la rutina, independientemente del lugar dónde se encuentre.)
Hasta ahora, sólo hemos visto cómo pasar parámetros por valor, de modo que sólo se comportarán como parámetros de entrada. Existen otros dos tipos de paso de parámetros que debemos resaltar. Por un lado, tenemos el paso de entradas a la tabla de nombres; este mecanismo, permite modificar el valor del parámetro que se pasa (parámetro de entrada/salida).
También, permite que al pasar varios arrays como parámetros de entrada, estos se puedan recuperar, impidiendo que estos se fundan. Por otro lado, el paso de referencias es similar al concepto de puntero en el lenguaje C . Con este método se pueden conseguir las mismas ventajas que con el método de paso de entradas a la tabla de nombres.
Un paquete es una sección de código, el cual tiene asociado su propia tabla de símbolos. De esta forma se protege al paquete de las posibles colisiones entre variables de otros paquetes. El código se compila siempre en base a un paquete activo. El paquete activo inicial, se le denomina paquete principal. Se puede cambiar de paquete activo mediante la declaración package.
El paquete activo, por tanto, determina solamente cual el la tabla de símbolos activa en cada momento (esto es muy importante). Un paquete comprende todo el código encerrado entre llaves, tras una declaración package (o bien, todo el código comprendido hasta que se encuentre la siguiente declaración package). Los paquetes pueden estar anidados. Veamos ahora algunos ejemplos de acceso a variables, según al paquete al que pertenezcan:
$Paquete::Variable # Este será la estructura general de acceso a una variable
$Variable # Accede al paquete activo
$NODO::atrib # Accede a la variable cuyo nombre es atrib del paquete NODO
$::apellido # Accede a la variable de nombre apellido perteneciente al paquete principal
$main::apellido # Igual que el caso anterior
$NODO::ATRIBUTO::var # Accede a la variable de nombre var del paquete ATRIBUTO
# que está incluido dentro del paquete NODO
Un módulo es un paquete que está definido en un fichero de librería cuyo nombre coincide con el nombre del paquete (terminado en .pm). Un módulo puede incluir un método para exportar símbolos para cualquier otro módulo que lo utilice. También puede funcionar como una definición de clase, haciendo que sus operaciones estén disponibles de forma, mediante llamadas a métodos de clase y de los objetos asociados a la clase, sin necesidad de exportar explícita mente ningún símbolo. Los módulos se incluyen en un programa con use:
use Modulo;
o
use Modulo Lista;
Si no especificamos lista, todos los símbolos exportados en el modulo serán importados por el paquete que lo utiliza. Si por el contrario la especificamos, sólo se podrán usar aquellos que se incluyan en la lista.
El módulo DBI se usa para manipular una base de datos relacional, como PostgreSql, MySQL, etc. DBI significa Data Base Interface, y supone una capa de alto nivel para acceder a una base de datos. Requiere tener instalado el modulo DBD de la base de datos correspondiente,
Para utilizar este módulo es necesario un conocimiento del lenguaje de consultas SQL.
Supongamos que tenemos una base de datos en PostgreSQL.
use DBI;
$db = DBI->connect('dbi:Pg:dbname=Nombre Base', 'usuario', 'password');
if( ! defined $db ) { die ?No se puede encontrar la base de datos\n?;
}
Operaciones
Se limita a ejecutar consultas SQL una de los comandos Sql que daremos un ejemplo es la instrucción Select.
* Se cargan los resultados en un array
$stm = $db->prepare("select * from prueba");
# $stm es la sentencia SQL que deseamos utilizar
$stm->execute();
while( @data = $stm->fetchrow_array() ) {
print "DATA= @data\n";
}
$stm->finish();
* Se cargan los resultados en variables individuales
my $id, $name;
$stm = $db->prepare("select codigo, nombre from prueba");
$stm->bind_columns(\$id, \$name);
$stm->execute();
while( $stm->fetch() ) {
print "$id $name\n";
}
$stm->finish();
Sistema Ekeko creado por Ing. Diego Saravia , quien lo define como “Escritorio Web, con extensión a base de datos”, sistema que se incluye a si mismo. Edita y muestra todos sus elementos. Incluye otros sistemas los cuales pueden heredar componentes y atributos de los sistemas a los cuales están incluidos.
Una de las ideas de Ekeko es generar aplicaciones definiendo solamente las características de las mismas, y sus estructura de base de datos.
Esta formado por tres tipos de elementos, vistas de bases de datos, archivos y registros de la base de datos. Están controlados por lo que se llaman “weblets”, scripts en Perl, que tienen la capacidad de administrar las vistas de las bases de datos, mediante un Template (siendo ejecutable), ser acceso directo a un archivo, o un directorio de otro sistema.
Los weblets son los que utilizan los módulos del Ekeko, llaman las subrutinas proporcionadas por estos.
La creación de nuevas aplicaciones es de forma fácil componiendo los elementos (weblets, vistas de bases de datos, base de datos ,Template, etc), ya que tan solo hemos de definir el comportamiento concreto de la aplicación y adaptar algunos elementos para que la aplicación sea totalmente funcional.
Es capas de dar un nivel abstracto del sistema a desarrollar, sin tener que entrar en detalles concretos de implementación y al simplificar en gran medida el modelo de diseño.
Debido al alto grado de reutilización de las clases definidas nos permite hacer sencilla la codificación y creación de nuevas herramientas.
Es multiusuario, y multisistema.
Utiliza las propiedades de herencia de postgres

La ubicación el Ekeko es en /var/lib/ekeko, donde tenemos definido un directorio llamado raiz, que contendrá al sistema general, y los subsistemas. Cada sistema debe contener la siguiente estructura de directorios.
SIS
db -> Definición de las bases de datos
bin -> Directorio de Weblets
template -> Templates de los weblets
src -> Módulos, archivos CSS, archivos JS.
html -> Paginas Web, documentación Web
La ubicación del Sistema de información de la U.N.Sa. Es
/var/lib/ekeko
/raiz
/SIS
/unsa -> Contiene a su vez, un directorio SIS, con la misma estructura anterior.
El sistema para el manejo de Organizaciones y Lugares de la universidad maneja dos bases de datos, la base de datos “Alias” y la base de datos “Punsa”.
La base de datos Alias contiene las tablas que hacen referencia a la identidad (organización, personas), y a los lugares.
La base de datos hace referencia a las características particulares de cada identidad dentro de la universidad, por ejemplo: estudiantes, personal de apoyo universitario, organizaciones.
Ambas se relacionan mediante el id (clave única) de la identidad.


Se detallaran a continuación las tablas utilizadas para las aplicaciones.
Tabla : Identidad
Atributos :id|acl| origen|sigla|otros|nombre|extraordinario|tipoiden_id
Tabla :Alias
Atributos: id | acl | groupnumber | servidores | okemail | homedirectory | lugar | uidnumber | rediremail | gidnumber | estado | clave | loginshell | alias | email | identidad_id
Tabla:ubicaciones
Atributos: id | acl | mapa | nombre | numero | otro | url | cp | calles_id | ubicacion_id | callesesq_id | tipoubicacion_id
Tabla: Tipoubicacion
Atributos: id | acl |tipoubicacion
Tabla: Tipoiden
Atributos: id | acl | tipoiden
Tabla:Grupos
Atributos: id | acl | pertenencia | relacion | aliasr01_id | aliasr02_id
Tabla:Grupos Virtuales
Atributos: id | acl | funcion1 | funcion2 | aliasr01_id
Tabla:Ubicacion-Identidad
Atributos: id | acl | identidad_id | ubicacion_id
Tabla:Calles
Atributos: id | acl | calle
Tabla:Tipo de Tareas
Atributos: id | acl | icono | weblet | sigla | variables | tipoproceso_id
Tabla:Responsables
Atributos: id | acl | tipotareas_id | alias_id
Tabla:Orgas
Atributos: id | acl | ncg | idviejo | identidadid | tipocg_id | orgas_id | tipoorgas_id
Tabla:Tipoorgas
Artibutos: id | acl | sigla | nombre
Tabla:Tipocg
Atributos: id | acl | sigla | nombre
Los criterios para el desarrollo de la apliacion fueron separar las vistas de los datos, y las acciones que podrán realizar los distintos usuarios. Una vez registrado el usuario, el sistema evaluará su rol dentro del sistema, diferenciándolo como administrador del sistema, estudiante, personal administrativo, organización o profesional de la universidad, y así emitir la salida correspondiente.
Para esto se consulta a la base de datos las tareas dentro de las que están definidas como (ingresar organización, buscar, modificar, etc) están permitidas para determinados usuarios del sistema.
Cuando el usuario se logea al sistema, el ekeko emite una variable cgi llamada “pid” que es el “id” en la tabla identidad, mediante ella se puede determinar usando las relaciones entre bases y tablas que el usuario es un estudiante, organización y/o persona, pau de la universidad.
Otro criterio adoptado para el desarrollo de los weblets que constituyen las aplicaciones es que toda acción que determine que la eliminación, inserción o modificación de un dato en la base de datos, debe realizarse solo mediante subrutinas definidas dentro de módulos, preservando así la seguridad del sistema.
Es por eso que se creo para el desarrollo de los weblets dos módulos en Perl, llamados con el mismo nombre de las bases de datos a las que sus subrutinas referencian. En este caso es Punsa y Alias. Dejando para los weblets la tarea de decidir vistas, y definir las vistas en el sistema para cada usuario.
ubicorg: encargado de eliminar, modificar o insertar la relacion entre una organización y la ubicación física dentro de la universidad donde se encuentra esta.
deluser,adduser,addgrup son subrutinas para crear la estructura de grupos dentro de organizaciones, o de personas dentro de organizaciones.
pau,organizacion,estudiante,profesor: subrutinas determinan las tareas que pueden realizar estos usuarios.
insiden,inserta,accion: todas estas subrutinas llaman a otras que realizan las siguientes tareas:
accmodicar:modificar una organización
accnueva,insorg,instorgas: insertar una nueva organización, o nueva relacion, o datos en tabla identidad
check: chequear sigla
actpadre,accrelacionar: relacionar organizaciones y modificar organización padre.
A la hora de desarrollar la aplicación utilizando Ekeko, Perl, etc. existen una serie de ventajas de cara al desarrollo (siempre que la estructura de la aplicación a desarrollar se pueda adaptar a los componentes propuestos por el marco de trabajo) como por ejemplo la capacidad de dar una visión general y un nivel bastante abstracto del sistema o servicio a desarrollar, sin tener que entrar en detalles concretos de implementación, y al simplificar en gran medida el modelo que se utilizara.