Тегипостоянный
Разработчик(и) | Tx0 < [адрес электронной почты защищен] > |
---|---|
Стабильная версия | 0.6
|
Написано в | С |
Операционная система | Ядро Linux |
Доступно в | Английский |
Тип | Семантическая файловая система |
Лицензия | GNU GPL |
Веб-сайт | http://www.tagsistant.net/ |
Разработчик(и) | Тх0 |
---|
Tagsistant — семантическая файловая система для ядра Linux , написанная на C и основанная на FUSE . В отличие от традиционных файловых систем , которые используют иерархию каталогов для поиска объектов, Tagsistant вводит концепцию тегов .
Устройство и различия с иерархическими файловыми системами
[ редактировать ]В вычислительной технике файловая система — это тип хранилища данных, который можно использовать для хранения, извлечения и обновления файлов . Каждый файл может быть уникально расположен по своему пути . Чтобы получить доступ к файлу, пользователь должен заранее знать путь, и этот путь не обязательно включает в себя какую-либо информацию о содержимом файла.
Tagsistant использует дополнительный подход, основанный на тегах . Пользователь может создать набор тегов и применить эти теги к файлам, каталогам и другим объектам ( устройствам , каналам , ...). Затем пользователь может выполнить поиск по всем объектам, соответствующим подмножеству тегов, что называется запросом. Такой подход хорошо подходит для управления пользовательским контентом, например изображениями, аудиозаписями, фильмами и текстовыми документами, но несовместим с системными файлами (например, библиотеками, командами и конфигурациями), где однозначность пути является требованием безопасности для предотвращения доступа к неправильное содержание.
Каталог тегов/
[ редактировать ]Файловая система Tagsistant состоит из четырех основных каталогов:
- архив/
- отношения/
- статистика/
- теги/
Теги создаются как подкаталоги tags/
каталог и может использоваться в запросах, соответствующих этому синтаксису:
tags/subquery/[+/subquery/[+/subquery/]]/@/
[1]
где подзапрос представляет собой неограниченный список тегов, объединенных в каталоги:
tag1/tag2/tag3/.../tagN/
Часть пути, ограниченная tags/
и @/
это фактический запрос. +/
Оператор объединяет результаты разных подзапросов в один список. @/
оператор завершает запрос.
Возвращается в результате следующего запроса:
tags/t1/t2/+/t1/t4/@/
объект должен быть помечен как t1/
и t2/
или как оба t1/
и t4/
. Любой объект, помеченный как t2/
или t4/
, но не так, как t1/
не будет получено.
Синтаксис запроса намеренно нарушает семантику файловой системы POSIX , позволяя токену пути быть потомком самого себя, как в tags/t1/t2/+/t1/t4/@
где t1/
появляется дважды. Как следствие, рекурсивное сканирование файловой системы Tagsistant завершится с ошибкой или зациклится, как это происходит в UNIX. find
:
~/tagsistant_mountpoint$ find tags/
tags/
tags/document
tags/document/+
tags/document/+/document
tags/document/+/document/+
tags/document/+/document/+/document
tags/document/+/document/+/document/+
[...]
Этот недостаток компенсируется возможностью перечислять теги внутри запроса в любом порядке. Запрос tags/t1/t2/@/
полностью эквивалентен tags/t2/t1/@/
и tags/t1/+/t2/t3/@/
эквивалентно tags/t2/t3/+/t1/@/
.
The @/
Целью элемента является восстановление семантики POSIX: путь tags/t1/@/directory/
относится к традиционному каталогу, и рекурсивное сканирование этого пути будет выполнено правильно.
Рассуждающий и отношения/каталог
[ редактировать ]Tagsistant имеет простой механизм рассуждения , который расширяет результаты запроса, включая объекты, помеченные связанными тегами. Связь между двумя тегами может быть установлена внутри relations/
каталог по трехуровневому шаблону:
relations/tag1/rel/tag2/
The rel
элемент может быть включен или is_equiвалентен . Чтобы включить тег рок в тег музыки , используйте команду UNIX mkdir
можно использовать:
mkdir -p relations/music/includes/rock
Распознаватель может рекурсивно разрешать отношения, позволяя создавать сложные структуры:
mkdir -p relations/music/includes/rock
mkdir -p relations/rock/includes/hard_rock
mkdir -p relations/rock/includes/grunge
mkdir -p relations/rock/includes/heavy_metal
mkdir -p relations/heavy_metal/includes/speed_metal
Сеть отношений, созданная внутри relations/
Каталог представляет собой базовую форму онтологии .
Плагины автоматической пометки
[ редактировать ]Tagsistant имеет стек плагинов автоматической пометки , который вызывается при записи файла или символической ссылки. [2] Каждый плагин вызывается, если его объявленный тип MIME соответствует.
Список рабочих плагинов, выпущенных вместе с Tagsistant 0.6, ограничен:
- text/html: помечает файл каждым словом в
<title>
и<keywords>
элементы, а документ , веб-страница и HTML. также - image/jpeg: помечает файл каждым Exif. тегом
Репозиторий
[ редактировать ]Каждая файловая система Tagsistant имеет соответствующий репозиторий, содержащий archive/
каталог, в котором фактически сохраняются объекты, и tags.sql
файл, содержащий информацию о тегах, в виде базы данных SQLite . Если механизм базы данных MySQL был указан с помощью --db
аргумент, tags.sql
файл будет пуст. Другой файл с именем repository.ini
— это ini-хранилище GLib с конфигурацией репозитория. [3]
Tagsistant 0.6 совместим с диалектами SQL MySQL и Sqlite для обработки тегов и разрешения тегов. Хотя перенос его логики на другие диалекты SQL возможен, необходимо учитывать различия в базовых конструкциях (особенно в ключевом слове SQL INTERSECT).
Каталоги archive/ и stats/
[ редактировать ]The archive/
Каталог был введен для обеспечения быстрого доступа к объектам без использования тегов. Объекты перечислены с префиксом номера индексного дескриптора. [4]
The stats/
В каталоге есть несколько файлов, доступных только для чтения, содержащих статистику использования. Файл configuration
содержит как информацию о времени компиляции, так и текущую конфигурацию репозитория.
Основная критика
[ редактировать ]Было подчеркнуто, что использование внешней базы данных для хранения тегов и информации о тегах может привести к полной потере метаданных в случае повреждения базы данных. [5]
Было подчеркнуто, что использование плоского пространства имен имеет тенденцию переполнять пространство. tags/
каталог. [6] Это можно смягчить введением тройных тегов .