Vad är detta?
Detta dokument förklarar hur bearbetningen av apkg-arkiven ska fungera.
Strukturen för .apkg-filer
Anki .apkg-filerna är bara zip-arkiv som innehåller följande filer:
-
collection.anki2
: - Filer som heter
1
,2
,3
,4
…: Bilderna som korten använder -
media
: En json-fil som innehåller mappningar mellan bilderna och deras ursprungliga namn (t.ex. fil1
heter i själva verketlatex-96c15f8a1af25e7a2eec64f7c6fedafe12363352.png
i korten).
Strukturen för collection.anki2
Detta är den faktiska databasen som innehåller alla anteckningar och annan användbar information som vi kommer att använda för att generera tittaren. Det finns en mycket detaljerad guide om vad exakt databasen innehåller.I det här dokumentet kommer vi bara att beskriva vad vi behöver hämta från databasen för att generera tittaren.
Hämtning av anteckningar
Anteckningarna lagras i tabellen notes
. De kolumner som vi behöver från den tabellen är:
-
id
: Anteckningens unika identifierare -
mid
: ID för kortmodellen (beskrivs senare hur man får fram det) -
tags
: De taggar som är kopplade till anteckningen -
fld
: Fälten för anteckningen. Detta måste matas in i kortmodellen för att generera korten.Det innehåller alla fält, separerade med tecknet0x1f
(31). Ordningen på fälten är exakt den som presenteras i notisens modell.
Hämta kortmodeller
För att kunna generera korten från notiserna måste vi hämta kortmodellen. Modellen talar om hur många kort som måste genereras från en enda anteckning, vilken HTML som omger anteckningen och hur fälten i notes.fld
måste presenteras.
Modellen finns i kolumnen models
i tabellen col
. Observera att tabellen col
alltid endast innehåller enregistrering. Modellen lagras i ett JSON-format; detta är ett exempel på hur en modells JSON med två modeller ser ut:
{ "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" }}
I samma URL som nämndes tidigarefinns en mycket bra beskrivning av vad varje fält i modellen gör. Här beskrivs endast de som vi behöver för att skapa kortbläddraren.
I objektets rot finns en "1471435193999"
-nyckel. Den nyckeln är id för den modellen.Detta nämns i kolumnen mid
i tabellen notes
.
Inom det objektet finns en array med nyckeln "flds"
. Denna array innehåller de fält som korten anger när de skapar anteckningar. Vanligtvis finns det bara fälten ”Front” och ”Rear”, men beroende på modellen är det möjligt att ha fler olika fält. Som tidigare nämnts lagrar noterna denna information i kolumnen notes.fld
; fälten i kolumnen är i samma ordning som fältdefinitionerna i denna matris.
Objektet "tmpls"
innehåller mallar för noterna och ger information om kortets HTML-struktur. Modeller som definierar flera mallar genererar flera kort, ett för varje mall. Detta objekt har två viktiga fält:
-
"qfmt"
: HTML för kortets framsida -
"afmt"
: HTML för kortets baksida -
"ord"
: Mallens position i arrayen"tmpls"
. Detta används av tabellencards
för att identifiera den mall som genererade kortet.
Dessa fält kan innehålla {{placeholders}}
som måste ersättas med värdena för de fält som korten lagrar i notes.fld
. Sambandet mellan fältposition och fältnamn är detsamma som för objekten i "flds"
. Observera att "afmt"
kan innehålla en särskild platshållare som kallas {{FrontSide}}
; detta är bara ett praktiskt sätt att visa kortets innehåll utan att behöva kopiera & klistra in innehållet i "qfmt"
när man skapar kortmodeller.
Det sista fältet av vårt intresse är "css"
; det innehåller den CSS-kod som måste tillämpas på kortet.
Hämtning av däckinformation
Informationen om de däck som finns i arkivet lagras i col.decks
-kolumnen iJSON-format. Här är ett exempel på JSON:
{ "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": "" }}
Vissa fält som bör noteras:
-
id
: Unikt id för spelet. Id används i tabellencards
, i kolumnendid
för att specificera associationerna mellan kort och däck (förklaras senare). Observera att standardleken alltid har id1
. -
name
: Spelets namn. Om det finns underordnade däck kommer namnet att vara i formatet ”Parent deck name::Child deck name”
Hämtning av kort
Informationen om kort lagras i tabellen cards
. De kolumner som vi behöver från den tabellen är:
-
id
: unik identifierare för kortet -
nid
: id för den anteckning som genererade det här kortet -
did
: id-identifierare för det kortspel där det här kortet finns -
ord
: positionen för mallen för modellen; den matchar mallensord
fält.
Strukturen för mediefilen
media
är en JSON-fil som associerar bildernas kodnamn med deras ursprungliga namn. Observera att alla kortfält kan innehålla bilder, men bilderna är länkade med sitt fullständiga namn.Under skapandet av .apkg-filen komprimerar Anki bildernas namn (i själva verket döps de bara om med progressiva nummer), men korten fortsätter att hänvisa till det ursprungliga namnet. Syftet med media
-filen är att göra det möjligt för oss att översätta numeriska namn i bildernas originalnamn.
Strukturen i media
är ganska enkel: