lunes, 17 de mayo de 2010

WMLScript - Parte III / IV

3.1 Introducción   

En Javascript, lenguaje del que se deriva WMLScript, el código de los programas se puede colocar indistintamente en medio de la página HTML o en un fichero aparte en el cual se definen funciones.

WMLScript es distinto. Es necesario definir funciones en ficheros externos y, posteriormente, hacer llamadas a las mismas desde la página WML.

Los ficheros con código WMLScript deben llevar extensión .wmls. Estos ficheros son a su vez compilados a un código intermedio, llamado bytecode que es el que realmente se manda al teléfono. Las extensiones de los ficheros compilados a bytecode es .wmlsc, conservándose como nombre el mismo que el del fichero con el código fuente.

La estructura de un fichero en WMLScript está formada por dos partes:

1. Zona de directivas pragma.

2. Zona de declaración de funciones.

Pasemos a ver cada una de ellas.

3.2 Directivas Pragma   

Los ficheros con código WMLScript comienzan por una zona en la que se incluyen los llamados pragma, que traduciremos por directivas del compilador, dado que son sentencias con información para el compilador, más que para las páginas WML.

Existen tres tipos de directivas:

- Para incluir ficheros externos (pragma url)
- Para controlar el acceso a las funciones(pragma access)
- Para añadir información adicional(pragma meta)

Veamos para qué sirven y cómo se usan cada uno de ellos.

3.3.1. Pragma url

Sirve para poder usar en nuestra biblioteca funciones que están definidas en otras bibliotecas.

Se usan de la siguiente forma:

use url identificador direccion_de_la_biblioteca_a_usar;

Por ejemplo:

use url mi_bib_1 "http://geneura.ugr.es/wap/script/bib_1.wmls";

El haber incorporado esta línea a la biblioteca permitirá hacer llamadas a funciones que estén definidas en el fichero bib_1.wmls que se especifica, y además proporciona un identificador a dicho fichero (en este caso el identificador es mi_bib_1), de modo que podremos hacer llamadas como la siguiente:

mi_bib_1#mi_funcion( parametros)

Por supuesto, la dirección del fichero con la biblioteca externa puede ser absoluta (como en el ejemplo) o relativa al fichero que contiene la biblioteca que estemos construyendo en ese instante. En cualquier caso, deben ser direcciones válidas que NO contengan el carácter #.

Se pueden incluir tantas directivas url como sean necesarias.

3.3.3. Pragma access

Permite restringir el acceso a las funciones contenidas en la biblioteca solo a las páginas WML que procedan de ciertos dominios y/o directorios.

Se usa de la siguiente forma:

use access domain dominio_permitido;
use access path directorio_permitido;
use access domain dominio_permitido path directorio_permitido;

Por ejemplo:

use access domain "ugr.es" path "/wml
Permitiría el acceso desde las siguientes direcciones:

- geneura.ugr.es/wml/~victor/wap
- goliat.ugr.es/wml/wap-pages
- fedro.ugr.es/wml

Pero no lo permitiría a llamadas que proviniesen de sitios como:

- geneura.ugr.es/cgi-bin
- www.ujaen.es
- fedro.ugr.es/wap/wml

Solo se puede incluir una directiva access en cada fichero.

3.3.3. Pragma meta

Permiten añadir información extra al fichero WMLScript, sin requerir ninguna acción especial por parte del teléfono que llama a la función.

Existen tres tipos de directivas meta:

- use meta name nombre contenido esquemaopc;
- use meta http equiv nombre contenido esquemaopc;
- use meta user agent nombre contenido esquemaopc;

donde:

nombre especifica un nombre para la propiedad meta que se está definiendo.
contenido es el valor para dicha propiedad.
esquema indica un formato o estructura que debe ser usada para interpretar el valor (y que varía en función del tipo de meta que se define).

En un fichero en el que se está definiendo una biblioteca se pueden incluir más de una directiva meta, pero solo una de cada tipo.

3.3.3.1. use meta name

Crea información dirigida al servidor web, no al teléfono móvil. De hecho, los servidores suelen quitar está información del bytecode y no la envían al teléfono.

Ejemplo:

use meta name "autor" "Víctor Rivas Santos";

3.3.3.3. use meta http equiv

Permite crear cabeceras HTTP, de modo que podamos definir meta como en HTML

Ejemplo:

use meta http equiv "keywords" "WMLScript,Wap";

3.3.3.3. use meta user agent

Permite mandar cierta información al teléfono que realiza la llamada a la función. Evidentemente, la información que se puede mandar varía de unos teléfonos a otros.

Ejemplo:
use meta user agent "Type" "prueba";

3.3 Declarar funciones   

Antes de ver cómo se declaran funciones, vamos a dar algunos datos de ellas:

- No se pueden declarar funciones anidadas
- El nombre de cada función debe ser único dentro de cada fichero
- Todos los parámetros son pasados por VALOR a la función
- En las llamadas a una funcion se le deben pasar el mismo número de valores como parámetros necesite
- Todas las funciones devuelven un valor, que por defecto es la cadena vacía, ""

La declaración de funciones se realiza de la siguiente forma:

externopc function nombre( parámetrosopc ) {
     sentenciasopc
}

La palabra extern indica si la función que se declara puede ser llamada desde el exterior de la biblioteca o no (tomando en consideración el contenido del pragma access que se pudiera haber colocado). Como se ve, es necesario indicarlo para que se pueda llamar a la función desde fuera, pues por defecto no se permite.

Todas las funciones devuelven un valor que, por defecto es la cadena vacía. No obstante esto puede ser modificado mediante la sentencia:

return expresion;

Que permite devolver cualquier tipo de valor.

He aquí un ejemplo:

extern function percentage( cantidad, perc ) { return cantidad*perc/100; }

Como ya se dijo, la forma de realizar una llamada a una función dependerá de dónde esté declarada dicha función. Así, distinguiremos llamadas a funciones locales, externas o de biblioteca estándar.

Para la llamada a funciones locales (es decir, definidas en la misma biblioteca desde donde se realiza la llamada) solo hemos de poner el nombre de la función y los parámetros.
Ejemplo:

function f1() { // hace algo } function f2() { f1(); //llama a la función f1 }

Para la llamada a funciones externas (definidas en otra biblioteca), tendremos que dar un alias a la biblioteca externa y posteriormente usar la almohadilla (#) para llamar a la función.
Ejemplo:

use url mi_bib "bib.wmls"; function f1() { mi_bib#f2(); // Llama a f2() definida en bib.wmls }

Por último, Para la llamada a funciones de bibliotecas estándar usaremos el nombre de la biblioteca, un punto y el nombre de la función.
Ejemplo:

function f1() { Dialogs.alert( "Hola" ); // Llama a alert definida en Dialogs }

No hay comentarios:

Publicar un comentario