|
Table des matières
LV. HyperwaveIntroductionHyperwave a été développé par IICM à Graz. Son nom original était Hyper-G et il a pris le nom de Hyperwave lors de sa commercialisation (en 1996). Hyperwave n’est pas gratuit. La version actuelle est la 5.5, disponible à http://www.hyperwave.com/. Une version limitée à 30 jours peut être demandée. Voir aussi le module Hyperwave API. HIS est un système d’information similaire à une base de données, (HIS, Hyperwave Information Server). HIS se concentre sur l’enregistrement et la gestion des documents. Un document peut être n’importe quelle donnée, qui peut être stockée dans un fichier. Chaque document est accompagné par un enregistrement. Cet enregistrement contient des méta données à propos du document. Ces méta données sont des listes d’attributs qui peuvent être étendues par l’utilisateur. Un attribut est une paire clé/valeur de la forme : clé =valeur. L’enregistrement complet contient autant de paires que le désire l’utilisateur. Le nom d’un attribut n’a pas besoin d’être unique, c’est-à-dire qu’une même clé peut apparaître plusieurs fois dans un enregistrement. Cela peut être utile si vous devez donner un titre à votre document en plusieurs langues, par exemple. Dans un cas pareil, la convention est que chaque valeur de titre est précédée par deux lettres et deux points, tel que : ‘fr:Titre en français’ ou ‘ge:Titel in deutsch’. D’autres attributs comme une description ou des mots-clés sont aussi susceptibles de recourir à ce genre de procédé. Vous pouvez aussi remplacer l’abréviation de langage par une autre chaîne, tant qu’elle est séparée de la valeur par les deux points. Chaque enregistrement a une représentation native qui contient toutes les paires clé/valeur, séparées par un retour à la ligne. L’extension Hyperwave reconnaît une autre représentation qui est un tableau associatif, où les attributs servent de clés. Les attributs multilingues étant gérés sous la forme d’un autre tableau associatif, dont les clés sont les chaînes de langue. En fait, tous les attributs multiformes sont gérés sous la forme de tableau associatif. (Cela n’est pas encore complètement codé. Uniquement les attributs de titre, description et mot-clés sont traités correctement). En dehors des documents, tous les hyperliens contenus dans un document sont enregistrés dans un autre enregistrement. Les hyperliens qui sont à l’intérieur d’un document en seront supprimés, et enregistrés dans des objets particuliers au moment de l’insertion dans la base de données. L’enregistrement des hyperliens contient les informations d’origine et d’objectif. Afin d’accéder au document original, vous devrez lire le document sans les liens, puis lire les liens et les réinsérer (les fonctions hw_pipedocument() et hw_gettext() le font pour vous. L’avantage de séparer les liens du document est évident : une fois qu’un document, cible d’un hyperlien, a été renommé, le liens peut facilement être modifié. Le document contenant le lien n’est pas modifié pour autant. Vous pouvez même ajouter un lien à un document sans le modifier. Dire que hw_pipedocument() et hw_gettext() font l’insertion automatiquement n’est pas aussi simple qu’il y paraît. L’insertion implique une certaine hiérarchie de documents. Sur un serveur web, la hiérarchie est fournie par le système de fichiers, mais Hyperwave dispose de sa propre hiérarchie et les noms de fichiers ne reflètent pas la position d’un objet dans cette hiérarchie. Ainsi, la création de liens requiert en premier lieu la construction de la hiérarchie et de l’espace des noms dans une hiérarchie web et un espace de nom web. La différence fondamentale entre Hyperwave et le web est qu’il y a une distinction claire entre les noms et la hiérarchie dans Hyperwave. Le nom ne contient aucune information à propos de la position de l’objet dans la hiérarchie. Sur le web, le nom contient les informations de localisation dans la hiérarchie. Cela conduit à deux méthodes d’accès : soit la hiérarchie Hyperwave et le nom de l’objet sont inscrits dans l’URL. Pour simplifier les choses, une deuxième approche est pratiquée. L’objet Hyperwave de nom ‘mon_objet’ correspond à l’URL ‘http://hote/mon_objet‘, peu importe alors où il est rangé dans la hiérarchie. Un objet dont le nom est ‘parent/mon_objet’ peut être le fils de l’objet ‘mon_objet’ dans la hiérarchie Hyperwave, bien que ce soit le contraire en convention web, et cela risque de perturber l’utilisateur. Ayant pris cette décision, un deuxième problème surgit : comment faire l’interface avec PHP ? L’URL http://hote/mon_objet n’appellera aucun script PHP à moins que vous ne demandiez à votre serveur web de le remplacer par autre chose, comme : ‘http://host/php3_script/mon_objet’ et le script ‘php3_script’ utilise la variable $PATH_INFO pour rechercher l’objet ‘mon_objet’ sur le serveur Hyperwave. Il y a juste un petit inconvénient, qui peut facilement être corrigé. Réécrire une URL ne vous permettra aucun accès aux autres documents du serveur web. Un script de recherche dans le serveur Hyperwave serait impossible. Il vous faudra donc au moins une autre règle pour exclure certaines URL, comme celles qui commencent par http://host/Hyperwave. Voici, de manière simple, comment partager un espace de nom entre un serveur web et un serveur Hyperwave serveur. Basé sur le mécanisme précédent, on trouve l’insertion dans les documents. Il est plus compliqué d’avoir PHP ne fonctionnant pas comme un module de serveur, ou un script CGI, mais comme une application indépendante. Dans ce cas, il est utile d’inscrire la hiérarchie et le nom de fichier Hyperwave dans le système de fichier. Mais comme cela risque d’entrer en conflit avec le séparateur de dossier (’/’), il faut le remplacer par un autre caractère,. ‘_’. Le protocole réseau pour communiquer avec un serveur Hyperwave est appelé HG-CSP (Hyper-G Client/Server Protocol). Il est basé sur des messages qui initient des actions, comme lire l’en-tête de fichier. Dans les premières versions de Hyperwave Server, deux clients natifs (Harmony, Amadeus) étaient fournis pour permettre la communication avec le serveur. Ils ont disparu lors de la commercialisation de Hyperwave. En tant qu’ersatz, un client appelé wavemaster est désormais fourni. wavemaster est un espèce de convertisseur de protocole de HTTP en HG-CSP. L’idée est de faire toute l’administration de la base et la visualisation des documents par une interface web. Le wavemaster implémente un jeu d’emplacement pour certaines actions de personnalisation de l’interface. Ce jeu est appelé PLACE language. PLACE pêche encore par le manque de nombreuses fonctions de programmation et le manque d’évolutivité. Cela a conduit à l’utilisation de JavaScript ce qui ne rend pas la vie facile. Que PHP supporte Hyperwave permet de combler ces manques. PHP implémente tous les messages définis par HG-CSP mais fourni d’autres commandes puissantes, comme celle de lire des documents complets. Hyperwave dispose de sa propre terminologie pour localiser certaines informations. Cette terminologie a été largement étendue. Presque toutes les fonctions utilisent l’un des types de données suivants :
De nombreuses fonctions qui retournent un tableau d’enregistrements, retournent aussi un tableau associé, avec des informations statistiques. Ce tableau est le dernier élément du tableau d’enregistrements. Les statistiques contiennent les entrées suivantes : Hidden Nombre d’objets dont l’attribut PresentationHints est Hidden. CollectionHead Nombre d’objets dont l’attribut PresentationHints est CollectionHead. FullCollectionHead Nombre d’objets dont l’attribut PresentationHints est FullCollectionHead. CollectionHeadNr Index du premier objet du tableau d’enregistrement avec l’attribut PresentationHints à CollectionHead. FullCollectionHeadNr Index du premier objet du tableau d’enregistrement avec l’attribut PresentationHints est FullCollectionHead. Total Total : nombre d’enregistrements. Pré-requisCette extension requiert un serveur Hyperwave, téléchargeable sur le site de http://www.hyperwave.com/. InstallationCette extension PECL n’est pas intégrée à PHP. Si vous voulez utiliser ces fonctions, vous devez compiler PHP avec le support Hyperwave en utilisant l’option de configuration “–with-hyperwave[=DIR]”. Les utilisateurs de Windows doivent activer la bibliothèque “php_hyperwave.dll” dans le “php.ini” pour pouvoir utiliser ces fonctions. Vous pouvez télécharger ces bibliothèques DLL pour ces extensions PECL depuis la page de téléchargement de PHP sous sur la page http://snaps.php.net/. Intégration avec ApacheL’extension Hyperwave est utilisée de manière optimale lorsque PHP est compilé comme module Apache. Dans ce cas, le serveur Hyperwave sous-jacent peut être caché quasiment totalement aux utilisateurs, si Apache utilise son moteur d’écriture. Les explications suivantes vous éclaireront : Étant donné que PHP avec l’extension Hyperwave et Apache tend à remplacer la solution native basée sur Wavemaster, je vais supposer que le serveur Apache servira seulement d’interface Hyperwave. Ce n’est pas nécessaire, mais cela simplifie grandement la configuration. Le concept est très simple. Premièrement, vous avez besoin d’un script PHP qui évalue la variable “$_ENV[’PATH_INFO’]” et considère que cette valeur est un objet Hyperwave. Appelons ce script ‘Hyperwave’. L’URL http://votre.hote/Hyperwave/nom_objet retourne l’objet Hyperwave dont le nom est ‘nom_objet’. Le script doit alors réagir suivant le type de l’objet. Si c’est un groupe, il devra probablement retourner une liste de fils. Si c’est un document, il pourra retourner son type MIME et son contenu. Une amélioration peut être obtenue en utilisant le moteur de réécriture d’Apache. D’un point de vue utilisateur, il est plus direct si l’URL http://votre.hote/nom_objet retourne l’objet. La règle de réécriture est simple :
Maintenant, toutes les URL pointent sur un objet Hyperwave. Cela conduit à un problème simple. Il n’y a pas d’autre façon d’exécuter, c’est-à-dire rechercher, un autre script que ce script ‘Hyperwave’. Cela pourra être corrigé avec une autre règle telle que :
Le dossier “/usr/local/apache/htdocs/hw” sera ainsi réservé pour d’autres scripts et fichiers. Assurez-vous que cette règle est évaluée avant la première règle que nous avons défini. Il y a juste un léger inconvénient : tous les objets Hyperwave qui commencent par ‘hw/’ seront cachés. Alors, assurez-vous que vous n’utilisez pas de tels noms. Si vous avez besoin d’autres dossiers, par exemple, un dossier d’images, ajoutez simplement d’autres règles. N’oubliez pas de lancer le moteur de réécriture avec.
Mon expérience m’a montré que vous aurez besoin des scripts suivants :
Une alternative pour le moteur de réécriture est l’utilisation de la directive Apache “ErrorDocument”, mais sachez alors que “ErrorDocument” n’effectue pas les redirections de méthodes POST. Configuration à l'exécutionLe comportement de ces fonctions est affecté par la configuration dans le fichier “php.ini”. Tableau 1. Options de configuration
Pour plus de détails sur les constantes PHP_INI_*, reportez-vous à Annexe G. Types de ressourcesCette extension ne définit aucune ressource. Constantes pré-définiesCes constantes sont définies par cette extension, et ne sont disponibles que si cette extension a été compilée avec PHP, ou bien chargée au moment de l’exécution. “HW_ATTR_LANG” (entier) “HW_ATTR_NR” (entier) “HW_ATTR_NONE” (entier) À faireIl reste encore beaucoup à faire :
Table des matières hw_Array2Objrec – Convertit un tableau en un objethw_changeobject – Change les attributs d’un objet (obsolète) hw_Children – Liste des objets ids des objets filshw_ChildrenObj – Liste des objets records des objets filshw_Close – Ferme la connexion Hyperwavehw_Connect – Ouvre une connexion Hyperwavehw_connection_info – Affiche des informations sur la connexion au serveur Hyperwave hw_cp – Copie des objets HyperWavehw_Deleteobject – Efface des objetshw_DocByAnchor – Identifiant d’objet de l’objet dans l’ancragehw_DocByAnchorObj – Attributs de l’objet dans l’ancragehw_Document_Attributes – Object record de hw_documenthw_Document_BodyTag – Balise de corps d’un documenthw_Document_Content – Contenu d’un documenthw_Document_SetContent – Modifie/remplace le contenu d’un documenthw_Document_Size – Taille d’un documenthw_dummy – Fonction sans objet pour Hyperwave hw_EditText – Retourne un document textehw_Error – Retourne le code d’erreurhw_ErrorMsg – Retourne un message d’erreurhw_Free_Document – Détruit un documenthw_GetAnchors – Identifiants des ancrages d’un documenthw_GetAnchorsObj – Attributs des ancrages d’un documenthw_GetAndLock – Retourne les attributs et verrouille l’objethw_GetChildColl – Identifiant d’objets des groupes filshw_GetChildCollObj – Objet record d’un groupe d’enfantshw_GetChildDocColl – Identifiant des documents fils d’un groupehw_GetChildDocCollObj – Attributs des documents fils d’un groupehw_GetObject – Lit les attributs d’un objet Hyperwavehw_GetObjectByQuery – Recherche un objethw_GetObjectByQueryColl – Recherche un objet dans un groupehw_GetObjectByQueryCollObj – Recherche un objet dans un groupehw_GetObjectByQueryObj – Recherche un objethw_GetParents – Identifiant d’objet des parentshw_GetParentsObj – Attributs des parentshw_getrellink – Crée le lien depuis la source vers le destinataire, relativement à rootid hw_GetRemote – Retourne un document distanthw_getremotechildren – Retourne les fils d’un document distanthw_GetSrcByDestObj – Retourne les ancrages qui pointent sur un objethw_GetText – Retourne un document textehw_getusername – Nom de l’utilisateur actuellement identifiéhw_Identify – Identifie un utilisateurhw_InCollections – Vérifie qu’un identifiant d’objet est dans un groupe hw_Info – Informations à propos d’une connexionhw_InsColl – Insère un groupehw_InsDoc – Insère un documenthw_insertanchors – Insère uniquement des ancres dans du texte hw_InsertDocument – Insère un document dans un groupehw_InsertObject – Insère un objet recordhw_mapid – Représente un id global en un id virtuel localhw_Modifyobject – Modifie les attributs d’object recordhw_mv – Déplace un objethw_New_Document – Crée un nouveau documenthw_objrec2array – Convertit les attributs d’un objet en tableauhw_Output_Document – Affiche hw_documenthw_pConnect – Crée une connexion persistantehw_PipeDocument – Retourne un documenthw_Root – Objet id de la racinehw_setlinkroot – Configure l’identifiant vers lequel les liens sont calculés hw_stat – Retourne le statut de la chaîne hw_Unlock – Déverrouille un objethw_Who – Liste des utilisateurs actuellement identifiés Travail collaboratifContribuez, en ajjoutant des elements a cette page de manuel : Merci de votre aide |