23. Werken met Catman, een python werkinterface voor catalografische beschrijvingen

Auteur Alain Descamps
Aanmaak 8 aug 2008
Oud BVV nr 0603

23.1. Abstract

Dit document beschrijft het gebruik van de api catman.py. Ze is dan ook in eerste instantie bedoeld voor software ontwikkelaars.

23.2. Opzetten van de applicatie, die gebruik maakt van catman

Om in je python applicatie gebruik te maken van catman, voeg je bij je code:

from anet.catman import catman

Dit is de algemene ingang en je bekomt zo ook alle faciliteiten. Je hoeft dus geen andere modules van catman op te laden.

23.3. De python klasse CatRecord: de kern van het gebeuren

Hoe maak je een catalografisch record? Je maakt telkens een instance van de klasse catman.CatRecord:

catrecord = catman.Catrecord()

Eigenschappen ken je toe van zodra je daar zin in hebt:

catrecord.cloi = 'nrco:vl.670934'

En dit doet net hetzelfde:

catrecord['cloi'] = 'nrco:vl.670934'

Voorbeeld:

from anet.catman import catman
catrecord = catman.Catrecord(cloi='nrco:vl.670934')
title = catman.Title(_ty='h', _ti='El Salvador : de mooiste bloem een wonde : gesprekken met Roger Ponseele', _ex='', _ac='False', _pr='oip', _lg='dut')
catrecord.titles.append(title)

Je kan ook attributen wijzigen:

title._ti += "."

De volgende code levert precies hetzelfde op:

from anet.catman import catman
catrecord = catman.CatRecord()
catrecord.cloi = 'nrco:vl.670934'
title = catman.Title()
title['_ty'] = 'h'
title['_ti'] = 'El Salvador : de mooiste bloem een wonde : gesprekken met Roger Ponseele'
for node in ['_ex', '_so']:
    title[node] = ''

title._ac = False
title._pr = 'oip'
title._lg = 'dut'
catrecord.titles.append(title)
title._ti += "."

Je mag dus kiezen tussen de constructie met vierkante haakjes (title['_ti']) en de punt notaties (title._ti). Volgende code is ook geldig:

for (node, value) in title.iteritems():
    print "title : node %s has value %s" % (node, value)

Waarschuwing

Vergeet evenwel nooit je gemaakte entiteit (title in dit geval) toe te voegen aan je catalografisch record. Meer voorbeelden vind je in project /catalografie/catman/examples.py.

De eigenschappen van het catalografisch catman model komen qua benamingen en betekenis heel nauw overeen met de macro’s van de Brocade software /catalografie/application/cat.d. Meer nog : de attributen van de deelentiteiten hebben dezelfde namen als in de macro’s van cat.d. Vergelijk maar eens volgende M code:

m4_getCatIsbdAuthors(RAaut,"c:lvd:1345679")
s i=""
f  s i=$O(RAaut(i)) q:i=""  d
. w !,"De "_i_"e auteur heet "_RAaut(i,"fn")_", en zijn voornaam is "_RAaut(i,"vn")
. q

met volgende Python code:

catrecord = catman.CatRecord(cloi="c:lvd:1345679")
author = catman.Author(_fn="Descamps", _vn="Alain")
catrecord.authors.append(author)
...
for (aui, author) in enumerate(catrecord.authors):
...     print aui + author
for author in catrecord.authors:
    print "De %se auteur heet %s, en zijn voornaam is %s" % (aui+1, author['_fn'], author['_vn'])

Je mag dus verwachten dat de attributen (fn, vn, …) uit een macro dezelfde betekenis en codering hebben in het catman model. We gaan dan ook niet alle attributen van de elementen hier herhalen.

Een uitgebreid illustratief voorbeeld

mycatrecord = catman.CatRecord(cloi='c:lvd:3111997')
mycatrecord.titles.append(catman.Title(_ty='h', _so='fp', _ti='Priester in bevrijd gebied', _lg='dut'))
mycatrecord.authors.append(catman.Author(_so='nd', _fu='aut', _vn='Roger', _ac=False, _fn='Ponseele'))
mycatrecord.carriers.append('paper')
mycatrecord.collations.append(catman.Collation(_ty='normal', _pg='65 p.', _so='nd', _il='ill.'))
impressum = catman.Impressum(_ju1sv='1983', _ty='normal', _pl='Gent', _ju2ty='YYYY', _fu='pbl', _pso='nd', _ju1ty='YYYY')
impressum._ug = _ug='Romerostichting'
mycatrecord.impressums.append(impressum)
mycatrecord.infos.append(catman.Info(_if='test sample 2 from /catalografie/catman/examples.py'))
mycatrecord.languages.append(catman.Language(_ty='dt', _lg='dut'))
mycatrecord.memberships.append('zebra')
subject1 = catman.Subject(_ty='U', _ac='a::27:1', _vw='Christelijke kerkgeschiedenis')
mycatrecord.subjects.append(subject1)
subject2 = catman.Subject(_ty='U', _ac='a::91.728.4:1', _vw='El Salvador')
mycatrecord.subjects.append(subject2)
holding = catman.Holding(_libid='BSA', _ploi='p:lvd:1994478', _ty='mo-l', _re='', _rc='', _pk='LZ 293/149')
mycatrecord.pk['BSA'] = []
mycatrecord.pk['BSA'].holdings.append(holding)

Een overzicht van het catalografisch catman model:

node python type aard van de inhoud oorspr. inhoud
cloi string
String
Bevat de cloi of een constructie van de vorm nr+typenr + nummer.
‘’
deleted boolean
Booleaanse waarde
True = record is onbestaande. Dit laat toe om bij verwerkingen te beslissen bepaalde records te skippen.
False
frozen boolean
Booleaanse waarde
True = het record is bevroren.
False
origin string
Oorsprong van het record.
Kan bijvoorbeeld de naam van een file bevatten, die de catalografische data bevat, waaruit het record is opgebouwd.
‘’
profile string Profile id van het catalografisch import profiel. ‘’
uniq string unieke nummer ‘’
authors list van catman.Author instances lijst []
carriers list van catman.Carrier instances dragers []
collations list van catman.Collation instances collaties []
corporateauthors list van catman.Corporateauthor instances corporatieve auteurs []
editions list van catman.Edition instances edities []
fulltexts list van catman.Fulltext instances abstracts, inhouden en illustraties []
impressums list van catman.Impressum instances impressums []
infos list van catman.Info instances infovelden []
languages list van catman.Language instances taal van de inhoud []
memberships list van catman.Membership instances lidmaatschappen []
notes list van catman.Note instances annotaties []
numbers list van catman.Number instances bibliografische nummers []
pk dictionary plaatskenmerken  
relations list van catman.Relation instances relaties []
status een catman.Status instance status veld  
subjects list van catman.Subject instances onderwerpscodes []
titles list van catman.Title instances titels []

23.4. Instellingen, plaatskenmerken, volumes en exemplaargegevens

Laat ons even dieper ingaan op de bijzondere hiërarchische structuur van de plaatskenmerk gebonden gegevens. Net zoals in het catalografisch model, gehanteerd binnen Brocade, vind je volgende niveau’s terug:

Catalografische instellingen

Een catalografisch record bevat al dan niet meerdere plaatskenmerken van catalografische instellingen.

mycr = catman.CatRecord()
mycr.pk['BSA']=[]
Holdings

Per catalografische instelling vind je al dan niet meerdere plaatskenmerken of holdings.

mycr = catman.CatRecord()
mycr.pk['BSA']=[]
mypk1 = catman.Holding()
mycr.pk['BSA'].holdings.append(mypk1)
Volumes

Elk plaatskenmerk heeft zijn eigen attributen, en bevat bovendien al dan niet meerdere volumes.

mypk1._an="pk annotatie"
mypk1._bz="pk bezit 1"
mypk1._pk="PONS 21"
mypk1._ty="z"
myvol1 = catman.Volume()
mypk1.volumes.append(myvol1)
myvol2 = catman.Volume()
mypk1.volumes.append(myvol2)
Exemplaren

Elk volume heeft eveneens zijn eigen attributen, en bevat bovendien al dan niet meerdere exemplaren.

myvol1._volid = 'v.1'
myvol2._volid = 'v.2'
myvol2._nt = 'noor, enkel bij vol.2'
mypkobj11 = catman.Pkobject()
myvol1.objects.append(mypkobj11)
mypkobj12 = catman.Pkobject()
myvol1.objects.append(mypkobj12)
Nummeringen

Elk exemplaar heeft op zijn beurt eigen attributen, en bevat al dan niet meerdere nummeringen.

mypkobj11._oloi='o:lvd:101'
mypkobj11._up='up1'
mypkobj12._oloi='o:lvd:102'
mypkobj12._up='up1'
mypkobj12.indices = {'01543543':'bc', '12345':'inv'}

23.5. Verdeel en heers: generators en acties

Hoewel er vele verschillende operaties bestaan op catalografische data, toch komt een tweedelig patroon dikwijls terug:

  • Er worden een aantal catalografische records gegenereerd.
    Bijvoorbeeld het lezen en ontrafelen van een marc21 file.
  • Er wordt een actie uitgevoerd op een de gegenereerde records.
    Bijvoorbeeld het aanmaken van een catxml file.

Welnu, in de catman module zal je twee categorieën procedures terugvinden:

Generatoren
Iterators, die op diverse basissen catalografische records genereren. Het is ook best denkbaar dat je je eigen iterator schrijft.
Acties
die gevoed worden door generatoren. Het is evengoed denkbaar dat je eigen, eenmalige acties ontwikkelt, die zich baseren op genratoren, die je voor het grijpen hebt.

Op die manier kan je deze software in een breed spectrum inzetten: je combineert je actie op een generator van jouw keuze.

23.5.1. Generator yieldexamples: bij wijze van voorbeeld

Deze genereert drie catalografische records. Handig, als je zelf procedures wil uittesten.

Voorbeeld:

from anet.catman import catman
for catrecord in catman.yieldexamples():
...     print catrecord

23.5.2. Generator yieldcsvcatrecords: vanuit een cat csv (.csv) bestand

Genereert catalografische records, uitgaande van een cat csv bestand. Import csv bestanden in Brocade catalografie gaat uitgebreid in op dit formaat.

23.5.3. Generator yieldbcatrecords: vanuit Brocade

Genereert catalografische records vanuit de Brocade omgeving. Je kan kiezen tussen twee uitgangspunten:

  • Een lijst van catalografische records.

    Voorbeeld:

    catman.yieldbcatrecords(listloi='lst:87686')
    

    Deze lijst kan een gesorteerde lijst van cloi identifiers zijn, of een lijst, waar de node Cloi of cloi voorkomt.

  • Een M executable, die een gegeven M variabele RDloi vervangt door zijn opvolger of de lege string.

    Voorbeeld:

    catman.yieldbcatrecords(statement='s RDloi=$o(^ZTEMP("aa",RDloi)')
    

Bovendien kan je bij beide uitgangspunten ingrijpen op de catalografische data die naar buiten wordt gebracht.

Voorbeeld:

catman.yieldbcatrecords(listloi='lst:87686', extramumps='d %Extra^cvabgen("ua")')
catman.yieldbcatrecords(statement='s RDloi=$o(^ZTEMP("aa",RDloi)', extramumps='d %Extra^cvabgen("ua")')

Deze extramumps parameter bevat een executable, waarbij volgende dingen worden ondersteld:

  • Gegeven RDcloi, de Brocade identificatie van het record.
  • Gegeven een global referentie RGcloi, bevattende de catalografische data van het record:
    • @RGcloi@("ss") = de array van de statusvelden (zie macro m4\_getCatGenStatus)
    • @RGcloi@("ti") = de array met titelinformatie (zie macro m4\_getCatIsbdTitles)
    • @RGcloi@("au") = de array met auteursinformatie (zie macro m4\_getCatIsbdAuthors)
    • … analoog voor "tk" "if" "dr" "lg", "lm" "ca" "ed" "co" "im" "nr" "in" "nt" "ow" "aq" "re" "pk"
  • Gevraagd: een aangepaste global @RGcloi

Je kan ook regelen of je de uitgebreide plaatskenmerken naar buiten wil brengen, en de relaties.

Voorbeeld:

catman.yieldbcatrecords(listloi='lst:87686', holdings=True')
catman.yieldbcatrecords(statement='s RDloi=$o(^ZTEMP("aa",RDloi)', relations=False)

Bij ontstentenis worden de plaatskenmerken niet naar buiten gebracht, de relaties wel.

Kies of je de autority informatie van auteurs en/of corporatieve auteurs ook naar buien wil brengen.

Voorbeeld:

catman.yieldbcatrecords(listloi='lst:87686', holdings=True', authorities=['au'])
catman.yieldbcatrecords(statement='s RDloi=$o(^ZTEMP("aa",RDloi)', relations=False, authorities=['au', 'ca'])

23.5.4. Generator yieldmarc21catrecords: vanuit een marc21 (.mrc) bestand

Genereert catalografische records vanuit een MARC21 bestand. Een omzetting van Marc21 velden naar een Brocade model is zeker geen eenduidige bewerking. In sommige omstandigheden is het ook wenselijk om bepaalde velden niet te verwerken. Om ruimte te scheppen heeft deze api extra parameters gekregen.

We sommen de alhier relevante op:

  • marc21fn: de naam van het MARC21 bestand.
  • f21sel: een lijst van datatags, die moet verwerkt worden.

    Voorbeeld:

    ['100', '700', 245']

  • c21sel: een lijst van control tags, die moet verwerkt worden.

    Voorbeeld:

    ['001', '008']

  • extrahandle: welke nabehandeling moet er gebeuren. Ga ervan uit, dat dit een python procedure moet zijn, die

    1. gevoed wordt met twee parameters:
      • elemr bevat de Marc21 structuur in een elementtree format.
      • catr bevat een instance van een catman catalografisch record.
    2. als return object een al of niet gemodifieerd catalografisch record geeft.

    Voorbeelden vind je onder andere in project /catalografie/catman/extrahandlers.py.

  • knownf21tags: een lijst van data tags. Indien deze voorkomen, dan worden zij geskipt zonder een foutboodschap te genereren.

  • knownc21tags: idem voor control tags.

  • profile: id van het catman profiel. Dit geeft een alternatieve manier om de vorige parameters te bepalen.

Voorbeeld:

myf21sel = ['010', '020', '035', '300', '362', '365', '440', '500', '501', '505']
myc21sel = ['001']
catman.yieldmarc21catrecords(marc21fn="/library/tmp/mymarcfile.mrc",
                     f21sel=myf21sel,
                     c21sel=myc21sel,
                     extrahandle=myextrahandle,
                     knownf21tags=['599', '850', '852', '856'],
                     knownc21tags=['008'])
catman.yieldmarc21catrecords(marc21fn="/library/tmp/mymarcfile.mrc", profile="myprofile")

23.5.5. Generator yieldxml21catrecords: vanuit een marc21xml (.xml) bestand

Werkt compleet analoog aan yieldmarc21catrecords, doch vertrekkend vam een xml21 bestand.

Voorbeeld:

myf21sel = ['010', '020', '035', '300', '362', '365', '440', '500', '501', '505']
myc21sel = ['001']
catman.yieldxml21catrecords(xml21fn="/library/tmp/mymarcxmlfile.xml",
                         f21sel=myf21sel,
                         c21sel=myc21sel,
                         extrahandle=myextrahandle,
                         knownf21tags=['599', '850', '852', '856'],
                         knownc21tags=['008'])
catman.yieldxml21catrecords(xml21fn="/library/tmp/mymarcxmlfile.xml", profile="myprofile")

23.5.6. Generator yieldcatxmlrecords: vanuit een catxml (.xml) bestand

Genereert catalografische records vanuit een cat xml bestand.

Voorbeeld:

catman.yieldcatxmlrecords("/library/tmp/mycatxmlfile.xml")

23.5.7. Maak je eigen generator

Niets belet je om zelf je generator te maken. Stel bijvoorbeeld dat je een eenmalige conversie moet uitvoeren van een collectie boeken, waarvan de data in een speciaal formaat wordt aangeleverd. In plaats van een voleldige conversie procedure te ontwikkelen, beperk je je tot het ontwikkelen van een generator van catman.CatRecord instances. Nadien heb je waaier van voordelen, waarbij hier enkele opgesomd:

  • Je kan rechtstreeks importeren in Brocade, zonder een catxml of ander type bestand aan te maken.
  • Je kan analyses maken, vooraleer je converteert.
  • Je kan conversieresultaten zichtbaar maken, zonder effectief een conversie uit te meoten voeren.

23.5.8. Actie makecatxmlfile : maak een catxml file aan

Maakt een catxml bestand aan, op basis van een generator van catalografische records. Dit vraagt drie parameters:

  • xmloutfn: de naam van de aan te maken catxml file.
  • catrecorditerator: de generator van catalografische records.
  • admind: een verwijzing naar een administratieve module, die het verloop van de bewerking opvolgt.

Voorbeeld:

mymarcfile = "/library/tmp/mymarcxmlfile.xml"
myadmin = catman.AdminSimple()
mycatiter = catman.yieldxml21catrecords(xml21fn=mymarcfile, profile="myprofile")
catman.makecatxmlfile(xmloutfn="/library/tmp/mycatxml.cat.xml", catrecorditerator=mycatiter, admind=myadmin)

23.5.9. Actie importinbrocade: importeer in Brocade

Importeert de catalografische data in Brocade, op basis van een generator van catalografische records. Dit vraagt volgende parameters:

  • catrecorditerator: de generator van catalografische records.
  • fake: indien True, dan wordt de import code op de standard output geschreven en niet uitgevoerd. Default = False.
  • importprofile (optioneel): de naam van het catman import profiel. Zie ook Importeer catalografische data in Brocade met catcnv.
  • admind (optioneel): een verwijzing naar een administratieve module, die het verloop van de bewerking opvolgt.
  • extra parameters: alle keywords, die ook via toolcat bewerking catcnv -import kunnen worden mee gegeven. Zie uitgebreid bij Importeer catalografische data in Brocade met catcnv. Deze overschrijven de waarden, aangeduid door importprofile.

Notitie

De toolcat applicatie catcnv is gebaseerd op deze api. Je kan dan ook alle functies en mogelijkheden uitgebreid vinden in Importeer catalografische data in Brocade met catcnv.

Voorbeeld:

mymarcfile = "/library/tmp/mymarcxmlfile.xml"
myadmin = catman.AdminSimple()
mycatiter = catman.yieldxml21catrecords(xml21fn=mymarcfile, profile="myprofile")
catman.importinbrocade(mycatiter, importprofile="myprofile2",  admind=myadmin, cloicheck="exist")

23.5.10. Actie miterator: genereer de Brocade genereercode

Deze actie geeft een generator van M code, die vorige actie uitvoert. De aangestuurde parameters catrecorditerator, importprofile=None,  admind=None, .. zijn analoog aan vorige actie.

Voorbeeld:

mymarcfile = "/library/tmp/mymarcxmlfile.xml"
myadmin = catman.AdminSimple()
mycatiter = catman.yieldxml21catrecords(xml21fn=mymarcfile, profile="myprofile")
for mcode in catman.miterator(mycatiter, importprofile="myprofile2",  admind=myadmin, cloicheck="exist"):
print "%s" % mcode

23.6. Diverse hulpmiddeltjes.

In het converteren en bewerken van catalografische data komen dikwijls een aantal operaties terug. catman wil ook hierop een antwoord geven door een aanbod van extra functies.

23.6.1. Hulpmiddel marcpresentation: toon een marc record in leesbaar formaat

Toont de inhoud van een marc record in een leesbaar formaat.

Voorbeeld:

r = '00500aam a2200205   450000100050000000500170000500800410002202000180006304000170008104100'
r += '0800098100002600106245002400132260004100156300001700197365001100214440002400225521001600'
r += '249534000900265650002000274\x1e5170\x1e20070913093331.0\x1e830601s1982                  '
r += '    1 dut  \x1e  \x1fa90-293-9541-9\x1e  \x1faVLACC I\x1fbdut\x1e  \x1fheng\x1e  \x1faSi'
r += 'onil Jos\xc3\xa9, F.\x1f4aut\x1e 0\x1faMis in Manila\x1fhBOEK\x1e  \x1faBussum\x1fbHet W'
r += 'ereldvenster\x1fccop. 1982\x1e  \x1fa309 p.\x1fbill.\x1e  \x1fb470\x1fcF\x1e 0\x1faDerde'
r += ' spreker-serie\x1e  \x1favolwassenen\x1e  \x1faMass\x1e  \x1faFilipijnen\x1f9vth\x1e'
print "%s" % catman.marcpresentation(r)
leader 00500aam  2200204   4500
001 5170
005 20070913093331.0
008 830601s1982                      1 dut
020  $a='90-293-9541-9'
040  $a='VLACC I' $b='dut'
041  $h='eng'
100  $a='Sionil Jos©«266D», F.' $4='aut'
245  $a='Mis in Manila' $h='BOEK'
260  $a='Bussum' $b='Het Wereldvenster' $c='cop. 1982'
300  $a='309 p.' $b='ill.'
365  $b='470' $c='F'
440  $a='Derde spreker-serie'
521  $a='volwassenen'
534  $a='Mass'
650  $a='Filipijnen' $9='vth'

23.6.2. Hulpmiddel marc21tomarcxml21: zet een marc21 bestand om in een marc21xml bestand

Voorbeeld:

mymarcfile = '/library/process/xxx/yyy.mrc'
catman.marc21tomarcxml21(marc21fn=mymarcfile, marcxmlfn='/library/process/xxx/yyy.xml')

23.6.3. Hulpmiddel publidateanalyser: analyseer een jaar van uitgave

Dikwijls wordt een jaar van uitgave aangeboden als één string: dit moet dan omgezet worden naar de zes Brocade elementen.

Voorbeeld:

catman.publidateanalyser('1990-')
('YYYY', '1990', '', 'currens', '', '')

23.6.4. Hulpmiddel splitfnvn: splits de voornaam en familienaam van een auteur

Deze bewerking op een auteur tracht een string uit te splitsen in een voornaam en familienaam. Extra parameters:

  • method=simple: er wordt volgende vorm ondersteld: familienaam, voornaam
  • method=complex: ook vormen met een voorvoegsel van de en dergelijke worden geanalyseerd.

Voorbeeld:

author = catman.Author(_fn='Janssens, Erik')
author.splitfnvn(method='simple')
author

_so='', _fu='', _vn='Erik', _ex='', _ac=None, _pr='oip', _fn='Janssens'

author2 = catman.Author(_fn='Van den Berg, Johan')
author.splitfnvn(method='complex')
author2

_so='', _fu='', _vn='Johan', _ex='', _ac=None, _pr='oip', _fn='Berg, Van den'
Ook ingewikkelde vormen als deze worden aangepakt:

Voorbeeld:

author3 = catman.Author(_fn='Berg, Johan Van den')
author3.splitfnvn(method='complex')
author3

_so='', _fu='', _vn='Johan', _ex='', _ac=None, _pr='oip', _fn='Berg, Van den'

author4 = catman.Author(_fn='Van Saksen-Coburg Gotha, Albert II')
author4.splitfnvn(method='complex')
author4

_so='', _fu='', _vn='Albert II', _ex='', _ac=None, _pr='oip', _fn='Saksen-Coburg Gotha, Van'

23.6.5. Hulpmiddel capitalize: herleid namen naar de gecapitalizeerde vorm

Voorbeeld:

author = catman.Author(_fn="van de Sande", _vn="ALBERT")
author.capitalize()
author

_so='', _fu='', _vn='Albert', _ex='', _ac=None, _pr='oip', _fn='van de Sande'

Je kan ook de harde manier gebruiken:

Voorbeeld:

author.capitalize(method='always')
author

_so='', _fu='', _vn='Albert', _ex='', _ac=None, _pr='Oip', _fn='Van de sande'

Of zelf beslissen welke nodes er moeten gecapitalizeerd worden:

Voorbeeld:

author = catman.Author(_fn="VAN DE SANDE", _vn="ALBERT")
author.capitalize(nodes=['_vn'])
author

_so='', _fu='', _vn='Albert', _ex='', _ac=None, _pr='oip', _fn='VAN DE SANDE'

23.6.6. Hulpmiddel rstripchars/lstripchars: verwijder punctuaties en andere karakters

Dit komt bovendien terug met waarde True, als er effectief karakters zijn weggehaald.

Voorbeeld:

mynote = catman.Note(_ty='alg', _nt="liederen i.v.m. Brabant, Limburg.")

mynote.rstripchars()

True

mynote

_ty='alg', _so=None, _pr='oip', _nt='liederen i.v.m. Brabant, Limburg.', _ta='U'

Je kan ook:

Voorbeeld:

mynote = catman.Note(_ty='alg', _nt="liederen i.v.m. Brabant, Limburg.")
mynote.rstripchars(nodes=['_nt'], puncset=" .\:")

23.6.7. Hulpmiddel brackets: verwerking van rechte haken in titels, impressums, …

Aangeboden velden bevatten soms rechte haken, en die wil je wel eens kwijt, maar niet zomaar. Dikwijls wordt op die manier de bron van een gegeven aangeduid.

Voorbeeld:

myimpressum = catman.Impressum(_pl='[Gent]')
myimpressum.brackets(source='ext')
myimpressum._pl
'Gent'
myimpressum._so
'ext'

Notitie

Laat de parameter source weg, als je de bron niet wil bijwerken.

myimpressum = catman.Impressum(_pl='[Gent]')
myimpressum.brackets()
myimpressum._pl
'Gent'
myimpressum._so
(None)

Notitie

Dit hulpmiddel werkt zowel op instances van catman.Title als van catman.Impressum.