Mi ez?
Ez a dokumentum elmagyarázza, hogyan kell működnie az apkg archívumok feldolgozásának.
Az .apkg fájlok felépítése
Az Anki .apkg fájlok csak zip archívumok, amelyek a következő fájlokat tartalmazzák:
-
collection.anki2
: - A fájlok neve
1
,2
,3
,4
…: A kártyák által használt képek -
media
:
A collection.anki2 szerkezete
Ez a tényleges adatbázis, amely tartalmazza az összes jegyzetet és egyéb hasznos információt, amelyet a nézegető létrehozásához használunk. Van egy nagyon részletes útmutató arról, hogy pontosan mit tartalmaz az adatbázis.Ebben a dokumentumban csak azt írjuk le, amit ki kell húznunk az adatbázisból ahhoz, hogy létrehozzuk a nézegetőt.
A jegyzetek lekérése
A jegyzetek a notes
táblában vannak tárolva. A következő oszlopokra van szükségünk ebből a táblából:
-
id
: A jegyzet egyedi azonosítója -
mid
: A kártyamodell azonosítója (később ismertetjük, hogyan szerezzük meg) -
tags
: A jegyzethez tartozó címkék -
fld
: A jegyzet mezői. Ezt kell betáplálni a kártyamodellbe a kártyák generálásához. tartalmazza az összes mezőt,0x1f
(31) karakterrel elválasztva. A mezők sorrendje pontosan a jegyzet modelljében bemutatott sorrend.
Kártyamodellek lekérése
Hogy a jegyzetekből kártyákat tudjunk generálni, le kell kérnünk a kártyamodellt. A modell megmondja, hogy hány kártyát kell generálni egyetlen jegyzetből, milyen HTML veszi körül a jegyzetet, hogyan kell megjeleníteni a notes.fld
mezőit.
A modell a col
táblázat models
oszlopában található. Megjegyzendő, hogy a col
tábla mindig csakegy rekordot tartalmaz. A modell JSON formátumban van tárolva; ez egy példa arra, hogy hogyan néz ki egy modell JSON-ja két modellel:
{ "1471435193999": { "vers": , "name": "Istruzioni Assembly", "tags": , "did": 1493040141981, "usn": 625, "req": ], ] ], "flds": , "sticky": false, "rtl": false, "ord": 0, "font": "Arial", "size": 20 }, { "name": "Descrizione", "media": , "sticky": false, "rtl": false, "ord": 1, "font": "Arial", "size": 20 }, { "name": "Architettura", "media": , "sticky": true, "rtl": false, "ord": 2, "font": "Arial", "size": 20 } ], "sortf": 0, "tmpls": , "mod": 1493150692, "latexPost": "\end{document}", "type": 0, "id": "1471435193999", "css": ".card {\n font-family: arial;\n font-size: 20px;\n text-align: center;\n color: black;\n background-color: white;\n}\n", "latexPre": "\documentclass{article}\n\special{papersize=3in,5in}\n\usepackage{inputenc}\n\usepackage{amssymb,amsmath}\n\pagestyle{empty}\n\setlength{\parindent}{0in}\n\begin{document}\n" }, "1471435194000": { "vers": , "name": "Base (default)", "tags": , "did": 1492955368330, "usn": 668, "req": ] ], "flds": , "sticky": false, "rtl": false, "ord": 0, "font": "Arial", "size": 20 }, { "name": "Retro", "media": , "sticky": false, "rtl": false, "ord": 1, "font": "Arial", "size": 20 } ], "sortf": 0, "tmpls": , "mod": 1494091839, "latexPost": "\end{document}", "type": 0, "id": 1471435194000, "css": ".card {\n font-family: Arial;\n font-size: 20px;\n text-align: center;\n color: black;\n background-color: white;\n}\n\nimg {\n vertical-align: middle;\n padding-bottom: 7px;\n padding-right: 6px;\n padding-left: 6px\n}", "latexPre": "\documentclass{article}\n\special{papersize=3in,5in}\n\usepackage{inputenc}\n\usepackage{amssymb,amsmath}\n\pagestyle{empty}\n\setlength{\parindent}{0in}\n\begin{document}\n" }}
Az előbb említett URL-ben van egy nagyon szép leírás arról, hogy a modell egyes mezői mit csinálnak. Itt csak azokat fogjuk leírni, amelyekre szükségünk van a kártyaböngésző létrehozásához.
Az objektum gyökerében van egy "1471435193999"
kulcs. Ez a kulcs az adott modell azonosítója.Ez a notes
táblázat mid
oszlopában szerepel.
Az objektumon belül van egy "flds"
kulcsú tömb. Ez a tömb tartalmazza azokat a mezőket, amelyeket a kártyák a jegyzetek létrehozásakor megadnak. Általában csak “Front” és “Rear” mezők vannak, azonban a modelltől függően több különböző mező is lehet. Mint már említettük, a jegyzetek ezeket az információkat a notes.fld
oszlopban tárolják; az oszlop mezői az ebben a tömbben lévő meződefiníciók sorrendjében vannak.
A "tmpls"
objektum a jegyzetek sablonjait tartalmazza, és információt nyújt a kártyák HTML-szerkezetéről. A több sablont definiáló modellek több kártyát generálnak, minden sablonhoz egyet. Ez az objektum két fontos mezővel rendelkezik:
-
"qfmt"
: A kártya elejének HTML-je -
"afmt"
: A kártya hátuljának HTML-je -
"ord"
: A sablon pozíciója a"tmpls"
tömbben. Ezt használja acards
tábla a kártyát generáló sablon azonosítására.
Ezek a mezők tartalmazhatnak {{placeholders}}
, amelyeket a kártyák által notes.fld
-ben tárolt mezők értékeivel kell helyettesíteni. A mező pozíciója és a mező neve közötti asszociáció a "flds"
objektumoké. Vegye figyelembe, hogy a "afmt"
tartalmazhat egy speciális {{FrontSide}}
nevű helytartót; ez csak egy praktikus módja annak, hogy a kártya tartalmát megjelenítse anélkül, hogy a kártyamodellek létrehozása során a & tartalmának "qfmt"
másolása> beillesztése nélkül kelljen a "qfmt"
tartalmát másolni.
Az utolsó, minket érdeklő mező a "css"
; ez tartalmazza a kártyára alkalmazandó CSS-kódot.
Lapinformációk lekérése
Az archívumban található lapok információit a col.decks
oszlopban tároljuk JSON formátumban. Íme egy JSON-minta:
{ "1": { "desc": "", "name": "Predefinito", "extendRev": 50, "usn": 0, "collapsed": false, "newToday": , "timeToday": , "dyn": 0, "extendNew": 10, "conf": 1, "revToday": , "lrnToday": , "id": 1, "mod": 1494099120 }, "1493040141981": { "extendRev": 50, "collapsed": false, "newToday": , "timeToday": , "dyn": 0, "extendNew": 10, "conf": 1, "revToday": , "lrnToday": , "id": 1493040141981, "mod": 1494073733, "name": "Universit\u00e0 - Calcolatori::Assembly", "usn": 661, "browserCollapsed": true, "mid": 1471435194000, "desc": "" }, "1492955368330": { "extendRev": 50, "collapsed": false, "newToday": , "timeToday": , "dyn": 0, "extendNew": 10, "conf": 1, "revToday": , "lrnToday": , "id": 1492955368330, "mod": 1494095504, "name": "Universit\u00e0 - Calcolatori", "usn": 671, "browserCollapsed": true, "mid": 1471435194000, "desc": "" }}
Ezek közül néhány mezőt érdemes megjegyezni:
-
id
: A pakli egyedi azonosítója. Az azonosítót acards
táblában, adid
oszlopban használjuk a kártyák és a paklik közötti kapcsolatok meghatározására (később magyarázzuk el). Megjegyzendő, hogy az alapértelmezett pakli mindig1
azonosítóval rendelkezik. -
name
: A pakli neve. Gyermekpaklik esetén a név a “Szülőpakli neve::Gyermekpakli neve”
Kártyák lekérése
A kártyákra vonatkozó információkat a cards
táblázatban tároljuk. A következő oszlopokra van szükségünk ebből a táblából:
-
id
: a kártya egyedi azonosítója -
nid
: a kártyát generáló jegyzet azonosítója -
did
: annak a paklinak az azonosítója, amelyben ez a kártya található -
ord
: a modell sablonjának pozíciója; megegyezik a sablonord
mezőjével.
A médiafájl szerkezete
media
egy JSON fájl, amely a képek kódneveit az eredeti nevekhez társítja. Megjegyezzük, hogy bármelyik kártya mezője tartalmazhat képeket, de a képek a teljes nevükkel vannak összekapcsolva.Az .apkg fájl létrehozása során az anki tömöríti a képek neveit (valójában csak haladó számokkal nevezi el ezeket), azonban a kártyák továbbra is az eredeti névre hivatkoznak. A media
fájl célja, hogy képesek legyünk lefordítani a képek eredeti nevének számneveit.
A media
felépítése eléggé egyszerű: