Petter Reinholdtsen

Entries tagged "noark5".

Frokostseminar om Noark 5 i Oslo tirsdag 2024-03-12
27th February 2024

Nikita-prosjektet, der jeg er involvert, inviterer i samarbeid med Oslo Byarkiv, forskningsgruppen METAINFO og foreningen NUUG, til et frokostseminar om Noark 5 og Noark 5 Tjenestegrensesnitt tirsdag 2024-03-12. Seminaret finner sted ved Oslo byarkiv. Vi håper å få til videostrømming via Internett av presentasjoner og paneldiskusjon. Oppdatert program og lenker til påmeldingsskjema er tilgjengelig fra Nikita-prosjektet. Arrangementet er gratis.

Som vanlig, hvis du bruker Bitcoin og ønsker å vise din støtte til det jeg driver med, setter jeg pris på om du sender Bitcoin-donasjoner til min adresse 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b. Merk, betaling med bitcoin er ikke anonymt. :)

Tags: noark5, norsk, nuug, offentlig innsyn, standard.
«Når «på» blir «pÃ¥»: Et reservoar av tegn sett fra depotet» i tidsskriftet Aksess
15th November 2023

For noen uker siden skrev en kamerat og meg en artikkel om tegnsett i arkivtidsskriftet Aksess både på web og i papirutgave nr. 3 2023. Her er det som nettopp ble publisert.

Når «på» blir «pÃ¥»: Et reservoar av tegn sett fra depotet

av Thomas Sødring og Petter Reinholdtsen

De færreste av oss tenker over hva som skjer dypere i datamaskinen mens vi sitter der og skriver noe på tastaturet. Når du trykker på tasten «Å», så vises bokstaven Å. Men noen ganger blir det feil. Hvorfor det – og hva er viktig å være klar over i arkivsammenheng?

Dersom bokstaver tolkes forskjellig mellom systemer, blir det fort rot, dette kalles mojibake blant kjennere, etter det japanske uttrykket for tegnomforming. Det er en lang historie her som tidvis har vært preget av rot. Noen husker kanskje tilbake til en tid der bokstavene æ, ø og å ofte var ødelagt i e-poster – et klassisk eksempel på tegnsettproblemstilling.

«Nå» og «før»

Tid er et skjult problem for depot fordi vi danner dokumentasjon i en kontekst som er preget av å være «nå». Vår forståelse av verden og bruken av teknologi er utgangspunktet for denne konteksten. Tenk selv hvordan verden har utviklet seg de siste 20 årene, hva samfunnet er opptatt av, og hvordan vi bruker teknologi i hverdagen. Tid er et skjult problem fordi når vi trekker dokumentasjon ut av systemer og deponerer for langtidsbevaring, er konteksten til materialet «nå», men verden går videre. Ettersom teknologien og måten vi bruker den på, utvikler seg, blir «nå» til «før», og dokumentasjonen befinner seg snart i en «før»-kontekst.

Dette med «før» og «nå» i forhold til dokumentasjonens kontekst er noe vi er veldig lite bevisste på, men det er en problemstilling depotarkivene eier og forvalter. En av disse utfordringene er hvorfor «Ø» ikke nødvendigvis er det samme som «Ø», og hvorfor det i det hele tatt gir mening å si noe sånt. Vi snakker her om noe som heter tegnsett, som er en avtalt måte å representere bokstaver, tall og andre symboler på slik at vi på en feilfri måte kan utveksle tekst mellom datasystemer.

Tegnsettproblemstillingen er satt sammen av fire fasetter; repertoar, representasjon, koding og uttegning.

Repertoarer

Repertoar er en samling med tegn og symboler som kan representeres. Tenk norsk alfabet eller japanske piktogrammer, men også matematiske og elektroniske symboler. Bokstaven «stor a» kan være en oppføring i et slikt repertoar. For å kunne brukes i en datamaskin trenger hver oppføring i et slikt repertoar en representasjon, hvilket i datamaskinsammenheng betyr at det tilordnes et tall. Tallet kan lagres på ulike vis i en eller flere kodingsformater. For eksempel kan en skrive tallet ti som både 10, X og A, i henholdsvis titallssystemet, romertallssystemet og sekstentallssystemet.

Hvis en skal kunne lese inn filer og vite hvilket tall og hvilken representasjon og instans i et repertoar det er snakk om, så må en vite hvordan tallet er kodet. Sist, men ikke minst, for å kunne bruke symbolet til noe må det kunne være kjent hvordan det skal se ut eller tegnes på ark. Det finnes utallige skrifttyper med norske bokstaver, alle litt forskjellige, og skal en kunne tegne en stor A på skjermen, så må datamaskinen vite hva den skal tegne. Skrifttyper inneholder informasjon om hvordan ulike tall skal tegnes. De inneholder ikke alltid alle symbolene som er brukt i en tekst, hvilket gjør at ikke alle forståtte tegn vil kunne vises på skjerm eller ark.

Hver av disse fasettene må være avklart for å kunne ta vare på og vise frem tekst med en datamaskin. Kombinasjon av repertoar, representasjon og koding er det en kaller et tegnsett. Kombinasjonen av representasjon og uttegning kalles en skrifttype. De fleste skrifttyper har også informasjon om repertoar, men det finnes skrifttyper som kun kobler mellom tallkode og uttegning, uten å fortelle noe om hvordan tallkodene egentlig skal tolkes.

Fra ASCII til ISO-8859

Vi begynner historien med ASCII (American Standard Code for Information Interchange) som har en historie som spores tilbake til 1963. Utgangspunktet til ASCII var at det kunne kode opp til 128 forskjellige symboler i vanlig bruk i USA. De visuelle symbolene i ASCII er de små og store bokstavene (a til z og A til Z), tall (0 til 9) og tegnsettingssymboler (for eksempel semikolon, komma og punktum). ASCII har også noen usynlige symboler som ble brukt for bl.a. kommunikasjon. Før ASCII var det for eksempel teleks-tegnsett med plass til bare 32 tegn og EBCDIC med plass til 256 tegn, alle med en helt annen rekkefølge på symbolene enn ASCII, men de har vært lite brukt de siste femti årene. Et eksempel på noen utvalgte symboler i repertoaret til ASCII vises i tabell 1.

Tabell 1. Eksempel på utvalgte symboler hentet fra ASCII-tegnsettet. Kolonnen «Binær» viser symbolets verdi i totallssystemet (1 og 0 tall), mens kolonnen «Desimal» viser symbolets verdi i titallssystemet.
Grafisk Binær Desimal
A 1000001 65
M 1001101 77
Z 1011010 90
a 1100001 97
m 1101101 109
z 1111010 122
0 0110000 48
9 0111001 58
; 0111011 59

Det opprinnelige ASCII-tegnsettet ble også omtalt som ASCII-7 og brukte 7 bits (0 og 1) for å representere symboler. Datamaskiner er ofte konfigurert til å jobbe med enheter der bits er gruppert som 4 eller 8 bits . Det lå en mulighet i å ta i bruk bit åtte. En slik endring ville gjøre det mulig for datamaskiner å øke antall symboler de kunne representere, noe som ga en økning fra 128 forskjellige symboler til 256 forskjellige symboler. Det ble åpnet for å innlemme de nordiske bokstavene sammen med ASCII, og dette ble etter hvert standardisert som ISO-8859-1. Tabell 2 viser deler av ISO-8859-1 som støtter de norske bokstavene.

Det sier seg selv at muligheten til å representere inntil 256 symboler ikke holder når vi snakker om en global verden, og det ble gjort et standardiseringsløp som tok utgangspunkt i ASCII-7 med en utvidelse til å bruke den åttende biten for ulike språkgrupper. Denne standarden heter ISO-8859 og er inndelt i opptil 16 varianter, altså fra ISO-8859-1 til ISO-8859-16.

Tabell 2. Koding av de norske symbolene slik de er definert i ISO-8859-1 tegnsettet.
Grafisk Binær Desimal
Æ 11000110 198
Ø 11011000 216
Å 11000101 197
æ 11100110 230
ø 11111000 248
å 11100101 229

Norske tegn er definert i ISO-8859-1, som også omtales som Latin 1, de fleste samiske tegn er definert i ISO-8859-4 (Latin 4) mens tilgang til €-symbolet kom med ISO-8859-15 (Latin 9). ISO-8859-15 er en revisjon av ISO-8859-1 som fjerner noen lite brukte symboler og erstatter bokstaver som er mer brukt, og introduserer €-symbolet. Det er viktig å merke at alle ISO-8859-variantene har overlapp med ASCII-7, noe som ga samvirke med de engelskspråklige landene som ikke trengte å gjøre noe. Det innebærer også at de første 128 verdiene i ISO-8859-variantene representerer de samme symbolene. Det er først når du kommer til tolkningen av de resterende 128 verdiene med nummer 128 til 255, at det oppsto tolkningsutfordringer mellom ISO-8859-variantene.

ISO-8859-verdenen fungerte godt så lenge tegnsettet som ble brukt når innhold ble skapt, også ble brukt når innhold ble gjengitt og du ikke trengte å kombinere innhold fra forskjellige tegnsett i samme dokument. Utfordringen med bruken av ISO-8859-variantene ble raskt tydelig i en mer globalisert verden med utveksling av tekst på tvers av landegrenser der tekstlig innhold i dokumenter, e-poster og websider kunne bli skrevet med ett tegnsett og gjengitt med et annet tegnsett.

Tabell 3. Viser tolkning av verdiene som er tilegnet de norske symbolene i ISO-8859-1 i de andre ISO 8859-variatene. Merk ISO-8859-12 ikke finnes da arbeidet ble avsluttet.[1]
Binærverdi 1 2 3 4 5 6 7 8 9 10 11 13 14 15 16
11000110 Æ Ć Ĉ Æ Ц ئ Ζ Æ Æ Ę Æ Æ Æ
11011000 Ø Ř Ĝ Ø и ظ Ψ Ø Ø Ų Ø Ø Ű
11000101 Å Ĺ Ċ Å Х إ Ε Å Å Å Å Å Ć
11100110 æ ć ĉ æ ц ن ζ ז æ æ ę æ æ v
11111000 ø ř ĝ ø ј ψ ר ø ø ų ø ø ű
11100101 å ĺ ċ å х م ε ו å å å å å ć

Denne problemstillingen er illustrert i tabell 3, der vi ser verdiene tilegnet de norske symbolene i ISO-8859-1 i kolonne «1». I de øvrige kolonnene ser vi hvilket symbol verdien får i de andre ISO-8859-variantene. Tar vi utgangspunkt i tabell 3, kan vi se at ordet lærlingspørsmål gjengitt med ISO-8859-2 (kolonne 2) blir lćrlingspřrsmĺl, mens det blir lζrlingspψrsmεl med ISO- 8859-7 (kolonne 7). Med ISO-8859-2 blir «æ» til «ć», «ø» til «ř» og «å» til «ĺ». I ISO-8859-7 blir «æ» til «ζ», «ø» til «ψ», mens «å» blir «ε».

Det er egentlig ingen utfordring med dette så lenge du vet hvilket tegnsett innholdet ditt er representert med, og det ikke har skjedd omforminger som du ikke er klar over. Det er det siste som er problematisk, spesielt de datasystemene som har vært i bruk de siste 20 årene, som ikke har noe innebygd funksjonalitet for å forvalte tegnsettproblematikken. Et godt eksempel på dette er Microsoft-tegnsettet Windows-1252, som ble forvekslet som 100 % kompatibel med ISO-8859-1, men hadde byttet ut plassene fra 127 til 159. Historisk vil det finnes en del variasjon i hvilket tegnsett som har vært i bruk, og hvor vellykket konvertering mellom tegnsett har vært.

Unicode som løsning

Tegnsettforvirring ble etter hvert et irritasjonsmoment og samvirkeproblem. Ofte fikk man en e-post der æøå var erstattet av rare symboler fordi e-posten hadde vært innom et eller annet datasystem som ikke brukte samme tegnsett.

For å løse dette samvirkeproblemet for tegnsett ble det startet et arbeid og en ny standard så dagens lys etter hvert. Denne standarden fikk navnet Unicode (ISO/ IEC 10646) og skulle resultere i et tegnsett som alle skulle være enige om. Unicode er et repertoar og en representasjon, dvs. navngivning og tilordning av tallverdi til alle symboler i bruk i verden i dag. Oppføringer i Unicode skrives gjerne U+XXXX der XXXX er tallkoden i sekstentallssystemet som oppføringen har i Unicode-katalogen. Her finner vi tegn brukt av både levende og døde språk, konstruerte språk, tekniske symboler, morsomme tegninger (såkalte emojier) og tegn ingen vet hva betyr eller skal brukes til. Et morsomt eksempel er i nettartikkelen: U+237C ⍼ RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW, av Jonathan Chan.[2]

Sammen med Unicode kom det tre måter å kode disse tallene på; UTF-8, UTF-16 og UTF-32. Av datatekniske årsaker er UTF-8 mye brukt, spesielt når det gjelder utveksling av tekst over Internett, mens UTF-16 er brukt en del til tekstfiler lagret på Windows. En utfordring med Unicode og UTF-variantene er at disse gir flere måter å kode samme symbol på med en kombinasjonsmekanisme. Dette kan gi utfordringer ved søk, hvis en skal søke etter et ord som har ett eller flere symboler som kan skrives på ulikt vis, så er det ikke sikkert at søkesystemet vil finne alle forekomster. For eksempel kan bokstaven U+00F8 «Latin Small Letter O with Stroke» kodes som den tradisjonelle norske tegnet ø, men også som o kombinert med skråstrek U+0338. Begge deler er gyldig bruk av Unicode, selv om det er tradisjon for å foretrekke å «normalisere» kombinasjoner som enkelttegn der det er mulig, nettopp for å forenkle søk.

Bare Unicode fremover

Forvaltningens bruk av tegnsett er regulert i Forskrift om IT-standarder i offentlig forvaltning[3]. Her står det: «Ved all utveksling av informasjon mellom forvaltningsorganer og fra forvaltningsorgan til innbyggere og næringsliv skal tegnsettstandarden ISO/IEC 10646 representert ved UTF8 benyttes.» Det er forskjellige bruksområder til UTF-8, UTF-16 og UTF-32, men UTF-8 er kodingen vi kjenner mest til. Det er flere grunner at UTF-8 «vant» konkurransen til å bli den utvalgte. Den kanskje viktigste er at UTF-8 er fullt samvirkende med ASCII-7, slik at den engelskspråklige delen av verden kunne rulle ut UTF-8 uten å merke noe forskjell. En tekstfil med kun ASCII-tekst vil være identisk på disken hvis den lagres som UTF-8 og ASCII. UTF-16 og UTF-32 byr på noen optimaliseringer som gjør dem relevant for spesifikke problemområder, men for det meste vil vi aldri oppleve disse standardene på nært hold i hverdagen. Det er uansett kun bruken av UTF-8 som er lovregulert i Norge.

Det er ikke slik at hele verden bruker ISO/IEC 10646 og UTF-8. Kina har egne standarder for tegnsett, mye brukt er GB 18030, som er Unicode med en annen koding enn UTF-8, mens Taiwan og andre asiatiske land gjerne bruker Big5 eller andre tegnsett.

UTF-8 er dominerende i Norge, men det er tidsperioder der forskjellige datasystemer utvekslet data i henhold til ISO-8859-1, ISO-8859-15, Windows-1252, Codepage 865 og ISO-646-60 / Codepage 1016 mens overgangen til UTF-8 pågikk. Det er ikke slik at et datasystem enkelt kan tvinges til å bruke et tegnsett, da det er flere lag i et datasystem som må settes opp til å bruke riktig tegnsett, og tegnsettproblemet fort oppstår når det er et eller annet i datasystemet som bruker feil tegnsett.

Et klassisk eksempel på problemet er en utveksling av tekst mellom to systemer der teksten i utgangspunktet er kodet i UTF-8, men går gjennom noe som er ISO-8859-1 underveis. Dette kan vises med at ordet «på» i et slik scenario ender opp som «pÃ¥». Det er mulig å spore dette tilbake til verdiene symbolene er tilordnet i tegnsettene. «på» blir til «pÃ¥» fordi «å» i UTF-8 er representert med U+C3AF, og dersom vi ser på hva disse verdiene representerer, ser vi at sekstentallssystemverdien C3 er 1100 0011 i totallssystemet og symbolet med dette tallet i ISO-8859-1 er Ã.

Vi ser det samme med sekstentallssystemverdien A5, som er 1010 0101 i totallssystemet, og tilsvarende symbol i ISO-8859-1 er ¥. Slik mojibake kan lett skje hvis «på» i utgangspunktet var representert med UTF-8, men ble behandlet med et system som bruker ISO-8859-1. Det er ingen automatikk i å fange opp slike ødeleggelser mens tekstlig innhold utveksles mellom datasystemer.

En utfordring for depotarkivene er at bruken av tegnsett ikke alltid har vært regulert, og at det kan finnes flere dokumentasjonssamlinger som er opprettet med varierende tegnsett før gjeldende forskrift inntraff – uten at det er mulig å avlede fra filene hvilket tegnsett som ble brukt. Et eksempel på dette er €-symbolet, som kom først etter at ISO-8859-1 var tatt i bruk. Det kan bli en utfordring for et depotarkiv, men så lenge det er kjent hvilket tegnsett var i bruk, så bør det gå bra. Riksarkivarens forskrift[4] formaliserer dette ved å kreve følgende:

§ 5-11. Tegnsett i arkivuttrekk

  1. Arkivuttrekk og medfølgende struktur- og innholdsbeskrivelser skal overføres som ren tekst i ukryptert form, og benytte godkjent tegnsett.
  2. Godkjente tegnsett er:
    1. Unicode UTF-8
      (ISO/IEC 10646-1:2000 Annex D)
    2. ISO 8859-1:1998, Latin 1
    3. ISO 8859-4:1998, Latin 4 for samiske tegn.
  3. Andre tegnsett aksepteres bare etter avtale med Arkivverket.

Ditt ansvar

På mange måter burde ikke tegnsett være et problem i 2023, men sånn er det nok ikke. Land som har oppgradert til UTF-8 som primærtegnsett for utveksling av tekstlig innhold, begrenser problematikken betraktelig, men globalt sett så er tegnsettutfordringen ikke løst fordi ikke alle er enige om å bruke samme tegnsett. Det kan være geopolitiske eller kulturelle hensyn som ligger til grunn for dette.

Det er uansett verdt å merke at selv om bruken av UTF-8 skulle bli 100% utbredt, så er det et historisk perspektiv (ASCII-7, ISO-8859-variantene, UTF-8) her som gjør tegnsett til et problemområde arkivarene må forstå og håndtere. Som danningsarkivar har du et ansvar for å vite hvilket tegnsett systemene og databasene dere forvalter, er i samsvar med. Det er noe IT-avdelingen din eller programvareleverandørene enkelt skal kunne svare på, og svaret skal være UTF-8 for alle nye systemer.


1. Tegnsettkilde https://en.wikipedia.org/wiki/ISO/IEC_8859

2. https://ionathan.ch/2022/04/09/angzarr.html

3. https://lovdata.no/dokument/SF/forskrift/2013-04-05-959/%C2%A78#%C2%A78

4. https://lovdata.no/forskrift/2017-12-19-2286/§5-11

For øvrig burde varsleren Edward Snowden få politisk asyl i Norge.

Som vanlig, hvis du bruker Bitcoin og ønsker å vise din støtte til det jeg driver med, setter jeg pris på om du sender Bitcoin-donasjoner til min adresse 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b. Merk, betaling med bitcoin er ikke anonymt. :)

Oppdatering 2024-08-23: Har fått innspill om at det norske ordet for japanske mojibake er tegnsalat.

Tags: noark5, norsk, standard.
Nikita version 0.6 released - free software archive API server
10th June 2021

I am very pleased to be able to share with you the announcement of a new version of the archiving system Nikita published by its lead developer Thomas Sødring:

It is with great pleasure that we can announce a new release of nikita. Version 0.6 (https://gitlab.com/OsloMet-ABI/nikita-noark5-core). This release makes new record keeping functionality available. This really is a maturity release. Both in terms of functionality but also code. Considerable effort has gone into refactoring the codebase and simplifying the code. Notable changes for this release include:

  • Significantly improved OData parsing
  • Support for business specific metadata and national identifiers
  • Continued implementation of domain model and endpoints
  • Improved testing
  • Ability to export and import from arkivstruktur.xml

We are currently in the process of reaching an agreement with an archive institution to publish their picture archive using nikita with business specific metadata and we hope that we can share this with you soon. This is an interesting project as it allows the organisation to bring an older picture archive back to life while using the original metadata values stored as business specific metadata. Combined with OData means the scope and use of the archive is significantly increased and will showcase both the flexibility and power of Noark.

I really think we are approaching a version 1.0 of nikita, even though there is still a lot of work to be done. The notable work at the moment is to implement access-control and full text indexing of documents.

My sincere thanks to everyone who has contributed to this release!

- Thomas

Release 0.6 2021-06-10 (d1ba5fc7e8bad0cfdce45ac20354b19d10ebbc7b)

  • Refactor metadata entity search
  • Remove redundant security configuration
  • Make OpenAPI documentation work
  • Change database structure / inheritance model to a more sensible approach
  • Make it possible to move entities around the fonds structure
  • Implemented a number of missing endpoints
  • Make sure yml files are in sync
  • Implemented/finalised storing and use of
         
    • Business Specific Metadata
    •    
    • Norwegian National Identifiers
    •    
    • Cross Reference
    •    
    • Keyword
    •    
    • StorageLocation
    •    
    • Author
    •    
    • Screening for relevant objects
    •    
    • ChangeLog
    •    
    • EventLog
  • Make generation of updated docker image part of successful CI pipeline
  • Implement pagination for all list requests
         
    • Refactor code to support lists
    •    
    • Refactor code for readability
    •    
    • Standardise the controller/service code
  • Finalise File->CaseFile expansion and Record->registryEntry/recordNote expansion
  • Improved Continuous Integration (CI) approach via gitlab
  • Changed conversion approach to generate tagged PDF documents
  • Updated dependencies
         
    • For security reasons
    •    
    • Brought codebase to spring-boot version 2.5.0
    •    
    • Remove import of necessary dependencies
    •    
    • Remove non-used metrics classes
  • Added new analysis to CI including
  • Implemented storing of Keyword
  • Implemented storing of Screening and ScreeningMetadata
  • Improved OData support
         
    • Better support for inheritance in queries where applicable
    •    
    • Brought in more OData tests
    •    
    • Improved OData/hibernate understanding of queries
    •    
    • Implement $count, $orderby
    •    
    • Finalise $top and $skip
    •    
    • Make sure & is used between query parameters
  • Improved Testing in codebase
         
    • A new approach for integration tests to make test more readable
    •    
    • Introduce tests in parallel with code development for TDD approach
    •    
    • Remove test that required particular access to storage
  • Implement case-handling process from received email to case-handler
         
    • Develop required GUI elements (digital postroom from email)
    •    
    • Introduced leader, quality control and postroom roles
  • Make PUT requests return 200 OK not 201 CREATED
  • Make DELETE requests return 204 NO CONTENT not 200 OK
  • Replaced 'oppdatert*' with 'endret*' everywhere to match latest spec
  • Upgrade Gitlab CI to use python > 3 for CI scripts
  • Bug fixes
         
    • Fix missing ALLOW
    •    
    • Fix reading of objects from jar file during start-up
    •    
    • Reduce the number of warnings in the codebase
    •    
    • Fix delete problems
    •    
    • Make better use of cascade for "leaf" objects
    •    
    • Add missing annotations where relevant
    •    
    • Remove the use of ETAG for delete
    •    
    • Fix missing/wrong/broken rels discovered by runtest
    •    
    • Drop unofficial convertFil (konverterFil) end point
    •    
    • Fix regex problem for dateTime
    •    
    • Fix multiple static analysis issues discovered by coverity
    •    
    • Fix proxy problem when looking for object class names
    •    
    • Add many missing translated Norwegian to English (internal) attribute/entity names
    •    
    • Change UUID generation approach to allow code also set a value
    •    
    • Fix problem with Part/PartParson
    •    
    • Fix problem with empty OData search results
    •    
    • Fix metadata entity domain problem
  • General Improvements
         
    • Makes future refactoring easier as coupling is reduced
    •    
    • Allow some constant variables to be set from property file
    •    
    • Refactor code to make reflection work better across codebase
    •    
    • Reduce the number of @Service layer classes used in @Controller classes
    •    
    • Be more consistent on naming of similar variable types
    •    
    • Start printing rels/href if they are applicable
    •    
    • Cleaner / standardised approach to deleting objects
    •    
    • Avoid concatenation when using StringBuilder
    •    
    • Consolidate code to avoid duplication
    •    
    • Tidy formatting for a more consistent reading style across similar class files
    •    
    • Make throw a log.error message not an log.info message
    •    
    • Make throw print the log value rather than printing in multiple places
    •    
    • Add some missing pronom codes
    •    
    • Fix time formatting issue in Gitlab CI
    •    
    • Remove stale / unused code
    •    
    • Use only UUID datatype rather than combination String/UUID for systemID
    •    
    • Mark variables final and @NotNull where relevant to indicate intention
  • Change Date values to DateTime to maintain compliance with Noark 5 standard
  • Domain model improvements using Hypersistence Optimizer
         
    • Move @Transactional from class to methods to avoid borrowing the JDBC Connection unnecessarily
    •    
    • Fix OneToOne performance issues
    •    
    • Fix ManyToMany performance issues
    •    
    • Add missing bidirectional synchronization support
    •    
    • Fix ManyToMany performance issue
  • Make List<> and Set<> use final-keyword to avoid potential problems during update operations
  • Changed internal URLs, replaced "hateoas-api" with "api".
  • Implemented storing of Precedence.
  • Corrected handling of screening.
  • Corrected _links collection returned for list of mixed entity types to match the specific entity.
  • Improved several internal structures.

If free and open standardized archiving API sound interesting to you, please contact us on IRC (#nikita on irc.oftc.net) or email (nikita-noark mailing list).

As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

Tags: english, noark5, nuug, offentlig innsyn, standard.
Nikita version 0.5 released - updated free software archive API server
2nd March 2020

Today, after many months of development, a new release of Nikita Noark 5 core project was finally announced on the project mailing list. The Nikita free software solution is an implementation of the Norwegian archive standard Noark 5 used by government offices in Norway. These were the changes in version 0.5 since version 0.4, see the email link above for links to a demo site:

If free and open standardized archiving API sound interesting to you, please contact us on IRC (#nikita on irc.freenode.net) or email (nikita-noark mailing list).

As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

Tags: english, noark5, nuug, offentlig innsyn, standard.
Blockchain and IoT articles accepted into Records Management Journal
27th February 2020

On Tuesday, two scietific articles we have been working on for a while, was finally accepted for publication into Records Management Journal. Still waiting for the assigned DOI urls to start working, but you can have a look at the LaTeX originals here.

The first article is "A record-keeping approach to managing IoT-data for government agencies" (DOI 10.1108/RMJ-09-2019-0050) by Thomas Sødring, Petter Reinholdtsen and David Massey, and sketches some approaches for storing measurement data (aka Internet of Things sensor data) in a archive, thus providing a well defined mechanism for screening and deletion of the information

The second article is "Publishing and using record-keeping structural information in a blockchain" (DOI 10.1108/RMJ-09-2019-0056) by Thomas Sødring, Petter Reinholdtsen and Svein Ølnes, where we describe a way for third parties to validate authenticity and thus improve trust in the records kept in a archive.

As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

Update 2020-04-26: Initially managed to swap the DOI numbers. Fixed it.

Tags: english, noark5.
Redaksjon på plass for Noark 5 tjenestegrensesnitt
5th February 2020

Arbeidet med å lage et godt, fritt og åpent standardisert maskinelt grensesnitt for arkivering, med tilhørende fri programvareimplementasjon fortsetter. Jeg snakker om Noark 5 Tjenestegrensesnitt og Nikita. Siste nytt etter seminaret for noen dager siden, er vi i Nikita-prosjektet har fått beskjed fra Arkivverket at det blir satt ned en redaksjon for å videreutvikle spesifikasjonen. Redaksjonen består av Mona Danielsen og Anne Sofie Knutsen ved arkivverket, Thomas Sødring ved OsloMet, og meg selv fra NUUG. De to sistenevnte tar seg av de åpenbare forbedringene, mens hele redaksjonen diskuterer tvilstilfeller. Jeg håper dette vil bidra til at vi lykkes i å gjøre denne protokollspesifikasjonen så entydig og klar at den vil bidra til et velfungerende marked for arkivsystemer, og sikre at programmer som trenger å snakke med arkivsystemet kan snakke med enhver implementasjon av API-spesifikasjonen. Nikita er den første implementasjonen, men det bør blir flere.

Det gjenstår riktig nok endel før vi er i mål, selv om svært mye allerede er på plass. Med innspill og forslag til forbedringer fra alle som vil ha et leverandøruavhengig og fullstendig datamaskinlesbart grensesnitt til arkivet, så tror jeg vi vil lykkes.

Som vanlig, hvis du bruker Bitcoin og ønsker å vise din støtte til det jeg driver med, setter jeg pris på om du sender Bitcoin-donasjoner til min adresse 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b. Merk, betaling med bitcoin er ikke anonymt. :)

Tags: noark5, norsk, standard.
Artikkel om Noark 5 Tjenestegrensesnitt og Nikita i Arkivråd nummer 3 for 2019
26th December 2019

Like før julaften ble en artikkel jeg har skrevet om vedlikehold av Noark 5 Tjenestegrensesnitt og Nikita publisert i tidsskriftet Arkivråd. Det er basert på min bloggpost om samme tema som ble publisert 2019-03-11. Jeg oppdaget nettopp at nettsiden til tidsskriftet Arkivråd er oppdatert med siste utgave, og artikkelen dermed er tilgjengelig for alle. Du finner den i PDF-en til nummer 2019/3 på side 30-33. Jeg håper leserne av tidsskriftet får lyst til å sjekke ut tjenestegrensesnittet og at artikkelen vil gjøre det enklere for flere å bidra til en enda bedre, klarere og mer entydig API-spesifikasjon. Det kan gjøre at arkivsystemet Nikita kan bli enda bedre når spesifikasjonen forbedres.

Som vanlig, hvis du bruker Bitcoin og ønsker å vise din støtte til det jeg driver med, setter jeg pris på om du sender Bitcoin-donasjoner til min adresse 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b. Merk, betaling med bitcoin er ikke anonymt. :)

Tags: noark5, norsk, standard.
Artikkel om Nikita i Arkheion nummer 2019/2
9th December 2019

Jeg hadde i dag gleden av å oppdage at en artikkel om arkivsystemet Nikita som vi skrev i sommer, nå er publisert i Arkheion, fagtidsskrift for kommunial arkivsektor. Du finner artikkelen på side 30-33 i nummer 2019/2, PDF kan lastes ned fra nettstedet til tidsskriftet. Kanskje publiseringen kan føre til at noen flere får øynene opp for verdien av et åpent standardisert API for arkivering og søk i arkivet.

Som vanlig, hvis du bruker Bitcoin og ønsker å vise din støtte til det jeg driver med, setter jeg pris på om du sender Bitcoin-donasjoner til min adresse 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b. Merk, betaling med bitcoin er ikke anonymt. :)

Tags: noark5, norsk, standard.
Oppdatert Noark 5 Tjenestegrenesnitt versjon 1.0 for Noark 5.5.0
5th July 2019

Jeg er veldig glad for å kunne fortelle at i går ble ny versjon av API-spesifikasjonen for Noark 5 Tjenestegrensesnitt gitt ut. Det så lenge mørkt ut for sjansene for å få inn nødvendige korreksjoner i spesifikasjonsteksten innen rimelig tid, men takket være intens og god innsats fra Mona og Anne Sofie hos Arkivverket de siste ukene, så ble resultatet som ble gitt ut på USAs uavhengighetsdag mye bedre enn jeg fryktet.

Spesifikasjonen er tilgjengelig som markdown-filer i Arkivverkets github-prosjekt for dette, og de aller fleste av forslagene til forbedringer fra oss som holder på med Nikita-prosjektet kom med i denne nye og oppdaterte spesifikasjonsteksten. Det er fortsatt mye som gjenstår før den er entydig, klar og sikrer samvirke på tvers av leverandører, men utgangspunktet er veldig mye bedre enn forrige versjon fra 2016. Ta gjerne en titt.

Ellers må jeg jo si at det var hyggelig å se at min forrige bloggpost om tjenestegrensesnittet fikk en lenke fra Arkivverket Beta.

Som vanlig, hvis du bruker Bitcoin og ønsker å vise din støtte til det jeg driver med, setter jeg pris på om du sender Bitcoin-donasjoner til min adresse 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b. Merk, betaling med bitcoin er ikke anonymt. :)

Tags: noark5, norsk, standard.
Nikita og Noark 5 tjenestegrensesnittet tilbyr ny måte å tenke arkivering
21st June 2019

av Thomas Sødring (OsloMet) og Petter Reinholdtsen (foreningen NUUG)

Nikita Noark 5-kjerne er et fri programvareprosjekt som tar i bruk Arkivverkets spesifikasjonen for Noark 5 Tjenestegrensesnitt og tilbyr et maskinlesbart grensesnitt (arkiv-API) til datasystemer som trenger å arkivere dokumenter og informasjon. I tillegg tilbyr Nikita et nettleserbasert brukergrensesnitt for brukere av arkivet. Dette brukergrensesnittet benytter det maskinlesbare grensesnittet. Noark 5 Tjenestegrensesnitt er en ny måte å tenke arkivering, med fokus på automatisering og maskinell behandling av arkivmateriale, i stedet for å fokusere på brukergrensesnitt. En kan tenke på tjenestegrensesnittet som arkivet uten brukergrensesnitt, der flere aktører kan koble til ulike brukergrensesnitt, tilpasset ulike behov.

Historisk sett gjorde Noark standarden en veldig bra jobb med overgangen fra papir til digital saksbehandling, men det har kommet til kort på andre områder. Den teknologiske utviklingen har brakt oss ditt at vi kan og skal forvente langt mer fra en arkivkjerne enn før, men det offentlig er ofte konservativ når det gjelder nytenking. For lengst skulle begreper som samvirke mellom datasystemer, metadata, prosess og tjenestegrensesnitt (API) vært dominerende når systemer kjøpes inn. Dessverre er det slik at ikke alle ønsker samvirke mellom datasystemer velkommen, og det kan være trygt å kjøpe «svarte bokser» der du slipper å ta stilling til hvordan man skal få flere systemer til å virke sammen. Men IT-arkitektur er et begrep arkivfolk også begynner å ta inn over seg.

Slike systemer for å organisere metadata bør ha nettbaserte tjenestegrensesnitt der brukergrensesnitt er tydelig adskilt fra bakenforliggende system. Det finnes mange rapporter som snakker om å bryte ned siloer i forvaltningen og standardiserte tjenestegrensesnitt er det viktigste virkemiddel mot datasiloer og legger til rette for økt samvirke mellom systemer. Et standardisert tjenestegrensesnitt er et viktig middel for å få systemer til å samhandle da det sikrer at ulike produsenters systemer kan snakke sammen på tvers. Samfunnet fungerer ikke uten standardisering. Vi har alle samme strømstyrke og kontakter i veggene og kjører alle på høyre side av veien i Norge. Det er i en slik sammenheng at prosjektet «Noark 5 Tjenestegrensesnitt» er veldig viktig. Hvis alle leverandører av arkivsystemer forholdt seg til et standardisert tjenestegrensesnitt kunne kostnadene for arkivering reduseres. Tenk deg at du er en kommune som ønsker et fagsystem integrert med arkivløsningen din. I dag må fagsystemleverandøren vite og tilpasse seg den spesifikke versjonen og varianten av arkivløsningen du har. Hvis vi antar at alle leverandører av arkivkjerner har solgt inn enten SOAP eller REST-grensesnitt til kunder de siste 10 årene og det kommer endret versjon av grensesnittet innimellom, så gir det veldig mange forskjellige tjenestegrensesnitt en fagsystemleverandør må forholde seg til. Med 12 leverandører og kvartalsvise oppdateringer kan det potensielt bli 96 ulike varianter hvert eneste år. Det sier seg selv at det blir dyrt. Men det blir faktisk verre. Hvis du senere ønsker å bytte ut arkivsystemet med et annet så er du avhengig å få alle integrasjonene dine laget på nytt. Dette kan gjøre at du velger å forbli hos en dårlig leverandør framfor å skaffe nytt system, fordi det blir for vanskelig og dyrt å bytte. Dermed etableres det «små» monopolsituasjoner som er vanskelig å bryte ut av. Dårlige valg i dag kan ha uante kostander på sikt. I Nikita-prosjektet har vi kun jobbet opp mot Noark 5 Tjenestegrensesnittet. Det har tatt en god del ressurser å sette seg inn i spesifikasjonen og ta den i bruk, spesielt på grunn av uklarheter i spesifikasjonen. Hvis vi måtte gjøre det samme for alle versjoner og varianter av de forskjellige tjenestegrensesnittene ville det blitt veldig tidkrevende og kostbart.

For deg som arkivar er digitalisering og systemer som skal virke sammen en del av den nye hverdagen. Du har kanskje blitt skånet for det ved å kjøpe svarte bokser, men du risikerer at du gjør deg selv en bjørnetjeneste. Det kan oppleves som kjedelig å fortelle kolleger at du skal sette deg inn i et tjenestegrensesnitt, men dette er faktisk veldig spennende. Tjenestegrensesnittet er på en måte blitt levende og det er spesielt et begrep du bør merke deg: OData. Å trekke inn deler av OData-standarden som en måte å filtrere entitetsøk i et arkivsystem var et nyttig trekk i prosjektet. Følgende eksempel er en OData-spørring det går an å sende inn til en standardisert arkivkjerne:

.../sakarkiv/journalpost?filter=contains(tittel, 'nabovarsel')

Spørringen over vil hente en liste av alle dine journalposter der tittelen til journalposten inneholder ordet 'nabovarsel'. Alle leverandører som implementerer tjenestegrensesnittet vil måtte tilby dette. Det betyr at hvis du lærer dette språket for et system, vil det være gjeldende for alle. Dette er egentlig en ny måte å søke i arkivdatabasen på og vil være svært nyttig, for eksempel kan søk i tjenestegrensesnittet antagelig brukes til å hente ut offentlig postjournal. I arkivverden pleier vi å like teknologier som er menneskelesbart, da vet vi det er enkelt og nyttig! OData er også viktig fordi det kan bli en ny måte å svare innsynsforespørsler på i tråd med offentlighetsloven § 9, der retten til å kreve innsyn i sammenstilling fra databaser er nedfelt. I dag ser vi forvaltningsorganer som avviser slike krav fordi det «ikke kan gjøres med enkle framgangsmåter». Bruken av OData i tjenestegrensesnittet, sammen med maskinlesbar markeringsformater kan være et viktig bidrag til å åpne arkivene i tråd med prinsippene om en åpen og transparent forvaltning.

Standardisering er viktig fordi det kan sikre samvirke. Men den effekten kommer kun hvis standardiseringen sikrer at alle forstår standarden på samme måte, dvs. at den er entydig og klar. En god måte å sikre en entydig og klar spesifikasjon er ved å kreve at det finnes minst to ulike implementasjoner som følger spesifikasjonen og som kan snakke sammen, det vil si at de snakker samme språk, slik IETF krever for alle sine standarder, før spesifikasjonen anses å være ferdig. Tilbakemelding fra miljøet forteller at både leverandører og kunder har et avslappet forhold til Noark 5 Tjenestegrensesnitt og det er så langt kun Evry som har visst offentlig at de har en implementasjon av tjenestegrensesnittet. Evry, HK Data og Fredrikstad kommune er igang med et pilotprosjekt på Noark 5 Tjenestegrensesnitt. For å redusere kostnadene for samvirkende datasystemer betraktelig, er det veldig viktig at vi kommer i en situasjon der alle leverandører har sine egne implementasjoner av tjenestegrensesnittet, og at disse oppfører seg likt og i tråd med det som er beskrevet i spesifikasjonen.

Det er her fri programvare spiller en viktig rolle. Med en uklar standard blir det som en polsk riksdag, der ingenting fungerer. Nikita er en fri programvareimplementasjon av tjenestegrensesnitt og kan fungere som teknisk referanse slik at leverandører enklere kan se og forstå hvordan standarden skal tolkes. Vi har i Nikitaprosjektet erfart å ende opp med vidt forskjellige tolkninger når prosjektmedlemmene leser spesifikasjonsteksten, en effekt av en uklar spesifikasjon. Men Nikitaprosjektet har også utviklet et test-program som sjekker om et tjenestegrensesnitt er i samsvar med standarden, og prosjektet bruker det hele tiden for å sikre at endringer og forbedringer fungerer. Egenerklæringsskjemaenes dager kan være talte! Snart vil du selv kunne teste hver oppdatering av arkivsystemet med en uavhengig sjekk.

Fri programvare representerer en demokratisering av kunnskap der tolkning- og innlåsingsmakt flyttes fra leverandør til allmenheten. Med fri programvare har du en litt annerledes verdikjede, der selve produktet ikke holdes hemmelig for å tjene penger, slik en gjør med ufri programvare og skytjenester som ikke bruker fri programvare, men du kan tjene penger på andre deler av verdikjeden. Med fri programvare kan samfunnet betale for å videreutvikle nyttig fellesfunksjonalitet.

Nikita er en fri programvareimplementasjon av tjenestegrensesnittet og kan fungere som en referanseimplementasjon dersom det er ønskelig. Alle har lik tilgang til koden og det koster ingenting å ta den i bruk og utforske det. Nikitaprosjektet ønsker tjenestegrensesnittet velkommen og stiller veldig gjerne opp i diskusjoner om tolkning av tjenestegrensesnittet. Nikita er bygget på moderne programmeringsrammeverk og utviklet i full åpenhet. Men Nikita er ikke noe du kan kjøpe. Nikita er først og fremst et verktøy for forsking og utvikling laget for å fremme forskning på arkivfeltet. Systemer som virker sammen har alltid vært hovedfokus og vil være det fremover. Det brukes som undervisningsverktøy der studentene ved OsloMet lærer om administrativt oppsett, saksbehandling, uttrekk og samvirkende datasystemer. Det brukes også som forskningsobjekt der vi ser på import av dokumentsamlinger, bruk av blokkjede og andre nyskapende måter å tenke arkiv på. Det er dog helt greit om andre tar Nikita og pakker det for å selge det som produkt. Forvaltningsorganer med sterke drift- og utviklingsmiljøer kan også se på Nikita og utforske hva som er mulig. Dette kan de gjøre uten å måtte betale for bruksrettigheter eller tilgang til konsulenter. Men arkivering blir ikke gratis på grunn av Nikita. Det trengs fortsatt folk med kompetanse og tid til å ta i bruk Nikita.

Nikita har nylig kommet med en ny utgave, den sjette i rekken. Systemet er ikke ferdig, mest på grunn av at API-spesifikasjonen for Noark 5 Tjenestegrensesnitt ikke er ferdig, men allerede i dag kan en bruke Nikita som arkiv. Vi har laget eksempelsystem for å importere data fra deponi-XML og slik gjøre eksisterende arkivdata tilgjengelig via et API. Vi har også laget en testklient som importerer epost inn i arkivet med vedlegg der epostenes trådinformasjon brukes til å legge eposttråder i samme arkivmappe, og en annen testklient som henter epost ut av en arkivmappe på mbox-format slik at en vanlig epostklient kan brukes til å lese igjennom og svare på epostene i en arkivmappe. De som vil ta en titt på Nikita kan besøke https://nikita.oslomet.no og logge inn med brukernavn «admin@example.com» og passord «password». Dette gir tilgang til det forenklede brukergrensesnittet som brukes til undervisning. De som heller vil ta en titt under panseret kan besøke https://nikita.oslomet.no/browse.html og der se hvordan API-et fungerer mer i detalj. Innloggingsdetaljer her er det samme som for brukergrensesnittet.

Fremover er fokuset på forbedring av spesifikasjonen Noark 5 Tjenestegrensesnitt. De som skrev tjenestegrensesnittet gjorde et interessant og framtidsrettet grep, de skilte sak fra arkiv. Tjenestegrensesnittet består av flere "pakker", der noen er grunnleggende mens andre bygger på de grunnleggende pakkene. Pakkene som er beskrevet så langt heter «arkivstruktur», «sakarkiv», «administrasjon», «loggogsporing» og «moeter» (dessverre planlagt fjernet i første utgave). Etter hvert håper vi å utforske prosses- og metadatabeskrivelser til flere fagområder og bidra til at tjenestegrensesnittet kan legge til flere pakker som «byggarkiv», «barnevern», «personal», «barnehage», der arkivfaglig metadata- og dokumentasjonsbehov er kartlagt og standardisert.

Nikita utvikles av en liten prosjektgruppe, og vi er alltid interessert å bli flere. Hvis en åpen, fri og standardisert tilnærming til arkivering høres interessant ut, bli med oss på veien videre. Vi er tilstede på IRC-kanalen #nikita hos FreeNode (tilgjengelig via nettleser på https://webchat.freenode.net?channels=#nikita), og har en e-postliste nikita-noark@nuug.no hos NUUG (tilgjengelig for påmelding og arkiv på https://lists.nuug.no/mailman/listinfo/nikita-noark) der en kan følge med eller være med oss på den spennende veien videre. Spesifikasjonen for Noark 5 Tjenestegrensesnitt vedlikeholdes på github, https://github.com/arkivverket/noark5-tjenestegrensesnitt-standard/.

Som vanlig, hvis du bruker Bitcoin og ønsker å vise din støtte til det jeg driver med, setter jeg pris på om du sender Bitcoin-donasjoner til min adresse 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

Tags: noark5, norsk, standard.
Official MIME type "text/vnd.sosi" for SOSI map data
4th June 2019

Just 15 days ago, I mentioned my submission to IANA to register an official MIME type for the SOSI vector map format. This morning, just an hour ago, I was notified that the MIME type "text/vnd.sosi" is registered for this format. In addition to this registration, my file(1) patch for a pattern matching rule for SOSI files has been accepted into the official source of that program (pending a new release), and I've been told by the team behind PRONOM that the SOSI format will be included in the next release of PRONOM, which they plan to release this summer around July.

I am very happy to see all of this fall into place, for use by the Noark 5 Tjenestegrensesnitt implementations.

As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

Tags: english, kart, noark5, standard.
Nikita version 0.4 released - free software archive API server
22nd May 2019

This morning, a new release of Nikita Noark 5 core project was announced on the project mailing list. The Nikita free software solution is an implementation of the Norwegian archive standard Noark 5 used by government offices in Norway. These were the changes in version 0.4 since version 0.3, see the email link above for links to a demo site:

If free and open standardized archiving API sound interesting to you, please contact us on IRC (#nikita on irc.freenode.net) or email (nikita-noark mailing list).

As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

Tags: english, noark5, nuug, offentlig innsyn, standard.
MIME type "text/vnd.sosi" for SOSI map data
20th May 2019

As part of my involvement in the work to standardise a REST based API for Noark 5, the Norwegian archiving standard, I spent some time the last few months to try to register a MIME type and PRONOM code for the SOSI file format. The background is that there is a set of formats approved for long term storage and archiving in Norway, and among these formats, SOSI is the only format missing a MIME type and PRONOM code.

What is SOSI, you might ask? To quote Wikipedia: SOSI is short for Samordnet Opplegg for Stedfestet Informasjon (literally "Coordinated Approach for Spatial Information", but more commonly expanded in English to Systematic Organization of Spatial Information). It is a text based file format for geo-spatial vector information used in Norway. Information about the SOSI format can be found in English from Wikipedia. The specification is available in Norwegian from the Norwegian mapping authority. The SOSI standard, which originated in the beginning of nineteen eighties, was the inspiration and formed the basis for the XML based Geography Markup Language.

I have so far written a pattern matching rule for the file(1) unix tool to recognize SOSI files, submitted a request to the PRONOM project to have a PRONOM ID assigned to the format (reference TNA1555078202S60), and today send a request to IANA to register the "text/vnd.sosi" MIME type for this format (referanse IANA #1143144). If all goes well, in a few months, anyone implementing the Noark 5 Tjenestegrensesnitt API spesification should be able to use an official MIME type and PRONOM code for SOSI files. In addition, anyone using SOSI files on Linux should be able to automatically recognise the format and web sites handing out SOSI files can begin providing a more specific MIME type. So far, SOSI files has been handed out from web sites using the "application/octet-stream" MIME type, which is just a nice way of stating "I do not know". Soon, we will know. :)

As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

Tags: english, kart, noark5, standard.
PlantUML for text based UML diagram modelling - nice free software
25th March 2019

As part of my involvement with the Nikita Noark 5 core project, I have been proposing improvements to the API specification created by The National Archives of Norway and helped migrating the text from a version control system unfriendly binary format (docx) to Markdown in git. Combined with the migration to a public git repository (on github), this has made it possible for anyone to suggest improvement to the text.

The specification is filled with UML diagrams. I believe the original diagrams were modelled using Sparx Systems Enterprise Architect, and exported as EMF files for import into docx. This approach make it very hard to track changes using a version control system. To improve the situation I have been looking for a good text based UML format with associated command line free software tools on Linux and Windows, to allow anyone to send in corrections to the UML diagrams in the specification. The tool must be text based to work with git, and command line to be able to run it automatically to generate the diagram images. Finally, it must be free software to allow anyone, even those that can not accept a non-free software license, to contribute.

I did not know much about free software UML modelling tools when I started. I have used dia and inkscape for simple modelling in the past, but neither are available on Windows, as far as I could tell. I came across a nice list of text mode uml tools, and tested out a few of the tools listed there. The PlantUML tool seemed most promising. After verifying that the packages is available in Debian and found its Java source under a GPL license on github, I set out to test if it could represent the diagrams we needed, ie the ones currently in the Noark 5 Tjenestegrensesnitt specification. I am happy to report that it could represent them, even thought it have a few warts here and there.

After a few days of modelling I completed the task this weekend. A temporary link to the complete set of diagrams (original and from PlantUML) is available in the github issue discussing the need for a text based UML format, but please note I lack a sensible tool to convert EMF files to PNGs, so the "original" rendering is not as good as the original was in the publised PDF.

Here is an example UML diagram, showing the core classes for keeping metadata about archived documents:

@startuml
skinparam classAttributeIconSize 0

!include media/uml-class-arkivskaper.iuml
!include media/uml-class-arkiv.iuml
!include media/uml-class-klassifikasjonssystem.iuml
!include media/uml-class-klasse.iuml
!include media/uml-class-arkivdel.iuml
!include media/uml-class-mappe.iuml
!include media/uml-class-merknad.iuml
!include media/uml-class-registrering.iuml
!include media/uml-class-basisregistrering.iuml
!include media/uml-class-dokumentbeskrivelse.iuml
!include media/uml-class-dokumentobjekt.iuml
!include media/uml-class-konvertering.iuml
!include media/uml-datatype-elektronisksignatur.iuml

Arkivstruktur.Arkivskaper "+arkivskaper 1..*" <-o "+arkiv 0..*" Arkivstruktur.Arkiv
Arkivstruktur.Arkiv o--> "+underarkiv 0..*" Arkivstruktur.Arkiv
Arkivstruktur.Arkiv "+arkiv 1" o--> "+arkivdel 0..*" Arkivstruktur.Arkivdel
Arkivstruktur.Klassifikasjonssystem "+klassifikasjonssystem [0..1]" <--o "+arkivdel 1..*" Arkivstruktur.Arkivdel
Arkivstruktur.Klassifikasjonssystem "+klassifikasjonssystem [0..1]" o--> "+klasse 0..*" Arkivstruktur.Klasse
Arkivstruktur.Arkivdel "+arkivdel 0..1" o--> "+mappe 0..*" Arkivstruktur.Mappe
Arkivstruktur.Arkivdel "+arkivdel 0..1" o--> "+registrering 0..*" Arkivstruktur.Registrering
Arkivstruktur.Klasse "+klasse 0..1" o--> "+mappe 0..*" Arkivstruktur.Mappe
Arkivstruktur.Klasse "+klasse 0..1" o--> "+registrering 0..*" Arkivstruktur.Registrering
Arkivstruktur.Mappe --> "+undermappe 0..*" Arkivstruktur.Mappe
Arkivstruktur.Mappe "+mappe 0..1" o--> "+registrering 0..*" Arkivstruktur.Registrering
Arkivstruktur.Merknad "+merknad 0..*" <--* Arkivstruktur.Mappe
Arkivstruktur.Merknad "+merknad 0..*" <--* Arkivstruktur.Dokumentbeskrivelse
Arkivstruktur.Basisregistrering -|> Arkivstruktur.Registrering
Arkivstruktur.Merknad "+merknad 0..*" <--* Arkivstruktur.Basisregistrering
Arkivstruktur.Registrering "+registrering 1..*" o--> "+dokumentbeskrivelse 0..*" Arkivstruktur.Dokumentbeskrivelse
Arkivstruktur.Dokumentbeskrivelse "+dokumentbeskrivelse 1" o-> "+dokumentobjekt 0..*" Arkivstruktur.Dokumentobjekt
Arkivstruktur.Dokumentobjekt *-> "+konvertering 0..*" Arkivstruktur.Konvertering
Arkivstruktur.ElektroniskSignatur -[hidden]-> Arkivstruktur.Dokumentobjekt
@enduml

The format is quite compact, with little redundant information. The text expresses entities and relations, and there is little layout related fluff. One can reuse content by using include files, allowing for consistent naming across several diagrams. The include files can be standalone PlantUML too. Here is the content of media/uml-class-arkivskaper.iuml:

@startuml
class Arkivstruktur.Arkivskaper  {
  +arkivskaperID : string
  +arkivskaperNavn : string
  +beskrivelse : string [0..1]
}
@enduml

This is what the complete diagram for the PlantUML notation above look like:

A cool feature of PlantUML is that the generated PNG files include the entire original source diagram as text. The source (with include statements expanded) can be extracted using for example exiftool. Another cool feature is that parts of the entities can be hidden after inclusion. This allow to use include files with all attributes listed, even for UML diagrams that should not list any attributes.

The diagram also show some of the warts. Some times the layout engine place text labels on top of each other, and some times it place the class boxes too close to each other, not leaving room for the labels on the relationship arrows. The former can be worked around by placing extra newlines in the labes (ie "\n"). I did not do it here to be able to demonstrate the issue. I have not found a good way around the latter, so I normally try to reduce the problem by changing from vertical to horizontal links to improve the layout.

All in all, I am quite happy with PlantUML, and very impressed with how quickly its lead developer responds to questions. So far I got an answer to my questions in a few hours when I send an email. I definitely recommend looking at PlantUML if you need to make UML diagrams. Note, PlantUML can draw a lot more than class relations. Check out the documention for a complete list. :)

As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

Tags: english, nice free software, noark5, nuug, standard.
Release 0.3 of free software archive API system Nikita announced
24th March 2019

Yesterday, a new release of Nikita Noark 5 core project was announced on the project mailing list. The free software solution is an implementation of the Norwegian archive standard Noark 5 used by government offices in Norway. These were the changes in version 0.3 since version 0.2.1 (from NEWS.md):

If free and open standardized archiving API sound interesting to you, please contact us on IRC (#nikita on irc.freenode.net) or email (nikita-noark mailing list).

As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

Tags: english, noark5, nuug, offentlig innsyn, standard.
Åpen og gjennomsiktig vedlikehold av spesifikasjonen for Noark 5 Tjenestegrensesnitt
11th March 2019

Et virksomhetsarkiv for meg, er et arbeidsverktøy der en enkelt kan finne informasjonen en trenger når en trenger det, og der virksomhetens samlede kunnskap er tilgjengelig. Det må være greit å finne frem i, litt som en bibliotek. Men der et bibliotek gjerne tar vare på offentliggjort informasjon som er tilgjengelig flere steder, tar et arkiv vare på virksomhetsintern og til tider personlig informasjon som ofte kun er tilgjengelig fra et sted.

Jeg mistenker den eneste måten å sikre at arkivet inneholder den samlede kunnskapen i en virksomhet, er å bruke det som virksomhetens kunnskapslager. Det innebærer å automatisk kopiere (brev, epost, SMS-er etc) inn i arkivet når de sendes og mottas, og der filtrere vekk det en ikke vil ta vare på, og legge på metadata om det som er samlet inn for enkel gjenfinning. En slik bruk av arkivet innebærer at arkivet er en del av daglig virke, ikke at det er siste hvilested for informasjon ingen lenger har daglig bruk for. For å kunne være en del av det daglige virket må arkivet enkelt kunne integreres med andre systemer. I disse dager betyr det å tilby arkivet som en nett-tjeneste til hele virksomheten, tilgjengelig for både mennesker og datamaskiner. Det betyr i tur å både tilby nettsider og et maskinlesbart grensesnitt.

For noen år siden erkjente visjonære arkivarer fordelene med et standardisert maskinlesbart grensesnitt til organisasjonens arkiv. De gikk igang med å lage noe de kalte Noark 5 Tjenestegrensesnitt. Gjort riktig, så åpner slike maskinlesbare grensesnitt for samvirke på tvers av uavhengige programvaresystemer. Gjort feil, vil det blokkere for samvirke og bidra til leverandørinnlåsing. For å gjøre det riktig så må grensesnittet være klart og entydig beskrevet i en spesifikasjon som gjør at spesifikasjonen tolkes på samme måte uavhengig av hvem som leser den, og uavhengig av hvem som tar den i bruk.

For å oppnå klare og entydige beskrivelser i en spesifikasjon, som trengs for å kunne få en fri og åpen standard (se Digistan-definisjon), så trengs det en åpen og gjennomsiktig inngangsport med lav terskel, der de som forsøker å ta den i bruk enkelt kan få inn korreksjoner, etterlyse klargjøringer og rapportere uklarheter i spesifikasjonen. En trenger også automatiserte datasystemer som måler og sjekker at et gitt grensesnitt fungerer i tråd med spesifikasjonen.

For Noark 5 Tjenestegrensesnittet er det nå etablert en slik åpen og gjennomsiktig inngangsport på prosjekttjenesten github. Denne inngangsporten består først og fremst av en åpen portal som lar enhver se hva som er gjort av endringer i spesifikasjonsteksten over tid, men det hører også med et åpent "diskusjonsforum" der en kan komme med endringsforslag og forespørsler om klargjøringer. Alle registrerte brukere på github kan bidra med innspill til disse henvendelsene.

I samarbeide med Arkivverket har jeg fått opprettet et git-depot med spesifikasjonsteksten for tjenestegrensesnittet, der det er lagt inn historikk for endringer i teksten de siste årene, samt lagt inn endringsforslag og forespørsler om klargjøring av teksten. Bakgrunnen for at jeg bidro med dette er at jeg er involvert i Nikita-prosjektet, som lager en fri programvare-utgave av Noark 5 Tjenestegrensesnitt. Det er først når en forsøker å lage noe i tråd med en spesifikasjon at en oppdager hvor mange detaljer som må beskrives i spesifikasjonen for å sikre samhandling.

Spesifikasjonen vedlikeholdes i et rent tekstformat, for å ha et format egnet for versjonskontroll via versjontrollsystemet git. Dette gjør det både enkelt å se konkret hvilke endringer som er gjort når, samt gjør det praktisk mulig for enhver med github-konto å sende inn endringsforslag med formuleringer til spesifikasjonsteksten. Dette tekstformatet vises frem som nettsider på github, slik at en ikke trenger spesielle verktøy for å se på siste utgave av spesifikasjonen.

Fra dette rene tekstformatet kan det så avledes ulike formater, som HTML for websider, PDF for utskrift på papir og ePub for lesing med ebokleser. Avlednings-systemet (byggesystemet) bruker i dag verktøyene pandoc, latex, docbook-xsl og GNU make til transformasjonen. Tekstformatet som brukes dag er Markdown, men det vurderes å endre til formatet RST i fremtiden for bedre styring av utseende på PDF-utgaven.

Versjonskontrollsystemet git ble valgt da det er både fleksibelt, avansert og enkelt å ta i bruk. Github ble valgt (foran f.eks. Gitlab som vi bruker i Nikita), da Arkivverket allerede hadde tatt i bruk Github i andre sammenhenger.

Enkle endringer i teksten kan gjøres av priviligerte brukere direkte i nettsidene til Github, ved å finne aktuell fil som skal endres (f.eks. kapitler/03-konformitet.md), klikke på den lille bokstaven i høyre hjørne over teksten. Det kommer opp en nettside der en kan endre teksten slik en ønsker. Når en er fornøyd med endringen så må endringen "sjekkes inn" i historikken. Det gjøres ved å gi en kort beskrivelse av endringen (beskriv helst hvorfor endringen trengs, ikke hva som er endret), under overskriften "Commit changes". En kan og bør legge inn en lengre forklaring i det større skrivefeltet, før en velger om endringen skal sendes direkte til 'master'-grenen (dvs. autorativ utgave av spesifikasjonen) eller om en skal lage en ny gren for denne endringen og opprette en endringsforespørsel (aka "Pull Request"/PR). Når alt dette er gjort kan en velge "Commit changes" for å sende inn endringen. Hvis den er lagt inn i "master"-grenen så er den en offisiell del av spesifikasjonen med en gang. Hvis den derimot er en endringsforespørsel, så legges den inn i listen over forslag til endringer som venter på korrekturlesing og godkjenning.

Større endringer (for eksempel samtidig endringer i flere filer) gjøres enklest ved å hente ned en kopi av git-depoet lokalt og gjøre endringene der før endringsforslaget sendes inn. Denne prosessen er godt beskrivet i dokumentasjon fra github. Git-prosjektet som skal "klones" er https://github.com/arkivverket/noark5-tjenestegrensesnitt-standard/.

For å registrere nye utfordringer (issues) eller kommentere på eksisterende utfordringer benyttes nettsiden https://github.com/arkivverket/noark5-tjenestegrensesnitt-standard/issues. I skrivende stund er det 48 åpne og 11 avsluttede utfordringer. Et forslag til hva som bør være med når en beskriver en utfordring er tilgjengelig som utfordring #14.

For å bygge en PDF-utgave av spesifikasjonen så bruker jeg i dag en Debian GNU/Linux-maskin med en rekke programpakker installert. Når dette er på plass, så holder det å kjøre kommandoen 'make pdf html' på kommandolinjen, vente ca. 20 sekunder, før spesifikasjon.pdf og spesifikasjon.html ligger klar på disken. Verktøyene for bygging av PDF, HTML og ePub-utgave er også tilgjengelig på Windows og MacOSX.

Github bidrar med rammeverket. Men for at åpent vedlikehold av spesifikasjonen skal fungere, så trengs det folk som bidrar med sin tid og kunnskap. Arkivverket har sagt de skal bidra med innspill og godkjenne forslag til endringer, men det blir størst suksess hvis alle som bruker og lager systemer basert på Noark 5 Tjenestegrensesnitt bidrar med sin kunnskap og kommer med forslag til forebedringer. Jeg stiller. Blir du med?

Det er viktig å legge til rette for åpen diskusjon blant alle interesserte, som ikke krever at en må godta lange kontrakter med vilkår for deltagelse. Inntil Arkivverket dukker opp på IRC har vi laget en IRC-kanal der interesserte enkelt kan orientere seg og diskutere tjenestegrensesnittet. Alle er velkommen til å ta turen innom #nikita (f.eks. via irc.freenode.net) for å møte likesinnede.

Det holder dog ikke å ha en god spesifikasjon, hvis ikke de som tar den i bruk gjør en like god jobb. For å automatisk teste om et konkret tjenestegrensesnitt følger (min) forståelse av spesifikasjonsdokumentet, har jeg skrevet et program som kobler seg opp til et Noark 5v4 REST-tjeneste og tester alt den finner for å se om det er i henhold til min tolkning av spesifikasjonen. Dette verktøyet er tilgjengelig fra https://github.com/petterreinholdtsen/noark5-tester, og brukes daglig mens vi utvikler Nikita for å sikre at vi ikke introduserer nye feil. Hvis en skal sikre samvirke på tvers av ulike systemer er det helt essensielt å kunne raskt og automatisk sjekke at tjenestegrensesnittet oppfører seg som forventet. Jeg håper andre som lager sin utgave av tjenestegrensesnittet vi bruke dette verktøyet, slik at vi tidlig og raskt kan oppdage hvor vi har tolket spesifikasjonen ulikt, og dermed få et godt grunnlag for å gjøre spesifikasjonsteksten enda klarere og bedre.

Dagens beskrivelse av Noark 5 Tjenestegrensesnitt er et svært godt utgangspunkt for å gjøre virksomhetens arkiv til et dynamisk og sentralt arbeidsverktøy i organisasjonen. Blir du med å gjøre den enda bedre?

Tags: digistan, noark5, norsk, standard.
Time for an official MIME type for patches?
1st November 2018

As part of my involvement in the Nikita archive API project, I've been importing a fairly large lump of emails into a test instance of the archive to see how well this would go. I picked a subset of my notmuch email database, all public emails sent to me via @lists.debian.org, giving me a set of around 216 000 emails to import. In the process, I had a look at the various attachments included in these emails, to figure out what to do with attachments, and noticed that one of the most common attachment formats do not have an official MIME type registered with IANA/IETF. The output from diff, ie the input for patch, is on the top 10 list of formats included in these emails. At the moment people seem to use either text/x-patch or text/x-diff, but neither is officially registered. It would be better if one official MIME type were registered and used everywhere.

To try to get one official MIME type for these files, I've brought up the topic on the media-types mailing list. If you are interested in discussion which MIME type to use as the official for patch files, or involved in making software using a MIME type for patches, perhaps you would like to join the discussion?

As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

Tags: debian, english, noark5, standard.
Release 0.2 of free software archive system Nikita announced
18th October 2018

This morning, the new release of the Nikita Noark 5 core project was announced on the project mailing list. The free software solution is an implementation of the Norwegian archive standard Noark 5 used by government offices in Norway. These were the changes in version 0.2 since version 0.1.1 (from NEWS.md):

The changes and improvements are extensive. Running diffstat on the changes between git tab 0.1.1 and 0.2 show 1098 files changed, 108666 insertions(+), 54066 deletions(-).

If free and open standardized archiving API sound interesting to you, please contact us on IRC (#nikita on irc.freenode.net) or email (nikita-noark mailing list).

As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

Tags: english, noark5, nuug, offentlig innsyn, standard.
Fetching trusted timestamps using the rfc3161ng python module
8th October 2018

I have earlier covered the basics of trusted timestamping using the 'openssl ts' client. See blog post for 2014, 2016 and 2017 for those stories. But some times I want to integrate the timestamping in other code, and recently I needed to integrate it into Python. After searching a bit, I found the rfc3161 library which seemed like a good fit, but I soon discovered it only worked for python version 2, and I needed something that work with python version 3. Luckily I next came across the rfc3161ng library, a fork of the original rfc3161 library. Not only is it working with python 3, it have fixed a few of the bugs in the original library, and it has an active maintainer. I decided to wrap it up and make it available in Debian, and a few days ago it entered Debian unstable and testing.

Using the library is fairly straight forward. The only slightly problematic step is to fetch the required certificates to verify the timestamp. For some services it is straight forward, while for others I have not yet figured out how to do it. Here is a small standalone code example based on of the integration tests in the library code:

#!/usr/bin/python3

"""

Python 3 script demonstrating how to use the rfc3161ng module to
get trusted timestamps.

The license of this code is the same as the license of the rfc3161ng
library, ie MIT/BSD.

"""

import os
import pyasn1.codec.der
import rfc3161ng
import subprocess
import tempfile
import urllib.request

def store(f, data):
    f.write(data)
    f.flush()
    f.seek(0)

def fetch(url, f=None):
    response = urllib.request.urlopen(url)
    data = response.read()
    if f:
        store(f, data)
    return data

def main():
    with tempfile.NamedTemporaryFile() as cert_f,\
    	 tempfile.NamedTemporaryFile() as ca_f,\
    	 tempfile.NamedTemporaryFile() as msg_f,\
    	 tempfile.NamedTemporaryFile() as tsr_f:

        # First fetch certificates used by service
        certificate_data = fetch('https://freetsa.org/files/tsa.crt', cert_f)
        ca_data_data = fetch('https://freetsa.org/files/cacert.pem', ca_f)

        # Then timestamp the message
        timestamper = \
            rfc3161ng.RemoteTimestamper('http://freetsa.org/tsr',
                                        certificate=certificate_data)
        data = b"Python forever!\n"
        tsr = timestamper(data=data, return_tsr=True)

        # Finally, convert message and response to something 'openssl ts' can verify
        store(msg_f, data)
        store(tsr_f, pyasn1.codec.der.encoder.encode(tsr))
        args = ["openssl", "ts", "-verify",
                "-data", msg_f.name,
	        "-in", tsr_f.name,
		"-CAfile", ca_f.name,
                "-untrusted", cert_f.name]
        subprocess.check_call(args)

if '__main__' == __name__:
   main()

The code fetches the required certificates, store them as temporary files, timestamp a simple message, store the message and timestamp to disk and ask 'openssl ts' to verify the timestamp. A timestamp is around 1.5 kiB in size, and should be fairly easy to store for future use.

As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

Tags: english, noark5, sikkerhet.
Release 0.1.1 of free software archive system Nikita announced
10th June 2017

I am very happy to report that the Nikita Noark 5 core project tagged its second release today. The free software solution is an implementation of the Norwegian archive standard Noark 5 used by government offices in Norway. These were the changes in version 0.1.1 since version 0.1.0 (from NEWS.md):

If this sound interesting to you, please contact us on IRC (#nikita on irc.freenode.net) or email (nikita-noark mailing list).

Tags: english, noark5, nuug, offentlig innsyn, standard.
Idea for storing trusted timestamps in a Noark 5 archive
7th June 2017

This is a copy of an email I posted to the nikita-noark mailing list. Please follow up there if you would like to discuss this topic. The background is that we are making a free software archive system based on the Norwegian Noark 5 standard for government archives.

I've been wondering a bit lately how trusted timestamps could be stored in Noark 5. Trusted timestamps can be used to verify that some information (document/file/checksum/metadata) have not been changed since a specific time in the past. This is useful to verify the integrity of the documents in the archive.

Then it occured to me, perhaps the trusted timestamps could be stored as dokument variants (ie dokumentobjekt referered to from dokumentbeskrivelse) with the filename set to the hash it is stamping?

Given a "dokumentbeskrivelse" with an associated "dokumentobjekt", a new dokumentobjekt is associated with "dokumentbeskrivelse" with the same attributes as the stamped dokumentobjekt except these attributes:

This assume a service following IETF RFC 3161 is used, which specifiy the given MIME type for replies and the .tsr file ending for the content of such trusted timestamp. As far as I can tell from the Noark 5 specifications, it is OK to have several variants/renderings of a dokument attached to a given dokumentbeskrivelse objekt. It might be stretching it a bit to make some of these variants represent crypto-signatures useful for verifying the document integrity instead of representing the dokument itself.

Using the source of the service in formatDetaljer allow several timestamping services to be used. This is useful to spread the risk of key compromise over several organisations. It would only be a problem to trust the timestamps if all of the organisations are compromised.

The following oneliner on Linux can be used to generate the tsr file. $input is the path to the file to checksum, and $sha256 is the SHA-256 checksum of the file (ie the ".tsr" value mentioned above).

openssl ts -query -data "$inputfile" -cert -sha256 -no_nonce \
  | curl -s -H "Content-Type: application/timestamp-query" \
      --data-binary "@-" http://zeitstempel.dfn.de > $sha256.tsr

To verify the timestamp, you first need to download the public key of the trusted timestamp service, for example using this command:

wget -O ca-cert.txt \
  https://pki.pca.dfn.de/global-services-ca/pub/cacert/chain.txt

Note, the public key should be stored alongside the timestamps in the archive to make sure it is also available 100 years from now. It is probably a good idea to standardise how and were to store such public keys, to make it easier to find for those trying to verify documents 100 or 1000 years from now. :)

The verification itself is a simple openssl command:

openssl ts -verify -data $inputfile -in $sha256.tsr \
  -CAfile ca-cert.txt -text

Is there any reason this approach would not work? Is it somehow against the Noark 5 specification?

Tags: english, noark5, offentlig innsyn, standard.
Epost inn som arkivformat i Riksarkivarens forskrift?
27th April 2017

I disse dager, med frist 1. mai, har Riksarkivaren ute en høring på sin forskrift. Som en kan se er det ikke mye tid igjen før fristen som går ut på søndag. Denne forskriften er det som lister opp hvilke formater det er greit å arkivere i Noark 5-løsninger i Norge.

Jeg fant høringsdokumentene hos Norsk Arkivråd etter å ha blitt tipset på epostlisten til fri programvareprosjektet Nikita Noark5-Core, som lager et Noark 5 Tjenestegresesnitt. Jeg er involvert i Nikita-prosjektet og takket være min interesse for tjenestegrensesnittsprosjektet har jeg lest en god del Noark 5-relaterte dokumenter, og til min overraskelse oppdaget at standard epost ikke er på listen over godkjente formater som kan arkiveres. Høringen med frist søndag er en glimrende mulighet til å forsøke å gjøre noe med det. Jeg holder på med egen høringsuttalelse, og lurer på om andre er interessert i å støtte forslaget om å tillate arkivering av epost som epost i arkivet.

Er du igang med å skrive egen høringsuttalelse allerede? I så fall kan du jo vurdere å ta med en formulering om epost-lagring. Jeg tror ikke det trengs så mye. Her et kort forslag til tekst:

Viser til høring sendt ut 2017-02-17 (Riksarkivarens referanse 2016/9840 HELHJO), og tillater oss å sende inn noen innspill om revisjon av Forskrift om utfyllende tekniske og arkivfaglige bestemmelser om behandling av offentlige arkiver (Riksarkivarens forskrift).

Svært mye av vår kommuikasjon foregår i dag på e-post.  Vi foreslår derfor at Internett-e-post, slik det er beskrevet i IETF RFC 5322, https://tools.ietf.org/html/rfc5322. bør inn som godkjent dokumentformat.  Vi foreslår at forskriftens oversikt over godkjente dokumentformater ved innlevering i § 5-16 endres til å ta med Internett-e-post.

Som del av arbeidet med tjenestegrensesnitt har vi testet hvordan epost kan lagres i en Noark 5-struktur, og holder på å skrive et forslag om hvordan dette kan gjøres som vil bli sendt over til arkivverket så snart det er ferdig. De som er interesserte kan følge fremdriften på web.

Oppdatering 2017-04-28: I dag ble høringuttalelsen jeg skrev sendt inn av foreningen NUUG.

Tags: noark5, norsk, offentlig innsyn, standard.
Free software archive system Nikita now able to store documents
19th March 2017

The Nikita Noark 5 core project is implementing the Norwegian standard for keeping an electronic archive of government documents. The Noark 5 standard document the requirement for data systems used by the archives in the Norwegian government, and the Noark 5 web interface specification document a REST web service for storing, searching and retrieving documents and metadata in such archive. I've been involved in the project since a few weeks before Christmas, when the Norwegian Unix User Group announced it supported the project. I believe this is an important project, and hope it can make it possible for the government archives in the future to use free software to keep the archives we citizens depend on. But as I do not hold such archive myself, personally my first use case is to store and analyse public mail journal metadata published from the government. I find it useful to have a clear use case in mind when developing, to make sure the system scratches one of my itches.

If you would like to help make sure there is a free software alternatives for the archives, please join our IRC channel (#nikita on irc.freenode.net) and the project mailing list.

When I got involved, the web service could store metadata about documents. But a few weeks ago, a new milestone was reached when it became possible to store full text documents too. Yesterday, I completed an implementation of a command line tool archive-pdf to upload a PDF file to the archive using this API. The tool is very simple at the moment, and find existing fonds, series and files while asking the user to select which one to use if more than one exist. Once a file is identified, the PDF is associated with the file and uploaded, using the title extracted from the PDF itself. The process is fairly similar to visiting the archive, opening a cabinet, locating a file and storing a piece of paper in the archive. Here is a test run directly after populating the database with test data using our API tester:

~/src//noark5-tester$ ./archive-pdf mangelmelding/mangler.pdf
using arkiv: Title of the test fonds created 2017-03-18T23:49:32.103446
using arkivdel: Title of the test series created 2017-03-18T23:49:32.103446

 0 - Title of the test case file created 2017-03-18T23:49:32.103446
 1 - Title of the test file created 2017-03-18T23:49:32.103446
Select which mappe you want (or search term): 0
Uploading mangelmelding/mangler.pdf
  PDF title: Mangler i spesifikasjonsdokumentet for NOARK 5 Tjenestegrensesnitt
  File 2017/1: Title of the test case file created 2017-03-18T23:49:32.103446
~/src//noark5-tester$

You can see here how the fonds (arkiv) and serie (arkivdel) only had one option, while the user need to choose which file (mappe) to use among the two created by the API tester. The archive-pdf tool can be found in the git repository for the API tester.

In the project, I have been mostly working on the API tester so far, while getting to know the code base. The API tester currently use the HATEOAS links to traverse the entire exposed service API and verify that the exposed operations and objects match the specification, as well as trying to create objects holding metadata and uploading a simple XML file to store. The tester has proved very useful for finding flaws in our implementation, as well as flaws in the reference site and the specification.

The test document I uploaded is a summary of all the specification defects we have collected so far while implementing the web service. There are several unclear and conflicting parts of the specification, and we have started writing down the questions we get from implementing it. We use a format inspired by how The Austin Group collect defect reports for the POSIX standard with their instructions for the MANTIS defect tracker system, in lack of an official way to structure defect reports for Noark 5 (our first submitted defect report was a request for a procedure for submitting defect reports :).

The Nikita project is implemented using Java and Spring, and is fairly easy to get up and running using Docker containers for those that want to test the current code base. The API tester is implemented in Python.

Tags: english, noark5, nuug, offentlig innsyn, standard.
Hva «mangler» i OEP - litt statistikk utledet fra saksnummer og dokumentnummer
29th January 2015

En ting jeg har lurt på når det gjelder offentlige postjournaler, er hvor stor andel av det som ligger i de interne databasene kommer ikke med i postjournalen. Dette er det mulig å finne ut basert på det som ligger i postjournalen. For å forstå hva jeg mener, trengs det litt bakgrunnsinformasjon. I henhold til NOARK-standarden for norske offentlige arkiv skal enhver sak ha et årstall og et løpenummer, og ethvert dokument i saken skal gis et dokument-løpenummer. Det vil si at en ender opp med dokument-ID som ser ut som ÅÅÅÅ/SAKNR-DOKNR, f.eks. 2014/2-1 eller 2014/12312-14. Mange oppgir kun tosifret årstall, men prinsippet er det samme. Så vidt jeg vet skal saksnummer og dokumentnummer tildeles løpende og i stigende rekkefølge. Gitt en instans med følgende dokument-ID i postjournalen, så kan en regne ut hvor mye som ikke finnes i journalen:

Her ser en at saksnummer 2 og 5 finnes i postjournalen, mens nummerene 1, 3 og 4 mangler. En ser også at i sak 2014/5 mangler dokument 2. Ved hjelp av denne informasjonen har jeg regnet ut hvor stor andel av saksnummer og dokumentløpenummer som ikke har dukket opp i Offentlig Elektronisk Postjournal (OEP). For saksnummer har jeg tatt utgangspunkt i at en ikke trenger å starte på 1, og dermed regnet med området fra laveste til høyeste saksnummer og talt antall unike saksnummer som forekommer i OEP. I dette tilfellet betyr de at 2 av 4 saksnummer er ubrukte (50%). For dokumentløpenummer har jeg tilsvarende tatt utgangspunkt i laveste og høyeste kjente dokumentløpenummer, for å handtere databaser der jeg mangler komplett postjournal. For sak 2014/5 her betyr det at 1 av 3 dokumenter mangler (33%).

Det er flere årsaker til at det kan bli hull i nummerseriene. Feilføring der et dokument tildeles et nytt saksnummer ved en feil, og deretter flyttes inn i riktig sak vil gi et ubrukt saksnummer, da saksnummer skal tildeles i stigende rekkefølge og en ikke får opprette nye saker innimellom gamle saker. Tilsvarende kan skje med dokument-løpenummer. Det er jo heller ikke sikkert at et saksnummer i OEP er det samme som løpenummeret som brukes som saksnummeret i instansens interne datasystem. Kanskje snakker vi om ulike ontologier der en delmengde av interne saksnummer tilsvarer saksnummer i OEP. Hvis like nummer også tildeles andre ting enn saker som skal til OEP vil en tilsvarende få «hull» i saksnumrene i postjournalen.

Jeg er litt usikker på hva denne statistikken egentlig viser, og heller ikke sikker på om det er reelt sett mangler i OEP (som kanskje kunne anses å være kritikkverdig), bare er resultatet av hendelige uhell i nummertildelingen eller resultat av ulik ontologi i OEP og instansens datasystem. Men jeg syntes tallene og variasjonen var så interessant at jeg hadde lyst til å dele dem med mine lesere. Jeg har sortert listen på prosent upubliserte saksnummer for 2014.

SaksnummerDokumentnummerInstans
201420132014
%Upubl. saksnr.Totalt %Upubl. saksnrTotalt %Upubl. dok.nr.Totalt
0.6 8 1282 0.2 2 861 0.0 0 6105Vox, nasjonalt fagorgan for kompetansepolitikk
0.9 91 9863 2.7 313 11703 0.0 0 24029Direktoratet for byggkvalitet
1.0 161 15663 3.3 558 17045 0.0 0 41954Justervesenet
1.1 325 28515 1.2 357 29621 0.0 0 66871Arkivverket
1.8 28 1568 1.0 17 1722 0.0 0 9259Statistisk sentralbyrå
1.8 92 506675.43144 4169 0.0 0 17056Arbeids- og sosialdepartementet
2.2 32 1470 2.4 36 1471 0.0 0 9757Norsk Filminstitutt
2.3 34 1478 2.9 41 1425 0.0 0 4522Datatilsynet
2.7 49 1795 2.8 34 1199 0.0 0 5824Direktoratet for mineralforvaltning med Bergmesteren for Svalbard
3.1 134 4326 2.8 144 5119 0.0 0 12223Brønnøysundregistrene
3.1 201 6571 6.1 603 9870 0.0 0 22390Statens kartverk
3.2 228 7092 2.0 143 7032 0.1 14 24491Lotteri- og stiftelsestilsynet
3.6 32 891 4.9 37 753 0.0 0 3055Statens innkrevingssentral
3.81016 26466 2.5 716 28727 0.0 0 86951Husbanken
3.9 52 132614.4 180 1247 0.0 0 4922Sysselmannen på Svalbard
4.0 248 6250 4.6 332 7159 0.0 0 22063Post- og teletilsynet
4.1 102 2488 2.7 62 2291 0.0 0 9707Forbrukerombudet
4.8 51 106012.6 132 1046 0.0 0 3616Statens strålevern
5.2 924 17781 6.31184 18665 0.0 0 59772Fiskeridirektoratet
5.5 254 4638 6.1 315 5168 0.0 0 15470Barne-, likestillings- og inkluderingsdepartementet
6.0 80 1336 3.7 48 1314 0.0 0 2691Medietilsynet
6.1 91 1486 5.0 83 1651 0.2 17 7473Petroleumstilsynet
6.2 248 399773.73459 4693 0.0 0 10963Klima- og miljødepartementet
7.0 190 270010.2 207 2033 0.0 1 14299Samferdselsdepartementet
7.1 35 492 4.5 41 909 0.0 0 2960Konkurransetilsynet
7.1 482 6800 6.4 532 8259 0.0 0 28684Justis- og beredskapsdepartementet
7.2 87 1204 4.2 50 1199 0.0 3 7428Oljedirektoratet
7.2 106 1478 6.3 129 2045 0.0 2 4987Statens jernbanetilsyn
7.2 131 1813 8.5 124 1452 0.0 2 8758Statsministerens kontor
7.3 816 11218 6.1 655 10665 0.0 0 47160Norges forskningsråd
7.81150 14712 6.7 746 11202 0.0 0 33794Miljødirektoratet
7.9 411 5216 8.3 446 5365 0.0 0 16441Helse- og omsorgsdepartementet
8.3 376 4514 8.2 457 5548 0.0 3 20840Luftfartstilsynet
8.5 185 2181 9.8 175 1780 0.0 0 7669Landbruks- og matdepartementet
8.6 10 116 0.8 1 127 0.0 0 318Statens institutt for rusmiddelforskning
9.0 597 6648 9.7 705 7236 0.0 3 35663Utdanningsdirektoratet
9.01139 12632 8.21100 13344 0.0 2 36987Finanstilsynet
9.1 540 594913.4 769 5743 0.0 0 13908Finansdepartementet
9.2 256 2787 6.5 203 3147 0.0 0 9487Riksantikvaren - Direktoratet for kulturminneforvaltning
9.31596 17209 2.5 463 18438 0.0 0 53119Statens legemiddelverk
9.7 299 308510.7 329 3072 0.1 6 7579Forsvarsdepartementet
10.1 167 1650 4.5 65 1445 0.0 0 11157Statens helsetilsyn
10.9 59 542 7.7 44 569 0.0 0 1283Statens arbeidsmiljøinstitutt
11.3 46 40796.12591 2695 0.0 0 1489Landbruksdirektoratet Alta
11.4 675 593313.6 613 4492 0.0 0 24598Kystverket
11.6 739 638312.2 748 6121 0.0 1 18605Kunnskapsdepartementet
11.9 641 5398 9.3 432 4655 0.0 0 14438Kulturdepartementet
11.9 934 7835 0.0 0 0 0.0 0 33448Kommunal- og moderniseringsdepartementet
12.1 588 486012.2 522 4294 0.0 0 14173Politidirektoratet
12.11444 1189346.05212 11331 0.0 0 51438Helsedirektoratet
12.6 220 174517.5 112 640 0.1 3 4184Språkrådet
12.7 211 1664 9.7 226 2318 0.0 0 9151Direktoratet for utviklingssamarbeid
13.9 321 230915.1 329 2185 0.0 0 6307Olje- og energidepartementet
14.3 429 299612.5 303 2432 0.0 0 7560Nasjonalt folkehelseinstitutt
14.41408 9785 0.0 0 0 0.0 0 38923Nærings- og fiskeridepartementet
14.7 143 973 7.7 83 1084 0.0 0 4130Utlendingsnemnda
15.8 173 109738.8 621 1602 0.0 0 7557Direktoratet for forvaltning og IKT
16.71345 8069 8.6 703 8219 0.0 0 20834Norges vassdrags- og energidirektorat
17.5 61 34817.2 67 389 0.0 0 7732Senter for internasjonalisering av utdanning
18.93737 19734 4.4 606 13752 0.0 0 49938Direktoratet for samfunnssikkerhet og beredskap
19.11392 726919.11263 6601 0.0 0 19869Fylkesmannen i Troms
20.4 768 375815.7 471 3008 0.1 9 11280Integrerings- og mangfoldsdirektoratet
21.0 995 473717.8 978 5508 0.0 0 11260Fylkesmannen i Sogn og Fjordane
21.6 16 7497.32626 2698 0.0 0 155Statens reindriftsforvaltning
22.1 96 43517.6 81 459 0.2 3 1943Norges geologiske undersøkelse
22.3 27 12110.6 15 141 0.1 1 779Kunst i offentlige rom
22.41939 865921.81992 9120 0.0 1 17738Fylkesmannen i Nordland
22.5 52 23114.7 32 217 0.0 0 896Fredskorpset
22.52017 895795.540498 42425 0.0 0 14223Statens landbruksforvaltning
22.9 116 50715.2 81 532 0.0 0 2069Nasjonalbiblioteket
25.5 211 82920.8 205 987 0.0 0 3867Direktoratet for økonomistyring
26.1 6 23 9.7 3 31 0.0 0 106Kompetansesenter for distriktsutvikling
26.6 187 70228.5 248 871 0.0 1 3154Nasjonalt organ for kvalitet i utdanningen
27.1 90 33213.2 41 311 0.0 0 2400Norsk Akkreditering
28.3 562 198620.0 518 2586 0.0 0 6267Statens lånekasse for utdanning
28.8 443 153841.0 688 1679 0.0 0 5556Havforskningsinstituttet
29.81473 494424.81047 4230 0.0 0 9850Utlendingsdirektoratet
29.81563 524931.01421 4588 0.0 0 15660Fylkesmannen i Finnmark
30.8 314 102158.4 941 1610 0.3 13 3979Direktoratet for nødkommunikasjon
31.4 463 147537.0 280 757 0.1 7 4797Domstoladministrasjonen
31.84708 1478525.22236 8879 0.0 2 39313Utenriksdepartementet
36.1 526 145676.61364 1781 0.0 0 4472Departementenes sikkerhets- og serviceorganisasjon
36.7 447 121763.81503 2355 1.8 92 5121Garantiinstituttet for eksportkreditt
38.23341 874434.73096 8927 0.0 3 15180Fylkesmannen i Oppland
39.36267 1594737.76262 16606 0.1 15 29707Fylkesmannen i Hordaland
39.62122 536541.32242 5428 0.0 0 12680Fylkesmannen i Telemark
40.83137 769837.03059 8272 0.0 5 13848Fylkesmannen i Nord-Trøndelag
42.11528 362719.2 529 2750 0.0 1 13524Statsbygg
42.42844 670042.42913 6863 0.0 0 12090Fylkesmannen i Vest-Agder
42.9 6 1488.92398 2698 0.0 0 23Reindriftsforvaltningen
43.33310 764542.63369 7908 0.0 0 15739Fylkesmannen i Vestfold
43.43433 790540.83508 8594 0.0 0 12921Fylkesmannen i Møre og Romsdal
43.45540 1277340.15429 13534 0.0 0 22389Fylkesmannen i Rogaland
43.62334 535039.52314 5861 0.0 0 9997Fylkesmannen i Aust-Agder
43.72656 607923.1 890 3853 0.1 21 18064Forsvarsbygg
48.94276 874748.04189 8734 0.0 0 16281Fylkesmannen i Buskerud
50.95106 1002445.74584 10022 0.0 0 15340Fylkesmannen i Sør-Trøndelag
51.44477 870345.84240 9253 0.0 5 12067Fylkesmannen i Hedmark
51.5 210 40836.8 656 1785 0.0 0 658Departementenes servicesenter
52.74663 885246.64110 8824 0.0 0 13869Fylkesmannen i Østfold
59.714852 2486756.614366 25404 0.0 0 38706Fylkesmannen i Oslo og Akershus
61.144900 7349595.140365 42462 0.0 11 63747Landbruksdirektoratet Oslo
63.86812110680218.57592 41093 0.0 0144950Arbeidstilsynet
69.811022515796270.8105811149449 0.0 14106772Statens vegvesen Region øst
72.216772 2321595.216409 17238 0.0 0 16705Norsk kulturråd
78.612413115795677.6115949149462 0.0 0 77689Statens vegvesen Region sør
80.755587 6889671.936121 50269 0.0 0 42152Sjøfartsdirektoratet
81.012800615795680.1119743149456 0.0 8 74195Statens vegvesen Region vest
87.213779815796287.6130971149449 0.0 9 50814Statens vegvesen Region midt
88.012239 1390286.119158 22244 0.0 0 5492Barne-, ungdoms- og familiedirektoratet
90.814345315795690.6135441149453 0.0 0 39961Statens vegvesen Region nord
93.85865 625099.37093 7140 0.0 0 984Nasjonal kommunikasjonsmyndighet
95.34655 488394.33819 4049 0.1 1 967Landinfo
96.215193515787096.0143497149452 0.0 0 19555Statens vegvesen Vegdirektoratet
97.510079910337396.9119802123636 0.0 0 7605Toll- og avgiftsdirektoratet
97.724104 2466698.223640 24062 0.2 5 2108Kriminalomsorgsdirektoratet
98.360845 6192298.358575 59605 0.0 0 2837Statens pensjonskasse
99.599066199587399.4953094958529 0.0 0 18246Skattedirektoratet

Det kunne vært interessant å se hva som skjedde hvis en ba om innsyn i en dokument-ID som ikke finnes i OEP... :) Det hadde også vært interessant å få vite hva årsaken til at noen saksnummer ikke dukker opp i OEP der det er få og mange. Jeg mistenker jo at årsaken ikke er den samme hos Skattedirektoratet og hos Landinfo, selv om andelen upubliserte nummer er ganske lik.

Tags: noark5, norsk, nuug, offentlig innsyn.
Hvordan bør RFC 822-formattert epost lagres i en NOARK5-database?
7th March 2014

For noen uker siden ble NXCs fri programvarelisenserte NOARK5-løsning presentert hos NUUG (video på youtube foreløbig), og det fikk meg til å titte litt mer på NOARK5, standarden for arkivhåndtering i det offentlige Norge. Jeg lurer på om denne kjernen kan være nyttig i et par av mine prosjekter, og for ett av dem er det mest aktuelt å lagre epost. Jeg klarte ikke finne noen anbefaling om hvordan RFC 822-formattert epost (aka Internett-epost) burde lagres i NOARK5, selv om jeg vet at noen arkiver tar PDF-utskrift av eposten med sitt epostprogram og så arkiverer PDF-en (eller enda værre, tar papirutskrift og lagrer bildet av eposten som PDF i arkivet).

Det er ikke så mange formater som er akseptert av riksarkivet til langtidsoppbevaring av offentlige arkiver, og PDF og XML er de mest aktuelle i så måte. Det slo meg at det måtte da finnes en eller annen egnet XML-representasjon og at det kanskje var enighet om hvilken som burde brukes, så jeg tok mot til meg og spurte SAMDOK, en gruppe tilknyttet arkivverket som ser ut til å jobbe med NOARK-samhandling, om de hadde noen anbefalinger:

Hei.

Usikker på om dette er riktig forum å ta opp mitt spørsmål, men jeg lurer på om det er definert en anbefaling om hvordan RFC 822-formatterte epost (aka vanlig Internet-epost) bør lages håndteres i NOARK5, slik at en bevarer all informasjon i eposten (f.eks. Received-linjer). Finnes det en anbefalt XML-mapping ala den som beskrives på <URL: https://www.informit.com/articles/article.aspx?p=32074 >? Mitt mål er at det skal være mulig å lagre eposten i en NOARK5-kjerne og kunne få ut en identisk formattert kopi av opprinnelig epost ved behov.

Postmottaker hos SAMDOK mente spørsmålet heller burde stilles direkte til riksarkivet, og jeg fikk i dag svar derfra formulert av seniorrådgiver Geir Ivar Tungesvik:

Riksarkivet har ingen anbefalinger når det gjelder konvertering fra e-post til XML. Det står arkivskaper fritt å eventuelt definere/bruke eget format. Inklusive da - som det spørres om - et format der det er mulig å re-etablere e-post format ut fra XML-en. XML (e-post) dokumenter må være referert i arkivstrukturen, og det må vedlegges et gyldig XML skjema (.xsd) for XML-filene. Arkivskaper står altså fritt til å gjøre hva de vil, bare det dokumenteres og det kan dannes et utrekk ved avlevering til depot.

De obligatoriske kravene i Noark 5 standarden må altså oppfylles - etter dialog med Riksarkivet i forbindelse med godkjenning. For offentlige arkiv er det særlig viktig med filene loependeJournal.xml og offentligJournal.xml. Private arkiv som vil forholde seg til Noark 5 standarden er selvsagt frie til å bruke det som er relevant for dem av obligatoriske krav.

Det ser dermed ut for meg som om det er et lite behov for å standardisere XML-lagring av RFC-822-formatterte meldinger. Noen som vet om god spesifikasjon i så måte? I tillegg til den omtalt over, har jeg kommet over flere aktuelle beskrivelser (søk på "rfc 822 xml", så finner du aktuelle alternativer).

Finnes det andre og bedre spesifikasjoner for slik lagring? Send meg en epost hvis du har innspill.

Tags: noark5, norsk, offentlig innsyn.

RSS Feed

Created by Chronicle v4.6