TheaterEncyclopedie:Koppeling met Adlib/Experiment om foto-index te importeren

Uit TheaterEncyclopedie
Ga naar: navigatie, zoeken

Dit experiment is erop gericht om te onderzoeken en te bepalen:

  • Welke relevante afbeeldingsinformatie uit Adlib nodig/nuttig is binnen de TE
  • Op welke manier een totaaloverzicht van deze informatie geïmporteerd kan worden in de TE
    • Het gaat hierbij om het efficient importeren én semantisch opslaan van de gegevens
  • Hoe deze de geïmporteerde informatie gebruikt kan worden binnen de TE-omgeving
    • In eerste instantie gaat het om weergeven van afbeeldingen uit Adlib
    • Daarnaast gaat het om uitvoeren van queries op de geïmporteerde gegevens

Zie ook het vervolg op: TE:Koppeling met Adlib/Test importeren pointerfile_201

Gebruik van de API van Adlib (Axiell)

De API-calls op deze pagina zijn grotendeels gebaseerd op informatie uit de e-mail van Heide Brebels d.d. 23-april-2020.

Ophalen van de gehele index

API-call voor de gehele data-set

De API-call om een (kleine) selectie van 10 records op te vragen:

Bovenstaande call heeft een response van meer dan 3 minuten. Het weglaten van de "limit=10" resulteert niet in enige response. Enige tests:

  • limit=10000 werkt
  • limit=20000 werkt
  • limit=50000 lijkt te werken, maar daarboven komt er geen respons meer.

Deze aanroep werkt niet via http://theatercollectie.uva.nl/webapi/wwwopac.ashx?...

NB: Door de omvang van het foto-bestand duurt de query enige tijd.

Importeren van de lijst (selectie)

Als gevolg van de lange responsietijd van de API kunnen de gegevens niet direct geïmporteerd worden en geeft de TE een foutmelding. NB: De code van de API-call staat nog wel als "comments" in de brontekst van deze paragraaf, ter referentie / hergebruik!

Alternatieve oplossing Omdat een direct call naar de API van Adlib (nu nog) niet gebruikt kan worden, is een alternatieve aanpak gekozen. Deze aanpak bestaat uit de volgende stappen:

  1. Via een browser is de XML-response van de Adlib-API opgevraagd en gekopieerd
  2. De XML-response van de Adlib-API is vervolgens opgeslagen op de pagina TheaterEncyclopedie:Koppeling met Adlib/Experiment om foto-index te importeren/Adlib_api_response_2020421, waarvan de "raw"-inhoud beschikbaar is via de MediaWiki-API, maar ook als "raw" content via deze pagina.
  3. Vervolgens wordt de XML informatie opgevraagd via deze url en ingelezen in de TE. Deze procedure lijkt hier nu omslachtig, maar is vergelijkbaar met de koppeling de Adlib-API. Er is overigens een aantal alternatieve scenario's mogelijk:
    • Via een (CSV. JSON, XML-) remote file (vanaf Adlib server)
    • Idem als local file (als bestand opgeslagen op de TE bijvoorbeeld)
    • Via een SQL-databasetabel
    • Via een JSON content pagina op de TE (toegankelijk via de API van MediaWiki; lijkt op de nu gevolgde aanpak)

Met dit "opgeslagen zoekresultaat" kan vervolgens eenvoudig onderstaand overzicht worden samengesteld:

Fout bij het ophalen van gegevens van URL https://test.theaterencyclopedie.nl/wiki/TheaterEncyclopedie:Koppeling_met_Adlib/Experiment_om_foto-index_te_importeren/Adlib_api_response_2020421?action=raw: $2.
Er is een probleem opgetreden bij het HTTP-verzoek: 401 Unauthorized
Na 3 pogingen gaf de URL https://test.theaterencyclopedie.nl/wiki/TheaterEncyclopedie:Koppeling_met_Adlib/Experiment_om_foto-index_te_importeren/Adlib_api_response_2020421?action=raw geen resultaat.

Image Reference Priref

NB1: Het importeren van grotere selecties (10k, 20k en 50k records) is getest op een andere MediaWiki-installatie en werkt daar zonder problemen. Resultaten kunnen worden weergegeven totdat de maximale grens van de paginagrootte is bereikt (nu 2MB).

NB2: De time-out duur voor een http(s)-request is (per default) 25 seconden; het is mogelijk deze tijd te verlengen via een aanpassing van $wgHTTPTimeout in LocalSetting.php. Zie documentatie.

Opslaan van gegevens in semantische database

Om de informatie ook elders in de TE toegankelijk te maken kan deze opgeslagen worden in de semantische database en via een query opgevraagd: {{#store_external_table:IsExternalFileIn |HeeftBestandsnaam={{{image}}} |HeeftReferentie={{{reference}}} |HeeftPriref={{{priref}}} }}

{{#ask: [[IsExternalFileIn::{{FULLPAGENAME}}]]
|?HeeftBestandsnaam
|?HeeftReferentie
|?HeeftPriref
|format = table
|mainlabel = -
}}


Voor het gebruiksgemak (en om meerdere verzamelingen/pagina's met geïmporteerde bestanden samen te voegen) is Concept:Xfile. Een "concept" fungeert als een "categorie" in semantische queries.

{{#ask: [[Concept:Xfile]]
|?HeeftBestandsnaam
|?HeeftReferentie
|?HeeftPriref
|format = table
|mainlabel = -
}}


NB: De rode links zijn het gevolg van het niet overnemen van de "Test-Eigenschappen" naar de productie-omgeving!!

Ophalen van een enkele record

Het is mogelijk om via de API van Adlib een query uit te voeren om gerelateerde informatie van één specifiek record op te vragen. Deze informatie kan vervolgens weergegeven of semantisch worden opgeslagen voor later gebruik.

Opvragen priref en bestandsnaam via de 'reference_number'

Link: http://servicetin.adlibhosting.com/te4/wwwopac.ashx?database=getPhotos&limit=10&startfrom=1&output=xml&search=reference_number='Repro-992000222-1'&xmltype=grouped

De bovenstaande link werkt niet meer (geeft een foutmelding), dit is de aangepaste syntax: Link (updated): http://servicetin.adlibhosting.com/te4/wwwopac.ashx?database=photo&limit=10&startfrom=1&output=xml&search=reference_number=%27Repro-992000222-1%27&xmltype=grouped


Voorbeeld resultaat:

<adlibXML>
 <recordList>
  <record priref="738" created="2015-01-21T02:28:59" modification="2015-01-21T02:29:30" selected="false">
   <image_reference>992000222.jpg</image_reference>
   <priref>738</priref>
   <reference_number>Repro-992000222-1</reference_number>
  </record>
 </recordList>
 <diagnostic>
  <hits>1</hits>
  <xmltype>Grouped</xmltype>
  <first_item>1</first_item>
  <limit>10</limit>
  <dbname>photo</dbname>
  <dsname/>
  <cgistring>
  <param name="database">getPhotos</param>
  </cgistring>
  <xml_creation_time unit="mS" culture="en-US">0</xml_creation_time>
  <response_time unit="mS" culture="en-US">30</response_time>
 </diagnostic>
</adlibXML>

Overigens werkt de vergelijkbare query via de api van de theatercollectie ook niet goed: http://theatercollectie.uva.nl/webapi/wwwopac.ashx?database=getPhotos&limit=10&startfrom=1&output=xml&search=reference_number='Repro-992000222-1'&xmltype=grouped

Importeren informatie uit record via het reference_number

Geïmporteerde gegevens:

  • Referentie: Repro-992000222-1
  • Afbeelding: Fout: er is geen lokale variabele “image” ingesteld.
  • Priref: Fout: er is geen lokale variabele “priref” ingesteld.

Weergave van afbeelding (verkleind):

Fout in widget Adlib_afbeelding_2: Unable to load template 'wiki:Adlib_afbeelding_2'

Via de priref

Deze link werkt niet: http://servicetin.adlibhosting.com/te4/wwwopac.ashx?database=getPhotos&limit=10&startfrom=1&output=xml&search=priref='738'&xmltype=grouped 738


Synchronisatie van informatie

Wanneer informatie in Adlib wijzigt is van belang dat de informatie in de TE deze wijzigingen volgt.

Een beproefde manier om de (semantische) informatie in MediaWiki te updaten is via het script rebuildData.php. Zie hiervoor de documentatie. Het is niet noodzakelijk om alle informatie te updaten (dit is een proces van vele uren), maar het is ook mogelijk een beperkt aantal pagina's (de importpagina's) te updaten.

Deze methode vergt een "cron-job" of een actie van een systeembeheerder.

Een alternatieve manier is het gebruik van het 'refreshen' of 'purgen' van een pagina.

Voorbeeld 1 (werkt niet - error; post noodzakelijk...):

Voorbeeld 2 (werkt, maar vraagt om bevestiging):

Zie ook deze SMW-documentatie.

Nog verder uit te zoeken!

Ontologie voor externe afbeeldingen

Semantische objecten “(Externe) Afbeeldingen” (the X-files...) met eigenschappen:

Eigenschap Veld in Adlib Opmerkingen
Adlib_ref Adlib Objectnummer / Adlib Repronummer Herleidbaar?
Adlib_image Image_reference Bestandsnaam
Priref Adlib Priref foto/...
Datering Datering Ontstaansdatum
Datum verwerving Datum verwerving -
(Afgebeelde)Persoon Afgebeelde Persoon -
(Afgebeelde)Productie Gekoppeld Object en/of Productie Titel -
(Afgebeelde)Locatie Gekoppeld Object (?? kan ik niet uit de afbeelding lezen…??)

Categorie(en)

  • Hoofdcategorie: (Externe) Afbeelding, met subcategorieën:
    • Interieurfoto
    • Afbeelding van Theater
    • Afbeelding van voorstelling
    • Portret

Conclusies

Het is hiermee aangetoond dat het principe van bovenbeschreven scenario uitvoerbaar is. Voor toepassing in de praktijk, is er nog wel een aantal openstaande vragen:

  1. Snelheid van de Adlib-API: de huidig gemeten query-duur is meer dan 3 minuten (!), gebaseerd op enkele metingen. Hoe kan een snellere response worden verkregen?
  2. Schaalbaarheid op de TE: hoeveel records kunnen (per 'batch'?) worden binnengehaald (nu getest tot 50k)
  3. Synchronisatie en caching van gegevens (beschreven in documentatie, maar niet getest)
    1. Op basis van cron-job zoals ook beschreven in de documentatie
    2. Alternatieve benadering via de API:Purge

Verder onderzoek

  • Bovenstaande open vragen
  • Is importeren via de query-API van Adlib de meest effectieve / efficiënte benadering? Alternatieven kunnen zijn:
    • Dumpbestand (XML-dump of JSON)
    • MySQL tabel met gegevensdump
  • Wat is de meest efficiënte manier van verwerking van gegevens op de TE:
    • Heeft het nut om alle gegevens (met zoveel mogelijk attributen) compleet te importeren?
    • Er is een alternatief denkbaar waarbij in een specifieke naamruimte (bijvoorbeeld xfile:bestandsnaam) pagina's voor daadwerkelijk in gebruik zijnde bestanen worden aangemaakt (bijv. via BulkCreate pages). Pas als een pagina is aangemaakt worden ook de bijbehorende gegevens geïmporteerd op de bovensbescreven methode.