Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
04138d36b1 | ||
|
|
3b1df81c41 |
No files matched your search
@@ -0,0 +1,9 @@
|
||||
FROM python:3.11-slim
|
||||
|
||||
# Устанавливаем только то, что нужно для разработки
|
||||
RUN pip install --no-cache-dir flask psycopg2-binary lxml
|
||||
|
||||
WORKDIR /workspace
|
||||
|
||||
# Контейнер будет жить, пока VS Code к нему подключён
|
||||
CMD ["sleep", "infinity"]
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "OPDS Library Dev",
|
||||
"build": {
|
||||
"dockerfile": "Dockerfile",
|
||||
"context": ".."
|
||||
},
|
||||
"workspaceFolder": "/workspace",
|
||||
"workspaceMount": "source=${localWorkspaceFolder},target=/workspace,type=bind,consistency=cached",
|
||||
"forwardPorts": [8085],
|
||||
"customizations": {
|
||||
"vscode": {
|
||||
"extensions": [
|
||||
"ms-python.python",
|
||||
"ms-python.vscode-pylance"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,150 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Модуль для работы с авторами"""
|
||||
from db_utils import get_cursor
|
||||
|
||||
|
||||
def get_authors_by_prefix(prefix=''):
|
||||
"""Возвращает авторов по префиксу фамилии"""
|
||||
conn, cur = get_cursor()
|
||||
|
||||
if prefix:
|
||||
cur.execute("""
|
||||
SELECT a.id, a.full_name, a.name_hash,
|
||||
COUNT(DISTINCT ba.book_id) as books_count
|
||||
FROM authors a
|
||||
LEFT JOIN book_authors ba ON ba.author_id = a.id
|
||||
WHERE a.last_name ILIKE %s
|
||||
GROUP BY a.id, a.full_name, a.name_hash
|
||||
ORDER BY a.last_name, a.first_name
|
||||
LIMIT 100
|
||||
""", (prefix + '%',))
|
||||
else:
|
||||
cur.execute("""
|
||||
SELECT DISTINCT lower(substring(last_name, 1, 1)) as letter,
|
||||
COUNT(*) as cnt
|
||||
FROM authors
|
||||
WHERE last_name ~ '^[а-яА-Яa-zA-Z]'
|
||||
GROUP BY lower(substring(last_name, 1, 1))
|
||||
ORDER BY letter
|
||||
""")
|
||||
|
||||
result = cur.fetchall()
|
||||
conn.close()
|
||||
return result
|
||||
|
||||
|
||||
def get_author_prefixes(prefix=''):
|
||||
"""Возвращает группировку по следующим буквам"""
|
||||
conn, cur = get_cursor()
|
||||
|
||||
next_len = len(prefix) + 1
|
||||
cur.execute("""
|
||||
SELECT DISTINCT
|
||||
substring(last_name, %s, 1) as next_letter,
|
||||
COUNT(*) as cnt,
|
||||
MIN(last_name) as first_author,
|
||||
MAX(last_name) as last_author
|
||||
FROM authors
|
||||
WHERE last_name ILIKE %s
|
||||
GROUP BY substring(last_name, %s, 1)
|
||||
ORDER BY next_letter
|
||||
""", (next_len, prefix + '%', next_len))
|
||||
|
||||
result = cur.fetchall()
|
||||
conn.close()
|
||||
return result
|
||||
|
||||
|
||||
def get_author_by_hash(author_hash):
|
||||
"""Возвращает автора по хешу"""
|
||||
conn, cur = get_cursor()
|
||||
|
||||
cur.execute("""
|
||||
SELECT id, full_name, last_name, first_name, middle_name, name_hash
|
||||
FROM authors
|
||||
WHERE name_hash = %s
|
||||
""", (author_hash,))
|
||||
|
||||
author = cur.fetchone()
|
||||
conn.close()
|
||||
return author
|
||||
|
||||
|
||||
def get_author_series(author_id):
|
||||
"""Возвращает серии автора"""
|
||||
conn, cur = get_cursor()
|
||||
|
||||
cur.execute("""
|
||||
SELECT DISTINCT s.id, s.name, s.name_hash,
|
||||
COUNT(DISTINCT b.id) as books_count
|
||||
FROM series s
|
||||
JOIN books b ON b.series_id = s.id
|
||||
JOIN book_authors ba ON ba.book_id = b.id
|
||||
WHERE ba.author_id = %s
|
||||
GROUP BY s.id, s.name, s.name_hash
|
||||
ORDER BY s.name
|
||||
""", (author_id,))
|
||||
|
||||
series = cur.fetchall()
|
||||
conn.close()
|
||||
return series
|
||||
|
||||
|
||||
def get_author_books(author_id):
|
||||
"""Возвращает книги автора (без серий)"""
|
||||
conn, cur = get_cursor()
|
||||
|
||||
# Простой запрос без string_agg
|
||||
cur.execute("""
|
||||
SELECT b.id, b.title, b.language, b.added_date, b.series_number,
|
||||
s.name as series_name, s.name_hash as series_hash
|
||||
FROM books b
|
||||
JOIN book_authors ba ON ba.book_id = b.id
|
||||
LEFT JOIN series s ON s.id = b.series_id
|
||||
WHERE ba.author_id = %s
|
||||
GROUP BY b.id, b.title, b.language, b.added_date, b.series_number,
|
||||
s.name, s.name_hash
|
||||
ORDER BY b.added_date DESC NULLS LAST
|
||||
""", (author_id,))
|
||||
|
||||
books = cur.fetchall()
|
||||
|
||||
# Для каждой книги получаем количество авторов и соавторов
|
||||
for book in books:
|
||||
cur.execute("""
|
||||
SELECT COUNT(*) as cnt
|
||||
FROM book_authors
|
||||
WHERE book_id = %s
|
||||
""", (book['id'],))
|
||||
book['authors_count'] = cur.fetchone()['cnt']
|
||||
|
||||
cur.execute("""
|
||||
SELECT string_agg(a.full_name, ', ' ORDER BY ba.position) as coauthors
|
||||
FROM book_authors ba
|
||||
JOIN authors a ON a.id = ba.author_id
|
||||
WHERE ba.book_id = %s
|
||||
""", (book['id'],))
|
||||
book['coauthors'] = cur.fetchone()['coauthors']
|
||||
|
||||
conn.close()
|
||||
return books
|
||||
|
||||
|
||||
def get_series_books(series_id):
|
||||
"""Возвращает все книги серии"""
|
||||
conn, cur = get_cursor()
|
||||
|
||||
cur.execute("""
|
||||
SELECT b.id, b.title, b.language, b.series_number,
|
||||
string_agg(DISTINCT a.full_name, ', ' ORDER BY ba.position) as authors
|
||||
FROM books b
|
||||
JOIN book_authors ba ON ba.book_id = b.id
|
||||
JOIN authors a ON a.id = ba.author_id
|
||||
WHERE b.series_id = %s
|
||||
GROUP BY b.id, b.title, b.language, b.series_number
|
||||
ORDER BY b.series_number
|
||||
""", (series_id,))
|
||||
|
||||
books = cur.fetchall()
|
||||
conn.close()
|
||||
return books
|
||||
@@ -0,0 +1,247 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Модуль для работы с книгами (извлечение из fb2, конвертация)"""
|
||||
import zipfile
|
||||
import os
|
||||
import base64
|
||||
import io
|
||||
from lxml import etree
|
||||
|
||||
BOOKS_PATH = os.environ.get(
|
||||
'BOOKS_PATH',
|
||||
'/mnt/hdd/share/Torrents/Downloaded/Libruks'
|
||||
)
|
||||
COVERS_PATH = os.environ.get('COVERS_PATH', '/mnt/hdd/opds/covers')
|
||||
|
||||
# Пространства имён fb2
|
||||
FB2_NS = 'http://www.gribuser.ru/xml/fictionbook/2.0'
|
||||
XLINK_NS = 'http://www.w3.org/1999/xlink'
|
||||
NS = {'fb': FB2_NS, 'xl': XLINK_NS}
|
||||
|
||||
# Кэш для распарсенных fb2 файлов (в памяти)
|
||||
_fb2_cache = {}
|
||||
|
||||
|
||||
def find_book_archive(internal_id):
|
||||
"""Находит архив с книгой по internal_id"""
|
||||
archives_dir = os.path.join(BOOKS_PATH, 'Архивы Либрусек')
|
||||
|
||||
if not os.path.exists(archives_dir):
|
||||
return None
|
||||
|
||||
for archive_name in sorted(os.listdir(archives_dir)):
|
||||
if not archive_name.endswith('.zip'):
|
||||
continue
|
||||
|
||||
try:
|
||||
parts = archive_name.replace('.zip', '').split('-')
|
||||
start_id = int(parts[1])
|
||||
end_id = int(parts[2])
|
||||
except:
|
||||
continue
|
||||
|
||||
if start_id <= internal_id <= end_id:
|
||||
return os.path.join(archives_dir, archive_name)
|
||||
|
||||
return None
|
||||
|
||||
|
||||
def get_book_fb2(internal_id):
|
||||
"""Извлекает fb2 данные из архива, обрабатывая вложенные zip"""
|
||||
archive_path = find_book_archive(internal_id)
|
||||
if not archive_path:
|
||||
return None
|
||||
|
||||
try:
|
||||
with zipfile.ZipFile(archive_path, 'r') as zf:
|
||||
for filename in zf.namelist():
|
||||
if str(internal_id) in filename:
|
||||
data = zf.read(filename)
|
||||
|
||||
# Проверяем, не zip ли это внутри
|
||||
if data[:4] == b'PK\x03\x04':
|
||||
inner_zip = zipfile.ZipFile(io.BytesIO(data))
|
||||
# Ищем fb2 внутри
|
||||
for inner_name in inner_zip.namelist():
|
||||
if inner_name.lower().endswith('.fb2'):
|
||||
return inner_zip.read(inner_name)
|
||||
# Если fb2 не найден, берём первый файл
|
||||
if inner_zip.namelist():
|
||||
return inner_zip.read(inner_zip.namelist()[0])
|
||||
|
||||
return data
|
||||
except:
|
||||
pass
|
||||
|
||||
return None
|
||||
|
||||
|
||||
def get_parsed_fb2(internal_id):
|
||||
"""Возвращает распарсенное fb2 дерево (с кэшированием)"""
|
||||
if internal_id in _fb2_cache:
|
||||
return _fb2_cache[internal_id]
|
||||
|
||||
fb2_data = get_book_fb2(internal_id)
|
||||
if not fb2_data:
|
||||
return None
|
||||
|
||||
try:
|
||||
parser = etree.XMLParser(recover=True)
|
||||
tree = etree.fromstring(fb2_data, parser)
|
||||
_fb2_cache[internal_id] = tree
|
||||
return tree
|
||||
except:
|
||||
return None
|
||||
|
||||
|
||||
def get_annotation(tree):
|
||||
"""Извлекает аннотацию из fb2"""
|
||||
if tree is None:
|
||||
return None
|
||||
|
||||
annotation = tree.find(f'.//{{{FB2_NS}}}annotation')
|
||||
if annotation is not None:
|
||||
texts = []
|
||||
for p in annotation.findall(f'.//{{{FB2_NS}}}p'):
|
||||
text = ''.join(p.itertext()).strip()
|
||||
if text:
|
||||
texts.append(text)
|
||||
|
||||
if texts:
|
||||
return '\n\n'.join(texts)
|
||||
|
||||
text = ''.join(annotation.itertext()).strip()
|
||||
if text:
|
||||
return text
|
||||
|
||||
return None
|
||||
|
||||
|
||||
def get_cover_image(tree):
|
||||
"""Извлекает обложку из fb2. Возвращает (data, mime_type) или (None, None)"""
|
||||
if tree is None:
|
||||
return None, None
|
||||
|
||||
coverpage = tree.find(f'.//{{{FB2_NS}}}coverpage')
|
||||
if coverpage is None:
|
||||
return None, None
|
||||
|
||||
image = coverpage.find(f'.//{{{FB2_NS}}}image')
|
||||
if image is None:
|
||||
return None, None
|
||||
|
||||
href = image.get(f'{{{XLINK_NS}}}href')
|
||||
if not href:
|
||||
return None, None
|
||||
|
||||
binary_id = href.lstrip('#')
|
||||
binary = tree.find(f".//{{{FB2_NS}}}binary[@id='{binary_id}']")
|
||||
if binary is None:
|
||||
return None, None
|
||||
|
||||
mime_type = binary.get('content-type', 'image/jpeg')
|
||||
data = binary.text
|
||||
|
||||
if not data:
|
||||
return None, None
|
||||
|
||||
try:
|
||||
return base64.b64decode(data), mime_type
|
||||
except:
|
||||
return None, None
|
||||
|
||||
|
||||
def get_cover_cached(internal_id):
|
||||
"""Возвращает обложку из кэша или извлекает из fb2 и кэширует"""
|
||||
os.makedirs(COVERS_PATH, exist_ok=True)
|
||||
|
||||
cover_path = os.path.join(COVERS_PATH, f"{internal_id}.jpg")
|
||||
|
||||
if os.path.exists(cover_path):
|
||||
with open(cover_path, 'rb') as f:
|
||||
return f.read(), 'image/jpeg'
|
||||
|
||||
tree = get_parsed_fb2(internal_id)
|
||||
if tree is None:
|
||||
return None, None
|
||||
|
||||
data, mime_type = get_cover_image(tree)
|
||||
if data is None:
|
||||
return None, None
|
||||
|
||||
try:
|
||||
with open(cover_path, 'wb') as f:
|
||||
f.write(data)
|
||||
except:
|
||||
pass
|
||||
|
||||
return data, mime_type
|
||||
|
||||
|
||||
def get_table_of_contents(tree):
|
||||
"""Извлекает оглавление из fb2"""
|
||||
if tree is None:
|
||||
return []
|
||||
|
||||
sections = []
|
||||
body = tree.find(f'.//{{{FB2_NS}}}body')
|
||||
|
||||
if body is not None:
|
||||
for i, section in enumerate(body.findall(f'.//{{{FB2_NS}}}section')):
|
||||
title_elem = section.find(f'{{{FB2_NS}}}title')
|
||||
if title_elem is not None:
|
||||
title = ''.join(title_elem.itertext()).strip()
|
||||
if title:
|
||||
sections.append({
|
||||
'index': i,
|
||||
'title': title
|
||||
})
|
||||
|
||||
return sections
|
||||
|
||||
|
||||
def get_section_html(tree, section_index):
|
||||
"""Конвертирует секцию fb2 в HTML"""
|
||||
if tree is None:
|
||||
return None
|
||||
|
||||
body = tree.find(f'.//{{{FB2_NS}}}body')
|
||||
if body is None:
|
||||
return None
|
||||
|
||||
sections = body.findall(f'.//{{{FB2_NS}}}section')
|
||||
if section_index >= len(sections):
|
||||
return None
|
||||
|
||||
section = sections[section_index]
|
||||
|
||||
html_parts = []
|
||||
|
||||
for elem in section.iter():
|
||||
tag = etree.QName(elem).localname
|
||||
|
||||
if tag == 'title':
|
||||
html_parts.append(f'<h2>{"".join(elem.itertext())}</h2>')
|
||||
elif tag == 'p':
|
||||
text = ''.join(elem.itertext()).strip()
|
||||
if text:
|
||||
html_parts.append(f'<p>{text}</p>')
|
||||
elif tag == 'image':
|
||||
href = elem.get(f'{{{XLINK_NS}}}href')
|
||||
if href:
|
||||
binary_id = href.lstrip('#')
|
||||
binary = tree.find(f".//{{{FB2_NS}}}binary[@id='{binary_id}']")
|
||||
if binary is not None:
|
||||
mime_type = binary.get('content-type', 'image/jpeg')
|
||||
data = binary.text
|
||||
if data:
|
||||
html_parts.append(
|
||||
f'<img src="data:{mime_type};base64,{data}" '
|
||||
f'style="max-width: 100%;"/>'
|
||||
)
|
||||
|
||||
return '\n'.join(html_parts)
|
||||
|
||||
|
||||
def clear_cache():
|
||||
"""Очищает кэш распарсенных fb2 файлов"""
|
||||
_fb2_cache.clear()
|
||||
@@ -0,0 +1,48 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Модуль для работы с базой данных"""
|
||||
import psycopg2
|
||||
import psycopg2.extras
|
||||
import os
|
||||
|
||||
DB_CONN = os.environ.get(
|
||||
'DB_CONN',
|
||||
'dbname=books user=postgres password=Karabas@Barabas host=172.20.0.4'
|
||||
)
|
||||
|
||||
|
||||
def get_db():
|
||||
"""Возвращает соединение с БД"""
|
||||
return psycopg2.connect(DB_CONN)
|
||||
|
||||
|
||||
def get_cursor():
|
||||
"""Возвращает соединение и курсор с RealDictCursor"""
|
||||
conn = get_db()
|
||||
cur = conn.cursor(cursor_factory=psycopg2.extras.RealDictCursor)
|
||||
return conn, cur
|
||||
|
||||
|
||||
def get_stats():
|
||||
"""Возвращает статистику библиотеки"""
|
||||
conn, cur = get_cursor()
|
||||
|
||||
cur.execute("SELECT COUNT(*) as cnt FROM books")
|
||||
books_count = cur.fetchone()['cnt']
|
||||
|
||||
cur.execute("SELECT COUNT(*) as cnt FROM authors")
|
||||
authors_count = cur.fetchone()['cnt']
|
||||
|
||||
cur.execute("SELECT COUNT(*) as cnt FROM series")
|
||||
series_count = cur.fetchone()['cnt']
|
||||
|
||||
cur.execute("SELECT COUNT(*) as cnt FROM genres")
|
||||
genres_count = cur.fetchone()['cnt']
|
||||
|
||||
conn.close()
|
||||
|
||||
return {
|
||||
'books': books_count,
|
||||
'authors': authors_count,
|
||||
'series': series_count,
|
||||
'genres': genres_count
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Модуль для работы с жанрами"""
|
||||
from db_utils import get_cursor
|
||||
|
||||
|
||||
def get_root_genres():
|
||||
"""Возвращает корневые жанры с количеством книг"""
|
||||
conn, cur = get_cursor()
|
||||
|
||||
cur.execute("""
|
||||
SELECT g.id, g.code, g.title_ru, g.title_en,
|
||||
COUNT(DISTINCT bg.book_id) as books_count
|
||||
FROM genres g
|
||||
LEFT JOIN book_genres bg ON bg.genre_id = g.id
|
||||
WHERE g.is_root = TRUE
|
||||
GROUP BY g.id, g.code, g.title_ru, g.title_en
|
||||
ORDER BY books_count DESC
|
||||
""")
|
||||
|
||||
genres = cur.fetchall()
|
||||
conn.close()
|
||||
return genres
|
||||
|
||||
|
||||
def get_subgenres(root_code):
|
||||
"""Возвращает поджанры для корневого жанра"""
|
||||
conn, cur = get_cursor()
|
||||
|
||||
cur.execute("""
|
||||
SELECT g.id, g.code, g.title_ru, g.title_en,
|
||||
COUNT(DISTINCT bg.book_id) as books_count
|
||||
FROM genres g
|
||||
LEFT JOIN book_genres bg ON bg.genre_id = g.id
|
||||
WHERE g.root_code = %s AND g.is_root = FALSE
|
||||
GROUP BY g.id, g.code, g.title_ru, g.title_en
|
||||
ORDER BY books_count DESC
|
||||
""", (root_code,))
|
||||
|
||||
genres = cur.fetchall()
|
||||
conn.close()
|
||||
return genres
|
||||
|
||||
|
||||
def get_genre_books(genre_id, limit=100, offset=0):
|
||||
"""Возвращает книги жанра"""
|
||||
conn, cur = get_cursor()
|
||||
|
||||
cur.execute("""
|
||||
SELECT b.id, b.title, b.language, b.added_date,
|
||||
string_agg(DISTINCT a.full_name, ', ' ORDER BY ba.position) as authors
|
||||
FROM books b
|
||||
JOIN book_genres bg ON bg.book_id = b.id
|
||||
JOIN book_authors ba ON ba.book_id = b.id
|
||||
JOIN authors a ON a.id = ba.author_id
|
||||
WHERE bg.genre_id = %s
|
||||
GROUP BY b.id, b.title, b.language, b.added_date
|
||||
ORDER BY b.added_date DESC NULLS LAST
|
||||
LIMIT %s OFFSET %s
|
||||
""", (genre_id, limit, offset))
|
||||
|
||||
books = cur.fetchall()
|
||||
conn.close()
|
||||
return books
|
||||
|
||||
|
||||
def get_custom_genres():
|
||||
"""Возвращает кастомные жанры (не из genres.xml)"""
|
||||
conn, cur = get_cursor()
|
||||
|
||||
cur.execute("""
|
||||
SELECT g.code, g.parent_code, g.root_code,
|
||||
COUNT(DISTINCT bg.book_id) as books_count
|
||||
FROM genres g
|
||||
LEFT JOIN book_genres bg ON bg.genre_id = g.id
|
||||
WHERE g.is_custom = TRUE
|
||||
GROUP BY g.code, g.parent_code, g.root_code
|
||||
ORDER BY books_count DESC
|
||||
""")
|
||||
|
||||
genres = cur.fetchall()
|
||||
conn.close()
|
||||
return genres
|
||||
+1324
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,68 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Модуль для работы с сериями"""
|
||||
from db_utils import get_cursor
|
||||
|
||||
|
||||
def get_series_by_letter(letter=''):
|
||||
"""Возвращает серии по первой букве"""
|
||||
conn, cur = get_cursor()
|
||||
|
||||
if letter:
|
||||
cur.execute("""
|
||||
SELECT s.id, s.name, s.name_hash,
|
||||
COUNT(DISTINCT b.id) as books_count
|
||||
FROM series s
|
||||
LEFT JOIN books b ON b.series_id = s.id
|
||||
WHERE s.name ILIKE %s
|
||||
GROUP BY s.id, s.name, s.name_hash
|
||||
ORDER BY s.name
|
||||
LIMIT 100
|
||||
""", (letter + '%',))
|
||||
else:
|
||||
cur.execute("""
|
||||
SELECT DISTINCT lower(substring(name, 1, 1)) as letter,
|
||||
COUNT(*) as cnt
|
||||
FROM series
|
||||
WHERE name ~ '^[а-яА-Яa-zA-Z]'
|
||||
GROUP BY lower(substring(name, 1, 1))
|
||||
ORDER BY letter
|
||||
""")
|
||||
|
||||
result = cur.fetchall()
|
||||
conn.close()
|
||||
return result
|
||||
|
||||
|
||||
def get_series_by_hash(series_hash):
|
||||
"""Возвращает серию по хешу"""
|
||||
conn, cur = get_cursor()
|
||||
|
||||
cur.execute("""
|
||||
SELECT id, name, name_hash
|
||||
FROM series
|
||||
WHERE name_hash = %s
|
||||
""", (series_hash,))
|
||||
|
||||
series = cur.fetchone()
|
||||
conn.close()
|
||||
return series
|
||||
|
||||
|
||||
def get_series_books(series_id):
|
||||
"""Возвращает все книги серии"""
|
||||
conn, cur = get_cursor()
|
||||
|
||||
cur.execute("""
|
||||
SELECT b.id, b.title, b.language, b.series_number,
|
||||
string_agg(DISTINCT a.full_name, ', ' ORDER BY ba.position) as authors
|
||||
FROM books b
|
||||
JOIN book_authors ba ON ba.book_id = b.id
|
||||
JOIN authors a ON a.id = ba.author_id
|
||||
WHERE b.series_id = %s
|
||||
GROUP BY b.id, b.title, b.language, b.series_number
|
||||
ORDER BY b.series_number NULLS LAST, b.title
|
||||
""", (series_id,))
|
||||
|
||||
books = cur.fetchall()
|
||||
conn.close()
|
||||
return books
|
||||
+933
@@ -0,0 +1,933 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<fbgenrestransfer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://alexs.ru/fb2/genrestable/GT.xsd">
|
||||
<genre value="sf">
|
||||
<root-descr lang="en" genre-title="SF, Fantasy" detailed="Alternate History, Cyberpunk, Fantasy, Science Fiction"/>
|
||||
<root-descr lang="ru" genre-title="Фантастика, Фэнтэзи" detailed="НФ, Фэнтези, Мистика, Киберпанк"/>
|
||||
<subgenres>
|
||||
<subgenre value="sf_history">
|
||||
<genre-descr lang="en" title="Alternative history"/>
|
||||
<genre-descr lang="ru" title="Альтернативная история"/>
|
||||
<genre-alt value="fantasy_alt_hist" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="sf_action">
|
||||
<genre-descr lang="en" title="Action SF"/>
|
||||
<genre-descr lang="ru" title="Боевая Фантастика"/>
|
||||
</subgenre>
|
||||
<subgenre value="sf_epic">
|
||||
<genre-descr lang="en" title="Epic SF"/>
|
||||
<genre-descr lang="ru" title="Эпическая Фантастика"/>
|
||||
</subgenre>
|
||||
<subgenre value="sf_heroic">
|
||||
<genre-descr lang="en" title="Heroic SF"/>
|
||||
<genre-descr lang="ru" title="Героическая фантастика"/>
|
||||
</subgenre>
|
||||
<subgenre value="sf_detective">
|
||||
<genre-descr lang="en" title="Detective SF"/>
|
||||
<genre-descr lang="ru" title="Детективная Фантастика"/>
|
||||
</subgenre>
|
||||
<subgenre value="sf_cyberpunk">
|
||||
<genre-descr lang="en" title="Cyberpunk"/>
|
||||
<genre-descr lang="ru" title="Киберпанк"/>
|
||||
<genre-alt value="sf_cyber_punk" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="sf_space">
|
||||
<genre-descr lang="en" title="Space SF"/>
|
||||
<genre-descr lang="ru" title="Космическая Фантастика"/>
|
||||
</subgenre>
|
||||
<subgenre value="sf_social">
|
||||
<genre-descr lang="en" title="Social SF"/>
|
||||
<genre-descr lang="ru" title="Социальная фантастика"/>
|
||||
</subgenre>
|
||||
<subgenre value="sf_horror">
|
||||
<genre-descr lang="en" title="Horror & Mystic"/>
|
||||
<genre-descr lang="ru" title="Ужасы и Мистика"/>
|
||||
<genre-alt value="gay_mystery" format="fb2.0"/>
|
||||
<genre-alt value="horror" format="fb2.0"/>
|
||||
<genre-alt value="horror_antology" format="fb2.0"/>
|
||||
<genre-alt value="horror_british" format="fb2.0"/>
|
||||
<genre-alt value="horror_fantasy" format="fb2.0"/>
|
||||
<genre-alt value="horror_erotic" format="fb2.0"/>
|
||||
<genre-alt value="horror_ghosts" format="fb2.0"/>
|
||||
<genre-alt value="horror_graphic" format="fb2.0"/>
|
||||
<genre-alt value="horror_occult" format="fb2.0"/>
|
||||
<genre-alt value="horror_ref" format="fb2.0"/>
|
||||
<genre-alt value="horror_usa" format="fb2.0"/>
|
||||
<genre-alt value="horror_vampires" format="fb2.0"/>
|
||||
<genre-alt value="teens_horror" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="sf_humor">
|
||||
<genre-descr lang="en" title="Humor SF"/>
|
||||
<genre-descr lang="ru" title="Юмористическая фантастика"/>
|
||||
</subgenre>
|
||||
<subgenre value="sf_fantasy">
|
||||
<genre-descr lang="en" title="Fantasy"/>
|
||||
<genre-descr lang="ru" title="Фэнтези"/>
|
||||
<genre-alt value="romance_fantasy" format="fb2.0"/>
|
||||
<genre-alt value="romance_sf" format="fb2.0"/>
|
||||
<genre-alt value="romance_time_travel" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="sf">
|
||||
<genre-descr lang="en" title="Science Fiction"/>
|
||||
<genre-descr lang="ru" title="Научная Фантастика"/>
|
||||
<genre-alt value="gaming" format="fb2.0"/>
|
||||
<genre-alt value="sf_writing" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="child_sf">
|
||||
<genre-descr lang="en" title="Science Fiction for Kids"/>
|
||||
<genre-descr lang="ru" title="Детская Фантастика"/>
|
||||
<genre-alt value="teens_sf" format="fb2.0"/>
|
||||
</subgenre>
|
||||
</subgenres>
|
||||
</genre>
|
||||
<genre value="detective">
|
||||
<root-descr lang="en" genre-title="Detectives, Thrillers" detailed="Police Stories, Ironical, Espionage, Crime"/>
|
||||
<root-descr lang="ru" genre-title="Детективы, Боевики" detailed="Полицейские, иронические, шпионские, криминальные"/>
|
||||
<subgenres>
|
||||
<subgenre value="det_classic">
|
||||
<genre-descr lang="en" title="Classical Detective"/>
|
||||
<genre-descr lang="ru" title="Классический Детектив"/>
|
||||
</subgenre>
|
||||
<subgenre value="det_police">
|
||||
<genre-descr lang="en" title="Police Stories"/>
|
||||
<genre-descr lang="ru" title="Полицейский Детектив"/>
|
||||
<genre-alt value="thriller_police" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="det_action">
|
||||
<genre-descr lang="en" title="Action"/>
|
||||
<genre-descr lang="ru" title="Боевики"/>
|
||||
</subgenre>
|
||||
<subgenre value="det_irony">
|
||||
<genre-descr lang="en" title="Ironical Detective"/>
|
||||
<genre-descr lang="ru" title="Иронический Детектив"/>
|
||||
</subgenre>
|
||||
<subgenre value="det_history">
|
||||
<genre-descr lang="en" title="Historical Detective"/>
|
||||
<genre-descr lang="ru" title="Исторический Детектив"/>
|
||||
</subgenre>
|
||||
<subgenre value="det_espionage">
|
||||
<genre-descr lang="en" title="Espionage Detective"/>
|
||||
<genre-descr lang="ru" title="Шпионский Детектив"/>
|
||||
</subgenre>
|
||||
<subgenre value="det_crime">
|
||||
<genre-descr lang="en" title="Crime Detective"/>
|
||||
<genre-descr lang="ru" title="Криминальный Детектив"/>
|
||||
</subgenre>
|
||||
<subgenre value="det_political">
|
||||
<genre-descr lang="en" title="Political Detective"/>
|
||||
<genre-descr lang="ru" title="Политический Детектив"/>
|
||||
</subgenre>
|
||||
<subgenre value="det_maniac">
|
||||
<genre-descr lang="en" title="Maniacs"/>
|
||||
<genre-descr lang="ru" title="Маньяки"/>
|
||||
</subgenre>
|
||||
<subgenre value="det_hard">
|
||||
<genre-descr lang="en" title="Hard-boiled Detective"/>
|
||||
<genre-descr lang="ru" title="Крутой Детектив"/>
|
||||
</subgenre>
|
||||
<subgenre value="thriller">
|
||||
<genre-descr lang="en" title="Thrillers"/>
|
||||
<genre-descr lang="ru" title="Триллеры"/>
|
||||
<genre-alt value="thriller_mystery" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="detective">
|
||||
<genre-descr lang="en" title="Detective"/>
|
||||
<genre-descr lang="ru" title="Детектив"/>
|
||||
<genre-alt value="mystery" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="sf_detective">
|
||||
<genre-descr lang="en" title="Detective SF"/>
|
||||
<genre-descr lang="ru" title="Детективная Фантастика"/>
|
||||
<genre-alt value="teens_mysteries" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="child_det">
|
||||
<genre-descr lang="en" title="Detectives & Thrillers"/>
|
||||
<genre-descr lang="ru" title="Детские Остросюжетные"/>
|
||||
</subgenre>
|
||||
<subgenre value="love_detective">
|
||||
<genre-descr lang="en" title="Detective Romance"/>
|
||||
<genre-descr lang="ru" title="Остросюжетные Любовные Романы"/>
|
||||
</subgenre>
|
||||
</subgenres>
|
||||
</genre>
|
||||
<genre value="prose">
|
||||
<root-descr lang="en" genre-title="Prose" detailed="Classical, History, Contemporary"/>
|
||||
<root-descr lang="ru" genre-title="Проза" detailed="Классика, историческая, современная"/>
|
||||
<subgenres>
|
||||
<subgenre value="prose_classic">
|
||||
<genre-descr lang="en" title="Classics Prose"/>
|
||||
<genre-descr lang="ru" title="Классическая Проза"/>
|
||||
<genre-alt value="literature" format="fb2.0"/>
|
||||
<genre-alt value="literature_books" format="fb2.0"/>
|
||||
<genre-alt value="literature_british" format="fb2.0"/>
|
||||
<genre-alt value="literature_classics" format="fb2.0"/>
|
||||
<genre-alt value="literature_drama" format="fb2.0"/>
|
||||
<genre-alt value="literature_essay" format="fb2.0"/>
|
||||
<genre-alt value="literature_antology" format="fb2.0"/>
|
||||
<genre-alt value="literature_saga" format="fb2.0"/>
|
||||
<genre-alt value="literature_short" format="fb2.0"/>
|
||||
<genre-alt value="literature_usa" format="fb2.0"/>
|
||||
<genre-alt value="literature_world" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="prose_history">
|
||||
<genre-descr lang="en" title="Historical Prose"/>
|
||||
<genre-descr lang="ru" title="Историческая Проза"/>
|
||||
<genre-alt value="literature_history" format="fb2.0"/>
|
||||
<genre-alt value="literature_critic" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="prose_contemporary">
|
||||
<genre-descr lang="en" title="Contemporary Prose"/>
|
||||
<genre-descr lang="ru" title="Современная Проза"/>
|
||||
<genre-alt value="literature_political" format="fb2.0"/>
|
||||
<genre-alt value="literature_war" format="fb2.0"/>
|
||||
<genre-alt value="ref_writing" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="prose_counter">
|
||||
<genre-descr lang="en" title="Counterculture"/>
|
||||
<genre-descr lang="ru" title="Контркультура"/>
|
||||
<genre-alt value="literature_gay" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="prose_rus_classsic">
|
||||
<genre-descr lang="en" title="Russian Classics"/>
|
||||
<genre-descr lang="ru" title="Русская Классика"/>
|
||||
<genre-alt value="literature_rus_classsic" format="fb2.0"/>
|
||||
<genre-alt value="prose_rus_classic" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="prose_su_classics">
|
||||
<genre-descr lang="en" title="Soviet Classics"/>
|
||||
<genre-descr lang="ru" title="Советская Классика"/>
|
||||
<genre-alt value="literature_su_classics" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="humor_prose">
|
||||
<genre-descr lang="en" title="Humor Prose"/>
|
||||
<genre-descr lang="ru" title="Юмористическая Проза"/>
|
||||
</subgenre>
|
||||
<subgenre value="child_prose">
|
||||
<genre-descr lang="en" title="Prose"/>
|
||||
<genre-descr lang="ru" title="Детская Проза"/>
|
||||
<genre-alt value="teens_literature" format="fb2.0"/>
|
||||
</subgenre>
|
||||
</subgenres>
|
||||
</genre>
|
||||
<genre value="love">
|
||||
<root-descr lang="en" genre-title="Romance" detailed="Historical, Contemporary, Detective"/>
|
||||
<root-descr lang="ru" genre-title="Любовные романы" detailed="Исторические, современные, остросюжетные"/>
|
||||
<subgenres>
|
||||
<subgenre value="love_contemporary">
|
||||
<genre-descr lang="en" title="Contemporary Romance"/>
|
||||
<genre-descr lang="ru" title="Современные Любовные Романы"/>
|
||||
<genre-alt value="romance" format="fb2.0"/>
|
||||
<genre-alt value="romance_multicultural" format="fb2.0"/>
|
||||
<genre-alt value="romance_series" format="fb2.0"/>
|
||||
<genre-alt value="romance_anthologies" format="fb2.0"/>
|
||||
<genre-alt value="romance_contemporary" format="fb2.0"/>
|
||||
<genre-alt value="literature_women" format="fb2.0"/>
|
||||
<genre-alt value="romance_romantic_suspense" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="love_history">
|
||||
<genre-descr lang="en" title="Historical Romance"/>
|
||||
<genre-descr lang="ru" title="Исторические Любовные Романы"/>
|
||||
<genre-alt value="romance_regency" format="fb2.0"/>
|
||||
<genre-alt value="romance_historical" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="love_detective">
|
||||
<genre-descr lang="en" title="Detective Romance"/>
|
||||
<genre-descr lang="ru" title="Остросюжетные Любовные Романы"/>
|
||||
</subgenre>
|
||||
<subgenre value="love_short">
|
||||
<genre-descr lang="en" title="Short Romance"/>
|
||||
<genre-descr lang="ru" title="Короткие Любовные Романы"/>
|
||||
</subgenre>
|
||||
<subgenre value="love_erotica">
|
||||
<genre-descr lang="en" title="Erotica"/>
|
||||
<genre-descr lang="ru" title="Эротика"/>
|
||||
<genre-alt value="literature_erotica" format="fb2.0"/>
|
||||
</subgenre>
|
||||
</subgenres>
|
||||
</genre>
|
||||
<genre value="adventure">
|
||||
<root-descr lang="en" genre-title="Adventure" detailed="Western, Historical, Sea"/>
|
||||
<root-descr lang="ru" genre-title="Приключения" detailed="Вестерны, исторические, морские"/>
|
||||
<subgenres>
|
||||
<subgenre value="adv_western">
|
||||
<genre-descr lang="en" title="Western"/>
|
||||
<genre-descr lang="ru" title="Вестерны"/>
|
||||
<genre-alt value="literature_western" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="adv_history">
|
||||
<genre-descr lang="en" title="History"/>
|
||||
<genre-descr lang="ru" title="Исторические Приключения"/>
|
||||
</subgenre>
|
||||
<subgenre value="adv_indian">
|
||||
<genre-descr lang="en" title="Indians"/>
|
||||
<genre-descr lang="ru" title="Приключения: Индейцы"/>
|
||||
</subgenre>
|
||||
<subgenre value="adv_maritime">
|
||||
<genre-descr lang="en" title="Maritime Fiction"/>
|
||||
<genre-descr lang="ru" title="Морские Приключения"/>
|
||||
<genre-alt value="literature_sea" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="adv_geo">
|
||||
<genre-descr lang="en" title="Travel & Geography"/>
|
||||
<genre-descr lang="ru" title="Путешествия и География"/>
|
||||
<genre-alt value="gay_travel" format="fb2.0"/>
|
||||
<genre-alt value="outdoors_travel" format="fb2.0"/>
|
||||
<genre-alt value="travel" format="fb2.0"/>
|
||||
<genre-alt value="travel_africa" format="fb2.0"/>
|
||||
<genre-alt value="travel_asia" format="fb2.0"/>
|
||||
<genre-alt value="travel_australia" format="fb2.0"/>
|
||||
<genre-alt value="travel_canada" format="fb2.0"/>
|
||||
<genre-alt value="travel_caribbean" format="fb2.0"/>
|
||||
<genre-alt value="travel_europe" format="fb2.0"/>
|
||||
<genre-alt value="travel_guidebook_series" format="fb2.0"/>
|
||||
<genre-alt value="travel_lat_am" format="fb2.0"/>
|
||||
<genre-alt value="travel_middle_east" format="fb2.0"/>
|
||||
<genre-alt value="travel_polar" format="fb2.0"/>
|
||||
<genre-alt value="travel_spec" format="fb2.0"/>
|
||||
<genre-alt value="travel_usa" format="fb2.0"/>
|
||||
<genre-alt value="travel_rus" format="fb2.0"/>
|
||||
<genre-alt value="travel_ex_ussr" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="adv_animal">
|
||||
<genre-descr lang="en" title="Nature & Animals"/>
|
||||
<genre-descr lang="ru" title="Природа и Животные"/>
|
||||
<genre-alt value="child_animals" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="adventure">
|
||||
<genre-descr lang="en" title="Misk Adventures"/>
|
||||
<genre-descr lang="ru" title="Приключения: Прочее"/>
|
||||
<genre-alt value="literature_adv" format="fb2.0"/>
|
||||
<genre-alt value="literature_men_advent" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="child_adv">
|
||||
<genre-descr lang="en" title="Adventures for Kids"/>
|
||||
<genre-descr lang="ru" title="Детские Приключения"/>
|
||||
</subgenre>
|
||||
</subgenres>
|
||||
</genre>
|
||||
<genre value="children">
|
||||
<root-descr lang="en" genre-title="Children's" detailed="Fairy Tales, Fantasy, Detectives..."/>
|
||||
<root-descr lang="ru" genre-title="Детское" detailed="Сказки, фантастика, детективы..."/>
|
||||
<subgenres>
|
||||
<subgenre value="child_tale">
|
||||
<genre-descr lang="en" title="Fairy Tales"/>
|
||||
<genre-descr lang="ru" title="Сказки"/>
|
||||
<genre-alt value="child_3" format="fb2.0"/>
|
||||
<genre-alt value="literature_fairy" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="child_verse">
|
||||
<genre-descr lang="en" title="Verses"/>
|
||||
<genre-descr lang="ru" title="Детские Стихи"/>
|
||||
</subgenre>
|
||||
<subgenre value="child_prose">
|
||||
<genre-descr lang="en" title="Prose for Kids"/>
|
||||
<genre-descr lang="ru" title="Детская Проза"/>
|
||||
<genre-alt value="child_4" format="fb2.0"/>
|
||||
<genre-alt value="child_9" format="fb2.0"/>
|
||||
<genre-alt value="child_history" format="fb2.0"/>
|
||||
<genre-alt value="child_characters" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="child_sf">
|
||||
<genre-descr lang="en" title="Science Fiction for Kids"/>
|
||||
<genre-descr lang="ru" title="Детская Фантастика"/>
|
||||
</subgenre>
|
||||
<subgenre value="child_det">
|
||||
<genre-descr lang="en" title="Detectives & Thrillers"/>
|
||||
<genre-descr lang="ru" title="Детские Остросюжетные"/>
|
||||
</subgenre>
|
||||
<subgenre value="child_adv">
|
||||
<genre-descr lang="en" title="Adventures for Kids"/>
|
||||
<genre-descr lang="ru" title="Детские Приключения"/>
|
||||
<genre-alt value="teens_history" format="fb2.0"/>
|
||||
<genre-alt value="teens_series" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="child_education">
|
||||
<genre-descr lang="en" title="Education for Kids"/>
|
||||
<genre-descr lang="ru" title="Детская Образовательная литература"/>
|
||||
<genre-alt value="child_edu" format="fb2.0"/>
|
||||
<genre-alt value="child_nature" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="children">
|
||||
<genre-descr lang="en" title="For Kids: Misk"/>
|
||||
<genre-descr lang="ru" title="Детское: Прочее"/>
|
||||
<genre-alt value="child_art" format="fb2.0"/>
|
||||
<genre-alt value="child_obsessions" format="fb2.0"/>
|
||||
<genre-alt value="child_people" format="fb2.0"/>
|
||||
<genre-alt value="child_ref" format="fb2.0"/>
|
||||
<genre-alt value="child_series" format="fb2.0"/>
|
||||
<genre-alt value="child_sports" format="fb2.0"/>
|
||||
</subgenre>
|
||||
</subgenres>
|
||||
</genre>
|
||||
<genre value="poetry">
|
||||
<root-descr lang="en" genre-title="Poetry, Dramaturgy" detailed="Poetry, Dramaturgy"/>
|
||||
<root-descr lang="ru" genre-title="Поэзия, Драматургия" detailed="Поэзия, драматургия"/>
|
||||
<subgenres>
|
||||
<subgenre value="poetry">
|
||||
<genre-descr lang="en" title="Poetry"/>
|
||||
<genre-descr lang="ru" title="Поэзия"/>
|
||||
<genre-alt value="literature_poetry" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="dramaturgy">
|
||||
<genre-descr lang="en" title="Dramaturgy"/>
|
||||
<genre-descr lang="ru" title="Драматургия"/>
|
||||
<genre-alt value="performance" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="humor_verse">
|
||||
<genre-descr lang="en" title="Humor Verses"/>
|
||||
<genre-descr lang="ru" title="Юмористические Стихи"/>
|
||||
</subgenre>
|
||||
<subgenre value="child_verse">
|
||||
<genre-descr lang="en" title="Verses"/>
|
||||
<genre-descr lang="ru" title="Детские Стихи"/>
|
||||
</subgenre>
|
||||
</subgenres>
|
||||
</genre>
|
||||
<genre value="antique">
|
||||
<root-descr lang="en" genre-title="Antique" detailed="Antique literature, Myths, Legends"/>
|
||||
<root-descr lang="ru" genre-title="Старинное" detailed="Античная литература, мифы, легенды"/>
|
||||
<subgenres>
|
||||
<subgenre value="antique_ant">
|
||||
<genre-descr lang="en" title="Antique Literature"/>
|
||||
<genre-descr lang="ru" title="Античная Литература"/>
|
||||
</subgenre>
|
||||
<subgenre value="antique_european">
|
||||
<genre-descr lang="en" title="European Literature"/>
|
||||
<genre-descr lang="ru" title="Европейская Старинная Литература"/>
|
||||
</subgenre>
|
||||
<subgenre value="antique_russian">
|
||||
<genre-descr lang="en" title="Antique Russian Literature"/>
|
||||
<genre-descr lang="ru" title="Древнерусская Литература"/>
|
||||
</subgenre>
|
||||
<subgenre value="antique_east">
|
||||
<genre-descr lang="en" title="Antique East Literature"/>
|
||||
<genre-descr lang="ru" title="Древневосточная Литература"/>
|
||||
</subgenre>
|
||||
<subgenre value="antique_myths">
|
||||
<genre-descr lang="en" title="Myths. Legends. Epos"/>
|
||||
<genre-descr lang="ru" title="Мифы. Легенды. Эпос"/>
|
||||
<genre-alt value="nonfiction_folklor" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="antique">
|
||||
<genre-descr lang="en" title="Other Antique"/>
|
||||
<genre-descr lang="ru" title="Старинная Литература: Прочее"/>
|
||||
</subgenre>
|
||||
</subgenres>
|
||||
</genre>
|
||||
<genre value="science">
|
||||
<root-descr lang="en" genre-title="Science, Education" detailed="Physics, Philosophy, Psychology, Business literature"/>
|
||||
<root-descr lang="ru" genre-title="Наука, Образование" detailed="Физика, философия, психология, деловая литература"/>
|
||||
<subgenres>
|
||||
<subgenre value="sci_history">
|
||||
<genre-descr lang="en" title="History"/>
|
||||
<genre-descr lang="ru" title="История"/>
|
||||
<genre-alt value="history_africa" format="fb2.0"/>
|
||||
<genre-alt value="history_america" format="fb2.0"/>
|
||||
<genre-alt value="history_ancient" format="fb2.0"/>
|
||||
<genre-alt value="history_asia" format="fb2.0"/>
|
||||
<genre-alt value="history_australia" format="fb2.0"/>
|
||||
<genre-alt value="history_europe" format="fb2.0"/>
|
||||
<genre-alt value="history_study" format="fb2.0"/>
|
||||
<genre-alt value="history_jewish" format="fb2.0"/>
|
||||
<genre-alt value="history_middle_east" format="fb2.0"/>
|
||||
<genre-alt value="histor_military" format="fb2.0"/>
|
||||
<genre-alt value="history_military_science" format="fb2.0"/>
|
||||
<genre-alt value="history_russia" format="fb2.0"/>
|
||||
<genre-alt value="history_usa" format="fb2.0"/>
|
||||
<genre-alt value="history_world" format="fb2.0"/>
|
||||
<genre-alt value="nonfiction_antropology" format="fb2.0"/>
|
||||
<genre-alt value="science_archaeology" format="fb2.0"/>
|
||||
<genre-alt value="ref_genealogy" format="fb2.0"/>
|
||||
<genre-alt value="science_history_philosophy" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="sci_psychology">
|
||||
<genre-descr lang="en" title="Psychology"/>
|
||||
<genre-descr lang="ru" title="Психология"/>
|
||||
<genre-alt value="health_mental" format="fb2.0"/>
|
||||
<genre-alt value="health_psy" format="fb2.0"/>
|
||||
<genre-alt value="science_behavioral_sciences" format="fb2.0"/>
|
||||
<genre-alt value="science_psy" format="fb2.0"/>
|
||||
<genre-alt value="teens_social" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="sci_culture">
|
||||
<genre-descr lang="en" title="Cultural Science"/>
|
||||
<genre-descr lang="ru" title="Культурология"/>
|
||||
</subgenre>
|
||||
<subgenre value="sci_religion">
|
||||
<genre-descr lang="en" title="Religious Studies"/>
|
||||
<genre-descr lang="ru" title="Религиоведение"/>
|
||||
</subgenre>
|
||||
<subgenre value="sci_philosophy">
|
||||
<genre-descr lang="en" title="Philosophy"/>
|
||||
<genre-descr lang="ru" title="Философия"/>
|
||||
<genre-alt value="nonfiction_philosophy" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="sci_politics">
|
||||
<genre-descr lang="en" title="Politics"/>
|
||||
<genre-descr lang="ru" title="Политика"/>
|
||||
</subgenre>
|
||||
<subgenre value="sci_business">
|
||||
<genre-descr lang="en" title="Business literature"/>
|
||||
<genre-descr lang="ru" title="Деловая литература"/>
|
||||
<genre-alt value="biz_accounting" format="fb2.0"/>
|
||||
<genre-alt value="biz_life" format="fb2.0"/>
|
||||
<genre-alt value="biz_careers" format="fb2.0"/>
|
||||
<genre-alt value="biz_economics" format="fb2.0"/>
|
||||
<genre-alt value="biz_finance" format="fb2.0"/>
|
||||
<genre-alt value="biz_international" format="fb2.0"/>
|
||||
<genre-alt value="biz_professions" format="fb2.0"/>
|
||||
<genre-alt value="biz_investing" format="fb2.0"/>
|
||||
<genre-alt value="biz_management" format="fb2.0"/>
|
||||
<genre-alt value="biz_sales" format="fb2.0"/>
|
||||
<genre-alt value="biz_personal_fin" format="fb2.0"/>
|
||||
<genre-alt value="biz_ref" format="fb2.0"/>
|
||||
<genre-alt value="biz_small_biz" format="fb2.0"/>
|
||||
<genre-alt value="professional_finance" format="fb2.0"/>
|
||||
<genre-alt value="professional_management" format="fb2.0"/>
|
||||
<genre-alt value="ref_edu" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="sci_juris">
|
||||
<genre-descr lang="en" title="Jurisprudence"/>
|
||||
<genre-descr lang="ru" title="Юриспруденция"/>
|
||||
<genre-alt value="nonfiction_law" format="fb2.0"/>
|
||||
<genre-alt value="professional_law" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="sci_linguistic">
|
||||
<genre-descr lang="en" title="Linguistics"/>
|
||||
<genre-descr lang="ru" title="Языкознание"/>
|
||||
</subgenre>
|
||||
<subgenre value="sci_medicine">
|
||||
<genre-descr lang="en" title="Medicine"/>
|
||||
<genre-descr lang="ru" title="Медицина"/>
|
||||
<genre-alt value="health_aging" format="fb2.0"/>
|
||||
<genre-alt value="health_alt_medicine" format="fb2.0"/>
|
||||
<genre-alt value="health_cancer" format="fb2.0"/>
|
||||
<genre-alt value="professional_medical" format="fb2.0"/>
|
||||
<genre-alt value="science_medicine" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="sci_phys">
|
||||
<genre-descr lang="en" title="Physics"/>
|
||||
<genre-descr lang="ru" title="Физика"/>
|
||||
<genre-alt value="science_physics" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="sci_math">
|
||||
<genre-descr lang="en" title="Mathematics"/>
|
||||
<genre-descr lang="ru" title="Математика"/>
|
||||
<genre-alt value="science_math" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="sci_chem">
|
||||
<genre-descr lang="en" title="Chemistry"/>
|
||||
<genre-descr lang="ru" title="Химия"/>
|
||||
<genre-alt value="science_chemistry" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="sci_biology">
|
||||
<genre-descr lang="en" title="Biology"/>
|
||||
<genre-descr lang="ru" title="Биология"/>
|
||||
<genre-alt value="outdoors_birdwatching" format="fb2.0"/>
|
||||
<genre-alt value="outdoors_ecology" format="fb2.0"/>
|
||||
<genre-alt value="outdoors_ecosystems" format="fb2.0"/>
|
||||
<genre-alt value="outdoors_env" format="fb2.0"/>
|
||||
<genre-alt value="outdoors_fauna" format="fb2.0"/>
|
||||
<genre-alt value="outdoors_flora" format="fb2.0"/>
|
||||
<genre-alt value="outdoors_nature_writing" format="fb2.0"/>
|
||||
<genre-alt value="outdoors_ref" format="fb2.0"/>
|
||||
<genre-alt value="science_biolog" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="sci_tech">
|
||||
<genre-descr lang="en" title="Technical"/>
|
||||
<genre-descr lang="ru" title="Технические"/>
|
||||
<genre-alt value="professional_enginering" format="fb2.0"/>
|
||||
<genre-alt value="professional_sci" format="fb2.0"/>
|
||||
<genre-alt value="science_technology" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="science">
|
||||
<genre-descr lang="en" title="Misk Science, Education"/>
|
||||
<genre-descr lang="ru" title="Научно-образовательная: Прочее"/>
|
||||
<genre-alt value="nonfiction_edu" format="fb2.0"/>
|
||||
<genre-alt value="nonfiction_gov" format="fb2.0"/>
|
||||
<genre-alt value="nonfiction_holidays" format="fb2.0"/>
|
||||
<genre-alt value="nonfiction_social_sci" format="fb2.0"/>
|
||||
<genre-alt value="nonfiction_ethnology" format="fb2.0"/>
|
||||
<genre-alt value="nonfiction_gender" format="fb2.0"/>
|
||||
<genre-alt value="nonfiction_gerontology" format="fb2.0"/>
|
||||
<genre-alt value="nonfiction_hum_geogr" format="fb2.0"/>
|
||||
<genre-alt value="nonfiction_methodology" format="fb2.0"/>
|
||||
<genre-alt value="nonfiction_research" format="fb2.0"/>
|
||||
<genre-alt value="nonfiction_social_work" format="fb2.0"/>
|
||||
<genre-alt value="nonfiction_sociology" format="fb2.0"/>
|
||||
<genre-alt value="nonfiction_spec_group" format="fb2.0"/>
|
||||
<genre-alt value="nonfiction_stat" format="fb2.0"/>
|
||||
<genre-alt value="outdoors_resources" format="fb2.0"/>
|
||||
<genre-alt value="professional_edu" format="fb2.0"/>
|
||||
<genre-alt value="science_agri" format="fb2.0"/>
|
||||
<genre-alt value="science_astronomy" format="fb2.0"/>
|
||||
<genre-alt value="science_earth" format="fb2.0"/>
|
||||
<genre-alt value="science_edu" format="fb2.0"/>
|
||||
<genre-alt value="science_evolution" format="fb2.0"/>
|
||||
<genre-alt value="science_measurement" format="fb2.0"/>
|
||||
<genre-alt value="science_eco" format="fb2.0"/>
|
||||
<genre-alt value="science_ref" format="fb2.0"/>
|
||||
<genre-alt value="teens_tech" format="fb2.0"/>
|
||||
</subgenre>
|
||||
</subgenres>
|
||||
</genre>
|
||||
<genre value="computers">
|
||||
<root-descr lang="en" genre-title="Computers" detailed="Internet, Programming, Hardware"/>
|
||||
<root-descr lang="ru" genre-title="Компьютеры" detailed="Интернет, программирование, железо"/>
|
||||
<subgenres>
|
||||
<subgenre value="comp_www">
|
||||
<genre-descr lang="en" title="Internet"/>
|
||||
<genre-descr lang="ru" title="Интернет"/>
|
||||
</subgenre>
|
||||
<subgenre value="comp_programming">
|
||||
<genre-descr lang="en" title="Programming"/>
|
||||
<genre-descr lang="ru" title="Программирование"/>
|
||||
</subgenre>
|
||||
<subgenre value="comp_hard">
|
||||
<genre-descr lang="en" title="Hardware"/>
|
||||
<genre-descr lang="ru" title="Компьютерное Железо"/>
|
||||
<genre-alt value="comp_hardware" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="comp_soft">
|
||||
<genre-descr lang="en" title="Software"/>
|
||||
<genre-descr lang="ru" title="Программы"/>
|
||||
<genre-alt value="comp_software" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="comp_db">
|
||||
<genre-descr lang="en" title="Databases"/>
|
||||
<genre-descr lang="ru" title="Базы Данных"/>
|
||||
</subgenre>
|
||||
<subgenre value="comp_osnet">
|
||||
<genre-descr lang="en" title="OS & Networking"/>
|
||||
<genre-descr lang="ru" title="ОС и Сети"/>
|
||||
<genre-alt value="comp_microsoft" format="fb2.0"/>
|
||||
<genre-alt value="comp_networking" format="fb2.0"/>
|
||||
<genre-alt value="comp_os" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="computers">
|
||||
<genre-descr lang="en" title="Computers: Misk"/>
|
||||
<genre-descr lang="ru" title="Компьютеры: Прочее"/>
|
||||
<genre-alt value="child_computers" format="fb2.0"/>
|
||||
<genre-alt value="compusers" format="fb2.0"/>
|
||||
<genre-alt value="comp_office" format="fb2.0"/>
|
||||
<genre-alt value="comp_cert" format="fb2.0"/>
|
||||
<genre-alt value="comp_games" format="fb2.0"/>
|
||||
<genre-alt value="comp_sci" format="fb2.0"/>
|
||||
<genre-alt value="comp_biz" format="fb2.0"/>
|
||||
<genre-alt value="comp_graph" format="fb2.0"/>
|
||||
</subgenre>
|
||||
</subgenres>
|
||||
</genre>
|
||||
<genre value="reference">
|
||||
<root-descr lang="en" genre-title="Reference" detailed="Reference, Encyclopedias, Dictionaries"/>
|
||||
<root-descr lang="ru" genre-title="Справочники" detailed="Справочники, энциклопедии, словари"/>
|
||||
<subgenres>
|
||||
<subgenre value="ref_encyc">
|
||||
<genre-descr lang="en" title="Encyclopedias"/>
|
||||
<genre-descr lang="ru" title="Энциклопедии"/>
|
||||
<genre-alt value="ref_encyclopedia" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="ref_dict">
|
||||
<genre-descr lang="en" title="Dictionaries"/>
|
||||
<genre-descr lang="ru" title="Словари"/>
|
||||
<genre-alt value="ref_dict" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="ref_ref">
|
||||
<genre-descr lang="en" title="Reference"/>
|
||||
<genre-descr lang="ru" title="Справочники"/>
|
||||
<genre-alt value="ref_almanacs" format="fb2.0"/>
|
||||
<genre-alt value="ref_careers" format="fb2.0"/>
|
||||
<genre-alt value="ref_catalogs" format="fb2.0"/>
|
||||
<genre-alt value="ref_cons_guides" format="fb2.0"/>
|
||||
<genre-alt value="ref_study_guides" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="ref_guide">
|
||||
<genre-descr lang="en" title="Guidebooks"/>
|
||||
<genre-descr lang="ru" title="Руководства"/>
|
||||
<genre-alt value="outdoors_field_guides" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="reference">
|
||||
<genre-descr lang="en" title="Misk References"/>
|
||||
<genre-descr lang="ru" title="Справочная Литература: Прочее"/>
|
||||
<genre-alt value="nonfiction_ref" format="fb2.0"/>
|
||||
<genre-alt value="family_ref" format="fb2.0"/>
|
||||
<genre-alt value="references" format="fb2.0"/>
|
||||
<genre-alt value="ref_etiquette" format="fb2.0"/>
|
||||
<genre-alt value="ref_langs" format="fb2.0"/>
|
||||
<genre-alt value="ref_fun" format="fb2.0"/>
|
||||
<genre-alt value="ref_books" format="fb2.0"/>
|
||||
<genre-alt value="ref_quotations" format="fb2.0"/>
|
||||
<genre-alt value="ref_words" format="fb2.0"/>
|
||||
<genre-alt value="teens_ref" format="fb2.0"/>
|
||||
</subgenre>
|
||||
</subgenres>
|
||||
</genre>
|
||||
<genre value="nonfiction">
|
||||
<root-descr lang="en" genre-title="Nonfiction" detailed="Biography, Memoirs, Publicism"/>
|
||||
<root-descr lang="ru" genre-title="Документальное" detailed="Биографии, мемуары, публицистика"/>
|
||||
<subgenres>
|
||||
<subgenre value="nonf_biography">
|
||||
<genre-descr lang="en" title="Biography & Memoirs"/>
|
||||
<genre-descr lang="ru" title="Биографии и Мемуары"/>
|
||||
<genre-alt value="people" format="fb2.0"/>
|
||||
<genre-alt value="biography" format="fb2.0"/>
|
||||
<genre-alt value="biogr_arts" format="fb2.0"/>
|
||||
<genre-alt value="biogr_ethnic" format="fb2.0"/>
|
||||
<genre-alt value="biogr_family" format="fb2.0"/>
|
||||
<genre-alt value="biogr_historical" format="fb2.0"/>
|
||||
<genre-alt value="biogr_leaders" format="fb2.0"/>
|
||||
<genre-alt value="biogr_professionals" format="fb2.0"/>
|
||||
<genre-alt value="biogr_sports" format="fb2.0"/>
|
||||
<genre-alt value="biogr_travel" format="fb2.0"/>
|
||||
<genre-alt value="biz_beogr" format="fb2.0"/>
|
||||
<genre-alt value="gay_biogr" format="fb2.0"/>
|
||||
<genre-alt value="history_gay" format="fb2.0"/>
|
||||
<genre-alt value="literature_letters" format="fb2.0"/>
|
||||
<genre-alt value="teens_beogr" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="nonf_publicism">
|
||||
<genre-descr lang="en" title="Publicism"/>
|
||||
<genre-descr lang="ru" title="Публицистика"/>
|
||||
</subgenre>
|
||||
<subgenre value="nonf_criticism">
|
||||
<genre-descr lang="en" title="Criticism"/>
|
||||
<genre-descr lang="ru" title="Критика"/>
|
||||
</subgenre>
|
||||
<subgenre value="nonfiction">
|
||||
<genre-descr lang="en" title="Misk Nonfiction"/>
|
||||
<genre-descr lang="ru" title="Документальное: Прочее"/>
|
||||
<genre-alt value="gay_nonfiction" format="fb2.0"/>
|
||||
<genre-alt value="nonfiction_avto" format="fb2.0"/>
|
||||
<genre-alt value="nonfiction_crime" format="fb2.0"/>
|
||||
<genre-alt value="nonfiction_events" format="fb2.0"/>
|
||||
<genre-alt value="nonfiction_politics" format="fb2.0"/>
|
||||
<genre-alt value="nonfiction_traditions" format="fb2.0"/>
|
||||
<genre-alt value="nonfiction_demography" format="fb2.0"/>
|
||||
<genre-alt value="nonfiction_racism" format="fb2.0"/>
|
||||
<genre-alt value="nonfiction_emigration" format="fb2.0"/>
|
||||
<genre-alt value="nonfiction_philantropy" format="fb2.0"/>
|
||||
<genre-alt value="nonfiction_transportation" format="fb2.0"/>
|
||||
<genre-alt value="nonfiction_true_accounts" format="fb2.0"/>
|
||||
<genre-alt value="nonfiction_urban" format="fb2.0"/>
|
||||
<genre-alt value="nonfiction_women" format="fb2.0"/>
|
||||
<genre-alt value="outdoors_conservation" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="design">
|
||||
<genre-descr lang="en" title="Art, Design"/>
|
||||
<genre-descr lang="ru" title="Искусство, Дизайн"/>
|
||||
<genre-alt value="architecture" format="fb2.0"/>
|
||||
<genre-alt value="art" format="fb2.0"/>
|
||||
<genre-alt value="art_instr" format="fb2.0"/>
|
||||
<genre-alt value="artists" format="fb2.0"/>
|
||||
<genre-alt value="fashion" format="fb2.0"/>
|
||||
<genre-alt value="graph_design" format="fb2.0"/>
|
||||
<genre-alt value="photography" format="fb2.0"/>
|
||||
</subgenre>
|
||||
</subgenres>
|
||||
</genre>
|
||||
<genre value="religion">
|
||||
<root-descr lang="en" genre-title="Religion" detailed="Religion, Esoterics"/>
|
||||
<root-descr lang="ru" genre-title="Религия" detailed="Религия, эзотерика"/>
|
||||
<subgenres>
|
||||
<subgenre value="religion_rel">
|
||||
<genre-descr lang="en" title="Religion"/>
|
||||
<genre-descr lang="ru" title="Религия"/>
|
||||
<genre-alt value="child_religion" format="fb2.0"/>
|
||||
<genre-alt value="chris_bibles" format="fb2.0"/>
|
||||
<genre-alt value="chris_pravoslavie" format="fb2.0"/>
|
||||
<genre-alt value="chris_catholicism" format="fb2.0"/>
|
||||
<genre-alt value="chris_living" format="fb2.0"/>
|
||||
<genre-alt value="chris_history" format="fb2.0"/>
|
||||
<genre-alt value="chris_clergy" format="fb2.0"/>
|
||||
<genre-alt value="chris_edu" format="fb2.0"/>
|
||||
<genre-alt value="chris_evangelism" format="fb2.0"/>
|
||||
<genre-alt value="chris_fiction" format="fb2.0"/>
|
||||
<genre-alt value="chris_holidays" format="fb2.0"/>
|
||||
<genre-alt value="chris_jesus" format="fb2.0"/>
|
||||
<genre-alt value="chris_mormonism" format="fb2.0"/>
|
||||
<genre-alt value="chris_orthodoxy" format="fb2.0"/>
|
||||
<genre-alt value="outdoors_conservation" format="fb2.0"/>
|
||||
<genre-alt value="chris_protestantism" format="fb2.0"/>
|
||||
<genre-alt value="chris_ref" format="fb2.0"/>
|
||||
<genre-alt value="chris_theology" format="fb2.0"/>
|
||||
<genre-alt value="chris_devotion" format="fb2.0"/>
|
||||
<genre-alt value="literature_religion" format="fb2.0"/>
|
||||
<genre-alt value="religion" format="fb2.0"/>
|
||||
<genre-alt value="religion_bibles" format="fb2.0"/>
|
||||
<genre-alt value="Christianity" format="fb2.0"/>
|
||||
<genre-alt value="religion_fiction" format="fb2.0"/>
|
||||
<genre-alt value="religion_new_age" format="fb2.0"/>
|
||||
<genre-alt value="religion_religious_studies" format="fb2.0"/>
|
||||
<genre-alt value="romance_religion" format="fb2.0"/>
|
||||
<genre-alt value="teens_religion" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="religion_esoterics">
|
||||
<genre-descr lang="en" title="Esoterics"/>
|
||||
<genre-descr lang="ru" title="Эзотерика"/>
|
||||
<genre-alt value="religion_occult" format="fb2.0"/>
|
||||
<genre-alt value="religion_spirituality" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="religion_self">
|
||||
<genre-descr lang="en" title="Self-perfection"/>
|
||||
<genre-descr lang="ru" title="Самосовершенствование"/>
|
||||
</subgenre>
|
||||
<subgenre value="religion">
|
||||
<genre-descr lang="en" title="Religion: Other"/>
|
||||
<genre-descr lang="ru" title="Религия и духовность: Прочее"/>
|
||||
<genre-alt value="religion_east" format="fb2.0"/>
|
||||
<genre-alt value="religion_buddhism" format="fb2.0"/>
|
||||
<genre-alt value="religion_earth" format="fb2.0"/>
|
||||
<genre-alt value="religion_hinduism" format="fb2.0"/>
|
||||
<genre-alt value="religion_islam" format="fb2.0"/>
|
||||
<genre-alt value="religion_judaism" format="fb2.0"/>
|
||||
<genre-alt value="religion_other" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="sci_religion">
|
||||
<genre-descr lang="en" title="Religious Studies"/>
|
||||
<genre-descr lang="ru" title="Религиоведение"/>
|
||||
</subgenre>
|
||||
</subgenres>
|
||||
</genre>
|
||||
<genre value="humor">
|
||||
<root-descr lang="en" genre-title="Humor" detailed="Prose, Verses, Anecdote"/>
|
||||
<root-descr lang="ru" genre-title="Юмор" detailed="Проза, стихи, анекдоты"/>
|
||||
<subgenres>
|
||||
<subgenre value="humor_anecdote">
|
||||
<genre-descr lang="en" title="Anecdote"/>
|
||||
<genre-descr lang="ru" title="Анекдоты"/>
|
||||
</subgenre>
|
||||
<subgenre value="humor_prose">
|
||||
<genre-descr lang="en" title="Humor Prose"/>
|
||||
<genre-descr lang="ru" title="Юмористическая Проза"/>
|
||||
</subgenre>
|
||||
<subgenre value="humor_verse">
|
||||
<genre-descr lang="en" title="Humor Verses"/>
|
||||
<genre-descr lang="ru" title="Юмористические Стихи"/>
|
||||
</subgenre>
|
||||
<subgenre value="humor">
|
||||
<genre-descr lang="en" title="Misk Humor"/>
|
||||
<genre-descr lang="ru" title="Юмор: Прочее"/>
|
||||
<genre-alt value="family_humor" format="fb2.0"/>
|
||||
</subgenre>
|
||||
</subgenres>
|
||||
</genre>
|
||||
<genre value="home">
|
||||
<root-descr lang="en" genre-title="Home, Family" detailed="Cooking, Pets, Hobby"/>
|
||||
<root-descr lang="ru" genre-title="Дом, Семья" detailed="Кулинария, домашние животные, хобби"/>
|
||||
<subgenres>
|
||||
<subgenre value="home_cooking">
|
||||
<genre-descr lang="en" title="Cooking"/>
|
||||
<genre-descr lang="ru" title="Кулинария"/>
|
||||
<genre-alt value="cooking" format="fb2.0"/>
|
||||
<genre-alt value="cook_baking" format="fb2.0"/>
|
||||
<genre-alt value="cook_can" format="fb2.0"/>
|
||||
<genre-alt value="cook_art" format="fb2.0"/>
|
||||
<genre-alt value="cook_drink" format="fb2.0"/>
|
||||
<genre-alt value="cook_gastronomy" format="fb2.0"/>
|
||||
<genre-alt value="cook_meals" format="fb2.0"/>
|
||||
<genre-alt value="cook_natura" format="fb2.0"/>
|
||||
<genre-alt value="cook_outdoor" format="fb2.0"/>
|
||||
<genre-alt value="cook_pro" format="fb2.0"/>
|
||||
<genre-alt value="cook_quick" format="fb2.0"/>
|
||||
<genre-alt value="cook_ref" format="fb2.0"/>
|
||||
<genre-alt value="cook_regional" format="fb2.0"/>
|
||||
<genre-alt value="cook_appliances" format="fb2.0"/>
|
||||
<genre-alt value="cook_diet" format="fb2.0"/>
|
||||
<genre-alt value="cook_spec" format="fb2.0"/>
|
||||
<genre-alt value="cook_veget" format="fb2.0"/>
|
||||
<genre-alt value="health_diets" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="home_pets">
|
||||
<genre-descr lang="en" title="Pets"/>
|
||||
<genre-descr lang="ru" title="Домашние Животные"/>
|
||||
</subgenre>
|
||||
<subgenre value="home_crafts">
|
||||
<genre-descr lang="en" title="Hobbies & Crafts"/>
|
||||
<genre-descr lang="ru" title="Хобби, Ремесла"/>
|
||||
<genre-alt value="home_collect" format="fb2.0"/>
|
||||
<genre-alt value="outdoors_hiking" format="fb2.0"/>
|
||||
<genre-alt value="outdoors_hunt_fish" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="home_entertain">
|
||||
<genre-descr lang="en" title="Entertaining"/>
|
||||
<genre-descr lang="ru" title="Развлечения"/>
|
||||
<genre-alt value="entertainment" format="fb2.0"/>
|
||||
<genre-alt value="entert_comics" format="fb2.0"/>
|
||||
<genre-alt value="entert_games" format="fb2.0"/>
|
||||
<genre-alt value="entert_humor" format="fb2.0"/>
|
||||
<genre-alt value="entert_movies" format="fb2.0"/>
|
||||
<genre-alt value="entert_music" format="fb2.0"/>
|
||||
<genre-alt value="nonfiction_pop_culture" format="fb2.0"/>
|
||||
<genre-alt value="entert_radio" format="fb2.0"/>
|
||||
<genre-alt value="entert_tv" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="home_health">
|
||||
<genre-descr lang="en" title="Health"/>
|
||||
<genre-descr lang="ru" title="Здоровье"/>
|
||||
<genre-alt value="health" format="fb2.0"/>
|
||||
<genre-alt value="health_beauty" format="fb2.0"/>
|
||||
<genre-alt value="family_health" format="fb2.0"/>
|
||||
<genre-alt value="family_fertility" format="fb2.0"/>
|
||||
<genre-alt value="family_parenting" format="fb2.0"/>
|
||||
<genre-alt value="family_pregnancy" format="fb2.0"/>
|
||||
<genre-alt value="family_special_needs" format="fb2.0"/>
|
||||
<genre-alt value="health_death" format="fb2.0"/>
|
||||
<genre-alt value="health_dideases" format="fb2.0"/>
|
||||
<genre-alt value="health_fitness" format="fb2.0"/>
|
||||
<genre-alt value="health_men" format="fb2.0"/>
|
||||
<genre-alt value="health_nutrition" format="fb2.0"/>
|
||||
<genre-alt value="health_personal" format="fb2.0"/>
|
||||
<genre-alt value="health_recovery" format="fb2.0"/>
|
||||
<genre-alt value="health_ref" format="fb2.0"/>
|
||||
<genre-alt value="health_first_aid" format="fb2.0"/>
|
||||
<genre-alt value="health_self_help" format="fb2.0"/>
|
||||
<genre-alt value="health_women" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="home_garden">
|
||||
<genre-descr lang="en" title="Garden"/>
|
||||
<genre-descr lang="ru" title="Сад и Огород"/>
|
||||
</subgenre>
|
||||
<subgenre value="home_diy">
|
||||
<genre-descr lang="en" title="Do it yourself"/>
|
||||
<genre-descr lang="ru" title="Сделай Сам"/>
|
||||
<genre-alt value="home_expert" format="fb2.0"/>
|
||||
<genre-alt value="home_design" format="fb2.0"/>
|
||||
<genre-alt value="home_howto" format="fb2.0"/>
|
||||
<genre-alt value="home_interior_design" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="home_sport">
|
||||
<genre-descr lang="en" title="Sports"/>
|
||||
<genre-descr lang="ru" title="Спорт"/>
|
||||
<genre-alt value="literature_sports" format="fb2.0"/>
|
||||
<genre-alt value="outdoors_outdoor_recreation" format="fb2.0"/>
|
||||
<genre-alt value="outdoors_survive" format="fb2.0"/>
|
||||
<genre-alt value="sport" format="fb2.0"/>
|
||||
<genre-alt value="teens_health" format="fb2.0"/>
|
||||
<genre-alt value="teens_school_sports" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="home_sex">
|
||||
<genre-descr lang="en" title="Erotica, Sex"/>
|
||||
<genre-descr lang="ru" title="Эротика, Секс"/>
|
||||
<genre-alt value="health_sex" format="fb2.0"/>
|
||||
<genre-alt value="nonfiction_pornography" format="fb2.0"/>
|
||||
</subgenre>
|
||||
<subgenre value="home">
|
||||
<genre-descr lang="en" title="Home: Other"/>
|
||||
<genre-descr lang="ru" title="Дом и Семья: Прочее"/>
|
||||
<genre-alt value="gay_parenting" format="fb2.0"/>
|
||||
<genre-alt value="home_cottage" format="fb2.0"/>
|
||||
<genre-alt value="home_weddings" format="fb2.0"/>
|
||||
<genre-alt value="family" format="fb2.0"/>
|
||||
<genre-alt value="family_adoption" format="fb2.0"/>
|
||||
<genre-alt value="family_aging_parents" format="fb2.0"/>
|
||||
<genre-alt value="family_edu" format="fb2.0"/>
|
||||
<genre-alt value="family_activities" format="fb2.0"/>
|
||||
<genre-alt value="family_relations" format="fb2.0"/>
|
||||
<genre-alt value="family_lit_guide" format="fb2.0"/>
|
||||
<genre-alt value="women_divorce" format="fb2.0"/>
|
||||
<genre-alt value="women_domestic" format="fb2.0"/>
|
||||
<genre-alt value="women_child" format="fb2.0"/>
|
||||
<genre-alt value="women_single" format="fb2.0"/>
|
||||
</subgenre>
|
||||
</subgenres>
|
||||
</genre>
|
||||
</fbgenrestransfer>
|
||||
Reference in new issue
Block a user