PiLLoW - PowerPoint PPT Presentation

1 / 30
About This Presentation
Title:

PiLLoW

Description:

El campo de la inform tica actualmente ha dedicado gran esfuerzo en el ... get_form_input(Dict) Dict = [nombre= Pepe', edad=23] get_form_value(Dic, Att, Val) ... – PowerPoint PPT presentation

Number of Views:70
Avg rating:3.0/5.0
Slides: 31
Provided by: Ele9128
Category:
Tags: pillow | dict

less

Transcript and Presenter's Notes

Title: PiLLoW


1
PiLLoW
  • Programming in Logic Languages on
  • the Web

2
Introducción
  • El campo de la informática actualmente ha
    dedicado gran esfuerzo en el desarrollo de las
    tecnologías Web.
  • La aplicación CoLogNetWS muestra como la
    Programación Lógica es una opción muy ventajosa
    para el desarrollo de aplicaciones Web, siendo en
    muchos casos la mas idónea debido al alto nivel
    de abstracciones ofrecido por Prolog.
  • Dentro de esta aplicación vamos a centrarnos
    especialmente en el entorno, y en las librerías
    utilizadas.

3
Introducción
  • CIAO Prolog es un entorno de programación lógica
    y de restricciones GNU LGPL.
  • Desarrollado por el laboratorio de Computación
    Lógica, Implementación y Paralelismo (CLIP) de la
    Facultad de Informática de la UPM.
  • Librerias CIAO
  • PiLLoW Interfaz WWW/HTML.
  • Prolog shell
  • Distribuición Pizarras, concurrencia, agentes,
    ...
  • PLAI Analisis global.
  • OPC Optimización global.

4
Librería PiLLoW
  • PiLLoW es una librería Prolog de dominio público
    diseñada para simplificar la programación de
    aplicaciones WWW e Internet en sistemas LP/CLP.
  • Ofrece facilidades para
  • Acceso a documentos y código de la WWW.
  • Parsing.
  • Manipulación y generación de documentos tanto
    HTML
  • como XML.
  • Generación de formularios HTML.
  • Manejadores para scripts CGI y procesamiento de
  • plantillas HTML/XML.

5
Librería PiLLoW
  • Una importante contribución de PiLLoW es la
    modelización de código HTML/XML como términos
    Herbrand.
  • La librería ha sido desarrollada en el contexto
    del sistema Ciao Prolog, aunque ha sido adaptada
    satisfactoriamente a numerosos sistemas LP/CLP
    (Programación Lógica/Programación Lógica con
    Restricciones).

6
Programación WWW
  • Las funcionalidades mas significativas y que a
    continuación vamos a describir son
  • Aplicaciones CGI.
  • Visión documentos HTML estructurados como
    términos de Prolog.
  • Generación formularios HTML.
  • Plantillas HTML/XML.
  • Escritura de manejadores de formularios.
  • Acceso a documentos WWW.

7
Aplicaciones CGI
  • Podemos realizar aplicaciones Web a través del
    protocolo conocido como CGI(Common Gateway
    Interface).
  • Un ejecutable CGI se distingue de los ejecutables
    normales en que el resultado de su ejecución, su
    salida, consiste en algo que el navegador WWW que
    esta siendo utilizado puede entender, es decir,
    generalmente código HTML.

8
Aplicaciones CGI
  • 1- Se solicita la dirección de una aplicación CGI
    en el browser, p.e. http//www.xxx.yyy/cgi_bin/he
    llo_world
  • 2- El servidor HTTP arranca el ejecutable
    hello_world
  • 3- El servidor HTTP toma la salida del ejecutable
    (HTML/MIME)
  • 4- Se le pasa al browser, que muestra el
    resultado.

9
Aplicaciones CGI
  • En Prolog
  • main(_) -
  • write(Content-type text/html),
  • nl, nl,
  • write(ltHTMLgt),
  • write(Hello ltBgtworldlt/Bgt.),
  • write(lt/HTMLgt).
  • Lo podemos compilar
  • ?- save(hello_word), main(_), halt.

10
LP/CLP Scripts para CGI
  • Para CIAO en un entorno UNIX
  • !/usr/local/bin/lpshell
  • main(_) -
  • write(Content-type text/html),
  • nl, nl,
  • write(ltHTMLgt),
  • write(Hello ltBgtworldlt/Bgt.),
  • write(lt/HTMLgt).
  • La ejecución más lenta, pero no es apreciable con
    la velocidad de la red.

11
Aplicaciones CGI
  • En algunos sistemas nos encontramos con la
    desventaja de que el ejecutable que se genera es
    de gran tamaño. En nuestro sistema Prolog/CIAO
    podemos compilar ejecutables de un tamaño menor
    al programa fuente.
  • Las aplicaciones CGI solo producen salidas, para
    solucionarlo seria interesante y muy útil
    combinarlas con código HTML.

12
HTML como términos Prolog
  • HTML es el lenguaje de marcado predominante para
    la construcción de paginas Web.
  • Es estructurado y se puede reflejar esta
    estructura como términos Prolog.
  • Puede verse cualquier página Web como términos de
    Herbrand y manipularse fácilmente. Tales
    estructuras solo necesitan ser traducidas por los
    predicados apropiados a código HTML/XML para
    mostrar la salida.

13
HTML como términos Prolog
  • PiLLoW provee dos predicados
  • output_html(F) Envía a la salida estándar el
    texto correspondiente al termino HTML F.
  • html2tems(ASCII, Terms) Relata una lista de
    términos HTML y una lista de caracteres ASCII
    (reversible).

14
HTML como términos Prolog
  • NameAtts (/2 operador binario infijo)
    NameNombre del elemento?img
  • Atts Atributos que puede contener(puede
  • ser vacio).?srcimages/map.gif
    ,altMapa , ismap
  • imgsrcimages/map.gif ,altMapa , ismap
    ?ltimg srcimages/map.gif altMapa ismapgt
  • name(Text) (name/1)name?address
  • Text? (i3a_at_info-ab.uclm.es)
  • address(i3a_at_info-ab.uclm.es)
    ?ltaddressgti3a_at_info-ab.uclm.eslt/addressgt

15
HTML como términos Prolog
  • name(Atts,Text) (name/2)name?a
  • Attsatributos? hrefhttp//www.xx.y/
  • Texttexto? XX home
  • a(hrefhttp//www.xx.y/ , XX home) ?lta
    hrefhttp//www.xx.y/gtXX homelt/agt
  • env(Name,Atts,Text) Equivalente
    name(Atts,Text)Name?a
  • Atts? hrefhttp//www.xx.y/
  • Text? XX home
  • env(a, hrefhttp//www.xx.y/ , XX home)
    ?lta hrefhttp//www.xx.y/gtXX homelt/agt

16
HTML como términos Prolog
  • Ejemplo
  • !/usr/local/bin/lpshell
  • - use_module(/usr/local/src/pillow/html.pl)
  • main(_) -
  • T cgi_reply,
  • html( Hello,
  • b(world),
  • . ) ,
  • output_html(T). (Envia a la salida el texto
    correspondiente al termino T)

17
Formularios HTML
  • 1- Se pulsa el botón submit en el formulario.
  • 2- Se pasa al Servidor el URL Handler y los
    datos.
  • 3- El servidor HTTP arranca el manejador.
  • 4- El servidor pasa los datos del formulario al
    manejador.
  • 5- El servidor HTTP toma la respuesta.
  • 6- Se le pasa al browser(navegador), que muestra
    el resultado.

18
Manejo de formularios
  • get_form_input(Dic)Transforma los datos de
    entrada a un diccionario Dic de pares
    atributovalor (DGCs parser). get_form_input(Dict)
    ? Dict nombrePepe, edad23
  • get_form_value(Dic, Att, Val)Obtiene el valor
    Val para el atributo Att del diccionario Dic.

19
Manejo de formularios
  • form _empty_value(V)Comprueba si el valor V está
    vacío.
  • my_url(URL) Devuelve la URL de este formulario.

20
Manejo de formularios
  • Ejemplo formulario HTML
  • ltform methodPOST
  • actionhttp//www..xxx.yyy/
    handler.cgigt
  • ltinput typetext nameperson_name
    size40gtltinput typesubmit valueSubmitgt
  • lt/formgt

21
Manejo de formularios
  • Manejador sencillo
  • !/usr/local/bin/lpshell
  • - use_module(/usr/local/src/pillow/html.pl)
  • main(_) -get_form_input(Input),(Transforma los
    datos de entrada a un diccionario, mediante DCGs)
  • get_form_value(Input, person_name, Name),
  • (Obtiene el nombre para el atributo nombre de
    persona de un diccionarioInput)
  • output_html( cgi_reply, start, --,
  • heading(2, El nombre es ), em(Name), --,
    end ).(Envia a la salida estándar el texto
    correspondiente al termino HTML)

22
Plantillas HTML/XML
  • Los ejemplos anteriores son hard-coded,es decir,
    los datos se introducen directamente en el código
    fuente en lugar de obtenerse de una fuente
    externa.
  • Una solución a esta limitación es el uso de
    plantillas.
  • html_template(Chars, Terms, Dic)
  • Chars código HTML/XML con slots
  • Terms termino con variables (holes) para poner
    en slots.
  • Dic lista de nombreVariable que empareja
    holes y slots.

23
Plantillas HTML/XML
  • Ejemplo
  • response(Name, Response),
    file_to_string(html_template.html, Cont),
  • html_template(Cont, Html_terms,
  • responseResponse), Cont? código
    HTML/XML con slots
  • Html_terms?termino con variables (holes)
    para poner
  • en slots.
  • responseResponse?lista de
    nombreVariable que
  • empareja holes y slots.
  • output_html(cgi_replyHtml_terms).

24
Acceder a documentos WWW
  • HTTP, FTP, etc. son protocolos ASCII que pueden
    ser fácilmente añadidos a cualquier sistema, su
    función es proporcionar el acceso a los
    documentos de la Web.
  • La interfaz de los sockets correspondientes a
    estos puertos pueden ser fácilmente codificados
    con DCGs.

25
Acceder a documentos WWW
  • PiLLoW proporciona
  • url_info( URL, Info)
  • fetch_url( URL, Request, Response). Trae un
    documento desde
  • Interntet.
  • Algunas opciones para Request
  • head solo interesa la cabecera.
  • timeout(Time) nº segundos de espera (fail).
  • if_modified_since(Date)
  • autorization(Scheme, Param).
  • Algunas opciones para Response
  • content(Content) documento como lista de
    caracteres.
  • last_modified(Date).
  • expires(Date)
  • location(URL)

26
Acceder a documentos WWW
  • Ejemplo
  • - use_module(http//www.clip.dia.fi.upm.es/lib/p
    illow.pl)
  • ?- url_info(http//ww.xx/foo.htm, UI),
    fetch_url(UI, , R),
  • member(content(C), R),
  • html2terms(C, Terms).

27
Limitaciones de CGI
  • Un pequeño script CGI y una aplicación que se
    ejecuta permanentemente, debido a que el Handler
    se inicia y espera a que termine cada interacción
    .
  • Esto supone manejar varias sesiones ejecutándose
    a la vez (concurrencia).
  • Para esto se pueden usar Active Modules (Active
    Objects)

28
Limitaciones de CGI
29
Active Modules/Objects
  • Incorporan recursos computacionales.
  • Modelo de alto nivel de interacción
    cliente-servidor
  • Es un servidor para los predicados que exporta.
  • Cualquier modulo/aplicación puede ser
    convertidoen modulo activo (make_actmod/2). La
    activación de los módulos se produce por demonios
    ejecutables Prolog.
  • Se pueden importar procedimientos de módulos
    activos remotos (use_active_module/2).
  • Las llamadas a estos se ejecutan remotamente.
  • Uso típico Cliente-Servidor. El cliente
    importa los módulos que exporta el servidor.

30
Active Modules/Objects
  • Servidor - module(database, stock/2).
    stock(p1, 23). stock(p2, 45).
  • Compilación ?- make_actmod(/home/clip/database
    .pl,
  • library(actmods/filebased_publish)).
  • Convierte el database en un módulo
    activo.
  • Cliente - module(sales, need_to_order/1,
    actmods). - user_active_module(database,
    stock/2). - user_module(library(actmods/fileb
    ased_locate)).
  • need_to_order(P) - stock(P, S), Slt 20.
  • Uso ?- use_module(sales). ?- need_to_order(X).
Write a Comment
User Comments (0)
About PowerShow.com