# WURFL

WURFL significa Wireless Universal Resource FiLe (Archivo de Recursos Universal Móviles). Es parte del esfuerzo de una comunidad FOSS (Free and Open Source Software, Código Fuente Libre y Abierto) enfocada en el problema de presentar contenido en la amplia variedad de dispositivos móviles. El WURFL en sí mismo es un fichero de configuración XML el cual contiene información acerca de características y capacidades de los dispositivos para una variedad de dispositivos móviles. La información de los dispositivos es contribución de desarrolladores de todo el mundo y el WURFL es actualizado de forma frecuente reflejando los nuevos dispositivos móviles que entran en el mercado. Luca Passani es la fuerza que conduce WURFL.

## Historia

A finales de 1999 el primer teléfono WAP fue lanzado en Europa, seguido por muchos otros en los siguientes meses. En 2001 se veía claro que los dispositivos WAP exhibían diferencias significativas en la forma en la que manejaban el contenido WAP. La implicación de esto fue que los desarrolladores móviles encontraron difícil soportar el incremento de dispositivos móviles; el coste del desarrollo de una aplicación, coste de las pruebas y el coste de muchos dispositivos para realizar desarrollos WAP era demasiado caro comparado con el desarrollo web. Ocasionalmente, algunos desarrolladores se dieron cuenta de que podrían usar el modelo de código abierto para sus esfuerzos. Luca Passani y Andrea Trasatti unieron fuerzas para crear una comunidad alrededor de un repositorio compartido de información de capacidades de dispositivos, el cual fue llamado WURFL. En los siguientes años el proyecto ha ganado seguidores y gente que da soporte desde distintas regiones geográficas y con diferentes trasfondos. La primera API básica se realizó en Perl. Las bibliotecas de Java y PHP aparecieron poco tiempo después, seguidas y mejoradas para .NET Framework, Perl, Ruby y, más recientemente, Python, XSLT y C++.

## Problema de la fragmentación de dispositivo

El canal web de escritorio, el cual está dividido principalmente entre un puñado de navegadores, dependiendo de HTML como su sistema de maquetado y el contenido escrito como HTML puede esperarse que sea visible para la mayoría de usuarios de un canal basado en web vía uno de los navegadores estándar (Internet Explorer, Mozilla Firefox, Safari, Opera, etc.). Las actualizaciones de software para navegadores de escritorio se realizan de forma normal y son distribuidas ampliamente.
A diferencia de un canal web de escritorio, hay una tremenda cantidad de fragmentación en el canal de dispositivos móviles. La maquetación puede ser WML, HTML, HDML, XHTML Perfil Móvil, etc. Además, a diferencia de un canal web estándar de escritorio, en los canales de dispositivos móviles varía el tamaño de la pantalla, habilidad para soportar scripts por parte del cliente, habilidad para soportar diversos formatos de imágenes y la cantidad de colores. La maquetación es generalmente enviada directamente al teléfono, no hay oportunidad para que un servidor central pueda corregir o adaptarse a las limitaciones o defectos de un navegador. Las actualizaciones de software para navegadores móviles son raras.

## Enfoques de la solución

Ha habido varios enfoques para este problema, incluyendo el desarrollo de muchas primitivas de contenido y esperando que funcione en una variedad de dispositivos, limitando el soporte a un pequeño subconjunto de dispositivos o pasando de la solución del navegador y desarrollar una aplicación de cliente Java ME.
WURFL soluciona esto permitiendo el desarrollo de páginas de contenido usando abstracciones de elementos de página (botones, enlaces y cajas de texto por ejemplo). En tiempo de ejecución, estos son convertidos al tipo específico de maquetado en cada dispositivo. Además, el desarrollador puede especificar otras decisiones de contenido que pueden hacerse en tiempo de ejecución basadas en las capacidades específicas del dispositivo y sus características (las cuales están todas en WURFL).

## Habilidades de WURFL

WURFL contiene más de 500 habilidades para cada dispositivo que están separadas en 30 grupos. Una lista completa de habilidades está disponible desde WURFL Documentation page. Hay una prueba de WURFL en línea llamado Tera-WURFL Explorer que permite ver las habilidades de dispositivos basados en sus agentes de usuario y navegador a través de dispositivos en el archivo actual de WURFL.

## WALL, Wireless Abstraction Library

WALL (Wireless Abstraction Library, en español biblioteca de abstracción móvil) es una biblioteca de tags JSP que permite al desarrollador escribir páginas móviles parecidas al HTML plano, mientras que entrega WML, C-HTML y XHTML Perfil Móvil al dispositivo el cual origina peticiones HTTP, dependiendo de las habilidades actuales del dispositivo en sí mismo. Las habilidades del dispositivo son consultadas dinámicamente usando la API de WURFL. Hay disponible una portación para PHP (llamada WALL4PHP).

## Implementaciones soportadas

WURFL es actualmente soportado usando lo siguiente:
* Java (via WALL)
* PHP (via Tera-WURFL (database driven), the New WURFL PHP API and WALL4PHP)
* .NET Framework (via Visual Basic / C# / Any .Net language API and Somms.NWURFL(C#))
* Perl
* Ruby
* Python (via Python Tools)
* XSLT
* C++
* Apache Mobile Filter
Tera-WURFL API en PHP/MySQL viene con un servicio web remoto que permite consultar el WURFL desde cualquier lenguaje que soporte servicios web XML e incluye clientes para los siguientes lenguajes:
* PHP
* Perl
* Python
* JavaScript
* ActionScript 3 (Flash / Flex / AIR / ECMAScript)