bin | ||
src | ||
.gitignore | ||
.ruby-version | ||
gem.deps.rb | ||
README.md |
quran-pull
This repository contains the holy book, The Qur'an, in its original Arabic and as translations in English, Farsi, and Portuguese. The contents are made available in JSON, and SQL files.
src/json/
directory
This section covers the JSON files. Keep scrolling for the SQL section.
-
The src/json/ar/ directory contains The Qur'an in its original Arabic.
-
The src/json/en/ directory contains an English translation of The Qur'an.
-
The src/json/fa/ directory contains a Farsi translation of The Qur'an.
-
The src/json/pt/ directory contains a Portuguese translation of The Qur'an.
Arabic
Each JSON file represents a chapter, or surah - in its original Arabic. For example, src/json/ar/1.json contains Al-Fatihah. The structure of the file can be described as an array of arrays, with each array representing a verse, or ayah. For example:
[
[
<verse number>,
<verse contents>
],
[
<verse number>,
<verse contents>
],
[
<verse number>,
<verse contents>
],
/* etc... */
]
English
Each JSON file represents a chapter, or surah - as an English translation. The structure of the file can be described as an array of arrays, with each array representing a verse, or ayah. For example, consider the English translation of Al-Fatihah (src/json/en/1.json):
[
[
1,
"In the Name of Allah—the Most Compassionate, Most Merciful."
],
[
2,
"All praise is for Allah—Lord of all worlds,"
],
[
3,
"the Most Compassionate, Most Merciful,"
],
[
4,
"Master of the Day of Judgment."
],
[
5,
"You ˹alone˺ we worship and You ˹alone˺ we ask for help."
],
[
6,
"Guide us along the Straight Path,"
],
[
7,
"the Path of those You have blessed—not those You are displeased with, or those who are astray. "
]
]
Farsi
Each JSON file represents a chapter, or surah - as a Farsi translation. For example, src/json/fa/1.json contains Al-Fatihah. The structure of the file can be described as an array of arrays, with each array representing a verse, or ayah. For example:
[
[
<verse number>,
<verse contents>
],
[
<verse number>,
<verse contents>
],
[
<verse number>,
<verse contents>
],
/* etc... */
]
Portuguese
Each JSON file represents a chapter, or surah - as a Portuguese translation. For example, src/pt/1.json contains Al-Fatihah. The structure of the file can be described as an array of arrays, with each array representing a verse, or ayah. For example:
[
[
<verse number>,
<verse contents>
],
[
<verse number>,
<verse contents>
],
[
<verse number>,
<verse contents>
],
/* etc... */
]
src/sql/
directory
This section covers the SQL files.
-
The src/sql/schema.sql defines the schema of the database.
The schema is composed of three tables:qurans
,chapters
, andverses
. -
The src/sql/seed.sql populates the contents of the database.
The languages included are Arabic, English, Farsi, and Portuguese.
SQLite3 example
The example demonstrates how the SQL files mentioned above can be used to create a fully populated database, and then how to query the database. It is assumed that the repository has been cloned or downloaded (see below), and that "sqlite3" is started from the root of the repository.
1. $HOME/.sqliterc
For identical results, it is recommended that the $HOME/.sqlitrc
file has the following
contents:
pragma FOREIGN_KEYS = on;
.headers on
.mode column
2. Execute src/sql/schema.sql
Start SQLite3 from the command line, and then execute .read src/sql/schema.sql
:
$ sqlite3
SQLite version 3.39.0 2022-06-25 14:57:57
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .read src/sql/schema.sql
sqlite>
3. Execute src/sql/seed.sql
Within the same sqlite session, execute .read src/sql/seed.sql
:
sqlite> .read src/sql/seed.sql
sqlite>
4. Query the database
After steps two and three, the database is fully populated and exists in memory / RAM.
We can now query the database and its contents. The SQL query we will execute fetches the
contents of chapter 112 in the English locale (i.e: en
):
SELECT qurans.locale,
chapters.number as chapter_number,
verses.number as verse_number,
verses.content from verses
INNER JOIN qurans ON qurans.id = verses.quran_id
INNER JOIN chapters ON chapters.id = verses.chapter_id
WHERE qurans.locale = "en" AND chapters.number = 112;
The output should look like this:
sqlite> SELECT qurans.locale,
...> chapters.number as chapter_number,
...> verses.number as verse_number,
...> verses.content from verses
...> INNER JOIN qurans ON qurans.id = verses.quran_id
...> INNER JOIN chapters ON chapters.id = verses.chapter_id
...> WHERE qurans.locale = "en" AND chapters.number = 112;
locale chapter_number verse_number content
------ -------------- ------------ -----------------------------------------------------
en 112 1 Say, ˹O Prophet,˺ “He is Allah—One ˹and Indivisible˺;
en 112 2 Allah—the Sustainer ˹needed by all˺.
en 112 3 He has never had offspring, nor was He born.
en 112 4 And there is none comparable to Him.”
The bin/
directory
The bin/ directory contains scripts that generate the contents of the src/ directory:
-
bin/pull-arabic
This script is responsible for populating src/json/ar/. -
bin/pull-english
This script is responsible for populating src/json/en/. -
bin/pull-farsi
This script is responsible for populating src/json/fa/. -
bin/pull-portuguese
This script is responsible for populating src/json/pt/. -
bin/create-sql-seed-file
This script creates src/sql/seed.sql, and uses the contents of src/json/ to do so.
Note #1
By default it is not neccessary to run these scripts because the contents of src/
is included in
the repository already.
Note #2
The scripts are written in Ruby v3.1.0+.
The "pull-english", "pull-farsi" and
"pull-portuguese" scripts depend on the "pull-arabic"
script being run first. The script dependencies can be installed by
running gem install -g gem.deps.rb
from the root of the repository.
Download
For those of you who don't have access to, or know how to use "git", a zip file of the repository is provided for download: download zip file.
Credit, and thanks
The content of the src/ directory was automatically generated thanks to the following websites:
- https://sacred-texts.com - for the original Arabic.
- https://quran.com - for the English translation.
- https://al-quran.cc - for the Farsi, and Portuguese translations.
License
This software is released into the Public Domain.