Tárgygráf – targygraf.hu
Interaktív mintatanterv magyar egyetemi szakokhoz, 2012 óta. Jelölöd, mit teljesítettél, a gráf pedig megmutatja, mit vehetsz fel, minek mi az előfeltétele, és hogyan épülnek egymásra a tárgyaid félévről félévre.
Az oldalt hallgatók tartják karban: minden tanterv egy-egy JSON fájl ebben a repóban. Ha hibát találsz, vagy hiányzik az egyetemed, karod vagy szakod, néhány kattintással javíthatod vagy felviheted, még fejlesztői tudás sem kell hozzá.
- A tantervek a
json/mappában élnek: minden egyetem, kar és szak egy külön fájl. - A fájlt a GitHub webes szerkesztőjében is módosíthatod (ceruza ikon). A GitHub automatikusan elkészíti a saját másolatod (fork), és felajánlja a pull request nyitását.
- A pull requestre automatikus ellenőrzés fut: formátumhibát, elgépelt előfeltétel-kódot azonnal jelez, nem tudsz elrontani semmit.
- Beolvasztás után az oldal automatikusan újraépül és frissül.
A leggyakoribb eset: elavult a tanterv, hibás egy előfeltétel, hiányzik egy tárgy.
- Keresd meg a szak fájlját:
json/programs/{egyetem}_{kar}_{szak}.json, példáuljson/programs/pe_mik_mernokinformatikus.json. (A programoldalak alján lévő GitHub-link egyenesen a megfelelő fájl szerkesztőjébe visz.) - Módosítsd a tárgyakat a lenti JSON formátumok szerint.
- Frissítsd a
curriculum_updated_atmezőt a tanterv kiadási / módosítási dátumára (ÉÉÉÉ-HH-NN). - Nyiss pull requestet.
Ha egy szakon új tanterv indul, a régi nem tűnik el: mindkettő megmarad, külön oldalon. Az elnevezés szabálya, hogy az évszám nélküli fájlnév mindig a legfrissebb tantervé, a korábbiak pedig évszámot kapnak a nevük végére:
bme_vik_mernok-informatikus.json <- a mindenkori legfrissebb
bme_vik_mernok-informatikus2022.json <- korábbi évfolyamok
bme_vik_mernok-informatikus2014.json
Így a targygraf.hu/bme/mernok-informatikus cím mindig az aktuális tantervet
mutatja, a legtöbb látogatónak ugyanis ez a jó válasz.
Új tanterv felvitele tehát két lépés:
- Nevezd át a jelenlegi, évszám nélküli fájlt: tedd a végére annak az évnek a
számát, amelytől az a tanterv érvényes volt (például
bme_vik_villamosmernok.json->bme_vik_villamosmernok2022.json). - Az új tantervet vidd fel évszám nélküli néven.
A name mezőt is igazítsd hozzá: az évszám nélküli fájlban a szak sima neve
áll ("Villamosmérnök"), az évszámosokban pedig az évfolyam is
("Villamosmérnök (2022-től felvetteknek)"). A szakválasztóban ez a név
látszik, így rögtön látni, melyik az aktuális tanterv.
Figyelem: az átnevezés megváltoztatja a régi tanterv URL-jét. Ha az a cím már
élt, vedd fel a régi útvonalat a worker/routing.ts RENAMED_PROGRAMS
listájába, különben a régi link 404-et ad. Csak akkor nevezz át, ha tényleg új
tanterv lép életbe.
Új szak egy már meglévő karhoz:
- Hozz létre egy új fájlt:
json/programs/{egyetem}_{kar}_{szak}.json. A fájlnév pontosan három részből áll_jelekkel elválasztva; a szak neve kisbetűs, ékezet nélküli, kötőjeles (pl.bme_vik_mernok-informatikus.json). Ez lesz az oldal címe is:targygraf.hu/bme/mernok-informatikus. - A tartalom váza:
{
"name": "Mérnökinformatikus",
"description": "Mérnökinformatikus BSc szak - nappali tagozat tanterve",
"curriculum_updated_at": "2024-05-20",
"course_blocks": [ /* félévek és tárgyblokkok, lásd lent */ ]
}- A
course_blocksfelépítését a JSON formátumok fejezet írja le. Érdemes egy meglévő, hasonló szak fájljából kiindulni.
Új kar, ha még nincs meg:
- Hozz létre egy fájlt:
json/faculties/{egyetem}_{kar}.json, példáuljson/faculties/pe_mik.json:
{
"name": "Műszaki Informatikai Kar",
"ordering": 0 // a kar sorrendje az egyetem oldalán
}- Utána vidd fel a kar legalább egy szakját a fenti módon.
A karok az ordering mező szerint követik egymást az egyetem oldalán, a
szakok pedig név szerint, ábécérendben jelennek meg.
- Hozz létre egy fájlt:
json/universities/{egyetem}.json, ahol a fájlnév az egyetem rövid, kisbetűs kódja (pl.pe.json,bme.json). Ez lesz az URL is:targygraf.hu/{egyetem}.
{
"name": "Pannon Egyetem",
"has_logo": false // hagyd false-on
}- Egy egyetem önmagában még nem jelenik meg értelmesen: vigyél fel hozzá legalább egy kart és egy szakot is (Új kar vagy szak felvétele).
// json/universities/pe.json // a fájlnév az egyetem kódja és URL-je
{
"name": "Pannon Egyetem", // string név
"has_logo": false // boolean hagyd false-on
}// json/faculties/pe_mik.json // {egyetem}_{kar}
{
"name": "Műszaki Informatikai Kar", // string név
"ordering": 0 // uint sorrend az egyetem oldalán
}// json/programs/pe_mik_mernokinformatikus.json // {egyetem}_{kar}_{szak}
{
"name": "Mérnökinformatikus", // string név
"description": "Nappali tagozat tanterve", // string leírás
"curriculum_updated_at": "2024-05-20", // date a tanterv dátuma (ÉÉÉÉ-HH-NN)
"course_blocks": [/* tantárgyblokkok */] // array lásd lent
}A row: 0 blokkok a felső sorban jelennek meg (ezek a félévek), a
row: 1 és row: 2 blokkok külön sorokban alattuk (pl. differenciált /
kötelezően választható tárgycsoportok).
// sima félév
{
"name": "1. félév", // string a blokk címe
"row": 0, // uint 0 = félévsor, 1-2 = alsó sorok
"courses": [/* tárgyak */] // array
}// hivatkozható blokk (választható tárgycsoport)
{
"name": "Differenciált szakmai tárgy I.", // string egyedi név
"row": 1,
"courses": [/* tárgyak */]
}// hivatkozható blokk több oszlopra bontva: a blokknevek egyediek kell legyenek
// (ezek a hivatkozás kulcsai), a "#2" jelölés viszont nem látszik a címben,
// így a részek egy csoportként jelennek meg. Mindegyik részt fel kell sorolni
// a hivatkozó tárgy course_block_references mezőjében.
{
"name": "Differenciált szakmai tárgy I. #2",
"row": 1,
"courses": [/* tárgyak */]
}// sima tárgy
{
"code": "VEMIMAB146M", // string tárgykód
"name": "Matematikai analízis I.", // string név
"credits": 6 // uint kredit
}// tárgy előfeltételekkel
{
"code": "VEMIMAB244M",
"name": "Matematikai analízis II.",
"credits": 4,
"prerequisites": [
"VEMIMAB146M" // a tárgy kódja ugyanebben a fájlban
]
}// párhuzamosan felvehető előfeltétel: zárójelben
{
"code": "VEMISA3144A",
"name": "Adatstruktúrák és algoritmusok",
"credits": 4,
"prerequisites": [
"VEMIMAB146M",
"(VETKMA1243D)" // elég egyidejűleg felvenni
]
}// kreditkapu: legalább n teljesített kredit kell hozzá
{
"code": "VEMIKNB312F",
"name": "Kutatás-fejlesztés",
"credits": 2,
"prerequisites": [
"___75___" // ___20___, ___40___, ___45___, ___50___,
] // ___75___, ___120___, ___130___,
// ___150___ használható
}// választható tárgycsoportra hivatkozó tárgy
{
"code": null,
"name": "Differenciált szakmai tárgy I.",
"credits": 4, // ennyi kreditet kell a hivatkozott
"course_block_references": [ // blokkokban teljesíteni
"Differenciált szakmai tárgy I.", // a blokkok pontos neve
"Differenciált szakmai tárgy I. #2"
]
}// szabadon választható keret
{
"code": "___OPTIONAL___",
"name": "Szabadon választható",
"credits": 6
}// vizuális elválasztó a blokkon belül
{
"code": "______",
"name": null,
"credits": 0
}Az oldal statikus: az Astro-alapú generátor a json/ fájlokból építi az
összes oldalt.
npm install
npm test # a PR-eken is futó teljes ellenőrzés
npm run dev # helyi fejlesztői szerverA felépítés és a deploy részletei az
ARCHITECTURE.md fájlban.