slavetto / anki-cards-web-browser

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 a cards 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 a cards táblában, a did 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 mindig 1 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 sablon ord 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ű:

Szólj hozzá!