===========================
= PASCAL SERVER PAGES FAQ =
===========================
Índice
------
1. Introducción
........1.1 ¿Qué es PSP?
........1.2 Un Ejemplo de PSP, por favor
........1.3 Aún más simple
........1.4 Algo muy importante, ¿Y la licencia?
2. Funcionamiento
........2.1 Funcionamiento de PSP
........2.2 Próximas Formas de Mantenimiento
........2.3 La Máquina Virtual o Intérprete
3. Documentos PSP
........3.1 Tipos de Documento
........3.2 Partes del Documento
........3.3 Sub-tipos de Documento
........3.4 Expresiones Pascal
........3.5 Evaluaciones Pascal
........3.6 ¿Para qué me ha valido todo este rollo?
4. Acceso a Bases de Datos
........4.1 Tipos de Acceso a Datos Soportados
................4.1.1 BDE, Borland Database Engine
................4.1.2 DBX, DataBase eXpress
................4.1.3 Zeos-Lib, Acceso a datos "Open Source"
................4.1.4 MyDB, Acceso a datos "Open Source" ligero
1. Introducción
1.1 ¿Qué es PSP?
----------------
- Página Pascal de Servidor (o PSP, como se conoce en su abreviatura) son documentos HTML con
subprogramas y expresiones Pascal embebidas en el documento entre los símbolos "<%" y "%>". Este tipo
de documentos de servidor son muy parecidos a PSP, JSP y PHP/FI (lo que fue PHP en un comienzo).
1.2 Un Ejemplo de PSP, por favor
--------------------------------
- Un ejemplo muy sencillo de programa, puede ser el canónico (y aburrido) programa que muestra
la cadena "Hello World!", como hace el siguiente programa PSP: Hello.psp.
--------------------------------
<% //| -> Marca de Inicio de Código PSP
begin //| -> Inicio de Bloque de Código Pascal
Result := 'Hello world!';//| -> Resultado devuelto en Código Pascal
end; //| -> Cierre de Bloque de Código Pascal
%> //| -> Marca de Cierre de Código PSP
--------------------------------
- Para probar este sencillo programa copie las líneas de código desde la Marca de Inicio de
Código PSP hasta la Marca de Cierre del mismo y guarde estas líneas (usando su editor favorito) en un
archivo con el nombre "hello.psp".
NOTA: si se encuentra en Linux deberá agregar 2 líneas más que en Unix son la cabecera de un archivo
para saber cual es su intérprete. El formato es el siguiente :
#!/ruta/al/binario/pspc | -> Esta es la cabecera
| -> Esto es una línea en blanco
- La línea en blanco no es obligatoria pero si recomendada, ya que, en el futuro, pspc podría
funcionar en otros S.O. (seguramente Unix, y de hecho, con la emulación de binarios Linux, hoy en día
se podría ejecutar en S.O. como los *BSD, Solaris, etc...)
1.3 Aún más simple
------------------
- El sencillo ejemplo anterior podría haber sido reemplazado por una, todavía más sencilla si
cabe, expresión Pascal. La expresión sería la siguiente :
<% 'Hello World!' %>
- Las expresiones Pascal son diferentes de las evaluaciones Pascal (el anterior programa es
una evaluación Pascal) y tienen el formato :
<% Expresion %> | -> Expresión Pascal expresada en una única línea
...o bien...
<% | -> Marca de Inicio de Código PSP
Expresion | -> Expresión Pascal
%> | -> Marca de Fin de Código PSP
- El ejemplo mostrado en esta sección no tiene mucho sentido (mejor dicho ninguno) pero puede
servir para mostrar como es una expresión. Un uso común de las expresiones podría ser, por ejemplo,
para mostrar la Fecha/Hora del día en que se accede al documento PSP. El siguiente ejemplo muestra
como se podría realizar esta sencilla expresión :
<% Date() %>
1.4 Algo muy importante, ¿Y la licencia?
----------------------------------------
- La licencia principal es la GNU General Public License Version 2 (la GPL) pero la máquina
virtual y algunas otras unidades se distribuyen bajo la Mozilla Public License Version 1.1, debido a
que originalmente se distribuyeron bajo esta licencia. Si su principal problema es si podrá usar este
software en aplicaciones propietarias, la respuesta a este problema es SI, por supuesto.
2. Funcionamiento
-----------------
2.1 Funcionamiento de PSP
------------------------
- Al igual que PHP, ASP, JSP, obviamente se necesita una Máquina Virtual que interprete los
documentos PSP, un módulo para el servidor web o un binario para ejecutarlo al estilo CGI, que es el
motor llamado "pspc". Actualmente solo se ofrece como binario para ejecución (com ya hemos comentado)
al estilo CGI (Common Gateway Interface). Si necesita más información acerca de CGI puede dirigirse
a la Página Web http://web.golux.com/coar/cgi/, Página del proyecto "Common Gateway Interface RFC
project".
2.2 Próximas Formas de Funcionamiento
-------------------------------------
- En un futuro no muy lejano, se crearán módulos específicos para Apache (Versiones 2.X) y
también para Internet Information Server (IIS).
- En un futuro algo más lejano, se creará un servidor Web "específico" para PSP, que también
podrá servir contenidos estáticos. Este servidor permitirá Pool de Recursos y Conexiones, Balanceo de
Carga, etc... Esto se encuadraría dentro del futuro proyecto Nemesis Pascal Enterprise Edition (NPEE).
2.3 La Máquina Virtual o Intérprete
-----------------------------------
- El Intérprete (o Máquina Virtual, como se prefiera) de Código Pascal es el intérprete que se
ofrece con el Proyecto JEDI para Delphi, el componente JvInterpreterPascal. Actualmente se utiliza la
versión 2.00 del mencionado componente. Para obtener una versión actualizada de este componente puede
dirigirse al URL http://jvcl.sourceforge.net, sede del proyecto JEDI VCL (JVCL).
3. Documentos PSP
-----------------
3.1 Tipos de Documento
----------------------
- Los tipos de documentos PSP existentes en la especificación 0.1 relativa a la versión de PSP
0.0.3, son 3: monoprograma, complejo y simple.
Monoprogramas : Son aquellos documentos que solo disponen de una evaluación Pascal y ninguna expresión
HTML, así como ninguna expresión Pascal.
Simples : Son aquellos documentos que disponen de código HTML así como de una evaluación y/o expresión
Pascal.
Complejos : Son aquellos documentos que contienen código HTML así como 2 o más evaluaciones y/o
expresiones Pascal.
- A continuación se muestra un ejemplo de cada tipo de documento :
A) Documento Monoprograma -> mono_program.psp
----------------
<% sqrt(24) %> | -> Solo contiene una expresión Pascal, por lo cual el documento es monoprograma.
----------------
B) Documento Simple -> simple_doc.psp
-----------------
| -> Código HTML y una expresión Pascal, el tipo de documento es Simple.
<% sqrt(24) %> |
|
-----------------
C) Documento Complejo -> complex_doc.psp
--------------------------------------------------------------
| -> El documento contiene código HTML,
Hoy es :<% Date %> | 2 expresiones y una evaluación, por lo
| cual el documento es complejo.
La raíz cuadrada de 24 es <% sqrt(24) %> |
|
|
<% |
begin |
if DateTimeToStr(Now) = '01/01/2001 08:00:00' then begin |
Result := 'Ya es complicado conseguir esto!'; |
else |
Result := 'Esto es lo normal que se debería ver'; |
end; |
end; |
%> |
|
--------------------------------------------------------------
3.2 Partes del Documento
------------------------
- Los documentos PSP se conforman, según el tipo de documentos PSP de las siguientes partes :
Código HTML : No es aplicable, lógicamente, a documentos monoprogramas.
Evaluaciones : Aplicable a todos los documentos. Las evaluaciones son bloques de código Pascal. Para
que tengan algún efecto es preciso devolver el valor deseado mediante la variable reservada "Result".
Expresiones : Aplicable a todos los documentos. Las expresiones son porciones de Código Pascal, que no
precisan de apertura de bloque de código pascal -"Begin"- ni cierre -"End;"-, por lo caul, tampoco de
la utilización de la anteriormente mencionada variable reservada "Result".
Ejemplo :
-----------------------------------------------
| -> Porción de Código HTML
<% 'Hoy es ' + DateTimeToStr(Date) %> | -> Expresión Pascal, no abre bloques de Código Pascal
|
<% |
begin | -> Evaluación Pascal, abre bloque de Código Pascal
Result := 'Esperemos que haga buen día.'; |
end; |
%> |
|
-----------------------------------------------
3.3 Sub-tipos de Documento
--------------------------
- Según el tipo genérico de documento y el tipo de las partes que lo conformen, los documentos
PSP podrán ser de los siguientes tipos específicos :
A) Monoprograma de Evaluación : Solo contiene una evaluación, este tipo de documentos PSP son previstos
para obtener los datos de la evaluación desde otro documento. Su utilidad es MUY BAJA.
B) Monoprograma de Ejecución : Se permiten, pero no son el modo más adecuado de utilizar PSP, ya que el
formato sería similiar a utilizar CGI directamente con Pascal (algo que también se puede usando la
plataforma Nemesis). Su utilidad, no obstante, es NORMAL.
C) Simple de Evaluación u Hoja Dinámica : Se usan, por ejemplo, para imprimir la fecha/hora, sin otros
medios, como podría ser usar Scripting (JavaScript, PerlScript, VBScript...) u otro lenguaje del lado
del Cliente, o como un método para facilitar la fase de desarrollo. Su utilidad es MEDIA.
D) Simple de Ejecución u Hoja Estándar : Son los documentos (como indica su nombre) estándar. Incluidos
en el Centro del Esqueleto de un documento HTML, generan el código necesario para ocupar el "Corazón
del Documento". Su utilidad es ALTA.
E) Complejo de Evaluación o Multievaluador : Aptos para generación de documentos HTML con ciertas
opciones extras. Las evaluaciones pueden ser, por ejemplo, para obtener un página de noticias, o un
fichero FTP (en la próxima especificación del API PSP), etc... Su utilidad es ALTA, pero se recomienda
la utilización, para la fase de producción, del siguiente tipo de documentos.
F) Complejo de Ejecución u Hoja Multiprograma : Múltiples expresiones con propósitos (generalmente)
distintos, totalmente desligados, unos de otros. Son los documentos más utilizados en entornos de
producción y, los que mayor legibilidad, debido a su estructuración, ofrecen. Su utilidad es MUY ALTA.
G) Complejo Multifunción u Hoja de Módificación de Productividad : Las hojas multiprogramas, también
pueden ser llamadas hojas de productividad efectiva, y cuando las mismas precisan de mejoras o
actualizaciones y en ellos se incluyen expresiones pasan a ser Hojas de Modificación de Documentos de
Productividad Efectiva. Si los documentos son utilizados en entornos de producción, se acostumbrara a
denominarlos simplemente documentos Complejos Multifunción. Su utilidad es ALTA, no obstante no se
recomienda la utilización en entornos de producción de este tipo de documentos.
3.4 Expresiones Pascal
----------------------
- Las expresiones nos brindan datos y funciones a modo sencillo, con tan solo 1 línea de
código (en la mayoría de los casos, se expresará así), como muestra el siguiente programa de ejemplo :
-----------------------
| -> Esta sencilla expresión muestra la fecha del sistema, aunque sería más
Hoy es : <% Date() %> | apropiado decir que "retorna" la fecha del sistema.
|
-----------------------
NOTA : Las funciones que se pueden usar en expresiones y evaluaciones se especifican en la API de PSP.
3.5 Evaluaciones Pascal
-----------------------
- Las evaluaciones son múltiples líneas de código Pascal que realizan una serie de operaciones
y devuelven una cadena, o un nº, etc... Un sencillo ejemplo de un documento es un ejemplo de Hoja
Estándar.
-------------------------------
|
<% |
begin |
Result := 'Hello World!'; |
end; |
%> |
|
-------------------------------
NOTA: Los valores que puede devolver una expresión o una evaluación (esto es ignorado en el caso que
se especifica) han de ser compatibles con el formato "Variant", ya que, internamente se convertirá el
resultado (que será siempre una variable de tipo "Variant" -internamente-) con la función VarToStr().
3.6 ¿Para qué ha valido todo este rollo?
----------------------------------------
- Debido a problemas con el Debug de documentos PSP y la mejor manutención de este software,
cuando se comuniquen BUGs habrá que indicar (preferiblemente) que tipo de documento es. Como siempre
a la hora de comunicar BUGs se debe de incluir el máximo de información posible.
4. Acceso a Bases de Datos
--------------------------
4.1 Tipos de Acceso a Datos Soportados
--------------------------------------
- Actualmente el motor PSP (así como toda la plataforma Nemesis Pascal) tiene soporte para los
siguientes métodos de acceso a datos que serán explicados, detalladamente a posteriori : BDE (Borland
Database Engine), DBX (DataBase eXpress), Zeos-Lib y MyDb.
- No obstante, se prevee agregar soporte nativo (es decir, al API nativa) para los siguientes
gestores de Bases de Datos : MySQL, PostgreSQL, Oracle, Interbase y DB2.
NOTA: A pesar de poder usarse tanto el soporte BDE como (usando Zeos-Lib) el soporte para SQL Server
(solo en Win32, claro), no se recomienda. Si necesita una Base de Datos con soporte transaccional y
los objetos comunes que conforman el "SQL 99", utilice PostgreSQL, para cualquier otro uso, puede usar
el archi-conocido gestor de Bases de Datos MySQL.
4.1.1 BDE, Borland Database Engine
----------------------------------
- En toda la plataforma Nemesis Pascal, se ofrece soporte para el BDE, no obstante, tiene las
siguientes limitaciones u obstáculos:
· No se redistribuye con la plataforma, debe descargarlo desde el sitio web de Borland o bien
obtenerlo de alguna otra ubicación.
· Este acceso solo se encuentra disponible en plataformas Windows, así pues la portabilidad
del código PSP, sería nula.
· Este método de acceso es muy pesado, y puede no ofrecer toda la agilidad requerida en
algunas ocasiones.
4.1.2 DBX, DataBase eXpress
---------------------------
- Al igual que el anterior tipo de acceso a dato, se incluye con todos los elementos de la
plataforma. A diferencia del BDE, este es redistribuido sin problemas en Win32 y Linux por igual.
- Este tipo de acceso a datos ofrece soporte para diferentes tipos de BB.DD., entre los que se
encuentran ODBC, IBM DB2, Interbase, Oracle, PostgreSQL y MySQL. Como se especifica en la (no incluida)
documentación de DBX, se pueden crear drivers mediante Delphi/Kylix, u obtenerlos de 3º compañías para
otros tipos de BB.DD.
- Este acceso a datos es recomendado cuando se necesite control de transacción, utilización de
procedimientos almacenados, etc... En otros casos, estamos utilizando excesivos recursos.
4.1.3 Zeos-Lib, Acceso a datos "Open Source"
--------------------------------------------
- Gracias al proyectos Zeos-Lib se ofrece acceso a datos mediante esta colección de objetos
para Oracle, IBM DB2, SQL Server (solo en Win32), PostgreSQL, Interbase, Sybase y MySQL.
- Este tipo de acceso a datos se ofrece integrado en la plataforma y el binario PSP.
- Este acceso a datos es recomendado cuando se necesite control de transacción, utilización de
procedimientos almacenados, etc... En otros casos, estamos utilizando excesivos recursos.
4.1.4 MyDB, Acceso a datos "Open Source" ligero
-----------------------------------------------
- Acceso a datos orientado a MySQL ligero, no basado en su librería, sino mediante el uso de
objetos. Ideal para las aplicaciones pequeñas y medianas. Ofrece ligereza y velocidad en el acceso a
datos así como la potencia que ofrece el uso de la OOP (Object Oriented Programming).
- Se recomienda su uso para portar portales creados en PHP, así como para cualquier tipo de
aplicación pequeña o mediana.