|
1. Voorwoord
Deze pagina is onderdeel van een trilogie. In de documenten die alle drie de titel
Het Strip Infomatie Model - Een model voor stripboeken, stripverhalen en stripbladen
dragen wordt het model beschreven vanuit drie verschillende gezichtspunten. Deze zijn:
De gebruiker is de raadpleger van een website of de lezer van een catalogus gebaseerd op het Strip Informatie Model (SIM). Het document voor de gebruiker legt de begrippen en fundamenten uit zodat alle producten gebruikt en begrepen kunnen worden.
De ontwikkelaar maakt programmatuur om het publicatie proces te ondersteunen en de beheerder administreert alle gegevens omtrent stripboeken, stripverhalen en stripbladen die nodig zijn om de eindproducten te kunnen publiceren.
Er is ook een pagina met uitleg over de infrastructuur die nodig is om comicweb te runnen.
Deze pagina is de beschrijving voor de ontwikkelaar.
2. Inleiding
Op de pagina voor de gebruiker hebben we uitgelegd wat de belangrijkste begrippen in de leefwereld van de stripliefhebber zijn. Deze begrippen vormen een model dat we hier willen formaliseren. Als we een model willen ontwerpen zijn er vele paden te bewandelen en we zullen niet alle mogelijke beslissingen uitleggen maar meer het resultaat beschrijven. Alternatieven zijn altijd mogelijk en soms zelfs beter maar als je eenmaal een pad ingeslagen bent is het vaak kostbaar om een ander pad te gaan bewandelen (omdat je het pad waarop je zit vaak terug moet lopen).
Het diagram dat wordt gepresenteerd op de pagina voor voor de gebruiker is een vereenvoudigd overzicht van wat in dit document wordt gepresenteerd. Dit document beschrijft hoe het Strip Informatie Model (SIM) wordt gemodelleerd via UML (Unified Modelling Language). Op basis van het Strip Informatie Model (voortaan SIM) zal een Python programma worden geschreven om de informatie omtrent stripboeken en stripverhalen tot comicweb.nl te verwerken of om er een Strip Informatie Catalogus van te maken.
Een Python programma gebruikt zogenaamde klassen (ook wel classes genoemd) met attributen (ook wel attributes genoemd). Het uiteindelijke UML model van het SIM kan hieronder gezien worden. Het is zo groot dat het hier moeilijk te lezen is maar de onderdelen zullen verderop nader besproken worden (je kunt het wel downloaden en daarna vergroten).
De klassen en attributen worden verder uitvoerig beschreven.
Voordat we het Strip Informatie Model formeel opbouwen en uitleggen, willen we nu al kort uitleggen hoe we het model en de implementatie gebruiken.
We administreren alle informatie omtrent stripboeken en stripverhalen in tekstfiles. De methode van administratie wordt in het document voor de beheerder uitgelegd. Met het Python programma lezen we deze informatie en instancieren we het model. Van hieruit kunnen we dan allerlei informatie presenteren. We kunnen websites maken of een pdf met alle stripboeken en hun voorkanten genereren (zie hieronder voor het proces).
Figuur 1. Procesbeschrijving
3. Het Strip Informatie Model
Het Strip Informatie Model bestaat uit drie specifieke delen en een algemeen deel. Hieronder zullen we deze delen nader uitleggen en de klassen beschrijven:
3.1 De stripboeken
3.1.1 stripboeken - stripboekenseries en subcollecties
In het model, zoals uitgelegd in het document voor de gebruiker, zien we twee belangrijke verzamelingen van stripboeken: de gereduceerde stripboekenserie en de collectie. Hiernaast leven nog twee andere belangrijke begrippen: de subcollectie en de extended stripboekenserie. De begrippen collectie en gereduceerde stripboekenserie lijken zo op elkaar dat we ze beide implementeren in de class stripboekenserie die gekarakteriseerd wordt door de naam van de stripboekenserie in het attribuut stripboekenserienaam. Onderscheid tussen de twee wordt gemaakt door het attribuut tiepe dat de waardes gereduceerd of collectie te geven.
Een subcollectie is eigenlijk weer hetzelfde als een collectie met één extra stuk informatie, namelijk de interne karakteriserende eigenschap van de stripverhalen in de subcollectie. Daarom definiëren we de class subcollectie die we afleiden van de class stripboekenserie met als extra attribuut de serienaam.
Het attribuut stripboekenserienaam in een subcollectie geeft de naam van de collectie aan, en het attribuut serienaam in een subcollectie geeft dus de naam van stripverhalenserie van de stripverhalen aan. Het attribuut tiepe van een subcollectie krijgt dan de waarde subcollectie.
Ook de extended stripboekenserie is eigenlijk weer een stripboekenserie met twee extra stukken informatie: de subcollecties uit alle collecties die een interne karakteriserende eigenschap hebben die gelijk is aan de interne karakteriserende eigenschap die de (extended) stripboekenserie definieert, en de omnibussen die een stripverhaal bevatten met deze interne karakteriserende eigenschap. Daarom introduceren we de class extendedstripboekenserie die we ook afleiden van de stripboekenserie en waaraan de subcollecties en de omnibussen toevoegen.
We hebben hier een plaatje nodig om dit begrijpelijk te maken en daarna een voorbeeld:
Een voorbeeld is nu op zijn plaats.
Stel we hebben de collectie C1 Jong Europa met 5 stripboeken:
| C1.B1. Jack Diamond - De zwarte duivel |
| C1.B2. Chick Bill - De Neptunes is verdwenen |
| C1.B3. Jack Diamond - De hond van Absaroka |
| C1.B4. Chick Bill - De laatste van de Bulls |
| C1.B5. Chick Bill - De rivalen |
Uit deze collectie kunnen we twee subcollecties S1 en S2 definiëren.
S1 bestaat uit de stripboeken:
| C1.B1. Jack Diamond - De zwarte duivel |
| C1.B3. Jack Diamond - De hond van Absaroka |
S2 bestaat uit de stripboeken:
| C1.B2. Chick Bill - De Neptunes is verdwenen |
| C1.B4. Chick Bill - De laatste van de Bulls |
| C1.B5. Chick Bill - De rivalen |
En stel we hebben de twee gereduceerde stripboekenseries:
G1 Chick Bill met de stripboeken:
| G1.B1. Chick Bill weet het niet |
| G1.B2. Chick Bill tegen de indianen |
G2. Jack Diamond met stripboeken:
| G2.B1. Jack Diamond De verloren diamanten |
| G2.B2. Jack Diamond Indianen en cowboys |
Dan geldt:
| C1.stripboekenserienaam="Jong Europa" |
| S1.stripboekenserienaam="Jong Europa" |
| S2.stripboekenserienaam="Jong Europa" |
| S1.serienaam="Jack Diamond" |
| S2.serienaam="Chick Bill" |
| G1.stripboekenserienaam="Chick Bill" |
| G2.stripboekenserienaam="Jack Diamond" |
We definiëren nu drie extended stripboekenseries: GE1,GE2,GE3
| GE1.stripboekenserienaam="Jong Europa" |
| GE1.subcollecties=[S1,S2] |
| GE2.stripboekenserienaam="Chick Bill" |
| GE3.subcollecties=[S2] |
| GE3.stripboekenserienaam="Jack Diamond" |
| GE4.subcollecties=[S1]
|
In het formele SIM introduceren we de class stripboek. Er zijn echter stripboeken met verschillende verschijningen. Het belangrijkste is dat een stripboek door meerdere uitgevers uitgegeven kan worden. Je kunt je op het standpunt stellen dat stripboeken met verschillende uitgevers verschillende stripboeken zijn, maar na dit lange tijd in het model gehandhaafd te hebben zijn we daar vanaf gestapt. We hebben daarom de class uitgifte geïntroduceerd. De class stripboek is afgeleid van class uitgifte. Het leuke is nu dat stripboek een attribuut heeft andereuitgiftes dat zelf een lijst van uitgiftes is. Of een stripboek een eigen instantie van stripboek is of in de lijst van andereuitgiftes van een ander stripboek zit, is volledig ter discretie van de administrator. Op de klasse uitgifte zitten dus alle attributen die per uitgifte kunnen veranderen. In de loop der tijd zijn dit bijna alle attributen. Lange tijd hebben we vol gehouden dat als de titel anders is dat het stripboek dan ook anders is maar dat is nu niet meer zo. De titel kan per uitgifte veranderen en zelfs de inhoud kan veranderen. Er kan bijvoorbeeld een verhaaltje bij gekomen zijn.
Hieronder volgen enkele voorbeelden:
| G1-B1.collectie="Jong Europa" |
| G1-B1.stripboekenserie="Jack Diamond" |
| G1-B1.titel="De zwarte duivel" |
| G3-B1.collectie="" |
| G3-B1.stripboekenserie="Jack Diamond" |
| G3-B1.titel="De verloren diamanten" |
Het is belangrijk om het volgende te herhalen: de betekenis van het attribuut stripboekenserie is bij de klasse subcollectie dus van een geheel andere orde als de betekenis in de klasse stripboek. Bij de subcollectie geeft dit attribuut de collectie aan waaruit de subcollectie voorkomt terwijl bij het stripboek het juist de natuurlijke extended stripboekenserie aangeeft waar het stripboek bij hoort. Als het attibuut collectienaam van het stripboek gevuld is, dan is dit ook gelijk de collectie waartoe het stripboek behoort. Indien dit attribuut niet gevuld is, dan geeft het attribuut stripboekenserie de gereduceerde stripboekenserie weer waartoe het stripboek behoort.
Dit alles gaat mis voor omnibussen en stripboeken die vaak geen definiërende interne of externe karakteristieke eigenschap hebben. Het is daarom nu tijd om twee speciale extended stripboekenseries te definiëren.
| 1. Stripboekenseries met 1 stripboek |
| 2. Stripboeken zonder stripboekenserie |
De eerste stripboekenserie is een collectie en de tweede is een gereduceerde stripboekenserie. Stripboeken die eigenlijk tot een stripboekenserie behoren maar waarvan de stripboekenserie uit één stripboek zou bestaan gaan in de collectie Stripboekenseries met 1 stripboek. Een voorbeeld is het stripboek Broeder Bollijn - En het heilige botje. Voor dit stripboek B geldt:
| B.collectie="Stripboekenseries met 1 stripboek" |
| B.stripboekenserie="Broeder Bollijn" |
| B.titel="En het heilige botje" |
Aangezien een gereduceerde stripboekenserie meer dan 1 stripboek moet bevatten zullen we nooit een gereduceerde stripboekenserie voor Broeder Bollijn instantieren. We zouden wel een extendedstripboekenserie kunnen instantieren als er andere collecties zouden zijn die stripboeken van Broeder Bollijn zouden bevatten. Deze extendedstripboekenserie zou echter alleen subcollecties bevatten en geen stripboeken. (Het geinige gebeurt dan dat we een subcollectie S krijgen met S.stripboekenserienaam=Stripboekenseries met 1 stripboek en S.serienaam=Broeder Bollijn).
Stripboeken die geen duidelijke definiërende interne karakteristieke eigenschap hebben en dus alleen een titel hebben, gaan in de stripboekenserie Stripboeken zonder stripboekenserie. Een voorbeeld hiervan is Reis naar het middelpunt van de aarde. Voor dit boek B geldt:
| B.collectie="" |
| B.stripboekenserie="Stripboeken zonder stripboekenserie" |
| B.titel="Reis naar het middelpunt van de aarde" |
Omnibussen die niet tot een gereduceerde stripboekenserie behoren moeten in de gereduceerde stripboekenserie Stripboeken zonder stripboekenserie geplaatst worden. Alle omnibussen zullen in het attribuut omnibussen van de relevante extendedstripboekenseries geplaatst worden. Relevant betekent hier dat de omnibus een stripverhaal bevat dat gaat over hetzelfde als waar de extended stripboekenserie over gaat.
We willen lijsten van stripboeken maken. Daarom introduceren we het begrip stripboekenlijst. Een class stripboekenlijst bevat extendedstripboekenseries. Dit kunnen uitbreidingen zijn van een gereduceerde stripboekenserie, van een collectie of van speciale instanties zoals een verzameling van losse boeken, zoals de Stripboeken zonder serie of de Series met 1 stripboek. De extendedstripboekenseries houden we in de stripboekenlijst bij in het attribuut extendedstripboekenseries.
Met behulp van stripboekenlijsten kunnen we een generieke lijst maken. Dit zou men de catalogus van stripboeken kunnen noemen maar we kunnen ook lijsten maken voor welke stripboeken in een stripboekenverzameling aanwezig zijn.
Om stripboekenlijsten te kunnen identificeren krijgt de class stripboekenlijst een attribuut naam.
We zijn bijna klaar voor wat betreft de stripboeken. We zien alleen dat stripboeken bestaan in zogenaamde stripboekenreeksen. We willen dan ook dat ieder stripboek in een stripboekenreeks zit. We definiëren daarom een class stripboekenreeks die een attribuut heeft stripboeken die een lijst van stripboeken is. De class stripboekenserie krijgt nu een attribuut stripboekenreeksen. Er is altijd minstens één stripboekenreeks, een stripboekenreeks wordt gekenmerkt door het attribuut naam. Om aan te geven dat de naam van de stripboekenreeks er niet toe doet gebruiken we Empty. Stripboeken zitten dus niet direct in een stripboekenserie maar ze zitten in een stripboekenreeks:
We willen voor iedere uitgifte weten wie de uitgever is. Daarom definiëren we de class uitgever. De class uitgifte krijgt nu het attribuut uitgever. De class uitgever heeft het attribuut naam. Bovendien willen we alle uitgevers bijhouden en dus definiëren we de class uitgeverslijst die het attribuut uitgevers heeft.
We kunnen ook bijhouden in welke taal een stripboek uitgegeven is. Hiervoor definiëren we de klasse taal:
Een uitgifte krijgt hiervoor het attribuut taal dat van type taal is.
3.2 De stripverhalen
3.2.1 stripverhalen - stripverhalenseries
Voor de stripverhalen gaan we op gelijksoortige wijze te werk als bij de stripboeken. We hebben allereerst te maken met het begrip stripverhaal. Zoals al eerder beschreven, is het begrip stripverhaal iets dat onafhankelijk is van het stripboek waarin het staat. Het stripverhaal kan in vele stripboeken of uitgiftes van stripboeken staan. Maar ondanks het feit dat het stripverhaal onafhankelijk is van het begrip stripboek, kunnen er wel verschillende versies van een stripverhaal bestaan. De beslissing of een stripverhaal een versie is van een ander stripverhaal is soms lastig, net als de beslissing of een stripboek een andere uitgifte van een ander stripboek is of zelf een nieuw stripboek is. Een belangrijke reden om meerdere versies van een stripverhaal toe te laten is het feit dat de stripverhalen wel eens hertekend worden, ofwel door de originele tekenaar (b.v. bij Suske en Wiske of Kuifje) ofwel door een andere tekenaar (b.v. bij Donald Duck). We zouden ook kunnen zeggen dat nieuwe vertalingen een nieuwe versie van een stripverhaal is. Voorlopig beperken we ons alleen tot de hertekende stripverhalen omdat we dat uiterst interessant vinden. We introduceren daarom de volgende twee begrippen class stripverhaalversie en class stripverhaal. De class stripverhaalversie is de basis klasse en de class stripverhaal wordt daar vanafgeleid.
Men kan oneindig lang discussiëeren welke attributen op class stripverhaalversie zitten en welke op stripverhaal. We vermijden deze discussie en zetten alle atributen omtrent het stripverhaal op de class stripverhaalversie. Het enige attribuut dat het stripverhaal extra krijgt is het attribuut anderestripverhaalversies hetgeen weer zelf een lijst is van stripverhaalversies. Een stripverhaal is zelf ook een stripverhaalversie. We definiëren dan ook een attribuut versiebeschrijving op stripverhaalversie. Dit attribuut moet beschrijven wat de essentie is van de versie van het stripverhaal. Zo kennen we twee vaste beschrijvingen: origineel en hertekend. In de implementatie van het Strip Informatie Model (zie de pagina voor de beheerder) zullen we eisen dat de eerste instantie van een stripverhaal de originele versie moet zijn. Voorlopig gebruiken we dat twee stripverhaalversies in een stripverhalenserie versies van elkaar zijn als ze dezelfde titel hebben. We moeten bovendien ook nog eens kunnen bepalen dat stripverhaalversies hetzelfde zijn (dus niet versies van elkaar maar echt hetzelfde). Daarom voegen we nog een unieke identifier (identifier) toe. Deze identifier leeft intern binnen het SIM en heeft niets te maken met de later te bespreken unique resource identifiers (uri's).
So krijgen we het volgende plaatje:
Stripverhalen zitten net als stripboeken in series. We definiëren daarom de class stripverhalenserie die een attribuut stripverhalen bevat. Omgekeerd krijgt de class stripverhaalversie een attribuut stripverhalenserienaam (en soortgelijke attributen voor de naam van de stripverhalenserie in de originele taal). Stripverhalen kunnen ook in stripverhalenreeksen zitten maar dat hoeft niet. Het attribuut taal wordt gebruikt om de taal van het stripverhaal aan te geven (bijvoorbeeld Duits) terwijl het attribuut origineletaal de taal van het stripverhaal in de eerste uitgifte aangeeft (bijvoorbeeld Engels).
Het komt niet op natuurlijke wijze dat stripverhalen in reeksen zitten (in tegenstelling tot stripboeken die wel op natuurlijke wijze als stripboekenreeksen in de kast staan). Stripverhalen kunnen wel in stripverhalenreeksen zitten, zoals bijvoorbeeld de Trigië stripverhalen van Don Lawrence en de Niet Don Lawrence Trigie stripverhalen, maar chronologisch gezien lopen die twee stripverhaalreeksen dwars door elkaar. We plaatsen dan ook de stripverhalen direct als attribuut in het begrip stripverhalenserie en niet analoog aan de constructie bij stripboeken uniek in stripverhalenreeksen.
We definiëren de class stripverhalenreeks die zelf ook een attribuut stripverhalen krijgt.
We hebben nog een dergelijk container begrip namelijk het vervolgverhaal. We definiëren daarom ook de class vervolgverhaal die ook een attribuut stripverhalen heeft.
Zo hebben we drie container begrippen voor stripverhalen: stripverhalenserie, stripverhalenreeks en het vervolgverhaal. Om de definitie van de laatste twee te optimaliseren definiëren we het begrip class stripverhalencontainer dat de attributen stripverhalen, naam en stripverhalenserie krijgt. De naam definieert de container en het attribuut stripvehalenserie geeft aan bij welke stripverhalenserie de container behoort. De klassen stripverhalenreeks en vervolgverhaal leiden we af van de stripverhalencontainer zonder extra attributen.
Om de zaak compleet te maken geven we de stripverhalenserie het attribuut stripverhalenreeksen en het attribuut vervolgverhalen.
We moeten het nu hebben over de nummering van stripverhalen. In den beginne had ieder stripverhaal een zogenoemd V-nummer. Zo had het eerste stripverhaal meestal het nummer V1 en nummerden we door tot het eind. De verschillende versies van de stripverhalen maakte dit lastig. We kunnen ervoor kiezen om iedere versie van een stripverhaal een eigen V-nummer te geven maar dit zal tot een absurde nummering leiden. Plotseling zouden er geen 23 Kuifje stripverhalen zijn maar 30. Dit is onacceptabel, al is het maar vanuit de traditie gezien. We zijn dus begonnen om subnummering te gaan gebruiken. Dit mag alleen maar voor verschillende stripverhaalversies van hetzelfde stripverhaal gebruikt worden. Dit mag niet gedaan worden voor delen van vervolgverhalen. Delen van een vervolgverhaal krijgen wel ieder hun eigen V-nummer. Eenmaal deze keuze gemaakt definiëren we een class vnummer met twee attributen: hoofdnummer en subnummer. Als het subnummer 0 is dan zijn er geen andere versies van het stripverhaal. We definiëren een functie vnummer.t() die de tekst geeft van het nummer. Een vnummer representeert zich in principe (verdere uitbreiding volgt later) door een "V" met een getal erachter en mogelijk een letter. Een paar voorbeelden geven aan wat er bedoeld wordt.
Stel vn is een vnummer en
| vn.hoofdnummer=8 |
| vn.subnummer=0 |
dan geeft vn.t() de tekst V8.
Als
| vn.hoofdnummer=8 |
| vn.subnummer=1 |
dan geeft vn.t() de tekst V8a en als
| vn.hoofdnummer=8 |
| vn.subnummer=2 |
dan geeft vn.t() de tekst V8b, enz. en zo nummeren we alle versies van de stripverhalen.
We maken het nog iets ingewikkelder door ook andere letters voor de nummering toe te laten. Zo gebruiken we voor de gewone stripverhalen van Alex de V-nummers maar voor de stripverhalen over de Jeugd van Alex zouden we graag J-nummers willen gebruiken.
| vn.start="J" |
| vn.hoofdnummer=8 |
| vn.subnummer=1 |
dan geeft vn.t() de tekst J8a. Een nummer kan bovendien een omschrijving hebben (in het attribuut omschrijving). Zo kan men bijvoorbeeld aangeven dat een J-nummer een reconstructie of een uitzonderlijk verhaal is.
Om deze flexibiliteit te verkrijgen zullen we op de class vnummer het attribuut start geven hetgeen de begin-string van de nummering aangeeft. De default waarde van het start attribuut is dus ''V''. De t() functie van deze klasse zal de begin string ook teruggeven.
Een stripverhaalversie krijgt nu het attribuut vn dat van het type vnummer is. De relatie van een stripverhaal en zijn vnummer staat in onderstaande figuur:
Tot zover zijn we er van uit gegaan dat een stripverhaal maar één V-nummer heeft. Een stripverhaal kan echter in meerdere lijsten voorkomen. Zo kan een stripverhaal in de lijst staan van de stripverhalenserie waartoe het stripverhaal behoort, maar kan het ook in een lijst staan van stripverhalen die behoren bij een creator.
De lijst waarin het stripverhaal het V-nummer nummer heeft noemen we de context van het V-nummer. Zo kan de context de waarde Donald Duck of Stripverhalen van Donald Duck of Stripverhalen van Carl Barks hebben of elke andere string. Van belang voor efficiëente verwerking dienen we te weten of de lijst behoort tot een stripverhalenserie of bij een creator. Daarom definiéren we het attribuut contexttiepe dat 0 is voor een stripverhalenserielijst en 1 voor een lijst van stripverhalen die behoren bij een creator.
Zo heeft het stripverhaal De schrik van de rivier!! van Carl Barks in de lijst van Carl Barks stripverhalen het nummer CB.V45 en in de lijst van Donald Duck het nummer V52. Dit is op het moment van schrijven want het CB.V nummer is erg stabiel maar het V nummer niet want er komen steeds Donald Duck verhalen bij.
Zo geldt voor het CB.V45 nummer
| vn.start="CB.V" |
| vn.hoofdnummer=45 |
| vn.subnummer=0 |
| vn.context="CB" |
| vn.contexttiepe=1 |
en voor het V nummer:
| vn.start="V" |
| vn.hoofdnummer=52 |
| vn.subnummer=0 |
| vn.context="Donald Duck" |
| vn.contexttiepe=0 |
3.2.2 Creators
We willen natuurlijk voor ieder stripverhaal ook bijhouden wie de tekenaars en de schrijvers zijn. Daarom definiëren we de class schrijver en de class tekenaar. Deze klassen zijn in de implementatie precies gelijk en daarom introduceren we de class creator waarvan we de class schrijver en de class tekenaar afleiden (zonder additionele attributen !!). We geven de class stripverhaalversie twee nieuwe attributen: het attribuut schrijvers hetgeen een lijst is van schrijvers en het attribuut tekenaars hetgeen een lijst is van tekenaars. Verschillende versies van stripverhalen kunnen verschillende tekenaars en (potentieel ook) verschillende schrijvers hebben en daarom komen de attributen schrijvers en tekenaars op de class stripverhaalversie.
De klassen en hun relatie kunnen in onderstaande figuur gezien worden.
We willen van de stripverhalen zowel de schrijvers als de tekenaars weten en we willen per combinatie van schrijvers en tekenaars weten welke stripverhalen ze samen gemaakt hebben. Zo zien we b.v. voor de stripverhalenserie Alex de volgende combinaties van schrijvers en tekenaars met de stripverhalen die ze gemaakt hebben:
| Jacques Martin/Jacques Martin: | V1-V20 |
| Jacques Martin/Rafael Morales: | V21-V24 |
| Christophe Simon-Cedric Hervan/Francois Maingoval: | V25 |
| Christophe Simon/Francois Maingoval-Patrick Weber: | V26 |
| Christophe Simon/Patrick Weber: | V27 |
Om deze manier van bijhouden van wie welke stripverhalen gemaakt heeft, introduceren we de class creatorspair. Een creatorspair heeft twee attributen: de schrijvers en de tekenaars. Een creatorspair is dus een combinatie van een lijst van schrijvers en een lijst van tekenaars. Zo is in het bovenstaande voorbeeld het verhaal V25 gemaakt door de twee schrijvers Christophe Simon en Cedric Hervan en één tekenaar Francois Maingoval die samen één creatorspair vormen. We introduceren ook de class svvcp (hetgeen een afkorting is voor stripverhaalversiecreatorspair) die afleidt van de class creatorspair, die één extra attribuut krijgt, namelijk svvcreated (hetgeen een afkorting is voor stripverhaalversiescreated) waarin bijgehouden wordt welke stripverhalen door deze schrijvers en tekenaars gemaakt zijn. De stripverhalenserie geven we nu het attribuut svvcps (hetgeen een afkorting is voor
stripverhaalversiecreatorspairs) zodat we per stripverhalenserie bij kunnen houden welke combinatie van schrijvers en tekenaars voor deze stripverhalenserie welke stripverhalen gemaakt hebben.
We doen dit alles om nog een belangrijke reden. Wij classificeren stripverhalen met hun schrijvers en tekenaars. Zoals eerder uitgelegd houden we niet bij wie de schrijvers en tekenaars van een stripboek zijn. We zouden dit kunnen afleiden door te kijken welke stripverhalen in een stripboek staan en dan alle schrijvers en tekenaars bij elkaar te vegen en dat de schrijvers en tekenaars van het stripboek te noemen (dit is wat meestal gebeurt). Het benoemen van de schrijvers en tekenaars van een stripboek leidt dus tot niets behalve in een speciaal geval. Als we namelijk de stripverhalen uit een stripboek nog niet geclassificeerd hebben (of helemaal niet willen classificeren) zullen we zo niet kunnen bepalen wie meegewerkt hebben aan de stripverhalen in dat stripboek. Daarom zullen we in het Strip Informatie Model faciliteren dat we bij gaan houden wie de schrijvers en tekenaars zijn van stripverhalen in stripboeken (maar we blijven het niet de auteurs van het stripboek noemen). Voorbeelden kunnen zijn Billy Turf of Familie Doorzon. We willen toch graag weten dat de maker van de stripverhalen van de Familie Doorzon een zekere Gerrit de Jager is terwijl we niet al de stripverhalen van de Familie Doorzon zullen enumereren. Misschien dat dit zelfs nog wel eens gedaan wordt maar voor een stripverhalenserie als Snoopy van Charles Schulz lijkt dit toch echt onwaarschijnlijk. Daarom introduceren we de class sbcp (hetgeen een afkorting is van stripboekcreatorspair die ook afleidt van creatorspair en die ook een extra attribuut krijgt sbcontributed (hetgeen een afkorting is van stripboekencontributed). In de stripverhalenserie introduceren we het attibuut sbunclassified hetgeen een lijst van sbcps is. In dit attribuut bewaren we dus alle creatorpairs (sbcps) met de stripboeken waaraan ze meegewerkt hebben in die combinatie. We noemen het attribuut expliciet cpunclassified om aan te geven dat de stripverhalen uit die stripboeken nog geclassificeerd dienen te worden.
Als laatste dienen we codes en de datum van eerste publicatie van een stripverhaal te bespreken. In de stripverhalen van Donald Duck staat vaak een code zoals WDC 131, of H 98201. Veelvuldig wordt ook alleen een nummer gebruikt om een stripverhaal te identificeren. Dit gebeurt o.a. bij Leonardo, Familie Doorzon en Olivier Blunder of Waanzin-Waanzuit. Vaak, zoals bij de oude Donald Duck stripverhalen, geeft de code ook gelijk aan in welk tijdschrift de eerste publicatie van deze versie van het stripverhaal heeft plaatsgevonden. Een voorbeeld is Donald Duck - Pirate Gold die als code heeft FC 9 en als eerste publicatie FC 9. Een voorbeeld waarbij de code en de eerste publicatie niet het zelfde zijn zien we bij Waanzin-Waanzuit - De pelikaan. Dit is het eerste stripverhaal en die heeft daadwerkelijk code 1. Er staat namelijk door Gotlib een 1 onder het stripverhaal getekend. De eerste publicatie vond plaats in het stripblad Pilote nummer 429 waardoor de eerste publicatie PI 429 is. De afkorting PI is de afkorting van het stripblad Pilote.
Indien er niet een expliciete code in het stripverhaal staat is er geen code en alleen een eerste publicatie.
Zo krijgt het Asterix stripverhaal De ronde van Gallië de eerste publicatie PI 172-213 omdat het in het tijdschrift Pilote nummers 172 t/m 213 voor het eerst gepubliceerd is.
Om de publicaties bij te houden definiëren we een class publicatie met de attributen afkorting en naam. Waarbij de afkorting gebruikt zal worden in de code en de naam de naam van de publicatie is.
Een publicatie is meestal een stripblad. Het kan echter ook iets totaal anders zijn zoals een poster of een vouwstrip, of desnoods kan het een melkpak zijn, als er maar een stripverhaal aanwezig is zoals wij dat gedefinieerd hebben.
Omdat we ook een lijst willen hebben van alle bekende publicaties definiëren we de class publicatielijst.
Een stripverhaal kan een code hebben die we zullen bijhouden in het attribuut code van de class stripverhaalversie. Dit attribuut zal dus alleen gevuld zijn als er al een code in het stripverhaal staat.
We willen bijhouden waar en wanneer een stripverhaal voor het eerst gepubliceerd is en doen we dit in het attribuut eerstepublicatie.
Het kan ook nog zo zijn dat beide attributen leeg zijn - als er geen code in het stripverhaal zelf staat en als het stripverhaal niet in een tijdschrift voorgepubliceerd is maar direct in een stripboek.
De datum van eerste publicatie van een stripverhaal is de datum van de eerste voorpublicatie in een tijdschrift (in welke taal dan ook maar vaak is dat de originele taal van het stripverhaal), en wel de publicatie datum van de eerste pagina van het stripverhaal. Als het stripverhaal niet voorgepubliceerd is, dan is de datum van eerste publicatie de datum van het stripboek waarin het stripverhaal voor het eerst gepubliceerd is (bijna altijd in de originele taal). Als de code of het eerstepublicatie attribuut gevuld is, dan kan de eerste voorpublicatie gemakkelijk teruggevonden worden. Als deze attributen niet gevuld zijn, zal men een catalogus met stripboeken (in de originele taal van het stripverhaal) moeten hebben om het eerste stripboek met het stripverhaal op te zoeken.
Het gebruik van deze attributen en de volgorde van vullen moet goed begrepen worden om het stripverhaal te identificeren en terug te vinden. Een mogelijke en zeer interessante uitbreiding is dat we bij willen houden wat de datum van creatie van het stripverhaal is. Omdat het voor een niet-insider bijna niet mogelijk is om creatie data te ontdekken zijn we hier niet aan begonnen.
3.2.3 De relatie tussen de stripboeken en de stripverhalen
Een stripboek bevat één of meer stripverhalen en een stripverhaal staat in één of meer stripboeken. We willen uiteindelijk bijhouden welke stripverhalen in welke stripboeken staan en wat de inhoud van een stripboek is.
Voor de verwijzing van een stripverhaalversie naar een stripboek definiëren we de class referentie en voor de inhoudsopgave van een stripboek definiëren we de class contentitem.
Een stripverhaalversie heeft een lijst van referenties. We definiëren de class referentie die de volgende attributen heeft.
| referentie.stripboekenserienaam |
| referentie.stripboekenreeksnummer |
| referentie.stripboeknummer |
| referentie.inhoudnummer |
De class stripverhaalversie heeft een attribuut referenties dat bestaat uit een lijst van elementen van het type referentie. Zo kan het stripverhaal Donald en zijn valk staan in (Donald Duck,1,5,8) en in (Donald Duck, 2,1,20).
Dit betekent dat die versie van het stripverhaal staat in de Donald Duck stripboekenreeks De beste verhalen van Donald Duck (stripboekenreeksnummer 1) in het stripboek Als slaapwandelaar (stripboeknummer 5) en wel het 8ste stripverhaal in dat stripboek. Bovendien staat het stripverhaal in de Donald Duck stripboekenreeks Carl Barks, Alle klassieke verhalen (stripboekenreeksnummer 2) in het stripboek Deel 1 en wel het 20ste stripverhaal in dat stripboek.
We houden dus bij in welk stripboek een stripverhaal staat met drie getallen. Als de getallen veranderen zit men dus in de problemen. Dit zou kunnen gebeuren als er een nieuwe stripboekenreeks tussen de ouden zou komen. We zullen dit probleem uitvoerig beschrijven en oplossen in de implementatie door niet alleen getallen te gebruiken maar toch logische verwijzingen (identifiers).
Voor de inhoudsopgave van een stripboek definiëren we de class contentitem dat twee attributen heeft:
| 1. | contentitem.nr |
| 2. | contentitem.contentstripverhaal |
Het attribuut nr is het volgnummer (een integer) van het stripverhaal in de inhoudsopgave en het attribuut contentstripverhaal is van type class stripverhaalversie (dat is het gehele stripverhaal en niet alleen het v-nummer!). Bij de class stripboek definiëren we het attribuut inhoudsopgave hetgeen een lijst is van contentitems. Als bijvoorbeeld stripverhaal1,stripverhaal4,stripverhaal8 stripverhaalversies zijn dan zou de inhoudsopgave van een stripboek hetvolgende kunnen zijn:
((1,stripverhaal1),(2,stripverhaal8),(3,stripverhaal4))
Dit betekent dat het stripboek 3 stripverhalen bevat in de volgorde verhaal1, verhaal8, verhaal4.
De relaties tussen de stripboeken en de stripverhalen worden hieronder getoond.
3.2.4 Items in de stripverhalen
We willen van de stripverhalen graag een index van personen, objecten en andere zaken die in het stripverhaal voorkomen kunnen maken. We introduceren daarom de class stripverhaalitem. We willen de stripverhaalitems kunnen categoriseren in twee lagen. Zo hebben we bijvoorbeeld de categorieën personen en objecten. Binnen deze categorieën hebben we weer meer gedetailleerde categorieën zoals hoofdpersonen, bakkers, ontdekkingsreizigers of liederen en bioscopen. Voordat we verder gaan op de categorisatie van de stripverhaalitem moeten we eerst opmerken dat het belangrijkste attribuut van een stripverhaalitem echter de beschrijving is.
Als we een stripverhaalitem nemen uit de categorie personen dan is de beschrijving bijvoorbeeld de naam van de persoon. In het geval van een stripverhaalitem uit de categorie objecten is de beschrijving van een lied de titel van het lied maar de beschrijving van het object liedtekst zou de gehele tekst van het stripverhaalitem kunnen zijn. De beschrijving van een bioscoop is natuurlijk de naam van de bioscoop. Het is aan degene die de index maakt om te bepalen wat de beschrijving is. Wij definiëren op de class stripverhaalitem het attribuut beschrijving. Dit attribuut is zelf van class itembeschrijving die twee attributen heeft: nederlands en origineel. Het attribuut beschrijving.nederlands geeft de beschrijving in het Nederlands en het attribuut beschrijving.origineel geeft de beschrijving in de taal waarin het stripverhaal origineel gemaakt is. Zo is dat bij Donald Duck een beschrijving in het Engels en bij Kuifje is dat een beschrijving in het Frans. Zo kunnen we de twee talen goed vergelijken en een index in beide talen maken.
We willen ook bijhouden op welke pagina en in welk plaatje het stripverhaalitem voor het eerst in het stripverhaal voorkomt. We willen dit weer zowel in de Nederlandse versie van het stripverhaal doen als in de originele versie van het stripverhaal. Het komt gewoon voor dat personen en objecten in de vertaling van een stripverhaal op andere momenten in het stripverhaal voor het eerst voorkomen. Dit gebeurt dan vaak hetzij door een andere beschrijving hetzij door simpelweg veranderde tekeningen. Daarom definiëren we de klassen plaatje en itemplaatje met de attributen als in onderstaande figuur.
Nu we de beschrijving en de plaatjes uitgelegd hebben kunnen we terugkomen op de twee lagen waarin we de stripverhaalitems willen categoriseren. We zullen hiertoe de class metacategorie en de class categorie definiëren. We zullen deze klassen uitleggen aan de hand van een voorbeeld (zie onderstaande tabel. We beschrijven twee stripverhaalitems die we A en B zullen noemen. Stripverhaalitem A is een persoon uit een Donald Duck stripverhaal gemaakt door Carl Barks en stripverhaalitem B is een ding uit hetzelfde stripverhaal. In kolom 1 geven we de naam van de attributen en in de kolommen 2 en 3 geven we de waarde van de twee stripverhaalitems.
| attribuutnaam | stripverhaalitem A | stripverhaalitem B |
| metacategorie.naam | Personen | Dingen |
| metacategorie.originelenaam | Persons | Objects |
| metacategorie.categoriebeschrijving | Rol | Ding |
| metacategorie.categoriebeschrijvingorigineel | Role | Object |
| metacategorie.itembeschrijving | Naam | Beschrijving |
| metacategorie.itembeschrijvingorigineel | Originele naam | Originele beschrijving |
| metacategorie.itemorigineelbeschrijving | Name | Description |
| | | |
| | | |
| categorie.naam | Piraat | Wegwijzer |
| categorie.originelenaam | Pirate | Roadsign |
| | | |
| | | |
| beschrijving.nederlands | Boris Boef | Haven |
| beschrijving.origineel | Black Pete | Sailors nest |
| | | |
| | | |
| eersteplaatje.plaatjenl.paginanr | 6 | 5 |
| eersteplaatje.plaatjenl.plaatjenr | 2 | 1 |
| eersteplaatje.plaatjeorg.paginanr | 6 | 5 |
| eersteplaatje.plaatjeorg.plaatjenr | 2 | 1 |
In de attributen beschrijving zullen we alles nader beschrijven. We hopen echter dat de voorbeelden voor zich spreken. We hebben steeds attributen die we voor een Nederlands publicatie van de index nodig hebben en attributen die we voor een publicatie in de originele taal nodig hebben. Even daarovernadenkend hebben we dan ook geen attribuut metacategorie.itemorigineelbeschrijvingorigineel nodig want we zullen nooit een publicatie doen in een originele taal met een omschrijving waarin we uitleggen dat dit het origineel is (in dit moeilijk te doorgronden fictieve voorbeeld zou de waarde van metacategorie.itemorigineelbeschrijvingorgineel in bestaande voorbeelden Original name en Original description zijn hetgeen natuurlijk geen zin heeft in de originele taal!!)
De metacategorie heeft zelf een naam (en een originelenaam) en geeft een beschrijving van wat de categorieën in de metacategorie en de stripverhaalitems in deze categorieën betekenenen. De categorie zelf beschrijft ook wat zij betekent in het attribuut naam.
Alle klassen en hun relaties omtrent stripverhaalitem kunnen gezien worden in onderstaande figuur.
3.3.Stripbladen
3.3.1 stripbladen - stripbladverhalen - stripbladseries
Het stripverhaal in een stripblad is van een andere orde als het stripverhaal uit een stripboek. Het cruciale verschil ligt in het feit dat er vaak alleen maar een deel uit van een stripverhaal in een stripblad staat. Dit zal bij een stripboek (bijna) nooit gebeuren. We zullen daarom beginnen met een stripverhaaldeel waarbij het stripblad uit stripverhaaldelen bestaat.
Daarbij definiëren we het concept stripbladstripverhaal dat ook uit stripverhaaldelen bestaat. Een stripbladstripverhaal bestaat natuurlijk uit stripverhaaldelen van hetzelfde stripverhaal. Zo zien we dat er een directe relatie is tussen een stripbladstripverhaal en een "normaal" stripverhaal. Een stripbladstripverhaal bestaat dus uit een "normaal" stripverhaal en de stripverhaaldelen
Een stripverhaaldeel kan zelf al een kompleet stripverhaal zijn en dan noemen we het stripverhaaldeel een singleton. Een stripverhaaldeel dat samen met andere stripverhaaldelen een stripbladstripverhaal vormen horen bij elkaar doordat ze gelijk stripverhaaldeelid hebben. Dit stripverhaaldeelid moet uniek zijn in het universum. Stripbladstripverhalen worden nogal eens herdrukt in stripbladen en we willen niet dat de verkeerde delen bij het verkeerde stripbladstripverhaal gaan horen. Bovendien heeft een stripbladstripverhaal een unieke identifier via zijn stripverhaal, want een stripverhaal heeft dit in zich. De stripverhaaldeelid gaat dus over een specifieke verschijning van het stripverhaal in een aantal stripbladen en het bijbehorende stripverhaal is eigenlijk iets abstracts.
Een stripverhaaldeel heeft een start en een eind. Dit zijn twee getallen die de paginanummers aangeven van het deel van het stripverhaal (dus niet het paginanummer in het stripblad). De lengte van het stripverhaaldeel is dus vaak eind-start+1 maar dat hoeft niet. Er kan bijvoorbeeld maar een halve pagina van een stripoverhaal op een pagina staan. Het stripverhaal van het stripbladstripverhaal heeft ook een lengte hetgeen de som van de lengtes van de stripverhaaldelen is.
Het stripverhaal behorende bij het stripbladstripverhaal kan vaker voorkomen in een stripbladserie. Daarom houden we per stripbladstripverhaal ook nog eens een lijstje bij van andere voorkomens van het stripverhaal in de stripbladserie.
De naam van een stripbladstripverhalenserie is soms anders dan de naam van de bijbehorende stripverhalenserie. Soms is heel erg anders, zoals bijvoorbeeld Rob Palland in plaats van Bernard Prince die natuurlijk hetzelfde zijn doch alleen een andere naam dragen (het verhaal gaat dat dit komt door Prins Bernard). Maar soms is het ook subtiel zoals bijvoorbeeld Bollie & Billie in plaats van Bollie en Billie (in de Sjors wordt deze stripverhalenserie zelfs Bas en Boef genoemd). Om een stripbladstripverhaal te kunnen koppelen aan een stripverhaal eisen we dat de stripverhalenserienaam gelijk is. Dat is echter ook wel weer jammer omdat we dan informatie zouden verliezen. Daarom introduceren we het attribuut pseudoniem bij het stripbladstripverhaal waarin we de afwijkende namen zoals Rob Palland en Bollie & Billie kunnen bijhouden.
Verder definiëren we nog het stripblad zelf dat in een stripbladjaargang zit dat weer toebehoort aan een stripbladserie. Bij het concept stripblad introduceren we het attribuut andereuitgaven. Net als bij stripboeken bestaan sommige stripbladen in verschillende uitgaven. Dit manifesteert zich vooral bij het Kuifje Weekblad. Zo bestaat Kuifje Weekblad 1982 nr. 13 in minstens twee vormen. Zo hebben we de 100 pagina's uitgave (waarschijnlijk voor abonnees) en de 52 pagina's uitgave. Dit komt bij het Kuifje Weekblad vaak voor, bijvoorbeeld een 60 pagina's uitgave voor abonnees en 52 pagina's voor de losse verkoop. Er zitten ook verschillen in de Belgische uitgave en de Nederlandse uitgaven. Meestal is de inhoud van de 52 pagina's uitgave bevat in de inhoud van de 60 pagina's. Echter het komt ook voor (en dat is het geval bij Kuifje Weekblad 1982-13) dat er in de korte uitgave een stripverhaal staat dat niet in de lange uitgave staat en omgekeerd. Bovendien hebben de lange en korte uitgaven verschillende voorkanten. Aangezien de stripbladen echter dezelfde naam en hetzelfde nummer hebben noemen we ze uitgaven van hetzelfde stripblad. Zo noemen we de Franse versie van het genoemde stripblad Nouveau Tin Tin 342 niet een uitgave van dat stripblad, maar dat is een ander stripblad.
Stripbladen kunnen ook in stripbladreeksen zitten. Een stripbladreeks in een opeenvolgend aantal stripbladen uit een stripbladenserie.
Tot slot maken we nog een lijst stripbladserielijst waarin we alle stripbladseries bijhouden.
Omdat we zogenaamde W nummer lijsten willen maken introduceren we ook het concept stripbladstripverhalenserie. De stripbladstripverhalenserie bevat alle stripverhalen per stripverhalenserie die in de stripbladen staan (stripbladstripverhalen dus eigenlijk).
Zo komen we tot het volgende plaatje
De unieke resource identifier
3.4 Algemeen deel
3.4.1 Unique Resource Identifiers (URI)
De vraag is hoe we een stripboek uniek identificeren. We hebben hier een aparte pagina aan gewijd (zie hier) maar we zullen hier het een en ander herhalen.
We hebben al eerder geconstateerd deze vraag niet eens specifiek genoeg is. We kunnen hoogstens een uitgifte van een stripboek uniek identificeren. Maar zelfs dit is lastig. De stripboekenserienaam en de titel van het stripboek inclusief datum van uitgifte is niet genoeg. Want er kan ook nog een hardcover en een softcover zijn. Zelfs dit is niet genoeg want men kan twee softcovers met verschillende voorkanten hebben. Dit wordt een lang verhaal waar men niet uitkomt. "Het isbn nummer is het antwoord" zegt dan iemand, zich direct later realiserend dat helaas niet ieder stripboek een isbn nummer heeft. Kortom, we zullen zelf een code bedenken die uniek een uitgifte van een stripboek weergeeft.
Maar dit blijft niet beperkt tot stripboeken. Ook stripverhalen, creators, vervolgverhalen, enz. moeten uniek te identificeren zijn. We zullen daarom alle resources een unieke identifier geven.
Zo kan men aan een service vragen: geef me alle informatie omtrent IDX, en dan krijgt je alle informatie terug omtrent IDX.
We administreren alle informatie omtrent strips, zoals eerder vermeld, in tekstfiles. Deze informatie noemen de basis informatie. Informatie die niet direct in deze files staat maar wel daaruit afgeleid kan worden noemen we afgeleide informatie Dit is informatie zoals het V-nummer, subcollecties of inhoudsopgaves. Het V-nummer van een stripverhaal staat niet in de administratie maar wordt door het Python programma bepaald afhankelijk van hoe de voglorde in de tekstfile omtrent stripverhalen is. Al deze afgeleide informatie heeft (vooralsnog) geen unieke identifier (nodig).
De afgeleide informatie kan gepubliceerd worden op een website of in een catalogus in de vorm van een pdf. In de toekomst zal echter de basis informatie en afgeleide informatie ook via XML ter beschikking gesteld worden. De basis administratie wordt gedaan met behulp van een eigen taal (die wat type werk betreft vele malen efficiënter is dan XML) maar kan eenvoudig getransformeerd worden naar XML. Om de informatie eenduidig ter beschikking te kunnen stellen worden nu alvast de URIs ingevoerd.
We zullen alleen begrippen waarvan iets in de administratie terecht komt een URI geven. Zo heeft een stripboek dus geen URI! Men kan vragen om de informatie van het stripboek die hoort bij de uitgifte xyz (als xyz de URI is). Alleen de informatie van de uitgifte levert bijvoorbeeld mogelijk niet eens de titel van het stripboek op. Andere voorbeelden van begrippen die geen URI hebben zijn de extended stripboeken serie of de subcollectie. Men kan niet de extended stripboekenserie direct identificeren. Men kan wel zeggen "de extended stripboeken serie xyz die hoort bij de unieke (gereduceerde) stripboekenserie xyz".
Een speciaal geval is het stripverhaal. We kennen eigenlijk drie verschillende manieren om een stripverhaal te in de administratie te krijgen:
| 1. | Als stripverhaal in een stripverhalenserie (de V-nummers) |
| 2. | Als content van stripboek in het bijzonder een omnibus (de O-nummers) |
| 3. | Als stripbladstripverhaal (de W-nummers) |
Een stripbladstripverhaal bestaat uit 1 of meerdere delen. De techniek die gebruikt wordt om een stripblad stripverhaal te beschrijven is dat we eerst het abstracte stripverhaal (hetstripverhaal) beschrijven en dan de delen. Er zijn in een stripbladstripverhaal dus $2+n$ instanties van informatie : het stripbladstripverhaal, hetstripverhaal en alle $n$ delen.
Als een stripbladstripverhaal uit meerdere delen bestaat heeft het zin om ieder deel een URI te geven en het stripbladstripverhaal zelf ook. Als echter een een stripbladstripverhaal maar uit één deel bestaat (en dus een singleton is) heeft dit niet zo veel zin. Het stripbladstripverhaal en het stripbladstripverhaaldeel zouden een eigen URI kunnen krijgen, maar dit it doen we allemaal niet. We geven alleen het stripverhaal uit de stripverhalenserie een uri. Dus zowel de stripverhalen in de omnibussen als die in de stripbladen krijgen (vooralsnog) geen URI want we willen vooralsnog de zaak simpel houden.
Anders zouden we er voor moeten zorgen dat wanneer een stripverhaal in een stripbladstripverhaal een stripverhaalversieid heeft dat gelijk is aan een stripverhaalversieid van een ander stripverhaal(versie) dat de URIs gelijk zijn.
De URI van een concept komt in de basisadministratie door een Python programma. Het is immers ondoenlijk om de URIs handmatig uit te delen.
De volgende concepten krijgen een URI. Deze klassen hebben het attribuut uri.
| stripboekenserie |
| stripboekenreeks |
| uitgifte |
| stripverhalenserie |
| stripverhaalversie |
| stripbladserie |
| stripblad |
| creator |
| uitgever |
| publicatie |
| land |
| taal |
Hoe maken we een unique resource identifier maken kan op eerder genoemde pagina gelezen worden.
We introduceren de klasse uri met twee attributen: uri.value en de uri.datum. De echte waarde van de uri staat dus in uri.value en in het attribuut uri.datum kunnen we zien wanneer de uri uitgedeeld is, ofwel wanneer de resource aan comicweb toegevoegd is.
3.4.2 Output: HTML en Latex
Zoals hierboven in Figuur 1. Procesbeschrijving beschreven wordt zijn er meerdere vormen van output mogelijk met de comicweb software. De belangrijkste zijn de Latex en HTML output. Met de Latex output zullen pdf documenten gemaakt kunnen worden en met de HTML output kan een (deel van) een website gemaakt worden. De latex output verschijnt in de cwgl.latexdestinationdir en de HTML output verschijnt in de cwgl.webdestinationdir (waarbij geldt import ComicWebGlobals as cwgl)
De meeste klassen hebben een methode latex en een methode html (om precies te zijn html2 maar de 2 zullen voor het gemak weglaten). De volgende klassen hebben een latex of html methode:
| class | latex | html |
| publicatielijst | X | X |
| Publicatie | | X |
| stripbladserielijst | X | X |
| stripbladserie | X | |
| stripbladjaargang | | X |
| stripbladstripverhalenserie | X |
| | Stripboekenserielijst | X | X |
| Stripboekenserie | X | X |
| stripboek | | X |
| stripverhalenlijst | X | X |
| stripverhalenserie | X | X |
| stripverhaal | | X |
| creatorslijst | X | X |
| creator | | X |
| uitgeverslijst | X | |
| uitgever | | X |
Als de methode latex of html aangeroepen wordt, wordt er een file gecreëerd of een deel van een file. Een HTML file wordt gecreëerd met de class htmlfile en een Latex file wordt gecreëerd met de class latexfile.
3.4.3 De Latex mogelijkheden
De eerste mogelijkheid met de latexfile class is het gebruik van de headers en footers. We kunnen de tekst zetten en een streep onder de headers en footers zetten.
Headers en Footers
Om de headers en footers te gebruiken moet het attibuut fancyhdr op True gezet worden en daarna moet de functie setheaders(headers) aangeroepen waarbij headers een instance van de class texheaders is.
| fullname=cwgl.latexdestinationdir+"latextest.tex" |
| defile=latexfile(fullname,True,False,False,[],thisfancyhdr,cwgl.outputrootdirectory) |
|
| headers = texheaders() |
| headers.upl = "Linksboven" |
| headers.upc = "Centraal boven" |
| headers.upr = "Rechtsboven" |
| headers.downl = "Linksbeneden" |
| headers.downc = "Centraal beneden" |
| headers.downr = "Rechtsbeneden" |
| headers.toprule = 1 |
| headers.downrule = 10 |
| defile.setheaders(headers) |
Dit geeft op iedere pagina de teksten op hun plaats en een streep van 1 point onder de headers en een dikke streep van 10 points boven de footers.
Twee kolommen
Door het attribuut tweekolom True te maken wordt de tekst in de Latexfile in twee kolommen gezet.
Includefiles
In een Latex file kunnen files geinclude worden. Om in de preamble het command \includeonly{f1,f2,f3} te krijgen moet het atrribuut nopreamble op False gezet worden en constructor moet aangeroepen worden met een array van de includefiles.
| sourcename1="include1" |
| sourcename2="include2" |
| nopreamble=0 |
| includefiles=[sourcename1,sourcename2] |
| defile=latexfile(fullname,True,tweekolommen,nopreamble,includefiles,thisfancyhdr,cwgl.outputrootdirectory) |
| defile.prt("\\include{"+sourcename1+"}") |
| defile.prt("\\include{"+sourcename2+"}") |
Tabellen
De latexfile ondersteunt de creatie van tabellen. De breedte van de kolommen en de plaats van tekst in een cel kunnen gezet worden met de methode settabs(b,p). Hierbij is b een array van integers die de breedte van de kolommen weergeeft en p een array van karakters die de plaatsing in latex aangeven. De functie prttab(txt) plaatst dan de txt tekst in de cel. Na de laatste cel dient een prtln aangeroepen te worden.
| b=[40,30,40,50] |
| p=["l","l","l","l"] |
| defile.prt("\\begin{tabbing}") |
| defile.settabs(b,p) |
| defile.prttab("aap1") |
| defile.prttab("noot1") |
| defile.prttab("mies1") |
| defile.prttab("stoel1") |
| defile.prtln() |
| defile.prttab("aap2",70) |
| defile.prttab("noot2") |
| defile.prttab("mies2") |
| defile.prttab("stoel2") |
| defile.prt("\\end{tabbing}") |
Python function-calls
In de Latex tekst is vaak informatie over stripboeken en stripverhalen nodig. Het belangrijkste voorbeeld hiervan is het V-nummer van een stripverhaal. Als we een stuk tekst schrijven en moeten verwijzen naar een stripverhaal willen we vaak het V-nummer noemen. Echter, het V-nummer kan in de loop der tijd veranderen. In Latex ondersteunen we dat die informatie opgehaald wordt. Dit kan door in de latex file de commando's \python{} en \pythoni{}
Het formaat van de python opdracht is dat de eerste parameter een functie is en de andere parameters de input van deze functie.
De volgende functies worden ondersteund:
| Naam | parameters | uitleg | voorbeeld |
| VNbyOrigin | Titel van stripverhaal in de originele taal | Levert het V-nummer | \pythoni{VNbyOrigin, The homey touch} |
| VNbyDutch | Titel van stripverhaal in de Nederlandse taal | Levert het V-nummer | \python{VNbyDutch, Superbom} |
| VNbyID | Interne identifier van een stripverhaal | Levert het V-nummer | \pythoni{VNbyID,KINGB} |
| TitelbyOrigin | Titel van stripverhaal in de originele taal | Levert de titel van het stripverhaal in de Nederlandse taal | \python{TitelbyOrigin, Christmas on Bear Mountain} |
| TitelOriginbyID | Interne identifier van een stripverhaal | Levert de titel van het stripverhaal in de originele taal | \python{TitelOriginbyID,KING} |
| bib | De identifier van het bibitem in de bibliotheek | Een latex verwijzing naar de bibitem | \python{bib, AFRIK} |
| includetable | De naam van een table file in de cwgl | | \python{includetable,jippes.txt} |
\pythoni{VNbyOrigin,The milkman}, {\it The milkman})
\python{VNbyOrigin,Silent Night}
|
|