>PHP: Funciones para Hyperwave - Manual

MANUAL DE PHP

(y algo mas)windsurf pozo izquierdo
Google
search for in the  
ELMARRAJO.COM mysql bulma desarrollo web linux fedora html ayuda

windsurf mercedes camper

LI. Funciones para Hyperwave

Introducci贸n

Hyperwave ha sido desarrollado en el IICM en Graz. Comenz贸 con el nombre Hyper-G y cambi贸 a Hyperwave cuando fue comercializado (Si lo recuerdo bien, fue en 1996).

Hyperwave no es software gratuito. La versi贸n actual, 5.5, est谩 disponible en http://www.hyperwave.com/. Se puede solicitar gratuitamente una versi贸n limitada (30 d铆as).

Puede consultar tambi茅n la API de Hyperwave.

Hyperwave es un sistema de informaci贸n similar a una base de datos (HIS, Hyperwave Information Server - Servidor Hyperwave de Informaci贸n). Su objetivo es el almacenamiento y manipulaci贸n de documentos. Un documento puede ser cualquier bloque posible de datos que tambi茅n puede ser almacenado en un archivo. Cada documento se acompa帽a por su registro de objeto. El registro de objeto contiene metadatos para el documento. Los metadatos son una lista de atributos que pueden ser extendidos por el usuario. Ciertos atributos siempre son fijados 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 completo del objeto tiene tantos de estos pares como guste el usuario. El nombre de un atributo no tiene porqu茅 ser 煤nico, p. ej. un t铆tulo puede aparecer varias veces en el registro de un objeto. Esto tiene sentido si se desea especificar un t铆tulo en diferentes idiomas. En dicho caso existe la convenci贸n de que cada valor de t铆tulo est茅 precedido por la abreviatura de dos letras del idioma, seguida por dos puntos, como p. ej. 'en:Title in English' o 'es:T铆tulo en Espa帽ol'. Otros atributos tales como descripciones o palabras clave son canditatos potenciales a esta diferenciaci贸n. Tambi茅n se pueden reemplazar las abreviaturas de idioma por cualquier otra cadena siempre y cuando est茅n separadas por los dos puntos del resto del valor del atributo.

Cada registro de objeto tiene una representaci贸n nativa como cadena con cada par nombre/valor separado por una l铆nea nueva. La extensi贸n Hyperwave tambi茅n conoce una segunda representaci贸n que consiste en un array asociativo donde el nombre del atributo es la clave. Los valores de atributo multiling眉es en s铆 mismos forman otro array asociativo donde la clave es la abreviatura del idioma. Realmente cualquier atributo m煤ltiple forma una tabla asociativa donde la cadena a la izquierda de los dos puntos en el valor de atributo es la clave. (Esto no se ha implementado por completo. S贸lo los atributos Title, Description y Keyword son tratados adecuadamente).

Aparte de los documentos, todos los hiper-enlaces contenidos en un documento son almacenados tambi茅n como registros de objeto. Cuando el documento sea insertado en la base de datos, los hiper-enlaces que haya en un documento ser谩n borrados del mismo y almacenados como objetos individuales. El registro de objeto del enlace contiene informaci贸n acerca de d贸nde comienza y d贸nde termina. Para recuperar el documento original se deber谩 recuperar el documento sin los enlaces y la lista de los mismos para reinsertarla (Las funciones hw_pipedocument() y hw_gettext() hacen esto para usted). La ventaja de separar los enlaces del documento es obvia. Una vez un documento al que apunta un enlace cambia de nombre, el enlace puede modificarse f谩cilmente. El documento que contiene el enlace no se ve afectado. Incluso se puede a帽adir un enlace a un documento sin alterarlo.

Decir que hw_pipedocument() y hw_gettext() hacen autom谩ticamente la inserci贸n de enlaces no es tan simple como suena. Insertar los enlaces implica una cierta jerarqu铆a en los documentos. En un servidor web esto viene dado por el sistema de archivos, pero el Hyperwave tiene su propia jerarqu铆a y los nombres no representan la posici贸n de un objeto en dicha jerarqu铆a. Por tanto, la creaci贸n de los enlaces precisa primeramente de realizar un mapeado entre el espacio de nombres y la jerarqu铆a del Hyperwave y el espacio de nombres respectivo de una jerarqu铆a de web. La diferencia fundamental entre Hyperwave y la web es la distinci贸n clara entre nombres y jerarqu铆a que se da en el primero. El nombre no contiene ninguna informaci贸n sobre la posici贸n del objeto en la jerarqu铆a. En la web, el nombre tambi茅n contiene la informaci贸n sobre la posici贸n en la jerarqu铆a del objeto. Esto nos lleva a dos posibles formas de mapeo. O bien se reflejan la jerarqu铆a del Hyperwave y el nombre del objeto Hyperwave en el URL o s贸lo el nombre. Para facilitar las cosas, se utiliza el segundo m茅todo. El objeto Hyperwave de nombre 'mi_objeto' es mapeado a 'http://host/mi_objeto' sin importar d贸nde reside dentro de la jerarqu铆a de Hyperwave. Un objeto con el nombre 'padre/mi_objeto' podr铆a ser el hijo de 'mi_objeto' en la jerarqu铆a Hyperwave, aunque en el espacio de nombres web aparezca justamente lo opuesto y el usuario pueda ser llevado a confusi贸n. Esto s贸lo se puede evitar seleccionando nombres de objetos razonables.

Hecha esta decisi贸n surge un segundo problema. 驴C贸mo implicar al PHP? el URL http://host/mi_objeto no llamar谩 a ning煤n script PHP a no ser que se le diga al servidor que lo transforme en p. ej. 'http://host/script_php3/mi_objeto' y que el 'script_php3' luego eval煤e la variable $PATH_INFO y recupere el objeto con nombre 'mi_objeto' del servidor Hyperwave. Hay s贸lo un peque帽o inconveniente que se puede resolver f谩cilmente. Cuando se reescribe cualquier URL no se permite el acceso a ning煤n otro documento en el servidor web. Un script de PHP para buscar en el servidor Hyperwave ser铆a imposible. Por lo tanto se necesitar谩 al menos una segunda regla de reescritura para que excluya ciertos URL, como los que empiecen p. ej. por http://host/Hyperwave. B谩sicamente esto ser铆a compartir un espacio de nombres entre el servidor web y el servidor Hyperwave.

Los enlaces se insertan en los documentos bas谩ndose en el mecanismo citado m谩s arriba.

Se vuelve m谩s complicado si el PHP no se est谩 ejecutando como m贸dulo del servidor o como script CGI, sino que se ejecuta como aplicaci贸n, p. ej. para volcar el contenido del servidor de Hyperwave a un CD-ROM. En dicho caso tiene sentido mantener la jerarqu铆a Hyperwave y mapearla en el sistema de archivos. Esto entra conflicto con los nombres de los objetos si estos reflejan su propia jerarqu铆a (p. ej. eligiendo nombres que comienzan por '/'). Por tanto, la '/' tendr谩 que ser reemplazada por otro car谩cter, p. ej. '_' para continuar.

El protocolo de red para comunicarse con el servidor Hyperwave se denomina HG-CSP (Hyper-G Client/Server Protocol, Protocolo Hyper-G Cliente/Servidor). Est谩 basado en mensajes que inician ciertas acciones, p. ej. obtener el registro de un objeto. En versiones anteriores del Servidor Hyperwave se distribuyeron dos clientes nativos (Harmony, Amadeus) para la comunicaci贸n con el servidor. Ambos desaparecieron cuando se comercializ贸 el Hyperwave. Para sustitu铆rlo se proporcion贸 el llamado wavemaster. El wavemaster es como un conversor de protocolo de HTTP a HG-CSP. La idea es realizar toda la administraci贸n de la base de datos y la visualizaci贸n de documentos con una interfaz web. El wavemaster implementa una serie de posicionadores para acciones que permiten personalizar la interfaz. Dicho conjunto de posicionadores se denomina el Lenguaje PLACE. El PLACE no posee muchas de las caracter铆sticas de un lenguaje de programaci贸n real y las extensiones al mismo 煤nicamente alargan la lista de posicionadores. Esto ha obligado al uso de JavaScript que, en mi opini贸n, no hace la vida m谩s f谩cil.

A帽adir soporte de Hyperwave al PHP rellenar铆a el espacio que deja la falta de un lenguaje de programaci贸n que permita personalizar la interfaz. El PHP implementa todos los mensajes definidos en el HG-CSP pero adem谩s proporciona comandos m谩s poderosos, p. ej. recuperar documentos completos.

El Hyperwave tiene su propia terminolog铆a para dar nombre a ciertos tipos de informaci贸n. Esta ha sido ampliamente extendida y anulada. Casi todas las funciones operan en uno de los siguientes tipos de datos.

  • ID de objeto: Un valor entero 煤nico paara cada objeto del servidor Hyperwave. Tambi茅n es uno de los atributos del registro de objeto (ObjectID). Los ID de objeto se usan generalmente como par谩metros de entrada que especifican a un objeto.

  • registro de objeto: Una cadena con pares atributo-valor con la forma atributo=valos. Los pares est谩n separados unos de otros por un retorno de carro. Un registro de objeto puede convertirse f谩cilmente en una tabla (array) de objetos usando hw_object2array(). Varias funciones devuelven registros de objeto. Los nombres de dichas funciones terminan en obj.

  • tabla de objetos: Una tabla asociativa con todos los atributos de un objeto. La clave es el nombre del atributo. Si un atributo aparece m谩s de una vez en un registro de objeto ser谩 convertido en otra tabla asociativa o indizada. Los atributos que dependen del idioma (como el t铆tulo, claves o descripci贸n) se convertir谩n en una tabla asociativa con la abreviatura del idioma como clave. El resto de los atributos m煤ltiples crear谩n una tabla indizada. Las funciones de PHP nunca devuelven tablas de objetos.

  • hw_document: Este es un nuevo tipo de datos que almacena el documento actual, p. ej. HTML, PDF, etc. Est谩 algo optimizado para documentos HTML pero puede usarse para cualquier formato.

Varias funciones que devuelven una tabla de registros de objeto tambi茅n devuelven una tabla asociativa con informaci贸n estad铆stica sobre los mismos. La tabla es el 煤ltimo elemento del registro de objeto. La tabla estad铆stica contiene los siguientes elementos:

Hidden

N煤mero de registros de objeto con el atributo PresentationHints puesto a Hidden.

CollectionHead

N煤mero de registros de objeto con el atributo PresentationHints puesto a CollectionHead.

FullCollectionHead

N煤mero de registros de objeto con el atributo PresentationHints puesto a FullCollectionHead.

CollectionHeadNr

脥ndice a una tabla de regitros de objeto con el atributo PresentationHints puesto a CollectionHead.

FullCollectionHeadNr

脥ndice a una tabla de regitros de objeto con el atributo PresentationHints puesto a FullCollectionHead.

Total

Total: N煤mero de registros de objeto.

Requisitos

Esta extensi贸n requiere un servidor Hyperwave que se puede obtener de la direcci贸n http://www.hyperwave.com/.

Instalaci贸n

Esta extension PECL no esta ligada a PHP.

Para poder utilizar estas funciones, se debe compilar PHP con soporte para Hyperwave mediante la opci贸n --with-hyperwave[=DIR] .

Los usuarios de Windows deben habilitar php_hyperwave.dll dentro del archivo php.ini para poder emplear las funciones. Podeis descargar esta DLL de las extensiones PECL desde la pagina PHP Downloads o desde http://snaps.php.net/.

Integraci贸n con Apache

La extensi贸n Hyperwave se utiliza mejor cuando el PHP se compila como un m贸dulo de Apache. En tal caso el servidor Hyperwave subyacente puede ser ocultado casi por completo de los usuarios si el Apache utiliza su motor de re-escritura. Las siguientes instrucciones explicar谩n esto.

Como el PHP con soporte Hyperwave inclu铆do en el Apache se ha dise帽ado para sustituir la soluci贸n nativa de Hyperwave basada en Wavemaster, asumir茅 que el servidor Apache s贸lo sirve como interfaz web para el Hyperwave. Esto no es necesario, pero simplifica la configuraci贸n. El concepto es bastante sencillo. Primeramente necesita un script PHP que eval煤e la variable $_ENV['PATH_INFO'] y que trate su valor como el nombre de un objeto Hyperwave. Llamemos a este script 'Hyperwave'. El URL http://nombre.servidor/Hyperwave/nombre_de_objeto devolver铆a entonces el objeto Hyperwave llamado 'nombre_de_objeto'. Dependiendo del tipo del objeto, as铆 reaccionar谩 el script. Si es una colecci贸n, probablemente devolver谩 un lista de hijos. Si es un documento devolver谩 el tipo MIME y el contenido. Se puede mejorar ligeramente si se usa el motor de re-escritura del Apache. Desde el punto de vista del usuario ser谩 m谩s sencillo si el URL http://nombre.servidor/nombre de objeto devuelve el objeto. La regla de reescritura es muy sencilla:

RewriteRule ^/(.*) /usr/local/apache/htdocs/HyperWave/$1 [L]

Ahora todo URL apunta a un objeto en el servidor Hyperwave. Esto provoca un problema sencillo de resolver. No hay forma de ejecutar otro script, p. ej. para buscar, salvo el script 'Hyperwave'. Esto se puede solucionar con otra regla de reescritura como la siguiente:

RewriteRule ^/hw/(.*) /usr/local/apache/htdocs/hw/$1 [L]

Esta reservar谩 el directorio /usr/local/apache/htdocs/hw para script adicionales y otros archivos. S贸lo hay que asegurarse que esta regla se eval煤a antes de la otra. S贸lo hay un peque帽o inconveniente: todos los objetos Hyperwave cuyo nombre comienza por 'hw/' ser谩n ocultados. as铆 que aseg煤rese que no utiliza dichos nombres. Si necesita m谩s directorios, p. ej. para im谩genes, simplemente a帽ada m谩s reglas o sit煤e los archivos en un solo directorio. Por 煤ltimo, no olvide conectar el motor de re-escritura con

RewriteEngine on

Mi experiencia me ha demostrado que necesitar谩 los siguientes scripts:

  • para devolver el script en s铆

  • para permitir las b煤squedas

  • para identificarse

  • para ajustar su perfil

  • uno para cada funci贸n adicional como mostrar los atributos del objeto, mostrar informaci贸n sobre usuarios, mostrar el estado del servidor, etc.

Una alternativa a utilizar "Rewrite Engine", es emplear la directiva de Apache ErrorDocument. Sin embargo, las p谩ginas redirigidas mediante ErrorDocument no pueden recibir datos POST.

Configuraci贸n en tiempo de ejecuci贸n

El comportamiento de estas funciones est谩 afectado por los valores definidos en php.ini.

Tabla 1. Opciones de configuraci贸n de Hyperwave

NombreValor por defectoDonde se cambiaRegistro de cambios
hyperwave.allow_persistent"0"PHP_INI_SYSTEMDisponible desde PHP 4.3.2.
hyperwave.default_port"418"PHP_INI_ALL 
For further details and definitions of the PHP_INI_* constants, see the Ap茅ndice G.

Tipos de recursos

Esta extensi贸n no tiene ning煤n tipo de recurso definido.

Constantes predefinidas

Estas constantes est谩n definidas por esta extensi贸n y estar谩n disponibles solamente cuando la extensi贸n ha sido o bien compilada dentro de PHP o grabada din谩micamente en tiempo de ejecuci贸n.

HW_ATTR_LANG (integer)

HW_ATTR_NR (integer)

HW_ATTR_NONE (integer)

Pendientes

A煤n hay varias cosas pendientes:

  • hw_InsertDocument debe dividirse en hw_InsertObject() y hw_PutDocument().

  • Los nombres de algunas funciones a煤n no est谩n fijados.

  • Muchas funciones precisan la conexi贸n actual como primer par谩metro. Esto obliga a escribir mucho, lo cual no es con frecuencia necesario si s贸lo hay una conexi贸n abierta. Una conexi贸n por defecto mejorar铆a esto.

  • La conversi贸n de registro de objeto a tabla de objeto necesita manipular cualquier atributo m煤ltiple.

Tabla de contenidos
hw_Array2Objrec -- Convierte atributos de tabla de objeto a registro de objeto
hw_changeobject --  Modifica los atributos de un objeto (obsoleta)
hw_Children -- Id de objeto de los hijos
hw_ChildrenObj -- Registros de objeto de los hijos
hw_Close -- Cierra la conexi贸n Hyperwave
hw_Connect -- Abre una conexi贸n
hw_connection_info --  Muestra informaci贸n sobre la conexi贸n con un servidor Hyperwave
hw_cp -- Copia objetos
hw_Deleteobject -- Borra objetos
hw_DocByAnchor -- Id del objeto al que pertenece un enlace
hw_DocByAnchorObj -- Registro de objeto al que pertenece un enlace
hw_Document_Attributes -- Registro de objeto de hw_document
hw_Document_BodyTag -- Body tag of hw_document
hw_Document_Content -- Returns content of hw_document
hw_Document_SetContent -- Sets/replaces content of hw_document
hw_Document_Size -- Size of hw_document
hw_dummy --  Hyperwave dummy function
hw_EditText -- Recupera documento de texto
hw_Error -- N煤mero de error
hw_ErrorMsg -- Devuelve un mensaje de error
hw_Free_Document -- Libera un documento_hw
hw_GetAnchors -- Id de objeto de los enlaces de un documento
hw_GetAnchorsObj -- Registros de objeto de los enlaces de un documento
hw_GetAndLock -- Devuelve registro de objeto y lo bloquea
hw_GetChildColl -- Id de objeto de colecciones hijas
hw_GetChildCollObj -- Registros de objeto de colecciones hijas
hw_GetChildDocColl -- Id de objeto de documentos hijos de una colecci贸n
hw_GetChildDocCollObj -- Registros de objeto de documentos hijos de una colecci贸n
hw_GetObject -- Registro de objeto
hw_GetObjectByQuery -- Buscar objeto
hw_GetObjectByQueryColl -- Buscar objeto en colecci贸n
hw_GetObjectByQueryCollObj -- Buscar objeto en colecci贸n
hw_GetObjectByQueryObj -- Buscar objeto
hw_GetParents -- Id de objeto de los padres
hw_GetParentsObj -- Registros de objeto de los padres
hw_getrellink --  Get link from source to dest relative to rootid
hw_GetRemote -- Obtiene un documento remoto
hw_GetRemoteChildren -- Obtiene el hijo del documento remoto
hw_GetSrcByDestObj -- Devuelve los enlaces que apuntan al objeto
hw_GetText -- Obtiene un documento de texto
hw_getusername -- Nombre del usuario actualmente conectado
hw_Identify -- Identificarse como usuario
hw_incollections -- Comprueba si los id de objeto est谩n en las colecciones
hw_Info -- Informaci贸n sobre conexi贸n
hw_InsColl -- Insertar colecci贸n
hw_InsDoc -- Insertar documento
hw_insertanchors --  Inserts only anchors into text
hw_InsertDocument -- Subir cualquier objeto
hw_InsertObject -- Inserta un registro de objeto
hw_mapid -- Mapea in id global a un id virtual local
hw_Modifyobject -- Modifica el registro de objeto
hw_Mv -- Mueve objetos
hw_New_Document -- Crear nuevo documento
hw_Objrec2Array -- Convierte atributos de registro de objeto a tabla de objetos
hw_Output_Document -- Prints hw_document
hw_pConnect -- Hacer una conexi贸n de base de datos permanente
hw_PipeDocument -- Recupera cualquier documento
hw_Root -- ID del objeto ra铆z
hw_setlinkroot --  Set the id to which links are calculated
hw_stat --  Returns status string
hw_Unlock -- Desbloquea objeto
hw_Who -- Lista de los usuarios actualmente conectados


add a note add a note User Contributed Notes
Funciones para Hyperwave
There are no user contributed notes for this page.

Citas célebres

La pereza camina tan despacio, que la pobreza no tarda en alcanzarla.

Benjamin Franklin
Filósofo, político y científico estadounidense
(1706-1790)
Citas en tu mail
©Contenidos Gratis

Ilusiones Opticas
ilusion_optica_066.jpg
Contenidos Web

Chiste de... Ni駉s
Pesada

Un niño está llorando.

- ¿Por qué lloras?

- Porque esa señora gorda se ha caído.

- ¡Uy que majo! ¿y te da pena?

- No, ¡es que se me ha caído encima!
Chistes en tu mail
©ContenidosGratis

Humor Gráfico
humor_grafico_039.jpg
Contenidos Web

Inicio | Acción | Estrategia | Palabras | Puzzles | Solitarios | Foro Trucos
Cake ManiaCake Mania
Jugadores: 6835
Categoría del juego: Acción
Objetivo del juego: Ayuda a Jill a recuperar la pasteler韆 de su abuela llevando su propia pasteler韆; consigue clientes y gana dinero.
Rainbow WebRainbow Web
Jugadores: 2199
Categoría del juego: Puzzles
Objetivo del juego: Rompe un pegajoso hechizo y salva un reino de fantas韆 en Rainbow Web. Tendr醩 toneladas de diversi髇 mientras juegas a este m醙ico desaf韔 para la mente.
Mahjongg FortunaMahjongg Fortuna
Jugadores: 12462
Categoría del juego: Solitarios
Objetivo del juego: Velocidad y habilidad mental son las armas más importantes en esta versión de un antiguo juego asiático. Despeja el tablero lo antes posible haciendo clic en las fichas iguales y gánate la fama eterna de la puntuación más alta.
Chainz 2Chainz 2
Jugadores: 6955
Categoría del juego: Puzzles
Objetivo del juego: Entra en el mundo de las combinaciones con Chainz 2: Relinked, emocionante secuela del exitazo del a駉 pasado, Chainz. Gira eslabones y crea combinaciones de 3 m醩.
DeliciousDelicious
Jugadores: 4405
Categoría del juego: Acción
Objetivo del juego: 縀res un as de la multitarea? 縌uieres que tus clientes est閚 contentos? ues Delicious es tu juego! Sacia el apetito de los clientes y tenlos contentos; o te arriesgues!
BookwormBookworm
Jugadores: 4568
Categoría del juego: Palabras
Objetivo del juego: Junta las letras para formar palabras. ¡Las palabras más largas valen más puntos!
ZumaZuma
Jugadores: 4976
Categoría del juego: Acción
Objetivo del juego: Controla el 韉olo de la rana de piedra de los antiguos Zuma en este intrigante enigma de acci髇. ispara bolas para formar conjuntos de tres, pero si dejas que lleguen a la calavera dorada morir醩!
Jewel of AtlantisJewel of Atlantis
Jugadores: 3798
Categoría del juego: Puzzles
Objetivo del juego: Descubre la ciudad hundida de la Atl醤tida y busca valiosos tesoros. Viaja m醩 all de las profundidades del mar y vive trepidantes aventuras en Jewel of Atlantis.
Jewel QuestJewel Quest
Jugadores: 3727
Categoría del juego: Puzzles
Objetivo del juego: Convierte la arena de la antigua selva en oro tan r醦ido como puedas juntando grupos de 3 elementos. os grupos m醩 grandes valen m醩 puntos!
Bejeweled 2Bejeweled 2
Jugadores: 3659
Categoría del juego: Puzzles
Objetivo del juego: Con cuatro modos de juego 鷑icos y fascinantes, nuevas piezas de juego explosivas e imponentes fondos planetarios, Bejeweled 2 es mucho m醩 adictivo que nunca.
Contenidos gratis en tu webSiguiente >>

Fotos divertidas
fotos_increibles_0034.jpg
Contenidos Web
microrobots avion deportes riesgo recetas cocina canaria juegos online gratis moto motociclismo horoscopos naranjas valencianas surf canarias monta駃smo ciudades turismo postales gratis library Horoscopos Diarios Windsurf Canarias
fregadero microondas placa electrica ba駉preparar camper pantalla plananevera compresor electricacamper fiat ducato camper ba駉 quimicomampara enrollable ba駉camper aire climatizadofurgoneta surf windsurffurgoneta surf windsurftelevisor furgonetas camperfurgonetas camper cama

Sudoku del día
Nivel de dificultad: Fácil



Cómo jugar:
El juego consiste en colocar los números del 1 al nueve de tal forma que no se repita el mismo número en la columna, fila y caja (bloques 3x3 enmarcados).

©Contenidos Gratis | Sudoku en tu mail
Sucedió el...

30 de agosto de 1617

Fallece Santa Rosa de Lima, por la que se celebra el "Día de la Patrona de América".
Efemérides en tu mail
©Contenidos Gratis
windsurf canarias youtube porno canarias baleares valencia madrid