Manuel PHP

Précédent

 

Suivant

XIX. Fonctions Hyperwave

Introduction

Hyperwave a été developpé par IICM à Graz. Son nom original était Hyper-G et il a pris le nom de Hyperwave lors de sa commercialisation (en 1996, si mes souvenirs sont bons).

Hyperwave n'est pas gratuit. La version actuelle est la 4.1 , disponible à www.hyperwave.com. Une version limité à 30 jours peut être demandée.

Hyperwave 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 paire 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 suceptibles 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é 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 hyper liens contenus dans un documents sont enregistrés dans un autre enregistrement. Les hyperliens qui sont à l'intérieur d'un document en seront supprimé, et enregistrés dans des objets particuliers, au moment de l'insertion dans la base de données. L'enregistrement des hyper liens contiens les informations d'origine et d'objectif. Afin d'accèder au document original, vous devre lire le document sans les liens, puis lire les liens, et les réinsérer (les hw_pipedocument() ry 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 n'y paraît. L'insertion implique une certaine hiérarchie de document. Sur un serveur web, la hiérarchie est fournie par le système de fichier, 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 requière 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 en 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 de d'accès : soit la hiérarchie Hyperwave et le nom de l'objet sont inscrit 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écisoin, un deuxième problème surgit : Comment faire l'interface avec PHP ? L' URL http://hote/mon_objet n'appelera aucun script PHP à moins que vous ne demandiez à votre serveur web de le remplacer par autre chose, comme par exemple : '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 un 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 par exemple celles qui commencent par http://host/Hyperwave. Voici de manière simple, la manière de 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 fonctionne pas comme un module de serveur, ou un scrip 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 initie des actions, comme par exemple, lire l'entê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ère ce 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 nombreuse fonctions de programmations, 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éfini par HG-CSP mais fourni d'autres commandes puissantes, comme par exemple, 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 :

  • object ID: un entier, unique pour chaque objet sur le serveur Hyperwave. C'est aussi un des attributs de l'enregistrement de l'objet. (ObjectID).Les object ids sont souvent utilisées comme paramètre d'entrée pour spécifier un objet.
  • object record: Une chaîne contenant des paires clé=valeur. Les paires sont séparées par un retour à la ligne. Un enregistrement d'objet peut facilement être converti en tableau, avec la fonction hw_object2array().De nombreuses fonctions retournent un object records. Ces fonctions ont leur nom qui finit par obj.
  • object array: Un tableau associatif qui contient tous les attributs d'un objet. La clé est l'attribut. Si un attribut apparaît plusieurs fois, il sera représenté sous la forme d'un tableau associatif ou indexé. Les attributs qui dépendent des langues (comme title, keyword ou description) seront représenté sous la forme d'un tableau associatif, dont les clés seront les abréviations de langues. Tous les autres attributs à valeur multiple prendront la forme d'un tableau indexé.
  • hw_document: Ce type est un nouveau type de données, qui contient le document lui même, comme par exemple HTML, PDF etc. Il est optimisé pour les documents HTML mais peut s'utiliser avec n'importe quel format.

De nombreuses fonctions qui retourne un tableau d'enregistrements, retournent aussi un tableau associé, avec des informatiosn statistiques. Ce tableau est le dernier élément du tableau d'enregistrements. Les statistiques contiennent les entrées suivnates :

Hidden
Nombre d'objet dont l'attribut PresentationHints est Hidden.
CollectionHead
Nombre d'objet dont l'attribut PresentationHints est CollectionHead.
FullCollectionHead
Nombre d'objet 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.

Intégration avec Apache

L'extension Hyperwave est utilisée de manière optimale lorsqu 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'ecriture. Les explications suivantes vous éclaireront :

Etant donné que PHP avec l'extension Hyperwave et Apache tend à remplacer la solution native basé sur Wavemaster, je vais supposer que le serveur Apache servira seulement d'interface Hyperwave. Ce n'est pas nécessaire, mais cela simplifie grandment la configuration. Le concept est très simple. Premièrement, vous avez besoin d'un script PHP qui évalue la variable 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 alors 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 :

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

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:

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

Le dossier /usr/local/apache/htdocs/hw sera ainsi reservé 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éfinie. Il y a juste un léger inconvénient : tous les objets Hyperwave qui commencent par 'hw/' seront caché. Alors, assurez vous que vous n'utilisez pas de tels noms. Si vous avez besoin d'autres dossier, par exemple, un dossier d'image, ajoutez simplement d'autres règles. N'oubliez pas de lancer le moteur de réécriture avec

RewriteEngine on

Mon expériences m'a montré que vous aurez besoin des scripts suivants :

  • Retourne l'objet lui même
  • Rechercher
  • S'identifier
  • Choisir une configuraiton
  • Un script pour chaque fonction supplémentaire, comme afficher un objet, afficher des informations sur les utilisateurs, afficher le statut du serveur, etcÖ

A faire

Il reste encore beaucoup à faire

  • La fonction hw_InsertDocument doit être séparée en deux : hw_InsertObject() et hw_PutDocument().
  • Les noms de nombreuses fonctions ne sont pas encore fixés
  • La plupart des fonctions requièrent la connexion courante comme premier paramètre. Cela conduit à beaucoup de frappe clavier, même si il n'y a souvent qu'une seule connexion en jeu. Une connexion par défaut améliorerait ceci.

Table des matières
hw_Children _ Liste des identifiants d'objet des objets fils
hw_ChildrenObj _ Liste des attributs des objets fils
hw_Close _ Ferme la connexion Hyperwave
hw_Connect _ Ouvre une connexion Hyperwave
hw_Cp _ Copie des objets
hw_Deleteobject _ Efface des objets
hw_DocByAnchor _ Identifiant d'objet de l'objet dans l'ancrage
hw_DocByAnchorObj _ Attributs de l'objet dans l'ancrage
hw_DocumentAttributes _ Attributs d'un document
hw_DocumentBodyTag _ Balise de corps d'un document
hw_DocumentContent _ Contenu d'un document
hw_DocumentSetContent _ Modifie/remplace le contenu d'un document
hw_DocumentSize _ Taille d'un document
hw_ErrorMsg _ Retourne un message d'erreur
hw_EditText _ Retourne un document texte
hw_Error _ Retourne le code d'erreur
hw_Free_Document _ Détruit un document
hw_GetParents _ Identifiant d'objet des parents
hw_GetParentsObj _ Attributs des parents
hw_GetChildColl _ Identifiant d'objet des groupes fils
hw_GetChildCollObj _ Attributs des groupes fils
hw_GetRemote _ Retourne un document distant
hw_GetRemoteChildren _ Retourne les fils d'un document distant
hw_GetSrcByDestObj _ Retourne les ancrages qui pointent sur un objet
hw_GetObject _ Attributs d'un objet
hw_GetAndLock _ Retourne les attributs, et verrouille l'objet
hw_GetText _ Retourne un document texte
hw_GetObjectByQuery _ Recherche un objet
hw_GetObjectByQueryObj _ Recherche un objet
hw_GetObjectByQueryColl _ Recherche un objet dans un groupe
hw_GetObjectByQueryCollObj _ Recherche un objet dans un groupe
hw_GetChildDocColl _ Identifiants des documents fils d'un groupe
hw_GetChildDocCollObj _ Attributs des documents fils d'un groupe
hw_GetAnchors _ Identifiants des ancrages d'un document
hw_GetAnchorsObj _ Attributs des ancrages d'un document
hw_Mv _ Déplace un objet
hw_Identify _ Identifie un utilisateur
hw_InCollections _ Vérifie qu'un identifiant d'objet est dans un groupe
hw_Info _ Informations à propos d'une connexion
hw_InsColl _ Insère un groupe
hw_InsDoc _ Insère un document
hw_InsertDocument _ Insère un document dans un groupe
hw_InsertObject _ Insère un document dans le serveur
hw_Modifyobject _ Modifie les attributs d'objet record
hw_New_Document _ Crée un nouveau document
hw_Objrec2Array _ Converti les attributs d'un objet en tableau
hw_OutputDocument _ Affiche hw_document
hw_pConnect _ Crée une connexion persistante
hw_PipeDocument _ Retourne un document
hw_Root _Identifiant de la racine
hw_Unlock _ Déverrouille un objet
hw_Who _ Liste des utilisateurs actuellement identifiés
hw_Username _ Nom de l'utilisateur actuellement identifié

Précédent

Sommaire

Suivant

setcookie

Chapitre

hw_Children

Hébergé
par