dinsdag 15 maart 2016

Tweede blik op #opendata portaal van @geldersarchief / @deree_groningen

Downloaden

In Eerste blik op #opendata portaal van @geldersarchief / @deree_groningen beschreef ik de moeizame procedure om de bestanden te downloaden. Sinds gisteren is men er in Groningen achter dat de rate limit (hoe vaak je binnen een bepaald tijdsbestek mag downloaden) stond ingesteld op maximaal 100 bestanden per uur. Dit is gelukkig nu hersteld, er geldt nu een rate limit van 100 per minuut, waardoor het downloaden sneller gaat (met sporadisch nog een bestand van 0 bytes of een HTTP 500 foutmelding).

Helaas zijn de bestanden, waarvan het de bedoeling is dat mensen deze makkelijk kunnen downloaden, nog steeds met een key (die elke dag anders is!) in de URL "beveiligd" tegen downloaden...

Verwerking

Nu de bijna 9 duizend bestanden zijn gedownload kan ik over gaan tot controle en verwerking van de bestanden. De bestanden zijn conform de XSD van A2A, oftewel, de syntax klopt. Dit betekent echter niet dat alle bestanden goed zijn!

Hieronder een voorbeeld:

<a2a:A2A xmlns:a2a="http://Mindbus.nl/A2A" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="1.7" xsi:schemaLocation="http://Mindbus.nl/A2A http://Mindbus.nl/A2A/A2AAllInOne_v.1.7.xsd"><a2a:Event eid="Event1"><a2a:EventType>Trouwen</a2a:EventType><a2a:EventDate><a2a:LiteralDate>21-10-1731</a2a:LiteralDate><a2a:Year>1731</a2a:Year><a2a:Month>10</a2a:Month><a2a:Day>21</a2a:Day></a2a:EventDate><a2a:EventPlace><a2a:Place>Zutphen</a2a:Place></a2a:EventPlace></a2a:Event><a2a:Source><a2a:SourcePlace><a2a:Country>Nederland</a2a:Country><a2a:Place>Zutphen</a2a:Place></a2a:SourcePlace><a2a:SourceIndexDate><a2a:From>1731-10-21</a2a:From><a2a:To>1731-10-21</a2a:To></a2a:SourceIndexDate><a2a:SourceDate><a2a:LiteralDate>21-10-1731</a2a:LiteralDate><a2a:Year>1731</a2a:Year><a2a:Month>10</a2a:Month><a2a:Day>21</a2a:Day></a2a:SourceDate><a2a:SourceType>DTB Trouwen</a2a:SourceType><a2a:SourceReference><a2a:Place>Arnhem</a2a:Place><a2a:InstitutionName>Gelders Archief</a2a:InstitutionName><a2a:Archive>0176</a2a:Archive><a2a:RegistryNumber>1912.18</a2a:RegistryNumber><a2a:DocumentNumber/></a2a:SourceReference><a2a:SourceAvailableScans><a2a:Scan><a2a:OrderSequenceNumber>1</a2a:OrderSequenceNumber><a2a:UriViewer>http://www.geldersarchief.nl/zoeken/?mivast=37&amp;miadt=37&amp;miaet=18&amp;micode=0176_1912.18&amp;minr=24643340&amp;miview=ldt</a2a:UriViewer><a2a:UriPreview>http://files.archieven.nl/php/get_thumb.php?adt_id=37&amp;toegang=0176&amp;file=1912.18\1912.18-0001.pdf</a2a:UriPreview></a2a:Scan></a2a:SourceAvailableScans><a2a:SourceLastChangeDate>2011-06-15</a2a:SourceLastChangeDate><a2a:RecordIdentifier>102821035</a2a:RecordIdentifier><a2a:RecordGUID>{A0881A04-6ADA-47A3-9F3D-9388F00DE11A}</a2a:RecordGUID></a2a:Source></a2a:A2A>


Opdracht: zoek in bovenstaand stuk XML de persoonsnamen op...

Helaas, bovenstaand A2A record bevat geen persoonsnamen. Oftewel een incompleet stuk data, waar ik niets mee kan.

Geen link naar website archief

Als je de akte die in bovenstaand stuk XML wordt beschreven wilt bekijken op de website van het Gelders Archief of archieven.nl, dan heb je ook een uitdaging, of beter gezegd, ook daar heb je niet genoeg informatie voor. 

Vaak zie je dat de URL van de akte op de website van het archief wordt weergegeven in het element SourceDigitalOriginal, deze wordt echter niet geleverd. Vaak is het ook mogelijk om een link te construeren op basis van de waarde in de element RecordGUID of RecordIdentifier. Of dit hier mogelijk is weet ik niet, het is niet gedocumenteerd. 

Afbeeldingen beschikbaar?
Gelukkig bevat de data set ook A2A records met persoonsnamen, deze stromen nu Open Archieven binnen. En daar wordt het volgende euvel zichtbaar... (en dan doel ik niet op personen die #### heten).

De A2A records bevatten ook links naar de scans (en viewer). Een voorbeeld van zo'n URL is:
http://files.archieven.nl/php/get_thumb.php?adt_id=37&toegang=0207A&file=1410-03\004525767_00168.jpg

En deze scan ziet er als volgt uit:


Waarom links naar dit soort "afbeelding nog niet beschikbaar" afbeeldingen opnemen als de afbeelding nog niet beschikbaar is !?!?!

Conclusie

De kwaliteit van de open data en het open data portaal is nog niet zoals je mag verwachten. Deze ondermaatse kwaliteit straalt wel af op leverancier en archief! Dat is jammer en niet nodig.

maandag 14 maart 2016

Inbreng voor eerstvolgende bijeenkomst van de #A2A werkgroep

Graag wil ik voor de eerstvolgende bijeenkomst van de werkgroep die zich bezig houdt met de open standaard A2A het volgende inbrengen op de onderdelen (ook wel: beheerobjecten):
  • A2AAllInOne_v.1.7.xsd
  • Documentatie v 1.8
  • Beheerprocedure
Voor de volgende onderdelen zijn er geen opmerkingen:
  • RecordCollectionA2A.xsd
  • Schematrons
NB: Interesse voor deelname aan de A2A werkgroep kan gemeld worden bij de beheerder van deze open standaard, het CBG (via jeroen.balkenende@cbg.nl).



ID: 1

Component: Beheerprocedure

Issue: Er ontbreekt een beheerprocedure voor A2A (of deze is niet openbaar), er is geen roadmap bekend (huidige initiële versie 1.7 is van 7 april 2011).

Change: Maak en publiceer beheerprocedure, organiseer werkgroep, beheer open standaard.



ID: 2

Component: Beheerprocedure

Issue: Niet één plaats waar beheerobjecten beschikbaar is.
Issue: Niet één, openbare plaats, waar issues gemeld kunnen worden.

Change: Al het materiaal op Github plaatsen, een ieder kan issues melden en pull requests doen (dus bijdragen).



ID: 3

Component: A2AAllInOne_v.1.7.xsd

Issue: Het element Collection is van het type token100, dat is erg krap voor een beschrijving van een collectie.

Change: Wijzig het type van Collection in token400.



ID: 4

Component: A2AAllInOne_v.1.7.xsd

Issue: Het element PersonNameFirstName is van het type token100, dit is te krap voor uitzonderingen als "Friedrich August Albert Anton Ferdinand Joseph Karl Maria Baptist Nepomuk Wilhelm Xaver Georg Fidelis" (komt voor bij dapperheidsonderscheidingen NIMH).

Change: Wijzig het type van PersonNameFirstName in token400.



ID: 5

Component: A2AAllInOne_v.1.7.xsd

Issue: Een Person bevat optioneel een BirthDate en BirthPlace om de geboortedatum -en plaats van en persoon vast te leggen (behalve bij een geboorteakte, dan worden deze gegevens vastgelegd in het Event). In sommige akten (niet zijnde overlijdensakten, maar bijv. huwelijksakten) worden ook de overlijdensdatum en -plaats van de persoon weergegeven.

Change: Voeg een DeathDate (als BirthDate) en DeathPlace (als BirthPlace) tot aan Person.



ID: 6

Component: A2AAllInOne_v.1.7.xsd

Issue: Het element SourceType heeft als waarde patroon 'DTB Dopen|DTB Trouwen|DTB Begraven|BS Geboorte|BS Huwelijk|BS Overlijden|Bevolkingsregister|Notariële archieven|VOC Opvarenden|Kadaster|Memories van Successie|other:.*'. Alhoewel de other:.* constructie andere waarden mogelijk maakt is het toevoegen van bekende brontypen aan te raden voor eenduidigheid.

Change: Voeg 'BS Echtscheiding' toe aan het waarde patroon van SourceType.



ID: 7

Component: A2AAllInOne_v.1.7.xsd

Issue: Het element RelationType heeft als waarde patroon 'Kind|Dopeling|Bruid| Bruidegom|Overledene|Vader|Moeder|Vader van de bruid|Moeder van de bruid|Vader van de bruidegom|Moeder van de bruidegom|Getuige|Geregistreerde|Partner|other:.*'. Alhoewel de other:.* constructie andere waarden mogelijk maakt is het toevoegen van bekende relatietypen aan te raden voor eenduidigheid.

Change: Voeg 'Weduwe|Weduwnaar|Echtgenoot|Echtgenote' toe aan het waarde patroon van RelationType.



ID: 8

Component: A2AAllInOne_v.1.7.xsd

Issue: Het element EventType heeft als waarde patroon 'Geboorte|Doop|Ondertrouw|Huwelijk|Trouwen|Echtscheiding| Overlijden|Begraven|Registratie|Notariële akte|Memorie van successie|Anders|other:.*'. Een Notariële akte en Memorie van successie zijn brontypen, geen gebeurtenissen.
Issue: De volgende gebeurtenissen ontbreken: Crematie, Verloving, Emigratie, Immigratie, Proces, Aanstelling, Onderscheiding, Naturalisatie.
Issue: Anders is nietszeggend en dubbelop met other:.*.

Change: Het waarde patroon van element EventType wijzigen in 'Geboorte|Doop|Ondertrouw|Huwelijk|Trouwen|Echtscheiding|Overlijden|Begraven|Registratie|Crematie|Verloving|Emigratie|Immigratie|Onderscheiding|Naturalisatieother:.*'.



ID: 9

Component: A2AAllInOne_v.1.7.xsd

Issue: Het complexe type ctTransNumber - gebruikt in PersonAgeDays,PersonAgeHours, PersonAgeMinutes, PersonAgeMonths, PersonAgeWeeks, PersonAgeYears, Day, Hour, Minute, Month, Year - is van het type token500.

Change: Wijzig het type van ctTransNumber in  (het striktere) xsd:unsignedShort (of wijzig waar gebruikt).



ID: 10

Component: A2AAllInOne_v.1.7.xsd

Issue: Types als RegistryNumber en DocumentNumber zijn van het type token100.

Change: Wijzig het type in (het striktere) xsd:unsignedInt.



ID: 11

Component: A2AAllInOne_v.1.7.xsd

Issue: Alle plaatsaanduidingen zijn nu tokens (dus vrije tekst), terwijl archiefinstellingen meer en meer hun topografische elementen in hun collecties standaardiseren met URI's om linked data mogelijkheden te benutten.

Change: Neem bij de plaatsaanduidingen het attribuut URI op, waarin bijvoorbeeld een Geonames, Gemeentegeschiedenis of http://thesaurus.erfgeo.nl/ URI kan worden opgenomen.



ID: 12

Component: A2AAllInOne_v.1.7.xsd

Issue: Veel van de types zijn gebaseerd op xsd:sequence waardoor de volgorde zeer strikt is, terwijl de volgorde semantisch niet van belang is.

Change: Wijzig alle xsd:sequentes naar naar (het lossere) xsd:any.

Also see: http://stackoverflow.com/questions/3325247/xml-validation-with-xsd-how-to-avoid-caring-about-the-sequence-of-the-elements)



ID: 13

Component: A2AAllInOne_v.1.7.xsd

Issue: Het EAD element bevat de verplichte elementen URL en Code, terwijl de documentatie spreekt of een keue uit twee manieren (wat logischer is).

Change: De cardinaliteit van URL en Code wijzigen in {0,1}.



ID: 14

Component: A2AAllInOne_v.1.7.xsd

Issue: Het element Religion is van het type ctTransString (token100), dus vrije tekst.

Change: Voeg een waarde patroon toe om meer uniformiteit te krijgen bij deze waarde (zoals bijv. bij MaritalStatus).





ID: 15

Component: A2AAllInOne_v.1.7.xsd

Issue: De elementen Longitude en Latitude zijn van van het type ctTransString (token100).

Change: Wijzig het type van Longitude en Latitude in (het striktere) xsd:float.



ID: 16

Component: A2AAllInOne_v.1.7.xsd

Issue: Het element Calender is nu een token100 (vrij tekst).

Change: Het type laten voldoen aan het waarde patroon 'Gregorian|Julian|Hebrew|French|Islamic|Maya|Hindu|Saka|other:*'




ID: 17

Component: Documentatie v 1.8

Issue: Typo "nummerieke index".

Change: "numerieke index".



ID: 18

Component: Documentatie v 1.8

Issue: Op pagina 25 en verder werken de Dropbox links naar voorbeeld XMLs en schematrons niet meer (404).

Change: Voorbeelden op Github en daar naartoe linken.



ID: 19

Component: Documentatie v 1.8

Issue: Typo op pagina 14 "dieniet".

Change: "die niet".



ID: 20

Component: Documentatie v 1.8

Issue: Typo op o.a. pagina 20 "definieren".

Change: "definiëren" (door heel het document).



ID: 21

Component: Documentatie v 1.8

Issue: Typo op pagina 21 "dar er".

Change: "dat er".



ID: 22

Component: Documentatie v 1.8

Issue: Er zijn diverse internationale gebruikers, het grootste deel van de documentatie (en waardelijsten) is in het Nederlands gesteld wat de internationale adoptie kan belemmeren.

Change: Over op beschrijving en voertaal in Engels.



ID: 23

Component: A2AAllInOne_v.1.7.xsd

Issue: Het element Scan verwijst naar online scans (Uri, UriPreview, UriViewer). Niet altijd is er een link mogelijk naar één akte, maar wel naar heel het gescande register. Er kan op dit moment niet worden aangegeven of er wordt gelinkt aan één akte of een register.

Change: Breid het element Scan uit het optionele element A2A:ScanType van type token100 met mogelijk waarden "akte" en "register".

See also: http://blogbob.coret.org/2013/09/wijzigingsverzoek-op-a2a-model.html




ID: 24

Component: A2AAllInOne_v.1.7.xsd

Issue: Het element Book is van het type token100, dat is erg krap voor een beschrijving van een boek.

Change: Wijzig het type van Book in token400.

woensdag 2 maart 2016

Eerste blik op #opendata portaal van @geldersarchief / @deree_groningen

Op dinsdag 1 maart 2016 kondigde het Gelders Archief aan dat zij de historische gegevens van de Burgerlijke Stand beschikbaar stelt als open data:

Het Gelders Archief stelt met ingang van vandaag de gegevens van de Gelderse Burgerlijke Stand (BS) (1811-1950) beschikbaar als open data. Daarmee gaat het Gelders Archief, in navolging van het Nationaal Archief, een stap verder dan de Wet hergebruik van overheidsinformatie (Who), die 2015 in werking trad.
U zult zich nu wellicht afvragen, hoe kun je een stap verder gaan dan een wet. Maar OK, ze bedoelen natuurlijk dat ze liever niet re-actief hergebruikverzoeken beantwoorden (op basis van de Who) en dus pro-actief open data bieden.

Uiteraard wordt in het nieuwsbericht nog even toegelicht wat open data is:
Wat zijn open data?
Open data zijn gegevens die vrij beschikbaar zijn met een minimum aan beperkingen. Bij overheden gaat het om overheidsinformatie, die openbaar is, waar geen auteursrecht of andere rechten van derden op berust, die bekostigd is uit publieke middelen en is voortgekomen uit uitvoering van de publieke taak. Open data zijn bij voorkeur computer-leesbaar en voldoen aan open standaarden.

de data wordt beschikbaar gesteld onder een CC0 licentie: goed!

Downloaden van bestanden (hoe moeilijk kan dat zijn)
De open data wordt beschikbaar gesteld via de oplossing van De Ree archiefsystemen. In dit open data portaal worden maar liefst 8.998 data sets aangeboden door het Gelders Archief. De keuze voor het aanbieden van bestanden ter download in plaats van een API volgens het OAI-PMH protocol lijkt een trend. Op zich heb ik met deze keuze geen probleem, bestanden downloaden is simpel, toch?

Echter, de wijze waarop De Ree de bestanden ter download biedt is niet echt handig te noemen, het stimuleert zeg maar niet dat de data wordt hergebruikt. Het open data portaal levert namelijk niet direct een lijst met links naar de bestanden. Handmatig moet er eerst geklikt worden op een regel in de lijst van 8999 items, waarna de download link pas wordt opgehaald en getoond. Met deze hoeveelheden is handwerk überhaupt geen optie (scheelt weer een boel hergebruikers...).

Uiteraard probeer ik de bestanden niet handmatig te downloaden maar geautomatiseerd (waarbij ik dus ook voor elke pagina meerdere requests moet doen om de download links te krijgen) en wat me dan opvalt is dat alle bestandslinks zijn voorzien van een sleutel (key) in de url. Waarom bestanden die bedoeld zijn om her te gebruiken op deze manier beveiligen?
http://files.archieven.nl/php/download.php?adt=37&nummer=0207A_G_2516-03&bestand=%2F37%2Fxml%2Fa2a%2FNL-AhGldA_0207A_G_2516-03_54_A2A.xml&key=1A7MCZCE1C

Als je uiteindelijk de 8998 links hebt naar de bestanden kun je deze niet zo maar downloaden, na ongeveer 100 bestanden lijkt het IP-adres van mijn server op een zwarte lijst te komen. Met een andere server kom ik weer even wat verder tot ook daar een limiet bereikt wordt. Niet dat ik een foutmelding krijg, nee de bestanden die worden geretourneerd zijn gewoonweg leeg (0 bytes). Het is toch de bedoeling dat ik de bestanden download, waarom wordt het downloaden dan tegengewerkt?

In de toekomst zullen de bestanden aangepast worden omdat gegevens gecorrigeerd of aangevuld worden. Er is in het portaal geen manier om "bestanden gewijzigd sinds" te krijgen. Dus een volgende keer moet alles weer gedownload worden.

Bestandsinhoud
Ik heb nu een paar honderd bestanden mogen downloaden en heb dus naar de inhoud kunnen kijken. Het eerste wat opvalt is dat de character-encoding van de bestanden niet klopt. Het zou, volgens de A2A standaard, UTF-8 moeten zijn. Dat zijn de bestanden niet, waardoor diakrieten bijvoorbeeld fout gaan.

Wat me daarna opvalt is dat de A2A records geen links bevatten naar scans. Niet elke akte zal gekoppeld zijn aan scans of gescande registers in het archiefbeheersysteem, maar een deel van de Gelderse akten is dit wel degelijk. Deze informatie ontbreekt echter in de bestanden.

Waarom zit er trouwens zoveel "lucht" in de XML bestanden: lege tags als <a2a:Profession\> en veel overbodige white-space. En waarom zijn bestanden niet gecomprimeerd, via "offline ZIP" of GZIP-on-the-fly? Voorbeeld: het bestand 0207A_G_3074-12.xml is 219.506 bytes groot, als je de "lucht" eruit haalt en comprimeert blijft er een bestand over van 6.542 bytes. Scheelt een factor 34, ook in opslag en bandbreedte!

Conclusie
Ik ben enigszins teleurgesteld over het open data portaal. Het huidige portaal, laten we het versie 0.1 beta noemen, stimuleert hergebruik geenszins. Door de drempels, het niet voldoen aan de standaard en het incompleet zijn van data, wordt er geen open data geboden.

Gelukkig zijn geen van de geconstateerde punten moeilijk op te lossen. Dus met een beetje goede wil leveren het Gelders Archief en de andere klanten van De Ree binnenkort wel open data!


[update 3-3-2016]

Sommige gedownloade bestanden blijken geen A2A te bevatten maar foutmeldingen, dit is een groter probleem voor De Ree!

<!--705133935:{D93A49F7-7614-46B2-BF46-F474F9C676BC}:-4030 = ORA-04030: Onvoldoende procesgeheugen tijdens poging 524352 bytes (lpxHeap subhea,qmxsaxAllocMemInternal) toe te wijzen.:1 -->
<!--705133939:{F4179440-875C-4774-9F32-C843452DFFCD}:-4030 = ORA-04030: Onvoldoende procesgeheugen tijdens poging 524352 bytes (lpxHeap subhea,qmxsaxAllocMemInternal) toe te wijzen.:1  -->
<!--705133943:{9943B1CE-0501-442E-9C67-2B7247C1FAD9}:-4030 = ORA-04030: Onvoldoende procesgeheugen tijdens poging 524352 bytes (lpxHeap subhea,qmxsaxAllocMemInternal) toe te wijzen.:1 -->
<!--705133947:{B478C4AA-363D-4797-8BB9-BF1E7C15A792}:-4030 = ORA-04030: Onvoldoende procesgeheugen tijdens poging 524352 bytes (lpxHeap subhea,qmxsaxAllocMemInternal) toe te wijzen.:1 -->
<!--705133951:fout:ORA-04030: Onvoldoende procesgeheugen tijdens poging 123416 bytes (QERHJ hash-joi,kllcqas:kllsltba) toe te wijzen.:1 -->
<!--705133955:fout:ORA-04030: Onvoldoende procesgeheugen tijdens poging 97264 bytes (QERHJ hash-joi,kllcqc:kllcqslt) toe te wijzen.:1 -->
<!--705133959:fout:ORA-04030: Onvoldoende procesgeheugen tijdens poging 97264 bytes (QERHJ hash-joi,kllcqc:kllcqslt) toe te wijzen.:1 -->
<!--705133963:fout:ORA-04030: Onvoldoende procesgeheugen tijdens poging 97264 bytes (QERHJ hash-joi,kllcqc:kllcqslt) toe te wijzen.:1 -->
<!--705133967:fout:ORA-04030: Onvoldoende procesgeheugen tijdens poging 97264 bytes (QERHJ hash-joi,kllcqc:kllcqslt) toe te wijzen.:1 -->
........