7 Books are kept in the :py:class:`catalogue.models.Book` model.
9 Books have fragments, annotated with themes. Those are kept in the
10 :py:class:`catalogue.models.Fragment` model.
12 Both ``Books`` and ``Fragments`` can have ``Tags``, which are
13 :py:class:`catalogue.models.Tag` objects.
15 What are ``Tags`` used for?
16 ---------------------------
18 Each ``Tag`` objects has a ``category`` field specyfying its meaning.
19 The categories are enumerated in :py:const:`catalogue.models.tag.TAG_CATEGORIES`.
23 * Keeping browsable metadata. Each ``Book`` can have any number of tags
24 of categories: ``author``, ``epoch``, ``kind``, ``genre``.
25 Each ``Fragment`` of a book has all of those,
26 and also a number of ``theme`` tags.
27 * User shelves. A User can put a ``Book`` on a shelf and add some labels
28 by adding a number of ``set`` tags to it. A book put on a shelf without
29 any labels has a Tag with an empty name.
32 .. _ancestor-descendant-relations:
34 Relations between ``Books``, ``Fragments`` and other ``Books``
35 --------------------------------------------------------------
37 Obviously, every ``Fragment`` comes from a particular ``Book``. This
38 relation is expressed with the Fragment's ``book`` field.
40 The source of parent-child relations between ``Books`` is
41 the ``dc:relation.hasPart`` metadata field, exposed by
42 :py:class:`librarian.dcparser.BookInfo` as ``parts``. This relation
43 and the order of children of one parent is expressed with the child
44 book's ``parent`` and ``parent_number`` fields.
46 Additionally, every ``Book`` has a many-to-many relationship `ancestor`,
47 onnecting it to all its ancestors, with reverse relationship called
48 `descendant`. This relationship is rebuilt after a `Book` is published.