The Interactive Isnalyser
For scholars studying Ḥadīth texts, drawing an isnād tree with more than 40 transmitters is a tedious work and finding the right medium to desplay it fully can even prove to be impossible. The isnalyserjs
is a simple program for the automation of isnād trees drawing and their interactive exploration.
You need two tables in .csv format, one with the transmitters' names, and one with the transmission paths.
See below how the tables must look like and how to upload them.
The transmitters file contains minimum two columns
- Transmitter [with the transmitters' full name]
- dAH [the transmitters' death date]
If you want more information to be displayed in your graph, you can add one or two columns: 3) Origin [with the transmitters' city/place of origin] 4) Bio [with biographical information about the transmitters either as link or as text].
Transmitters | dAH | Origin | Bio |
---|---|---|---|
A | 10 | I | |
... |
... |
... |
|
B | E | M2 |
This table contains the transmission paths and here is how it is structured.
If, like in our example, Yaḥyá ibn Yaḥyá al-Laythī received from Mālik ibn Anas who received from Yaḥyá ibn Saʿīd al-Umawī a ḥadīth that we call 'MM', the table will look like this:
Yaḥyá ibn Saʿīd al-Umawī | Mālik ibn Anas | MM
Mālik ibn Anas | Yaḥyá ibn Yaḥyá al-Laythī | MM
Each line contains a transmission path between two transmitters only.
You can also grade the transmission with numbers from 1 to 5. These grades can reflect the transmission terminology, for instance 1 = ḥaddatha; 2 = khabara; 3 = ʿan; etc., or any forms of evaluation and analysis, for instance 1 = contains X; 2 = doesn't contain X; 3 = contains Y; etc. or 1 = ṣaḥīḥ; 2 = ḍaʿīf; etc. Theses grades will determine the form of the transmission line (edge), 1 = solid line; 2 = dotted line; 3 = dashed line; 4 = dashed-dotted line; 5 = thick solid line.
Yaḥyá ibn Saʿīd al-Umawī | Mālik ibn Anas | MM | 5
Mālik ibn Anas | Yaḥyá ibn Yaḥyá al-Laythī | MM | 5
From | To | FileName | TransmissionType |
---|---|---|---|
A | D | M1 | 0 |
... | ... | ... | ... |
B | E | M2 | 1 |
Feature requests are welcome and encouraged. So if your data has got features that you want to be mapped to an isnalyserjs
functionality, let us know!
The death date of the transmitters determine their position vertically in the graph. This function allows to contextualise the transmission paths in time and to highlight the flow of transmission over time with its potential gaps.
You can decide which time distance you want between each time step. The default setting is 15. It can be adjusted according to the data provided. When the data contains many transmitters, a low step size may be useful, while for files with few transmitters over a short timespan, a higher value can be more suitable. If you see that the graph is too small or too dense, do try to change the time step and render the graph again!
Now, that the data is loaded and the step size is set, you can press the Render Graph
button, and the graph will be displayed in the canvas, ready to be explored!
Once you are happy with your graph, you can export it as a pdf
or svg
file by pressing the Export Graph
button.
The isnalyserjs
aims at facilitating the analysis of large quantity of aḥādīth and more specifically their chains of transmissions or asānid by allowing scholars to visualize these chains of transmitters quickly in a complete graph that includes geo-spatial and chronological information.
The isnalyserjs
is an interactive approach to this problem.
Contribution in any form or shape is highly welcome. Ways to contribute range from mailing the authors, over filing Github
issues to pull requests. So, if you find any bugs, have ideas for features, or need help, let us know! We are eager to support you. :)
Below, are some tips for people looking to contribute on a code level.
If you find any bugs or find that something is broken, don't hesitate to file a Github
issue. This can be done through the Issues tab in the repository page. Make sure to formulate the problem encountered as precisely as possible. Ideally, include steps to replicate the behaviour observed.
To actively participate in development and testing, you can clone this repository and host it locally. This can be done by simply running
python -m http.server
in the isnalyserjs
directory.
There is also a Python
version of this project. If you are interested in this, you can install it via
pip install isnalyser
Further information on this can be found in the github repository and in the PyPI page.