Atlas – DNS для alterator
Принцип работы
Вся навигация между документами осуществляется при помощи указания неких идентификаторов. Соответствие между идентификаторами и файлами документов осуществляет компонент Atlas.
Atlas – загружает карты соответствий и далее обрабатывает запросы на получение реального местоположения того или иного документа. Документ может формально находится как на той же машине с которой пришёл запрос, так и на удалённой.
Формат каждой карты предельно простой:
Связь может быть следующих типов:
- file – конечная точка путешествия, указывает на конкретный локальный файл
- view – перенаправление на другой идентификатор
- memory – конечная точка путешествия, данные содержатся в прямо в следующей строке.
По мере движения по карте параметры накапливаются – при очередном переходе добавляются параметры указанные в текущем узле.
Пример, пусть задана следующая карта:
При запросе /url1 мы получим ответ, что это файл “file1.scm” и параметры к нему – (param1 value1). При запросе /url2 мы получим ответ, что это файл “file1.scm” и параметры к нему – (param2 value2 param1 value1).
В карте может быть также использована инструкция include. Что означает – надо включить в данную карту содержимое другой карты. Допустимо указывать шаблон имени файла – в результате будут включены все файлы удовлетворяющие данному шаблону. Например:
Пути по умолчанию
Нет необходимости детально описывать путь к каждому файлу.
Если директивы file не было найдено, atlas пытается превратить переданный url в следующие варианты путей :
- /usr/share/alterator/ui/<url>.scm
- /usr/share/alterator/ui/url/index.scm
В случае если alterator находится в режиме разрешённых локальных путей (ключ -l командной строки), то дополнительно пробуются следующие пути:
- ui/<url>.scm
- ui/<url/index.scm
Первый доступный для чтения файл возвращается в качестве ответа.
Устройство
Atlas написан с использованием объектов?. Полный список конструкторов следующий:
- make-atlas – создаёт пустую «карту». Объект карты устроен следующим образом:
- При вызове происходит попытка поиска идентификатора. В случае успеха возвращается объект – конечный узел. Иначе – #f.
- add-file – создаёт расширённую карту с добавленным узлом типа file
- add-view – создаёт расширенную карту с добавленным узлом типа view
- add-memory – создаёт расширенную карту с добавленным узлом типа memory
- add-include – создаёт расширенную карту, пополненную картами из других файлов.
- get-maps – возвращает текущую таблицу соотвестствий
- join-maps – возвращает карту «скленную» с другой картой.
- all-matches – возращает список всех узлов подходящих под данное определение
- load-atlas – создаёт карту, заполненную значениями из указанного файла (не шаблона, а именно одного файла)
- make-file-item – создаёт конечный узел карты.
- При вызове возвращается конечный узел с расширенными параметрами.
- params-of – возвращает накопленные параметры.
- call-with-port – открывает порт на заданный файл и передаёт его некоторой процедуре. По-окончанию работы процедуры закрывает порт (фактически call-with-input-file)
- make-view-item – создаёт транзитный узел карты
- При вызове возращается следующий на пути узел с расширенными параметрами.
- make-memory-item – создаёт конечный узел карты.
- При вызове – возвращается точно-такой же конечный узел с заданными параметрами.
- params-of – возвращает накопленные параметры
- call-with-port – открывает порт на заданную строку и передаёт его некоторой процедуре. По-окончанию работы процедуры закрывает порт (фактически call-with-input-string).