Merged (not redundant) parts of documentation/SongFormat.txt into the songs/lib/db module and removed it. Added the media_files and media_files_songs tables (although the doc is not complete there).

bzr-revno: 1265
This commit is contained in:
Andreas Preikschat 2011-02-04 09:46:51 +02:00 committed by Raoul Snyman
commit f80edf2092
4 changed files with 96 additions and 134 deletions

View File

@ -1,124 +0,0 @@
openlp.org 2.x Song Database Structure
========================================================================
Introduction
------------
The song database in openlp.org 2.x is similar to the 1.x format. The
biggest differences are the addition of extra tables, and the use of
SQLite version 3.
The song database contains the following tables:
- authors
- authors_songs
- song_books
- songs
- songs_topics
- topics
"authors" Table
---------------
This table holds the names of all the authors. It has the following
columns:
* id
* first_name
* last_name
* display_name
"authors_songs" Table
---------------------
This is a bridging table between the "authors" and "songs" tables, which
serves to create a many-to-many relationship between the two tables. It
has the following columns:
* author_id
* song_id
"song_books" Table
------------------
The "song_books" table holds a list of books that a congregation gets
their songs from, or old hymnals now no longer used. This table has the
following columns:
* id
* name
* publisher
"songs" Table
-------------
This table contains the songs, and each song has a list of attributes.
The "songs" table has the following columns:
* id
* song_book_id
* title
* lyrics
* verse_order
* copyright
* comments
* ccli_number
* song_number
* theme_name
* search_title
* search_lyrics
"songs_topics" Table
--------------------
This is a bridging table between the "songs" and "topics" tables, which
serves to create a many-to-many relationship between the two tables. It
has the following columns:
* song_id
* topic_id
"topics" Table
--------------
The topics table holds a selection of topics that songs can cover. This
is useful when a worship leader wants to select songs with a certain
theme. This table has the following columns:
* id
* name
The lyrics definition (more or less similar to interformat to/from ChangingSong
The tags <i></i><b></b><u></u> can also be used within the lyrics test.
! Please note that this format has been checked at http://validator.w3.org/#validate_by_upload
<lyrics lang="en_US">
<title>Amazing Grace</title>
<verse name="v1">
<theme>name of verse specific theme (optional)</theme>
<comment>any text (optional)</comment>
<part name="men">
Amazing grace, how ...
</part>
<part name="women">
A b c
D e f
</part>
...
</verse>
<verse name="c">
<theme>name of verse specific theme (optional)</theme>
<comment>any text (optional)</comment>
...
</verse>
</lyrics>
<lyrics lang="de_DE">
<title>Erstaunliche Anmut</title>
<verse name="v1">
Erstaunliche Anmut, wie
...
</verse>
<verse name="c">
...
</verse>
</lyrics>

View File

@ -78,8 +78,8 @@ def parse_reference(reference):
the last selected chapter. the last selected chapter.
``John 3:16-18`` refers to John chapter 3 verses 16 to 18 ``John 3:16-18`` refers to John chapter 3 verses 16 to 18
- After a list separator it is possible to refer to additional verses. They - After a list separator it is possible to refer to additional verses. They
are build analog to the first ones. This way it is possible to define are build analog to the first ones. This way it is possible to define each
each number of verse references. It is not possible to refer to verses in number of verse references. It is not possible to refer to verses in
additional books. additional books.
``John 3:16,18`` refers to John chapter 3 verses 16 and 18 ``John 3:16,18`` refers to John chapter 3 verses 16 and 18
``John 3:16-18,20`` refers to John chapter 3 verses 16 to 18 and 20 ``John 3:16-18,20`` refers to John chapter 3 verses 16 to 18 and 20
@ -91,7 +91,7 @@ def parse_reference(reference):
``range_string`` is a regular expression which matches for verse range ``range_string`` is a regular expression which matches for verse range
declarations: declarations:
1. ``(?:(?P<from_chapter>[0-9]+)%(sep_v)s)?' 1. ``(?:(?P<from_chapter>[0-9]+)%(sep_v)s)?``
It starts with a optional chapter reference ``from_chapter`` followed by It starts with a optional chapter reference ``from_chapter`` followed by
a verse separator. a verse separator.
2. ``(?P<from_verse>[0-9]+)`` 2. ``(?P<from_verse>[0-9]+)``

View File

@ -484,19 +484,19 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog):
def onAuthorsListRowChanged(self, row): def onAuthorsListRowChanged(self, row):
""" """
Called when the *authorsListWidget*s current row has changed. Called when the *authorsListWidget*'s current row has changed.
""" """
self.__rowChange(row, self.authorsEditButton, self.authorsDeleteButton) self.__rowChange(row, self.authorsEditButton, self.authorsDeleteButton)
def onTopicsListRowChanged(self, row): def onTopicsListRowChanged(self, row):
""" """
Called when the *topicsListWidget*s current row has changed. Called when the *topicsListWidget*'s current row has changed.
""" """
self.__rowChange(row, self.topicsEditButton, self.topicsDeleteButton) self.__rowChange(row, self.topicsEditButton, self.topicsDeleteButton)
def onBooksListRowChanged(self, row): def onBooksListRowChanged(self, row):
""" """
Called when the *booksListWidget*s current row has changed. Called when the *booksListWidget*'s current row has changed.
""" """
self.__rowChange(row, self.booksEditButton, self.booksDeleteButton) self.__rowChange(row, self.booksEditButton, self.booksDeleteButton)

View File

@ -39,6 +39,7 @@ class Author(BaseModel):
""" """
pass pass
class Book(BaseModel): class Book(BaseModel):
""" """
Book model Book model
@ -47,30 +48,115 @@ class Book(BaseModel):
return u'<Book id="%s" name="%s" publisher="%s" />' % ( return u'<Book id="%s" name="%s" publisher="%s" />' % (
str(self.id), self.name, self.publisher) str(self.id), self.name, self.publisher)
class MediaFile(BaseModel): class MediaFile(BaseModel):
""" """
MediaFile model MediaFile model
""" """
pass pass
class Song(BaseModel): class Song(BaseModel):
""" """
Song model Song model
""" """
pass pass
class Topic(BaseModel): class Topic(BaseModel):
""" """
Topic model Topic model
""" """
pass pass
def init_schema(url): def init_schema(url):
""" """
Setup the songs database connection and initialise the database schema Setup the songs database connection and initialise the database schema.
``url`` ``url``
The database to setup The database to setup
The song database contains the following tables:
* authors
* authors_songs
* media_files
* media_files_songs
* song_books
* songs
* songs_topics
* topics
**authors** Table
This table holds the names of all the authors. It has the following
columns:
* id
* first_name
* last_name
* display_name
**authors_songs Table**
This is a bridging table between the *authors* and *songs* tables, which
serves to create a many-to-many relationship between the two tables. It
has the following columns:
* author_id
* song_id
**media_files Table**
* id
* file_name
* type
**media_files_songs Table**
* media_file_id
* song_id
**song_books Table**
The *song_books* table holds a list of books that a congregation gets
their songs from, or old hymnals now no longer used. This table has the
following columns:
* id
* name
* publisher
**songs Table**
This table contains the songs, and each song has a list of attributes.
The *songs* table has the following columns:
* id
* song_book_id
* title
* alternate_title
* lyrics
* verse_order
* copyright
* comments
* ccli_number
* song_number
* theme_name
* search_title
* search_lyrics
**songs_topics Table**
This is a bridging table between the *songs* and *topics* tables, which
serves to create a many-to-many relationship between the two tables. It
has the following columns:
* song_id
* topic_id
**topics Table**
The topics table holds a selection of topics that songs can cover. This
is useful when a worship leader wants to select songs with a certain
theme. This table has the following columns:
* id
* name
""" """
session, metadata = init_db(url) session, metadata = init_db(url)