forked from openlp/openlp
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:
commit
f80edf2092
@ -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>
|
|
@ -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]+)``
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user