Hosting de Calidad
  • Inicio
  • Precios y servicios
  • F.a.q y ayudas
  • Realizar pedido
  • Webs alojadas
  • Quienes somos
  • Foro HyD
  • Contacto

    Zona Dominios

    Entrar
    registro de dominios


    Zona Hosting

    Entrar
    alojamiento web


    5 Métodos de Pago
    Tarjeta de crédito
    Domiciliación
    Transferencia
    Soporte Epagado
    Soporte Paypal

    Liberalización .es

    Ver mas
    dominios .es


  •  
     
     
    Funciones para Hyperwave

    XXXVIII_ 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 gratuiro_ La versión actual, 4_1, está disponible en www_hyperwave_com_ Se puede solicitar gratuitamente una versión limitada (30 días)_

    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_

    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 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_

    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 __  Changes attributes of an object (obsolete)
    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 __  Prints information about the connection to Hyperwave server
    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 __ object record of 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_Username __ 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
     
       



    registro de dominios | alojamiento web | hosting por publicidad

       

     

    Manual de linux Manual de apache Manual de php Manual de mysql Manual de SQL Manual del Plesk Como funciona Paypal Manual de html