Hyperwave
PHP Manual

Introducción

Hyperwave ha sido desarrollado en » IICM en Graz. Comenzó con el nombre Hyper-G y cambió a Hyperwave cuando se comercializó (en 1996).

Hyperwave no es software gratuito. La versión actual, 5.5, está disponible en » http://www.hyperwave.com/. Se puede pedir una versión con límite de tiempo de forma gratuita (30 días).

Véase también el módulo API Hyperwave.

Hyperwave es un sistema de información similar a una base de datos (HIS, Hyperwave Information Server). Se centra en el almacenamiento y la administración de documentosis . Un documento puede ser cualquier trozo posible de información que puede ser también almacenado en un fichero. Cada documento está acompañado por su registro de objetos. El registro de objetos contiene metainformación del documento. La metainformación es una lista de atributos que pueden ser extenida por el usuario. Ciertos atributos son siempre establecidos por el servidor Hyperwave, otros pueden ser modificados por el usuario. Un atributo es un par nombre/valor de la forma nombre=valor. El registro de objetos completo contiene tantos de estos pares como desee el usuario. El nombre de un atributo no tiene que ser único, p.ej., un título puede aparecer varias veces en un registro de objetos. Esto tiene sentido si se quiere especificar un título en varios lenguajes. En tal caso existe una convención donde cada valor de título está precedido por la abreviatura de dos letras del lenguaje seguida por dos puntos, p.ej. 'en:Title in English' o 'de:Titel in deutsch'. Otros atributos, como una descripción o palabras clave, son candidatos potenciales. También se puede reemplazar la abreviatura del lenguaje por cualquier otra cadena mientras esté separada por dos puntos del resto del valor del atributo.

Cada registro de objetos tiene innata una representación de tipo string con cada par nombre/valor separado por una nueva línea. La extensión Hyperwave también reconoce una segunda representación que es un array asociativo con el nombre del atributo como clave. Los valores de los atributos multilenguaje por sí mismos forman otro array asociativo con la clave como abreviatura del lenguaje. En realidad, cualquier atributo múltiple forma un array asociativo con la cadena a la izquierda de los dos puntos del valor del atributo como clave. (Esto no está totalmente implementado. Sólo los atributos Title, Description y Keyword están tratados de manera apropiada.)

Además de los documentos, todos los hipervínculos contenidos en un documento también son almacenados como registro de objetos. Los hipervínculos que están en un documento serán eliminados de él y almacenados como objetos individuales cuando el documento se inserte en la base de datos. El registro de objetos del vínculo contiene información sobre dónde comienza y dónde finliza. Para obtener el documento original se tendrá que recuperar el documento plano sin los vínculos y la lista de vínculos, y reinsertarlos. Las funciones hw_pipedocument() y hw_gettext() hacen esto por usted. La ventaja de separar los vínculos del documento es obvia. Una vez que un documento al que está apuntando un vínculo cambia su nombre, el vínculo puede ser modificado fácilmente como corresponde. El documento que contiene el vínculo no es afectado en absoluto. Incluso se puede añadir un vínculo a un documento sin modificar el documento en sí.

Decir que hw_pipedocument() y hw_gettext() realizan la inserción del vínculo automáticamente no es tan simple como suena. Insertar vínculos implica cierta jerarquía de los documentos. En un servidor web esto se da mediante el sistema de ficheros, pero Hyperwave tiene su propia jerarquía y los nombres no reflejan la posición de un objeto en esa jerarquía. Por lo tanto, la creación de vínculos requiere, lo primero de todo, un mapeado desde la jerarquía y el espacio de nombres de Hyperwave dentro de un espacio de nombres web respectivo a la jerarquía web. La diferencia fundamental entre Hyperwave y la web es la clara distinción entre nombres y jerarquía de Hyperwave. El nombre no contiene ninguna información sobre la posición de los objetos en la jerarquía. En la web el nombre también contiene la información de dónde se localiza el objeto en la jerarquía. Esto conlleva a dos posibles maneras de mapear. O la jerarquía de Hyperwave y el nombre del objeto Hyperwave está reflejado en la URL o solamente el nombre. Para hacer las cosas sencillas se usa la segunda aproximación. El objeto Hyperwave con nombre mi_objeto se mapea a http://host/mi_objeto sin tener en cuenta dónde reside en la jerarquía de Hyperwave. Un objeto con nombre padre/mi_objeto debería ser el hijo de mi_objeto en la jerarquía de Hyperwave, aunque en un espacio de nombres web parece que es justo lo opuesto y el usuario podría confundirse. Esto solamente se puede prevenir seleccionando nombres de objetos razonables.

Habiendo tomado esta decisión se presenta un segundo problema. ¿Cómo involucrar a PHP? La URL http://host/mi_objeto no llamará a ningún script de PHP a menos que se indique al servidor web reescribirla a p.ej. http://host/php_script/mi_objeto y el scrip php_script evalúe la variable $PATH_INFO y recupere el objeto con nombre mi_objeto del servidor Hyperwave. Esto es sólo un pequeño inconveniente que se puede arreglar fácilmente. Reescribir cualquier URL no permitirá el acceso a otro documento del servidor web. Un script de PHP para buscar en el servidor Hyperwave sería imposible. Por lo tanto, será necesaria al menos una segunda regla de reescritura para excluir ciertas URLs como todas las que empiecen, p.ej., con http://host/Hyperwave Esto básicamente es compartir un espacio de nombres por la web y por el servidor Hyperwave.

Basándose en el mecanismo de arriba los vínculos se insertan en los documentos.

Se vuelve más complicado si PHP no se ejecuta como módulo servidor o scrip CGI que como aplicación autónoma, p.ej., para volcar el contenido del servidor Hyperwave a un CD-ROM. En tal caso cobra sentido conservar la jerarquía de Hyperwave y mapearla al sistema de ficheros. Este entra en conflicto con los nombres de objetos si reflejan su propia jerarquía (p.ej. eligiendo nombres que incluyen '/'). Por lo tanto, '/' tiene que ser reemplazado por otro carácter, p.ej. '_'.

El protocolo de red para comunicarse con el servidor Hyperwave se llama » HG-CSP (Hyper-G Client/Server Protocol - Protocolo Cliente/Servidor Hyper-G). Está basado en mensajes para iniciar ciertas acciones, p.ej., obtener un registro de objetos. En versiones anteriores del Servidor Hyperwave Server se proporcionaron dos clientes nativos (Harmony, Amadeus) para la comunicación con el servidor. Estos dos desaparecieron cuando se comercializó Hyperwave. Como reemplazo se proporcionó el llamado wavemaster. Wavemaster es como un convertidor de protocolo de HTTP a HG-CSP. La idea es hacer que toda la administración de la base de datos y la visualización de documentos se realize por una interfaz web. Wavemaster implementa un conjunto de posicionadores de ciertas acciones para personalizar la interfaz. Este conjunto de posicionadores se llama Lenguaje PLACE. PLACE carece de muchas de las características de un lenguaje de programación real y cualquier extensión que se le haga sólo amplía la lista de posicionadores. Esto ha guiado al uso de JavaScript en lo que en mi opinión no hace la vida más fácil.

Añdir el soporte de Hyperwave para PHP debería rellenar el hueco de un lenguaje de programación ausente para la personalización de la interfaz. Implementa todos los mensajes como están definidos en HG-CSP pero también proporciona comandos más poderosos para, p.ej., recuperar documentos completos.

Hyperwave tiene su propia terminología para nombrar ciertos trozos de información. Ha sido ampliamente asumida y extendida. Casi todas las funciones operan en uno de los siguientes tipos de datos.

Varias funciones que devuelven un array de registro de objetos también devuelven un array asociativo con información estadística sobre ellos. El array es el último elemento del array del registro de objetos. El array estadístico contiene las siguientes entradas:

Hidden
Número de registro de objetos con el atributo PresentationHints establecido a Hidden (oculto).
CollectionHead
Número de registro de objetos con el atributo PresentationHints establecido CollectionHead.
FullCollectionHead
Número de registro de objetos con el atributo PresentationHints establecido a FullCollectionHead.
CollectionHeadNr
Índice en el array de registros de objetos con el atributo PresentationHints establecido a CollectionHead.
FullCollectionHeadNr
Índice en el array de registros de objetos con el atributo PresentationHints establecido a FullCollectionHead.
Total
Total: Número de registros de objetos.


Hyperwave
PHP Manual