Åpne data
Datasettet
Et åpent og etterprøvbart arkiv over AaFKs kamper, sesonger og personer. Alt ligger som YAML-filer på GitHub, og bygges om til en skrivebeskyttet SQLite-fil ved hver utrulling. Dataene kan utforskes her eller lastes ned og brukes videre.
Hva arkivet inneholder
- 1707 spilte kamper fra 1915 til 2026, fordelt på 103 år.
- 41 av 70 avsluttede seriesesonger har komplett dekning fra første til siste runde.
- Detaljgraden varierer fra kamp til kamp: 658 har hendelser som mål og kort, 535 har lagoppstilling og 490 har tilskuertall.
- 489 personer er registrert med 583 kontrollerte roller eller verv.
Dekningen følger kildene. At en opplysning mangler her, betyr derfor ikke at den ikke finnes, bare at ingen kilde vi har, oppgir den.
Bruk dataene videre
Koble et AI-verktøy til arkivet med MCP på https://aafkarkivet.no/mcp. Bygger du et nettsted, skript eller en app, finnes det også et åpent REST API på /api/v1 med maskinlesbar kontrakt i OpenAPI.
Begge er gratis og bruker samme skrivebeskyttede arkiv. Les den korte veiledningen, API-dokumentasjonen og MCP-dokumentasjonen før du bygger statistikk på kildedokumenterte resultater.
Kamper per konkurranse
- 1. divisjon450
- Tippeligaen346
- 2. divisjon221
- Norgesmesterskapet213
- Treningskamp200
- Eliteserien149
- 3. divisjon63
- Landsdelsserien44
- UEFA Europa League-kvalifisering14
- Søndmøre kreds, Klasse A5
- Paivas pokal2
Serien har skiftet navn flere ganger, og hver kamp ligger under navnet som gjaldt da den ble spilt. Les kilder og forbehold før du gjenbruker data.
source_results
Resultater dokumentert i historiske kilder, men uten nok opplysninger til å være kanoniske kamper.
- aafk_score og opponent_score står alltid fra AaFKs perspektiv. Hjemme/borte er ukjent, og kampdato er bare satt når kilden oppgir den uttrykkelig.
- Radene teller ikke i matches, seasons eller kampstatistikken. Bruk match_id når en rad senere er koblet til en komplett kamp.
- competition_id er bare satt når kilden uttrykkelig navngir konkurransen. NULL betyr ukjent.
- Ved rekorder og spørsmål om hele historien må ukoblede rader vurderes sammen med matches. Omtal dem som resultater kilden oppgir, ikke som fullstendig identifiserte kamper.
| Kolonne | Type | Betydning |
|---|---|---|
claim_id | text | Globalt stabil claim-identifikator (srcclaim-...) uavhengig av kildekoordinater. |
source_id | text | Historisk kilde. |
source_title | text | Lesbar tittel på den historiske kilden. |
id | text | Stabil ID innen kilden. |
season | integer | Året resultatet står under i kilden. |
source_order | integer | Rekkefølgen i resultatlista. |
page | integer | Trykt sidetall. |
date | text | Datoen kilden oppgir på formen YYYY-MM-DD. NULL når kilden ikke oppgir eksakt dato. |
opponent | text | Kildens motstandernavn. Kan være NULL ved walkover. |
opponent_club_id | text | Kjent klubb når avklart. |
aafk_score | integer | AaFKs mål. NULL ved walkover. |
opponent_score | integer | Motstanderens mål. NULL ved walkover. |
result | text | S, U eller T fra AaFK-perspektivet. NULL ved walkover. |
competition_id | text | Konkurranse når kilden sier den uttrykkelig. |
status | text | played eller walkover. |
replay | integer (0/1) | Omkamp. |
after_extra_time | integer (0/1) | Resultat etter ekstraomganger. |
round | integer | Runde når oppgitt. |
result_group_id | text | Valgfri ID som samler flere kildepåstander om samme uidentifiserte historiske oppgjør. |
match_id | text | Kanonisk kamp når koblet. Ellers NULL. |
note | text | Kort merknad eller forbehold. |
source_url | text | Direktelenke til publikasjonen hos kilden. |
url | text | Lenke til kildesiden i arkivet. |
result_groups
Ukoblede kildepåstander samlet til ett mulig oppgjør per result_group_id.
- Én rad er én mulig kamp, ikke et kanonisk faktum. claims bevarer hver kildes originaltekst og sources bevarer kildene.
- has_conflicts markerer motstridende ikke-tomme datoer, klubb-ID-er, resultater eller konkurranser. Manglende verdi i én kilde er ikke alene en konflikt.
- Radene skal aldri summeres sammen med matches. opponent_club_id kan være NULL selv om opponent inneholder et lesbart kildenavn.
| Kolonne | Type | Betydning |
|---|---|---|
record_id | text | result_group_id, eller claim_id når påstanden ikke inngår i en gruppe. |
date | text | Felles eksakt dato når kildene er enige. Ellers NULL. |
date_precision | text | exact eller season_only. |
season | integer | Sesongen gruppen ligger under. |
opponent | text | Stabilt visningsnavn. Originale skrivemåter ligger i claims. |
opponent_search | text | Normalisert søketekst med alle trykte motstandernavn. |
opponent_club_id | text | Kanonisk klubb-ID når avklart uten motstrid. |
aafk_score | integer | AaFKs mål når kildene er enige. |
opponent_score | integer | Motstanderens mål når kildene er enige. |
goal_difference | integer | AaFKs mål minus motstanderens mål. |
result | text | S, U eller T når kildene er enige. |
competition_id | text | Konkurranse-ID når minst én kilde oppgir den og ingen motsier. |
competition | text | Konkurransens visningsnavn. NULL når competition_id ikke finnes i konkurranseregisteret. |
has_conflicts | integer (0/1) | Om ikke-tomme kjernefelt motsier hverandre. |
result_group_id | text | Eksplisitt gruppe-ID. NULL for en enkeltstående claim. |
note | text | Kildenotatene satt sammen til én lesbar tekst. Bruk notes når du skal skille dem. |
notes | JSON | Ett element per kildenotat. Notatene kommer fra ulike kilder og skal ikke tilskrives én av dem. |
claim_summary | JSON | Hvor enige kildene i gruppen er om score, dato, motstanderidentitet og konkurranse. Beskriver intern enighet, ikke om påstanden er sann. |
missing_fields | JSON | Felt som ikke kan omtales som kanonisk eller avklart. |
source_count | integer | Antall unike kilder i gruppen. |
sources | JSON | Unike kilder med tittel, side og lenker. |
claims | JSON | Alle originale påstander med motstandernavn, score, konkurranse og kilde. |
url | text | Relativ lenke til en kildeside i arkivet. |
venues
Stadioner og baner med historiske navn, AaFKs hjemmebaneperioder, dekke og kildeførte publikumsrekorder.
- home_periods, attendance_records og sources er JSON-lister. En åpen slutt i en hjemmebaneperiode betyr at kilden ikke oppgir slutten eller at perioden fortsatte da siden ble oppdatert.
- En publikumsrekord kan være omtrentlig. Bruk approximate-feltet inne i attendance_records før tallet omtales som eksakt.
| Kolonne | Type | Betydning |
|---|---|---|
id | text | Stabil stadion-ID. |
name | text | Kanonisk navn. |
city | text | By. Kan være NULL. |
country | text | Landkode med to bokstaver. |
capacity | integer | Oppgitt kapasitet. Kan være NULL og er ikke det samme som publikumsrekord. |
opened | integer | Åpningsår når kjent. |
opened_date | text | Eksakt åpningsdato når kjent. |
closed | integer | Stengningsår når kjent. |
closed_date | text | Eksakt stengnings- eller sluttdato når kjent. |
surface | text | 'gravel', 'grass' eller 'artificial_turf'. |
names | JSON | Tidsavhengige stadionnavn. |
surface_history | JSON | Tidfestede banedekker med kilde og eventuelt forbehold. |
home_periods | JSON | Klubb, fra-/til-år og kilde for hver hjemmebaneperiode. |
attendance_records | JSON | Tilskuertall, motstander, eventuelt år og kontekst, omtrentlig-flagg og kilder. |
events | JSON | Kildede åpninger, kamper, byggestarter, oppgraderinger og andre milepæler. |
sources | JSON | Kilder som dokumenterer stadionets øvrige felt. |
note | text | Forbehold eller kort redaksjonell merknad. |
matches
Én rad per kamp i arkivet, sett fra AaFKs synsvinkel. Dette er hovedtabellen. de fleste spørsmål besvares herfra alene.
- Alle kamper i arkivet involverer AaFK. «aafk_score» er alltid vårt lag, uansett om vi spilte hjemme eller borte.
- goal_difference er aafk_score minus opponent_score, altså negativ ved tap.
- result regnes etter ordinær tid pluss ekstraomgang. En kamp avgjort på straffer har result = 'U'. Bruk won_on_penalties for å se hvem som gikk videre.
- Kamper som ennå ikke er spilt har status 'scheduled' og NULL i alle resultatkolonner. Regner du statistikk, filtrer på status IN ('played', 'awarded'). Det er den samme regelen alle aggregatene i datasettet bruker: en kamp avgjort på grønt bord har et resultat og teller med, en avbrutt kamp har ingen sluttstilling og teller ikke.
- confidence sier hvor sikre opplysningene er. 'probable' er vanlig for kamper før 1990. Si fra i svaret når en kamp ikke er 'confirmed'.
- Kampstatistikken kommer fra FotMob og finnes bare for deler av 2014–2026. Per 11. august 2026 har 276 av 1 353 kamper ballbesittelse, skudd, skudd på mål og cornere; 138 har fouls og offsider; 105 har xG. NULL betyr at kilden ikke leverte feltet, ikke null hendelser.
- Dekningen varierer med kildens historiske payload: 2018 og 2019 leverer ingen av de sju feltene, 2021 leverer fire felt for 17 kamper, og 2024/2025 leverer vanligvis bare de fire grunnfeltene. Én 2024-kamp er holdt utenfor fordi FotMob oppgir 32 cornere.
- xG kan ikke sammenlignes ukritisk mellom sesonger: FotMob dokumenterer ikke modellversjonen i kampresponsen, og modellen kan ha endret seg. Arkivet lagrer kildens tall, ikke en egen beregning.
- SQLite har ingen boolsk type: is_home, neutral_venue og has_conflicts er heltall 0 eller 1. Skriv «WHERE is_home = 1», ikke «WHERE is_home IS TRUE».
| Kolonne | Type | Betydning |
|---|---|---|
match_id | text | Unik ID, på formen YYYY-MM-DD-hjemmelag-bortelag. |
date | text (YYYY-MM-DD) | Kampdato. |
season | integer | Sesongåret kampen tilhører. |
date_confidence | text | 'exact', 'month' eller 'year'. For gamle kamper er noen ganger bare året kjent. |
kickoff | text (HH:MM) | Avspark, lokal tid. Ofte NULL for eldre kamper. |
status | text | 'played', 'scheduled', 'abandoned', 'awarded', 'cancelled' eller 'postponed'. |
competition_id | text | Konkurransens stabile ID. Bruk denne til å koble mot seasons og result_groups; navnet endrer seg over tid, ID-en gjør det ikke. |
competition | text | Konkurransens navn slik det var på kampdatoen: «Tippeligaen» for en kamp i 2005, «Eliteserien» for en i 2024. |
competition_type | text | 'league', 'national_cup', 'european', 'friendly' eller 'playoff'. |
competition_tier | integer | Nivå i seriepyramiden, 1 er øverst. NULL for cup og europa. |
stage | text | 'regular_season', 'quarter_final', 'final' osv. |
round | integer | Serierunde eller cuprunde. |
is_home | integer (0/1) | Sant når AaFK spilte på hjemmebane. |
opponent | text | Motstanderens navn slik det var på kampdatoen. |
opponent_club_id | text | Motstanderens ID, stabil over tid selv om navnet endres. |
aafk_score | integer | AaFKs mål, inkludert ekstraomganger. |
opponent_score | integer | Motstanderens mål, inkludert ekstraomganger. |
goal_difference | integer | aafk_score minus opponent_score. Negativ ved tap. |
result | text | 'S' seier, 'U' uavgjort, 'T' tap. NULL når kampen ikke er spilt. |
after_extra_time | integer (0/1) | Sant når kampen gikk til ekstraomganger. Målene derfra er allerede med i aafk_score. |
note | text | Forbehold om denne kampen. Eldre kilder oppgir ofte bare sluttresultatet, ikke stillingen etter ordinær tid. Står det noe her, skal det tas med i svaret. |
decided_on_penalties | integer (0/1) | Sant når kampen gikk til straffesparkkonkurranse. |
won_on_penalties | integer (0/1) | Ved straffekonkurranse: vant AaFK den? Ellers NULL. |
venue | text | Stadionnavn slik det var på kampdatoen. |
neutral_venue | integer (0/1) | Sant når kampen ble spilt på nøytral bane. |
attendance | integer | Tilskuertall. Ofte NULL for eldre kamper. |
referee | text | Dommer. |
has_stats | integer (0/1) | Sant når kampen har minst ett lagstatistikkfelt. |
aafk_possession | real | AaFKs ballbesittelse i prosent, uansett hjemme/borte. |
opponent_possession | real | Motstanderens ballbesittelse i prosent. |
aafk_shots | integer | AaFKs totale skudd. |
opponent_shots | integer | Motstanderens totale skudd. |
aafk_shots_on_target | integer | AaFKs skudd på mål. |
opponent_shots_on_target | integer | Motstanderens skudd på mål. |
aafk_corners | integer | AaFKs cornere. |
opponent_corners | integer | Motstanderens cornere. |
aafk_fouls | integer | AaFKs registrerte fouls/frispark mot. |
opponent_fouls | integer | Motstanderens registrerte fouls/frispark mot. |
aafk_offsides | integer | AaFKs offsider. |
opponent_offsides | integer | Motstanderens offsider. |
aafk_xg | real | FotMobs forventede mål (xG) for AaFK. NULL når kilden ikke leverte xG. |
opponent_xg | real | FotMobs forventede mål (xG) for motstanderen. |
report_summary | text | Én til to setningers sammendrag, der det finnes. |
confidence | text | 'confirmed', 'probable' eller 'disputed'. |
has_conflicts | integer (0/1) | Sant når en uenighet mellom kilder er ført inn på kampen. Slå opp match_conflicts for å se hva den gjelder. Uenigheten løses ikke automatisk, og høyeste kildeprioritet vinner ikke av seg selv. |
completeness | real | 0–1: hvor mye av kampen som er dokumentert. |
missing_fields | text (JSON-liste) | Feltene completeness savner, som 'score', 'attendance', 'lineups', 'events', 'report', 'referee', 'venue' eller 'providers'. Tom liste betyr at kampen er fullt dokumentert. Bruk json_each for å telle: en kamp uten 'lineups' her har ingen registrert lagoppstilling. |
last_retrieved_at | text (YYYY-MM-DD) | Siste gang en kilde ble hentet for kampen. NULL for kamper uten kildehenvisning. |
providers | text (JSON-liste) | Dataleverandører for kampen, med providerId, URL, hentetid og feltene leverandøren støtter. Holdes adskilt fra historiske sources. |
tags | text (JSON-liste) | Frie stikkord, f.eks. 'derby'. |
sources | text (JSON-liste) | Historiske publikasjoner som dokumenterer kampen, med sourceId og eventuelt side eller notat. |
url | text | Lenke til kampsiden. Bruk denne som kildehenvisning i svar. |
match_stats
To rader per kamp med statistikk: én for AaFK og én for motstanderen. Bruk denne ved summering eller sammenligning mellom sider.
- Viewet inneholder kamper med minst ett statistikkfelt. Hvert enkelt felt kan fortsatt være NULL.
- side er 'aafk' eller 'opponent'. is_home beskriver om AaFK var hjemmelag, også på motstanderraden.
- xG er FotMobs publiserte tall. Ingen xG-differanse lagres; regn ut xg minus motstanderens xg i spørringen når det trengs.
| Kolonne | Type | Betydning |
|---|---|---|
match_id | text | Kampens ID. |
date | text (YYYY-MM-DD) | Kampdato. |
season | integer | Sesongår. |
competition | text | Konkurransens navn. |
competition_type | text | Konkurransetype. |
is_home | integer (0/1) | Sant når AaFK var hjemmelag. |
side | text | 'aafk' eller 'opponent'. |
team | text | Laget statistikken gjelder. |
opponent | text | Motparten på denne raden. |
possession | real | Ballbesittelse i prosent. |
shots | integer | Totale skudd. |
shots_on_target | integer | Skudd på mål. |
corners | integer | Cornere. |
fouls | integer | Registrerte fouls/frispark mot. |
offsides | integer | Offsider. |
xg | real | FotMobs forventede mål; NULL når feltet mangler. |
url | text | Lenke til kampsiden. |
seasons
Ett sammendrag per sesong OG konkurranse: plassering, målforskjell og resultatfordeling. Et år med både serie og cup gir to rader, så filtrer på competition_id eller competition_type når du vil ha bare den ene.
- Én rad per sesong OG konkurranse. Et år med serie, cup og treningskamper gir tre rader, og tallene i hver rad gjelder bare den konkurransen. Summer aldri over rader uten å filtrere først.
- Serieradene teller bare seriekamper. Kvalifiseringskamper etter sesongen ligger i matches, men holdes utenfor her, slik at en komplett sesong ikke ser ufullstendig ut.
- En rad betyr at året er representert, ikke at sesongen er komplett. Se coverage, og coverage_evidence for hva merket hviler på. 'complete' krever både sammenhengende runder og et kjent forventet omfang som stemmer; sammenhengende runder alene gir 'unverified'.
- coverage her gjelder én konkurranse. 'complete' på serieraden betyr at serien er hel, ikke at året er det: cupen kan mangle en kamp. Spør season_coverage når spørsmålet gjelder hele sesongen.
- Kamper som ikke er spilt teller ikke med i played eller i resultatene. Står scheduled over 0, pågår sesongen.
- played teller kamper med status 'played' eller 'awarded', den samme regelen som i matches og opponents. De tre kan derfor sammenlignes direkte.
| Kolonne | Type | Betydning |
|---|---|---|
season | integer | Sesongår. |
competition_id | text | Konkurransens ID. Ett år kan ha flere rader: serie, cup og treningskamper hver for seg. |
competition | text | Konkurransens navn det året. |
competition_type | text | Konkurransetype. |
competition_tier | integer | Nivå, 1 er øverst. |
final_position | integer | Sluttplassering, hentet fra standings når vi har tabellen for året. |
teams_in_league | integer | Antall lag i divisjonen, talt i standings når vi har tabellen for året. |
head_coach | text | Hovedtrener. |
promoted | integer (0/1) | Rykket opp. |
relegated | integer (0/1) | Rykket ned. |
sources | JSON | Historiske publikasjoner som dokumenterer sesongen som helhet. |
note | text | Forbehold om sesongen, f.eks. at arkivet bare har deler av den. NULL når det ikke er noe å ta forbehold om. |
coverage | text | Hvor godt sesongen er dekket: 'complete' (hver runde fra første til siste, og like mange kamper som det kjente omfanget), 'in_progress' (sesongen pågår, det står kamper igjen på terminlista), 'partial' (runder mangler, eller kampantallet stemmer ikke med omfanget), 'unverified' (rundene henger sammen, men ingen kilde sier hvor mange det skulle vært), 'isolated' (kamper uten rundenummer), 'not_applicable' (cup og treningskamper, som ikke har serierunder). Bruk denne når spørsmålet gjelder om et tall er hele sesongen eller bare det arkivet har. |
coverage_evidence | text | Hva merket hviler på: 'rounds_and_standings' (sluttabellen sier hvor mange kamper AaFK spilte, og arkivet har like mange), 'rounds_and_declared_count' (omfanget er oppgitt for hånd i sesongfila), 'rounds_only' (bare rundenumre, omfanget er ukjent), 'isolated_matches_only', 'season_in_progress', 'not_applicable'. |
expected_matches | integer | Hvor mange kamper AaFK skulle spilt i konkurransen det året. Hentet fra sluttabellen når vi har den, ellers fra sesongfila. NULL betyr at ingen vet, og da kan sesongen ikke være 'complete'. |
last_round | integer | Høyeste serierunde i sesongen. For en komplett sesong er dette antall runder. NULL for cup og treningskamper. |
scheduled | integer | Kamper som står igjen på terminlista i denne konkurransen. Over 0 betyr at sesongen pågår, ikke at arkivet mangler noe. Disse kampene er ikke med i played, wins, draws, losses eller målene. |
played | integer | Antall spilte kamper. |
wins | integer | Seire. |
draws | integer | Uavgjorte. |
losses | integer | Tap. |
goals_for | integer | Mål scoret. |
goals_against | integer | Mål sluppet inn. |
goal_difference | integer | Målforskjell. |
avg_home_attendance | real | Snitt tilskuertall på hjemmekamper. |
url | text | Lenke til sesongsiden. |
season_coverage
Én rad per sesongår med ett svar for hele året: er serien, cupen og et eventuelt europacupeventyr ferdig kanonisert? Bruk denne når spørsmålet er om et år er komplett; seasons.coverage svarer bare for én konkurranse om gangen.
- Én rad per år, mot seasons som har én rad per år OG konkurranse. Et år er 'complete' bare når hver seriesesong er complete i seasons, cupen er spilt ferdig og europacupen er spilt ferdig.
- En cupsesong regnes som ferdig når den siste spilte kampen er et tap, en finale, eller en uavgjort avgjort på straffer. Slutter rekka på en seier som ikke er en finale, mangler arkivet minst én kamp. Om de første rundene mangler, kan ingen kilde i arkivet svare på: hvilken runde AaFK gikk inn i varierte med år og divisjon.
- Treningskamper teller ikke. Ingen kilde sier hvor mange treningskamper laget spilte et gitt år, så et krav om dem ville gjort hvert år ufullstendig for alltid.
- 'unknown' betyr at arkivet ikke har noen seriesesong det året, ikke at året var tomt. Da kan vi ikke svare på om serien mangler.
- has_standings skiller det sterkeste belegget fra det nest sterkeste. Et år kan være 'complete' uten sluttabell når sesongfila oppgir omfanget med en note om hvor tallet kommer fra.
| Kolonne | Type | Betydning |
|---|---|---|
season | integer | Sesongår. |
status | text | Året sett under ett: 'complete' (serie, cup og europacup ferdig kanonisert), 'partial' (noe mangler, se blocker), 'in_progress' (det står kamper igjen på terminlista), 'unknown' (arkivet har ingen seriesesong dette året). |
blocker | text | Hva som står igjen, i den rekkefølgen det bør rettes: 'none', 'season_in_progress', 'no_league_season', 'league_incomplete', 'cup_unfinished', 'european_unfinished'. |
league_competitions | integer | Antall serierader året har i seasons. Som regel 1; 1967 har to. |
league_complete | integer | Hvor mange av dem som er 'complete' i seasons. |
cup_matches | integer | Spilte cupkamper året har i arkivet. |
cup_closed | integer (0/1) | Om cuprekka slutter der den skal. NULL når året ikke har cupkamper i arkivet. |
european_matches | integer | Spilte europacupkamper året har i arkivet. |
european_closed | integer (0/1) | Om europacuprekka slutter der den skal. NULL når året ikke har europacupkamper. |
has_standings | integer (0/1) | Om arkivet har sluttabellen for året. |
scheduled | integer | Kamper som står igjen på terminlista, i alle konkurranser. |
opponents
Innbyrdes statistikk mot hver motstander, over hele arkivet og alle konkurranser.
- played, wins, draws og losses regnes over de samme kampene, statusene 'played' og 'awarded'. wins + draws + losses er derfor alltid lik played.
- first_meeting ser også kamper som ikke er spilt. En motstander vi har på terminlista uten å ha møtt står med played = 0 og last_meeting = NULL.
- Viewet summerer bare kanoniske kamper. Ved spørsmål om komplett historikk må ukoblede source_results vises separat, aldri legges direkte til disse tallene.
| Kolonne | Type | Betydning |
|---|---|---|
opponent_club_id | text | Motstanderens ID. |
opponent | text | Motstanderens navn (dagens navn). |
city | text | Motstanderens by. |
played | integer | Antall spilte kamper mot laget. |
wins | integer | AaFK-seire. |
draws | integer | Uavgjorte. |
losses | integer | AaFK-tap. |
goals_for | integer | AaFK-mål totalt. |
goals_against | integer | Innslupne mål totalt. |
first_meeting | text (YYYY-MM-DD) | Første møte. |
last_meeting | text (YYYY-MM-DD) | Siste spilte møte. |
url | text | Lenke til motstandersiden. |
standings
Sluttabellen for en seriesesong, ett lag per rad. Bruk denne når spørsmålet gjelder hvor AaFK endte, hvem som vant divisjonen, eller hvor mange poeng det skilte.
- Bare seriesesonger, og bare de årene kilden har tabell for. Cupen har ingen tabell.
- team er kildens eget lagnavn. club_id er satt for lagene arkivet kjenner fra før og NULL for resten, siden AaFK ikke har møtt alle lagene i hver divisjon. Filtrer på club_id = 'aalesunds-fk' for å finne vår egen rad.
- points er tallet tabellen viser, ikke wins*3+draws. Poengtrekk finnes, og to poeng for seier gjaldt til 1987.
- Tabellen dekker bare seriekampene. Cupkamper samme år ligger i matches og er ikke med her.
| Kolonne | Type | Betydning |
|---|---|---|
competition_id | text | Konkurransens ID. |
competition | text | Konkurransens navn. |
season | integer | Sesongår. |
position | integer | Plassering, 1 er øverst. |
team | text | Lagets navn slik kilden skrev det. |
club_id | text | Klubben i arkivet, når den finnes der. NULL ellers. |
played | integer | Spilte kamper. |
wins | integer | Seire. |
draws | integer | Uavgjorte. |
losses | integer | Tap. |
goals_for | integer | Scorede mål. |
goals_against | integer | Innslupne mål. |
goal_difference | integer | Målforskjell. |
points | integer | Poeng slik tabellen viser dem. |
outcome | text | 'promoted', 'relegated', 'promotion_playoff', 'relegation_playoff', 'playoff' eller 'none'. |
sources | JSON | Array av kildereferanser som dokumenterer plasseringen. |
note | text | Kildens egen merknad bak poengsummen, f.eks. en europacupplass. |
url | text | Lenke til motstandersiden når klubben finnes i arkivet. |
standings_progression
Hvor AaFK lå i tabellen etter hver serierunde. Bruk denne når spørsmålet gjelder utviklingen gjennom en sesong, ikke hvor den endte.
- Utregnet ved innhøsting av kildens fulle runderekke, ikke lagret som kamper. Kampene til de andre lagene ligger ikke i arkivet.
- Bare sesonger der utregningen lander på nøyaktig samme rad som tabellen kilden trykte. Gjør den ikke det, er raden utelatt framfor å vises feil.
- Bare AaFK. De andre lagenes vei gjennom sesongen finnes ikke her.
| Kolonne | Type | Betydning |
|---|---|---|
competition_id | text | Konkurransens ID. |
season | integer | Sesongår. |
round | integer | Serierunde. |
position | integer | Plassering etter denne runden. |
points | integer | Poeng etter denne runden. |
played | integer | Spilte kamper etter denne runden. Lavere enn round når en kamp er utsatt. |
goal_difference | integer | Målforskjell etter denne runden. |
squad
Stallen per sesong: hvem som var med, hvor mange kamper og hvor mange mål. Bruk denne på spørsmål om spillere, ikke matches.
- Utledet av lagoppstillingene, som arkivet har fra 2010. Sesonger før det har ingen rader her, og det er en manglende kilde og ikke en tom stall.
- appearances teller oppsatte tropper, ikke spilletid. Benken er med, fordi kilden ikke skiller mellom en som satt der og en som kom inn. Bruk starts når spørsmålet gjelder hvem som spilte.
- goals teller bare mål i kamper der navnet står i hendelseslista. En kamp uten hendelser gir null mål for alle som spilte den.
- person_key slår sammen skrivemåter av samme navn. name er den skrivemåten vi viser.
- Bare AaFKs egne spillere. Motstandernes oppstillinger er registrert, men er ikke med her.
- number, position, nationality og wikidata kommer fra personregisteret og dekker en del av stallen, ikke hele. NULL betyr at personen ikke står der, ikke at opplysningen ikke finnes.
| Kolonne | Type | Betydning |
|---|---|---|
season | integer | Sesongår. |
person_key | text | Personens identitet, normalisert. Bruk denne når du grupperer over sesonger. |
name | text | Navnet slik det vises. |
appearances | integer | Kamper spilleren sto oppført i troppen. |
starts | integer | Kamper fra start. |
goals | integer | Mål i sesongen, talt fra hendelsene. |
person_id | text | Personen i registeret, når hun eller han står der. NULL ellers. |
number | integer | Draktnummer den sesongen, fra personregisteret. NULL når vi ikke har det. |
position | text | 'keeper', 'forsvar', 'midtbane' eller 'angrep', fra personregisteret. |
nationality | text | Nasjonalitet slik kilden skrev den, f.eks. 'Norge'. |
wikidata | text | Wikidata-ID, f.eks. Q1796755. Peker videre; dataene bak hentes ikke hit. |
first_match | text (YYYY-MM-DD) | Første kamp i troppen den sesongen. |
last_match | text (YYYY-MM-DD) | Siste kamp i troppen den sesongen. |
people
Personregisteret: identitet, samlet kampaktivitet og om personen har kildeførte roller i klubben.
- Registeret omfatter personer med eksplisitt personfil. Spillere som bare finnes som et navn i én oppstilling kan derfor finnes i squad uten å finnes her.
- appearances er registrerte kamptropper, ikke nødvendigvis innhopp eller spilleminutter.
- role_count gjelder eksplisitte roller i person_roles; spilleraktivitet fra kampoppstillinger telles separat.
| Kolonne | Type | Betydning |
|---|---|---|
id | text | Stabil person-ID. |
name | text | Navnet slik arkivet viser det. |
nationality | text | Nasjonalitet der den er kjent. |
position | text | Spillerposisjon der den er kjent. |
wikidata | text | Wikidata-ID der den finnes. |
sources | JSON | Publikasjoner som omtaler personen, med sidetall der det er kjent. |
conflicts | JSON | Verv der kildene oppgir ulike navn. Ingen er avgjort maskinelt; `decision` sier hvordan en eventuell avgjørelse ble tatt. |
note | text | Redaksjonelt forbehold. |
has_conflicts | integer (0/1) | Sant når kilder er uenige om en rolle. Slå opp person_conflicts. |
first_season | integer | Første sesong med registrert kamptropp. |
last_season | integer | Siste sesong med registrert kamptropp. |
appearances | integer | Antall registrerte kamptropper. |
starts | integer | Antall registrerte starter. |
role_count | integer | Antall eksplisitt kildeførte roller. |
first_role_year | text | Første år med eksplisitt rolle. |
last_role_year | text | Siste år med eksplisitt rolle. |
role_categories | JSON | Kategoriene personen har roller i. |
url | text | Lenke til personsiden. |
person_roles
Én rad per kildeførte rolle eller verv i AaFK-organisasjonen.
- Perioden er så presis som kilden: enten år eller eksakt dato. Ikke utled ansettelsesdatoer fra årstall.
- Tomrom betyr at rollen ikke er kartlagt, ikke at vervet sto tomt.
- sources er obligatorisk og peker på publikasjon og side for hver rolle.
| Kolonne | Type | Betydning |
|---|---|---|
person_id | text | Personens stabile ID. |
name | text | Navnet slik arkivet viser det. |
role_id | text | Rollens stabile ID innenfor personen. |
category | text | 'player', 'coach', 'sporting_staff', 'board', 'administration', 'honorary', 'founder' eller 'project'. |
title | text | Historisk tittel, for eksempel Formann eller Kasserer. |
organization_id | text | Eksplisitt organisasjonsenhet, for eksempel aafk eller aafk-as. |
organization_name | text | Lesbart navn på organisasjonsenheten. |
body | text | Organisasjonsdel, for eksempel Hovedstyret. |
from_date | text | Start som ÅÅÅÅ eller ÅÅÅÅ-MM-DD. |
to_date | text | Slutt som ÅÅÅÅ eller ÅÅÅÅ-MM-DD. NULL når ukjent eller løpende. |
sources | JSON | Publikasjon, side og dokumenterte felt. |
note | text | Forbehold eller kildekonflikt. |
url | text | Lenke til personsiden. |
transfers
Én rad per kildeført overgang inn til eller ut av AaFK. Bruk denne på spørsmål om hvem som ble hentet eller forsvant, ikke squad, som bare sier hvem som var med og ikke hvorfor.
- Dekningen er ujevn. Et år uten rader betyr at ingen kilde er ført inn ennå, ikke at ingen skiftet klubb.
- En overgang er ikke bevis for en kampsesong. En spiller kan være hentet og aldri ha spilt, og han finnes da ikke i squad.
- Ikke summer transfers og squad. De er to observasjoner om samme spiller, ikke to deler av samme tall.
- Bare personer med egen personfil kan ha overganger her. En spiller som bare finnes som et navn i oppstillingene har ingen rad, og det er en manglende fil, ikke en manglende overgang.
- club er kildens egen skrivemåte. club_id er satt bare når klubben finnes i arkivet, og klubbkatalogen inneholder motstandere. NULL betyr at klubben ikke er registrert, ikke at den er ukjent.
- Ingen overgangssum. Beløp er sjelden dokumentert og lagres ikke som eget felt.
- Hver rad har enten sources eller providers, aldri ingen av delene. sources er historiske publikasjoner, providers er nettmeldinger med adresse og hentetid.
| Kolonne | Type | Betydning |
|---|---|---|
person_id | text | Personens stabile ID. |
name | text | Navnet slik arkivet viser det. |
direction | text | 'in' (til AaFK) eller 'out' (fra AaFK). |
kind | text | 'transfer', 'loan', 'loan_return', 'free', 'academy', 'released' eller 'retired'. |
season | integer | Sesongen overgangen føres på. Året i date, eller året etter når kilden plasserer en vinterovergang i neste sesong. |
date | text | Datoen kilden oppgir, som ÅÅÅÅ eller ÅÅÅÅ-MM-DD. «Høsten 1950» står som 1950. |
club_id | text | Den andre klubbens ID når den finnes i arkivet. NULL ellers. |
club | text | Den andre klubben, med kildens egen skrivemåte. NULL når kilden ikke oppgir noen, altså 'released' og 'retired'. |
sources | JSON | Historisk publikasjon, side og dokumenterte felt. Tom når kilden er en nettmelding. |
providers | JSON | Dataleverandør, adresse og hentetid. Brukes for nettmeldinger, som ikke er dokumenter i kildekatalogen. |
note | text | Redaksjonelt forbehold eller det kilden sier utover feltene. |
url | text | Lenke til personsiden. |
organizations
Organisasjonsenheter som roller og snapshots kan knyttes til.
- AaFK, Ålesund Fotball AS og stadionvirksomhet er separate enheter selv når de deler personer.
| Kolonne | Type | Betydning |
|---|---|---|
id | text | Stabil organisasjons-ID. |
name | text | Offisielt eller historisk navn. |
organization_number | text | Organisasjonsnummer der det er kjent. |
kind | text | club, company eller stadium. |
note | text | Redaksjonelt skille eller forbehold. |
organization_snapshots
Personer og roller observert i en organisasjonsoversikt på én bestemt dato.
- snapshot_date beviser bare at personen hadde rollen da; den er aldri automatisk start- eller sluttdato.
- Bruk person_roles når en kilde faktisk dokumenterer en periode.
| Kolonne | Type | Betydning |
|---|---|---|
snapshot_date | text | Observasjonsdato som ÅÅÅÅ eller ÅÅÅÅ-MM-DD. |
organization_id | text | Stabil organisasjons-ID. |
organization_name | text | Lesbart organisasjonsnavn. |
person_id | text | Stabil person-ID. |
name | text | Personens visningsnavn. |
observed_title | text | Tittelen ordrett fra kilden. |
category | text | Stabil rollekategori. |
body | text | Avdeling eller organisasjonsdel. |
sources | JSON | Kilden som dokumenterer snapshotet. |
note | text | Forbehold om dekning eller proveniens. |
url | text | Lenke til personsiden. |
person_conflicts
Én rad per kildeverdi i en uenighet om en personrolle eller et verv.
- decision = 'unresolved' betyr at arkivet ikke har valgt mellom kildene. Oppgi begge navnene og kildene.
- field kombinerer normalt rolle og år, for eksempel formann.1968.
- Kildeprioritet avgjør aldri en konflikt automatisk.
| Kolonne | Type | Betydning |
|---|---|---|
person_id | text | Personen konfliktoppføringen er lagret på. |
name | text | Navnet slik arkivet viser det. |
field | text | Vervet og året uenigheten gjelder. |
provider_id | text | Kilden som oppgir denne verdien. |
value | text | Personnavnet kilden oppgir. |
value_note | text | Kildens eller innhøstingens merknad til verdien. |
is_chosen | integer (0/1) | Sant når et menneske har valgt denne verdien. |
decision | text | unresolved, manual, source_priority eller independent_source. |
decided_at | text (YYYY-MM-DD) | Dato for avgjørelsen, eller NULL. |
reason | text | Begrunnelse når konflikten er avgjort. |
locked | integer (0/1) | Sant når avgjørelsen er låst mot ny innhøsting. |
conflict_note | text | Merknad om uenigheten som helhet. |
url | text | Lenke til personsiden. |
coach_spells
Én rad per sammenhengende periode en trener hadde laget. Bruk denne på spørsmål om hvem som var trener når, og om trenerbytter.
- Utledet av hvem som står oppført på hver kamp, ikke av ansettelsesdatoer. En periode starter på første kamp og slutter på siste, ikke på dagen avtalen ble skrevet.
- Et trenerbytte midt i sesongen gir to rader det året. 2023 gir tre.
- En trener som kommer tilbake får to rader. Kjetil Rekdal har en periode fra 2010 og en fra 2024.
- Bare fra 2010, som er der lagoppstillingene starter.
| Kolonne | Type | Betydning |
|---|---|---|
person_key | text | Trenerens identitet, normalisert. |
name | text | Navnet slik det vises. |
from_date | text (YYYY-MM-DD) | Første kamp i perioden. |
to_date | text (YYYY-MM-DD) | Siste kamp i perioden. |
from_season | integer | Sesongen perioden startet. |
to_season | integer | Sesongen perioden sluttet. |
matches | integer | Kamper i perioden. |
declared_coach_spells
Trenerperioder oppgitt av en kilde, for årene kampdataene ikke rekker. Bruk coach_spells når spørsmålet gjelder 2010 eller senere.
- Oppgitt, ikke utledet: som regel bare årstall, og vikarene mangler. Christian Johnsen står som 2023 til 2024; at Marius Boee og Sindre Eid hadde laget imellom, vet bare kampene.
- Rekker til 2001. Eldre trenere finnes ikke i noen kilde vi har.
- Overlapper med coach_spells for 2010 og senere. De to erstatter ikke hverandre; coach_spells er den nøyaktige.
| Kolonne | Type | Betydning |
|---|---|---|
person_id | text | Personen i registeret. |
name | text | Navnet slik det vises. |
from_season | integer | Første sesong i perioden. |
to_season | integer | Siste sesong. NULL når perioden ikke er avsluttet i kilden. |
from_date | text | Dagen perioden begynte, der kilden oppgir den. NULL når bare året er kjent. |
to_date | text | Dagen perioden sluttet, der kilden oppgir den. NULL når bare året er kjent. |
match_events
Én rad per hendelse i en kamp: mål, kort og innbytter.
- Dekningen er ujevn og følger kilden, ikke kalenderen: kamper hentet fra FotMob har hendelser, kamper hentet fra RSSSF har bare resultatet. Fravær av mål her betyr ikke at det ikke ble scoret. Sjekk aafk_score i matches.
- Antallet kamper med hendelser står i dekningsavsnittet nederst, regnet ut av databasen ved hver bygging.
- team er 'aafk' eller 'opponent', ikke hjemme/borte.
| Kolonne | Type | Betydning |
|---|---|---|
match_id | text | Kampens ID. |
date | text (YYYY-MM-DD) | Kampdato. |
season | integer | Sesongår. |
minute | integer | Spilleminutt. |
stoppage | integer | Tilleggstid. 45+2 er minute 45, stoppage 2. |
event_type | text | 'goal', 'own_goal', 'penalty_goal', 'yellow_card', 'red_card', 'substitution' m.fl. |
team | text | 'aafk' eller 'opponent'. |
player | text | Spiller. |
assist | text | Målgivende. |
player_off | text | Ved innbytte: spilleren som gikk ut. |
url | text | Lenke til kampsiden. |
reports
Kampreferat, som en FTS5-tabell. Samme objekt dekker begge bruksmåtene: fritekstsøk og oppslag på match_id.
- Alle referat er skrevet for dette arkivet, aldri kopiert fra avis eller klubbside.
- Fritekstsøk: WHERE reports MATCH 'ordet'. Flere ord: MATCH 'ord1 ord2' (OG), MATCH 'ord1 OR ord2'. Prefiks: MATCH 'snuoper*'.
- Bare summary og body er søkbare. De andre kolonnene leses ut som vanlig, men treffer ikke på MATCH.
- Arkivet har foreløpig ingen egne kampreferat. Et tomt søkeresultat betyr derfor ikke at kampen mangler, det betyr at ingen har skrevet referatet ennå. Si det slik, ikke som om kampen ikke finnes.
| Kolonne | Type | Betydning |
|---|---|---|
match_id | text | Kampens ID. |
date | text (YYYY-MM-DD) | Kampdato. |
season | integer | Sesongår. |
opponent | text | Motstander. |
is_home | integer (0/1) | Hjemmekamp. |
result | text | 'S', 'U' eller 'T'. |
summary | text | Kort sammendrag. |
body | text | Referatet. |
byline | text | Hvem som skrev det. |
url | text | Lenke til kampsiden. |
match_conflicts
Én rad per verdi i en uenighet mellom kilder. Bruk denne når has_conflicts er 1, eller når confidence er 'disputed', for å si hva uenigheten faktisk gjelder.
- To kilder som er uenige om ett felt gir to rader med samme match_id og field, og ulik value.
- decision = 'unresolved' betyr at ingen har tatt stilling. Da er is_chosen 0 på alle radene, og svaret skal oppgi begge verdiene med hver sin kilde framfor å velge en.
- Er konflikten avgjort, står begrunnelsen i reason og datoen i decided_at. Gjenfortell begrunnelsen framfor å finne på en.
- Ingenting her avgjøres av kildeprioritet automatisk. Et valg er tatt av et menneske, og da står det hvorfor.
| Kolonne | Type | Betydning |
|---|---|---|
match_id | text | Kampen uenigheten gjelder. |
date | text (YYYY-MM-DD) | Kampdato. |
season | integer | Sesongår. |
opponent | text | Motstanderens navn den datoen. |
field | text | Feltet kildene er uenige om, med punktnotasjon: 'away.score', 'attendance'. |
provider_id | text | Kilden som oppgir denne verdien. |
value | text eller integer | Verdien kilden oppgir. |
value_note | text | Kildens eget forbehold om verdien. |
is_chosen | integer (0/1) | Sant for verdien arkivet bruker. Alle rader er 0 når konflikten ikke er avgjort. |
decision | text | 'unresolved', 'manual', 'source_priority' eller 'independent_source'. |
decided_at | text (YYYY-MM-DD) | Når valget ble tatt. NULL når det ikke er tatt. |
reason | text | Hvorfor valget falt slik. NULL når konflikten står åpen. |
locked | integer (0/1) | Sant når verdien er låst mot å bli overskrevet av en senere innhøsting. |
conflict_note | text | Notat om uenigheten som helhet. |
url | text | Lenke til kampsiden. |
providers
Kildekatalogen: hvor dataene kommer fra og hvor mye vi stoler på hver kilde.
- priority er en erklært rangering, ikke en avgjørelsesregel. Ingenting i innhøstingen velger verdi ut fra den.
- Hver innhøsting skriver en observasjon per kilde, med kildens rå verdi og den normaliserte. Er to kilder uenige, står begge observasjonene der; ingen av dem vinner av seg selv.
- En uenighet blir først synlig i matches.has_conflicts når noen har ført den inn som en konflikt. Feltene i matches.manual overskrives aldri av en senere innhøsting.
- Sier du noe om en kamp der kildene er uenige, oppgi begge verdiene og hvilken kilde de kommer fra, framfor å velge en side.
| Kolonne | Type | Betydning |
|---|---|---|
provider_id | text | Kildens ID. |
name | text | Kildens navn. |
url | text | Kildens nettadresse. |
priority | integer | Kildens rangering. Den avgjør IKKE automatisk hvem som vinner en konflikt; se conflicts i matches og caveats over. |
license | text | Lisens, der den er kjent. |
automated_access | text | Om kilden kan hentes automatisk: allowed, permission_required, blocked eller unknown. |
public_redistribution | text | Om data derfra kan publiseres videre: allowed, permission_required, denied eller unknown. Et annet spørsmål enn om den kan hentes. |
attribution_required | integer (0/1) | Om kilden krever kreditering. |
permission_status | text | Hva motparten har svart: not_needed, pending, requested, granted eller denied. Sier ingenting om hva vi har bestemt. |
ingest_decision | text | Hva vi har bestemt: blocked, pending, allowed eller accepted_risk. «accepted_risk» betyr at prosjekteier har valgt å gå videre uten tillatelse, ikke at tillatelse finnes. |
permission_requested_at | text (YYYY-MM-DD) | Når forespørselen ble sendt. |
risk_accepted_at | text (YYYY-MM-DD) | Når risikoen ble akseptert. |
risk_accepted_by | text | Hvem som aksepterte den. |
terms_checked_at | text (YYYY-MM-DD) | Når vilkårene sist ble lest av et menneske. |
robots_checked_at | text (YYYY-MM-DD) | Når robots.txt sist ble kontrollert. |
permission_note | text | Hva som er avklart, hvem som er spurt, og hva som gjenstår. |
note | text | Forbehold og dekningsområde. |
contributions
Brukerinnsendte bidrag, observasjoner og minner hentet fra innboksen.
- Bare godkjente bidrag som har gått gjennom redaksjonell kontroll ligger her.
- Bidrag knyttes til en kamp (target_id = match_id), sesong (target_id = årstall) eller person (target_id = person_id). Sjekk scope ('match', 'season' eller 'person') for å se hva target_id peker på.
| Kolonne | Type | Betydning |
|---|---|---|
id | text | Unik ID for bidraget. |
scope | text | 'match', 'season' eller 'person'. |
target_id | text | Kamp-ID eller sesongår. |
category | text | Kategori, f.eks. 'memory', 'context', 'trivia', 'event_detail'. |
text | text | Selve innholdet. |
contributor | text | Forfatterens navn. |
submitted_at | text (YYYY-MM-DD) | Innsendingsdato. |
verification | text | Grad av bekreftelse: 'unverified', 'corroborated' eller 'verified'. |
source_url | text | Eventuell kildelenke for påstanden. |
sources
Historisk materiale og kilder fra Nasjonalbiblioteket og AaFK Historiske arkiv.
- Inneholder bøker, medlemsblader, årsmeldinger og andre dokumenter.
- Selve innholdet er ikke lagret her, men kan leses via access_url.
| Kolonne | Type | Betydning |
|---|---|---|
id | text | Unik ID for publikasjonen. |
parent_source_id | text | ID for kildens serie (f.eks. aafk-medlemsblad). |
title | text | Tittel. |
source_type | text | 'book', 'anniversary_book', 'member_magazine', 'annual_report', 'match_program', 'supporter_publication', 'local_history_book', 'newspaper_supplement', 'series' eller 'other'. |
issue | text | Utgave. |
volume | text | Årgang/Volum. |
publisher | text | Utgiver, f.eks. Aalesunds fotballklubb. |
year | integer | Utgivelsesår. |
urn | text | Stabil bibliografisk identifikator, som regel Nasjonalbibliotekets URN. NULL når ingen er kjent. |
author | text | Forfatter eller redaktør. NULL når katalogposten ikke oppgir noen. |
description | text | Kort beskrivelse av hva kilden inneholder. NULL når ingen er skrevet. |
cover_url | text | Lenke til forsidebilde. |
access_url | text | Lenke for å lese publikasjonen hos kilden. |
url | text | Lenke til visningssiden på vårt nettsted. |
historical_observations
Korte, kildeførte historiske fakta og hendelser med relevans for AaFK.
- Samme observasjon kan være knyttet til flere personer, sesonger, kamper, konkurranser og stadion uten å være duplisert.
- date har bare den presisjonen kilden gir og kan være NULL.
- sources er JSON med sourceId og eventuelt side; bruk kildesiden for etterprøving.
| Kolonne | Type | Betydning |
|---|---|---|
id | text | Unik observasjons-ID. |
title | text | Kort overskrift. |
text | text | Kildebasert parafrase av funnet. |
date | text | År, måned eller dato når kilden gir det. |
note | text | Eventuelt redaksjonelt forbehold. |
sources | JSON | Én eller flere kildehenvisninger. |
person_ids | JSON | Kanoniske personer observasjonen gjelder. |
season_years | JSON | Sesonger observasjonen vises på. |
match_ids | JSON | Kanoniske kamper observasjonen gjelder. |
competition_ids | JSON | Konkurranser observasjonen gjelder. |
venue_ids | JSON | Stadion og baner observasjonen gjelder. |
url | text | Direktelenke til første visningssiden der observasjonen står. |
verification_cases
Åpne og avsluttede verifiseringssaker: påstander arkivet ikke kan avgjøre alene, formulert som ett spørsmål hver.
- En sak er et spørsmål, ikke et faktum. Innholdet må aldri leses som en påstand arkivet står inne for.
- resolution er NULL så lenge saken er åpen, og status forteller hvorfor en lukket sak er lukket.
- target_type og target_id peker på arkivobjektet saken gjelder, men saken er ikke koblet inn i det objektets egne data.
| Kolonne | Type | Betydning |
|---|---|---|
id | text | Unik saks-ID. |
status | text | draft, open, paused, resolved, rejected eller superseded. |
category | text | role, identity, match, source_reading eller club. |
claim | text | Påstanden saken handler om, slik den står i arkivet i dag. |
question | text | Det ene spørsmålet saken ber om svar på. |
context | text | Bakgrunnen en leser trenger for å svare. |
why_it_matters | text | Hva svaret endrer i arkivet. |
yes_meaning | text | Hva et ja betyr konkret. |
no_meaning | text | Hva et nei betyr konkret. |
inconclusive_meaning | text | Hva et «kan ikke bestemmes»-svar betyr. NULL når standardspråket brukes. |
instructions | JSON | Stegene den som svarer bør gå gjennom. |
target_type | text | person, match, season, club eller source. |
target_id | text | ID-en til objektet saken gjelder. |
target_field | text | Feltet i objektet saken gjelder. |
sources | JSON | Kilder som støtter, motsier eller gir kontekst, hver med rolle og note. |
search_hint | text | Hvor det er verdt å lete. NULL når ingen er skrevet. |
newspaper | JSON | Intern kandidat-, kilderesultat- og NB-metadata for en avisverifisering. NULL for andre saker. |
research_task | JSON | Strukturert oppgave, alternativer og kontrollert avisproveniens for community research. NULL for andre saker. |
estimated_minutes | integer | Anslått arbeid for å svare, i minutter. |
priority | integer | 0–100. Høyere tall er viktigere. |
revision | text | Fingeravtrykk av saksinnholdet, så et svar kan knyttes til versjonen det gjaldt. |
published_at | text | Dato saken ble publisert. NULL for utkast. |
resolution | JSON | Svar, begrunnelse og dato når saken er avgjort. NULL mens den er åpen. |
source_file | text | YAML-fila saken kommer fra. |
url | text | Lenke til saksvisningen på vårt nettsted. |
publication_extractions
Dekning og proveniens for maskinell analyse av historiske publikasjoner.
- Rå OCR og sammenhengende prosa lagres ikke i databasen.
- search_only betyr at publikasjonen kan fulltekstsøkes hos NB, men ikke har sidevis ALTO tilgjengelig for denne pipelinen.
| Kolonne | Type | Betydning |
|---|---|---|
source_id | text | Publikasjonen i sources. |
provider_id | text | Dataleverandøren. |
adapter | text | Adapter og versjon. |
retrieved_at | text (YYYY-MM-DD) | Dato for kjøringen. |
ocr_access | text | alto, search_only eller unavailable. |
pages_expected | integer | Antall sider i manifestet. |
pages_processed | integer | Antall ALTO-sider som ble analysert. |
pages_failed | JSON | Sidelabeler som ikke kunne behandles. |
content_hash | text | SHA-256 av analysert ALTO-innhold, uten at innholdet lagres. |
fact_candidates
Strukturerte faktakandidater med sidehenvisning, klare for redaksjonell kontroll.
- En kandidat er ikke kanonisk fakta før den er kontrollert og flyttet til person-, sesong- eller kampmodellen.
- Feltene inneholder korte faktatokens og ID-er, aldri OCR-prosa.
| Kolonne | Type | Betydning |
|---|---|---|
source_id | text | Publikasjonen kandidaten kommer fra. |
id | text | Deterministisk kandidat-ID. |
kind | text | person_mention, person_role, match_result, lineup_or_squad, organization, season_fact eller fixture_list. |
page | text | Sidelabel i publikasjonen. |
confidence | text | high, medium eller low for det maskinelle treffet. |
keywords | JSON | Faktabærende nøkkelord som utløste treffet. |
names | JSON | Mulige person- eller organisasjonsnavn. |
years | JSON | Eksplisitte årstall på samme tekstlinje. |
scores | JSON | Resultattokens på samme tekstlinje. |
person_ids | JSON | Entydige treff mot eksisterende personer. |
match_ids | JSON | Entydige eller mulige treff mot eksisterende kamper. |
resolved_roles
Maskinelt løste personroller med tittel, periode, side og kilde.
- Dette er kandidater, ikke kanoniske fakta. Bruk person_roles for kontrollerte roller.
- Oppgi alltid confidence og kilde når et svar bygger på resolved_roles.
- from_date kan være NULL når siden ikke oppgir år. Ikke utled et år fra publikasjonens utgivelsesår.
| Kolonne | Type | Betydning |
|---|---|---|
source_id | text | Publikasjonen rollen kommer fra. |
source_title | text | Lesbar tittel på publikasjonen. |
id | text | Deterministisk resolver-ID. |
page | text | Sidelabel i publikasjonen. |
column_no | integer | Nullbasert spaltenummer når kjent. |
person_name | text | Navnet slik publikasjonen skriver det. |
person_id | text | Kjent person i registeret når navnet er avstemt. |
category | text | Rolleklasse, som board, coach eller honorary. |
title | text | Historisk tittel eller verv. |
body | text | Organisasjonsdel når siden oppgir den. |
from_date | text | Startår eller dato når oppgitt. |
to_date | text | Sluttår eller dato når oppgitt. |
confidence | text | high, medium eller low for resolverens treff. |
rule | text | Regelen som løste navn, rolle og år. |
source_url | text | Direktelenke til publikasjonen hos kilden. |
url | text | Lenke til kildesiden i arkivet. |
resolved_lineups
Maskinelt løste lag- og spillerlister med rekkefølge, side og kilde.
- Dette er kandidater uten kamp-ID. De kan være lagoppstillinger, tropper eller spillerrekker.
- season er et nærliggende årstall, ikke en bekreftet kampkobling.
- Oppgi alltid confidence og kilde, og kall ikke listen en kampoppstilling uten annen dokumentasjon.
| Kolonne | Type | Betydning |
|---|---|---|
source_id | text | Publikasjonen listen kommer fra. |
source_title | text | Lesbar tittel på publikasjonen. |
id | text | Deterministisk resolver-ID. |
page | text | Sidelabel i publikasjonen. |
column_no | integer | Nullbasert spaltenummer når kjent. |
season | integer | Nærliggende årstall når siden oppgir et. |
names | JSON | Navnene i kildens rekkefølge. |
person_ids | JSON | Navn som er avstemt mot personregisteret. |
confidence | text | high, medium eller low for resolverens treff. |
source_url | text | Direktelenke til publikasjonen hos kilden. |
url | text | Lenke til kildesiden i arkivet. |
Eksempelspørringer
Disse spørringene kjøres som en del av testene, så de virker alltid mot datasettet slik det ser ut nå.
Hvilke kamper har xG-data, og hva var forskjellen?
SELECT date, opponent, aafk_xg, opponent_xg,
aafk_xg - opponent_xg AS xg_difference, url
FROM matches
WHERE aafk_xg IS NOT NULL AND opponent_xg IS NOT NULL
ORDER BY date DESCNår tapte vi sist med 6 mål på hjemmebane?
SELECT date, opponent, aafk_score, opponent_score, competition, url FROM matches WHERE is_home = 1 AND result = 'T' AND goal_difference <= -6 ORDER BY date DESC LIMIT 1
Hvilken motstander har vi tapt flest ganger mot?
SELECT opponent, losses, played, wins, draws FROM opponents ORDER BY losses DESC LIMIT 5
Hvor mange mål scoret vi i 2024?
SELECT sum(aafk_score) AS mal, count(*) AS kamper FROM matches WHERE season = 2024 AND status = 'played'
Hvilke sesonger har vi hatt best målforskjell?
SELECT season, competition, goal_difference, final_position FROM seasons ORDER BY goal_difference DESC LIMIT 5
Finnes det referat som nevner snuoperasjon?
SELECT match_id, date, opponent, summary, url FROM reports WHERE reports MATCH 'snuoperasjon' ORDER BY date DESC
Hva er den eldste kampen i arkivet?
SELECT date, opponent, is_home, aafk_score, opponent_score, competition, url FROM matches ORDER BY date ASC LIMIT 1
Hvor mange kamper har vi fra hvert tiår?
SELECT substr(date, 1, 3) || '0-tallet' AS tiar, count(*) AS kamper FROM matches GROUP BY tiar ORDER BY tiar
Har vi noen gang vunnet en cupkamp på straffer?
SELECT date, opponent, aafk_score, opponent_score, url FROM matches WHERE decided_on_penalties = 1 AND won_on_penalties = 1 ORDER BY date DESC
Er det lagt inn noen bidrag eller minner om kamper mot Brann i 1998?
SELECT c.text, c.contributor, c.verification FROM contributions c JOIN matches m ON c.target_id = m.match_id WHERE c.scope = 'match' AND m.opponent = 'SK Brann' AND m.season = 1998
Hvilke medlemsblader har vi fra 1970-tallet?
SELECT title, year, access_url FROM sources WHERE source_type = 'member_magazine' AND year BETWEEN 1970 AND 1979 ORDER BY year ASC
Slik er spørrefunksjonen begrenset
Spørrefunksjonen kan skrive SELECT-spørringer mot tabellene over. Det er dét som gjør at den kan svare på spørsmål ingen har laget et ferdig oppslag for. Grensene er:
- Arkivfilen åpnes skrivebeskyttet. Et forsøk på å endre noe blir avvist av SQLite selv, ikke av koden vår.
- Spørringen kjører i en egen prosess som stoppes ved tidsavbrudd, og den ser bare tabellene som er dokumentert på denne siden, ikke rådataene bak dem.
- Én SQL-setning per spørring, og bare SELECT.
- Maks 200 rader og 3 sekunders kjøretid.
- Hver spørring som kjøres, vises under svaret, så du kan etterprøve hva svaret bygger på.
Referatene i arkivet er skrevet av bidragsytere. Spørrefunksjonen behandler alltid slik tekst som data, aldri som instruksjoner til seg selv.