wouterbeek / etl-andb

Werk repository voor de creatie van de ANDB dataset in linked data.
0 stars 1 forks source link

[CoW] Unieke identifiers voor resources met een niet unieke naam #9

Closed MiconSchorsij closed 3 years ago

MiconSchorsij commented 3 years ago

Hoe zorg je ervoor dat bijvoorbeeld de kinderen in de ADB dataset, die alleen met hun voornaam worden aangeduid uniek geidentificeerd kunnen worden. Omdat er meerdere kinderen zijn met dezelfde naam worden die nu allemaal als 1 persoon beschouwd. Voorbeeld: https://druid.datalegend.net/MiconSchorsij/ANDBall/browser?resource=https%3A%2F%2Fiisg.amsterdam%2Fid%2Fadb%2FRachel

wouterbeek commented 3 years ago

Hiervoor zijn meerdere oplossingen:

Even opzoeken hoe dit in CoW moet, misschien met Jinja.

thomasdegroot18 commented 3 years ago

Jinja kan gebruik maken van custom filters. Dit zijn functies die je bijvoorbeeld zelf kan defineren in het python script om ze daarna aan te roepen. Hier vallen ook de hashing functies onder https://ttl255.com/jinja2-tutorial-part-4-template-filters/#write-custom.

Het is daarom dus niet mogelijk om hashing toe te passen in CoW, omdat deze custom filter niet beschikbaar is. Om deze custom filters toe te passen zou je in de CoW code deze custom filters op een of andere manier in moeten brengen om ze ook toe te passen in je JSON. Daarvan mis ik net de kennis om deze custom filters in CoW te krijgen. Mogelijk dat de CoW dit op kan pakken om custom filters, etc toe te kunnen passen in CoW.

Voor nu zou alleen de eerste optie mogelijk zijn, waarbij een arbitraire identificatie aan gemaakt wordt, door bijvoorbeeld twee kolommen te vebrinden met een join.

MiconSchorsij commented 3 years ago

Ik heb twee verschillende manieren uitgeprobeerd om de IRI's van resources met een niet unieke naam uniek te maken.

  1. "aboutUrl": "{{([adm_image_no, '-', 'chi_first_name_01']|join)}}" De IRI wordt dan https://iisg.amsterdam/id/adb/AMSAB_0558_1205-chi_first_name_01 Dit is altijd uniek door het gebruik van de unieke identifier van de kaart en de naam van het veld wat maar 1 keer per kaart voorkomt. De IRI wordt alleen op precies dezelfde manier aangemaakt als het veld geen inhoud heeft.
  2. "aboutUrl": "{{([adm_id, ' ', un_section, ' ', un_sectionno]|join)|replace(' ', '')}}" De IRI wordt dan bijvoorbeeld https://iisg.amsterdam/id/andb/842_2_27 , wat mogelijk nog steeds niet uniek is. Als het veld geen inhoud heeft wordt de IRI nog steeds aangemaakt maar dan als https://iisg.amsterdam/id/andb/842__ wat zeker niet uniek is.

Ik denk dus dat ik wel een manier heb gevonden om unieke IRI's te creeeren, maar het probleem slaat nu weer terug op de afhandeling van lege velden (Issue #12 ) Waar nog steeds geen oplossing voor is.