| ||||||||||
XXXVIII. Функции HyperwaveВведениеHyperwave был разработан IICM в Graz. Он начинался как Hyper-G и сменил название на Hyperwave при коммерциализации (насколько помню, это было в 1996). Hyperwave это не бесплатная программа. Текущая версия, 5.5, доступна на www.hyperwave.com. Можно запросить оценочную версию с ограниченным временем использования (30 дней). Hyperwave это информационная система, аналогичная database (HIS, Hyperwave Information Server). Она сфокусирована на хранении и обслуживании
документов. Документом может быть любой блок данных, которые могут
сохраняться в файле. Каждый документ сопровождается записью объекта. Запись
объекта/object record содержит метаданные документа. Метаданные это список
атрибутов, который может быть расширен пользователем. Некоторые атрибуты всегда
устанавливаются Hyperwave-сервером, другие могут модифицироваться пользователем. Каждая запись объекта имеет строковое представление, где каждая пара name/value отделена символами новой строки. Расширение Hyperwave знает также второе представление, которое является ассоциативным массивом с именем атрибута в качестве ключа. Многоязычные значения атрибутов сами образуют другой ассоциативный массив с ключом - аббревиатурой языка. Фактически любой многоязычный атрибут образует ассоциативный массив со строкой, в качестве значения ключа, слева от двоеточия в значении атрибута. (Это ещё не полностью реализовано. Только Title, Description и Keyword атрибута считаются пока что его свойствами.) Помимо документов, все гиперссылки, содержащиеся в документе, также хранятся как записи объекта. Гиперссылки в документе будут удалены из него и сохранены в отдельных объектах, когда документ будет вставляться в БД. Запись объекта ссылки содержит информацию о том, где она стартует и где заканчивается. Чтобы получить оригинал документа, вам нужно будет запросить документ без ссылок и список ссылок и вновь вставить их в него (функции hw_pipedocument() и hw_gettext() сделают это для вас. Преимущества отделения ссылок от объектов очевидны. Если объект, на который указывает ссылка, изменяет своё имя, ссылка легко может быть модифицирована. Документ, содержащий ссылку, вообще не будет затронут. Вы можете даже добавить ссылку в документ без его изменения. Сказать, что hw_pipedocument() и
hw_gettext() автоматически делают вставку ссылки, было бы слишком просто. Вставка ссылок
предполагает определённую иерархию документов. На web-сервере это делается
файловой системой, но Hyperwave имеет свою собственную иерархию, и имена не
отражают позицию объекта в этой иерархии. Следовательно, создание ссылок
требует прежде всего отображения из иерархии и пространства имён Hyperwave в
соответствующее web-пространство имён web-иерархии. После принятия данного решения возникает вторая проблема. Как вызвать PHP? URL http://host/my_object не вызовет PHP-скрипт, если вы не сообщите вашему web-серверу, что нужно переписать URL на, к примеру, 'http://host/php3_script/my_object', и скрипт 'php3_script' вычислит переменную $PATH_INFO и запросит объект с именем 'my_object' с Hyperwave-сервер. Здесь есть только один недостаток, который можно легко устранить. Перезапись любого URL не позволит получить доступ к любым другим документам на web-сервере. PHP-скрипт для поиска на Hyperwave-сервере применить невозможно. Следовательно, вам понадобится как минимум второе правило перезаписи для исключения определённых URL вроде, к примеру, начинающихся с http://host/Hyperwave. Это будет разделением пространства имён между web и Hyperwave-сервером. Основываясь на вышеприведённом механизме, ссылки вставляются в документы. Это несколько усложняется, если PHP запущен не как серверный модуль или CGI-скрипт, а как отдельное приложение, например, для дампа содержимого Hyperwave-сервера на CD-ROM. В таком случае имеет смысл сохранить иерархию Hyperwave и отобразить её в файловую систему. Это конфликтует с именами объектов, если они отражают свою собственную иерархию (например, избрав имена, включающие '/'). Следовательно, '/' должен быть заменён другим символом, например, '_'. Сетевой протокол для соединения с Hyperwave-сервером называется HG-CSP (Hyper-G Client/Server Protocol). Он основан на сообщениях для инициации определённых действий, например, получения записи объекта. В ранних версиях Hyperwave Server предоставлялись два клиента (Harmony, Amadeus) для соединения с сервером. Они были убраны при коммерциализации Hyperwave. В качестве замены был предоставлен так называемый wavemaster. Это wavemaster является чем-то вроде конвертера протоколов из HTTP в HG-CSP. Идея состоит в том, чтобы делать всё администрирование БД и визуализацию документов через web-интерфейс. Wavemaster реализует набор заглушек/placeholders для определённых акций, чтобы специализировать интерфейс. Этот набор заглушек называется PLACE Language. В PLACE отсутствуют многие возможности реального языка программирования, и любое расширение его только расширяет список заглушек. Это привело к использованию JavaScript, IMO которого не делает жизнь легче. Добавление поддержки Hyperwave в PHP должно заполнить отсутствующий интерфейс специализации. Он реализует все сообщения, как определено HG-CSP, но предоставляет также и более мощные команды для, например, запрашивания полных документов. Hyperwave имеет свою собственную терминологию для именования определённых блоков информации. Она была широко использована и расширена. Почти все функции оперируют с данными одного из следующих типов.
Некоторые функции, возвращающие массив записей объекта, возвращают также ассоциативный массив со статистической информацией о нём. Этот массив является последним элементом массива записей объекта. Статистический массив содержит следующие вхождения:
Интеграция с ApacheРасширение Hyperwave лучше всего использовать, когда PHP скомпилирован как Apache-модуль. В этом случае Hyperwave-сервер может быть скрыт от пользователей почти полностью, если Apache использует свою машину перезаписи. Следующие инструкции разъясняют это. Поскольку PHP с поддержкой Hyperwave, встроенный в Apache, предполагается
заменить Hyperwave-решением на базе Wavemaster, я буду считать, что Apache-сервер будет работать только как Hyperwave
web-интерфейс. Это не обязательно, но упрощает конфигурацию. Правило перезаписи довольно лёгкое:
Теперь каждый URL имеет отношение к объекту на Hyperwave-сервере. Это облегчает решение проблемы. Нет иного способа выполнить скрипт, например, для поиска, кроме 'Hyperwave'-скрипта. Это можно решить с помощью другого правила перезаписи, наподобие следующего:
Это зарезервирует директорию /usr/local/apache/htdocs/hw для дополнительных скриптов и других файлов. Просто убедитесь, что это правило вычисляется до вышеприведённого. Здесь есть один маленький недостаток: все Hyperwave-объекты, чьи имена начинаются с 'hw/', будут затемнены. Итак, убедитесь, что вы не используете таких имён. Если вам нужны дополнительные директории, например, для изображений, просто добавьте ещё правила или поместите их все в одну директорию. Наконец, не забудьте включить машину перезаписи:
Мой личный опыт показывает, что вам необходимы следующие скрипты:
Todo/необходимо сделатьЕсть и ещё несколько вещей, которые необходимо сделать:
| ||||||||||
|