Показать сообщение отдельно
Старый 30.05.2012, 16:32   #84
Январь
Команда сайта
 
Аватар для Январь
 
Регистрация: 14.05.2009
Адрес: Москва
По умолчанию

Цитата:
Сообщение от aunique Посмотреть сообщение
Мы базу делаем под MySQL? Или как?
Январь правильно говорит, нужно определиться как мы будем брать данные из базы.
1. Это даст нам ответ на вопрос какая база нужна.
2. Рисуем базу, её таблицы, размерность, типы данных. Становится понятен формат данных и платформа для реализации.
3. Тогда форматируем fb2 под поставленные задачи.
4. Параллельно пишем запросы и обработку для заполнения базы.

Все согласны?
1. Определяем типы хранимых данных:

1.а - Структура книги
1.б - Содержательная часть
1.в - Смежные данные

Подробнее:

Структура книги - абсолютно все от регионального и муниципального деления государства, от политического устройства страны и до книги можно описать с помощью структуры. Соответственно если задумано обращаться к элементу по указателям вроде DW.3.12.45 - то хранилище должно быть структурированным. Но тут возникает вопрос - а что именно следует хранить и с какой степенью детализации? Очевидно, что первый индекс в примере (DW - Dead Water) должен быть указателем на книгу, вротой индекс на главу, третий на раздел, подраздел, секция, параграф и т.д. Таким образом приходит понимание одной вещи - одна и та же таблица для упрощения выборки при полнотекстовой индексации должна хранить как структуру, так и содержательную часть, как название глав, так и содержание глав. Но хранение данных по параграфам - это слишком емко, по этому очевидно, что при степени детализации "параграф" заводить под каждую отдельную единицу новую запись - себе дороже, значит нужен общий парсер, способный рассчитать нумерации параграфов (или блоков в целом - параграфов, инсетов, таблиц, формул) для каждой главы (объемлющего хранилища)...

Вот это - принципиальная и наиболее сложная вещь по контексту замысла.

Ну а смежные данные - тут просто - это рубрикатор, категории, каталог событий, даты, теги и пр. и пр. и пр.

Решение:

Каталог книг - это таблица NestedSets, кроме прочих данных содержащая спец пометку для каждой записи, поясняющую, чем эта запись является - элементом структуры (книга, глава, подраздел) или же блоком содержания (содержание главы, хранящее много параграфов).

Это главное, а дальше проще:

Если некто ищет скажем: DW.5.17.19.3 - то по первому индексу мы находим книгу, а зная головной (топовый) элемент таблицы мы от него можем получить полное дерево (структуры) этой книги. Далее также никаких особых геморроев нет - если мы знаем топовый элемент, то получаем элемент второго уровня с индексом 5, из его ветки получаем элемент третьего уровня с индексом 17, из его ветки получаем элемент с индексом 19 и т.д.

То есть - все просто.

Далее - допустим у нас элемент 4 уровня с индексом 19 является содержательной частью. Значит нам надо найти в ней параграф №3 - как это сделать??? Еще проще??? Загодя для забивания книг в базу мы использовали редактор TinyMCE - он возвращает валидный хтмл, но при сохранении мы парсили его в промежуточный формат - наш личный XML... Когда перед нами встала задача найти третий параграф, мы читыем этот XML разбощиком и просто тупо берем узел "PARAGRAPH" с индексом 3... При желании мы можем и слово в параграфе найти - то есть тут проблем вообще 0...

...

Ну а смежники... Есть книга, у нее уникальный индекс DW и к ней пришиты доп.данные - категория = Социология, теги = ДОТУ, Заговор, Хомяки, авторы = ВП СССР, Январь ну и пр.

...

Соответственно такой подход позволяет формировать цепочки с точностью детализации до знака - при этом структура книги, глубина вложенности глав, глубина блоков содержательной части (параграв, параграф, таблица, в ней ячейка, в ней параграф, и еще параграф, и еще ячейка и т.д.) - значения не имеют в принципе.

По вопросу сносок.

Я это вообще просто очень решил. Написал под TinyMCE плагин, добавляющий сноску. На место сноски он устанавливает спец.символ с номером сноски в рамках текущей объемлющей единицы структуры, а текст сноски записывает в реестр.

Уровень автоматизации получился таким: открываю книгу в MS Word, по оглавлению создаю ее структуру, потом кокипастом в узлы структуры заколачиваю текст, совершенно не заботясь о разметке, определение сносок, уничтожение вордовских спец.символов - все полный автомат...

... ... ... ... ...

Вот как-то так - по этому пути пошел я...
Январь вне форума   Ответить с цитированием