102 lines
3.6 KiB
Markdown
102 lines
3.6 KiB
Markdown
|
# CFR XML to SQL
|
||
|
|
||
|
Un script Python pentru convertirea
|
||
|
[fișierelor XML oferite de S.C. Informatica Feroviară S.A.](https://data.gov.ro/dataset?organization=sc-informatica-feroviara-sa)
|
||
|
într-o bază de date SQLite.
|
||
|
|
||
|
## Cum se folosește
|
||
|
|
||
|
- se plasează fișierele `.xml` în folderul `datafiles`
|
||
|
- (opțional) se completează fișierul `datafiles/mapping.json` cu numele companiilor
|
||
|
- se rulează `convert.py`:
|
||
|
|
||
|
```bash
|
||
|
# Unix
|
||
|
./convert.py
|
||
|
```
|
||
|
|
||
|
```powershell
|
||
|
# Windows
|
||
|
python convert.py
|
||
|
```
|
||
|
|
||
|
Scriptul este scris pentru Python 3.
|
||
|
|
||
|
## Schemă bază de date
|
||
|
|
||
|
Schema este validă pentru versiunea 2.
|
||
|
|
||
|
Coloanele fără tip de date sunt luate direct din XML (deci cel mai probabil tip text).
|
||
|
|
||
|
### Tabel **Meta**
|
||
|
|
||
|
Coloană | Tip de date | Descriere
|
||
|
---------|-------------|----------
|
||
|
Versiune | int | Versiunea bazei de date (schema aceasta descrie versiunea 2)
|
||
|
|
||
|
### Tabel **Companii**
|
||
|
|
||
|
Coloană | Tip de date | Descriere
|
||
|
----------|-------------|----------
|
||
|
Id | int pk |
|
||
|
NumeLegal | text | Numele oficial al companiei *(ex: S.C. Companie S.R.L)*
|
||
|
NumeComun | text | Numele după care este cunoscută compania *(în general numele oficial fără prefix sau sufix; ex: Companie)*
|
||
|
|
||
|
### Tabel **Trenuri**
|
||
|
|
||
|
Coloană | Tip de date | Descriere
|
||
|
--------------|-------------|----------
|
||
|
Number | int pk |
|
||
|
IdCompanie | int | fk Companii->Id
|
||
|
CategorieTren | | R/IR/etc.
|
||
|
KmCum | int | Lungimea totală a traseului în **metri**
|
||
|
Lungime | int | Lungimea trenului
|
||
|
Numar | |
|
||
|
Operator | | ? - Uneori conține un număr unic pentru un anumit operator, alteori este gol
|
||
|
Proprietar | |
|
||
|
Putere | |
|
||
|
Rang | |
|
||
|
Servicii | |
|
||
|
Tonaj | |
|
||
|
|
||
|
### Tabel **Trase**
|
||
|
|
||
|
Coloană | Tip de date | Descriere
|
||
|
------------------|-------------|----------
|
||
|
NumarTren | int | fk Trenuri->Number
|
||
|
Id | int | Id trasă (1, 2, ...)
|
||
|
Tip | |
|
||
|
CodStatieInitiala | int | fk Statii->CodStatie
|
||
|
CodStatieFinala | int | fk Statii->CodStatie
|
||
|
|
||
|
### Tabel **Statii**
|
||
|
|
||
|
Coloană | Tip de date | Descriere
|
||
|
----------|-------------|----------
|
||
|
CodStatie | int pk | Codul folosit în setul de date
|
||
|
Denumire | text | Numele stației *(ex: București Nord Gr.A)*
|
||
|
|
||
|
### Tabel **ElementeTrasa**
|
||
|
|
||
|
Coloană | Tip de date | Descriere
|
||
|
------------------|-------------|----------
|
||
|
NumarTren | int | fk Trenuri->Number + Trase->NumarTren
|
||
|
IdTrasa | int | fk Trase->Id
|
||
|
Secventa | int | Ordinea secvenței în trasă (1, 2, ...)
|
||
|
Ajustari | |
|
||
|
CodStaDest | | fk Statii->CodStatie
|
||
|
CodStaOrigine | | fk Statii->CodStatie
|
||
|
DenStaDestinatie | |
|
||
|
DenStaOrigine | |
|
||
|
Km | int | Distanța în **metri** între stații *(ex: 3022 -> 3022 m / 3 km)*
|
||
|
Lungime | int | Lungimea trenului
|
||
|
OraP | int | Ora plecării (numărul de secunde de la 00:00:00 în ziua primei plecări)
|
||
|
OraS | int | Ora sosirii (numărul de secunde de la 00:00:00 în ziua primei plecări)
|
||
|
Rci | |
|
||
|
Rco | |
|
||
|
Restrictie | |
|
||
|
StationareSecunde | int | Numărul de secunde de staționare *în stația origine*
|
||
|
TipOprire | |
|
||
|
Tonaj | |
|
||
|
VitezaLivret | int | Viteza între stația origine și destinație în km/h
|