Action Code Full Preingester

Assigned
PKO+JRG

Prev assigned

Tasks adressed
["Collection"]

Time estimated
9 md

Time used
md

Priority
1

Status
In progress

Iteration
19

Notes

(Test with actual objects, ingesting a few of the results into test-Fedora by Admin application) Here, the object templates written in an earlier action will be used. Any TODO's in those templates should be finished.

First step

In DDAPreingester.java, make a method that generates FoxML objects for towns. This will be done in two passes.

The first pass gathers the stuff that will (in the second pass) be inserted in the town-templates at <!-- INSERT_HASPAPER_RELATIONS_HERE -->. The pass uses an array (or HashMap) for each volume, let's call it townRelations, to store for each town(number) the string (containing relations) to be inserted in the corresponding towns template. (Remember here that for a given town, it can exist in several volumes, and those towns will then be separate here.) This pass will consist of a loop over volumes containing a loop over the paper xmls of the volume. From each paper xml will be extracted (via xpath code like in last iteration) the "number" of the paper, and that will be used for constructing the pid of that paper, which in turn will be used to construct a string <doms:hasPaper rdf:resource="info:fedora/INSERT_HASPAPER_PID_HERE"/> This string is appended to the relations-string (in townRelations) for the town (and volume) of the current paper xml. In this way, the first pass will have collected the hasPaper-relations for each town for each volume.

The second pass will generate the FoxML objects for towns. Looping over all volumes and all towns in townRelations we will make a copy of the town template and insert the hasPaper-relations from townRelations for the given volume and town at <!-- INSERT_HASPAPER_RELATIONS_HERE --> in the template. For the PID that needs to be inserted, we will use the town number and volume. For title, we will make a look up in a table constructed from data from the BIND_1.xml,...,BIND_3.xml files - this look up will be done calling methods on an object of class DDATownList, providing the title (name of the town). The PID of the firstpage-relation will be constructed from volume number and a pagenumber from DDATownList as well.

Second step

* UNDER CONSTRUCTION *

In DDAPreingester.java, make a method that generates FoxML objects for regions. This will be done in three passes.

The first pass builds a table that maps each town to the region+volume it belongs to. The following proposes a way to build this. (Could there be a better way?) Given is a table (in an object of class DDARegionPageList) that maps each volume number and region name to the page number this region appears on in the given region. Using DDATownList we loop through all volumes and towns. For each town number, we find (using DDATownList) the page number of that town. Then, using the table mapping volume+regionname to page numbers, we will find two region-pages that this towns page lies in between. That should provide the volume+region this town belongs to.

The second pass gathers the stuff that will (in the third pass) be inserted in the region-templates at <!-- INSERT_HASTOWN_RELATIONS_HERE -->. This pass constructs an array of strings, one entry for each region(+volume), each entry being a string containing the hasTown-relations that should be inserted in the region-template at <!-- INSERT_HASTOWN_RELATIONS_HERE -->. For constructing a hasTown relation, we need (for the town PID) the numbers of volume and town. Using DDATownList we loop through all volumes and towns. For each town number, we find (using DDATownList) the number of that town. Then that newly constructed hasTown-relation will be inserted in the string for the relevant region. And how do we find out which region+volume it belongs to? We make a look up in the table constructed in the first pass, thus finding volume+region.

The third pass, finally, creates the actual FoxML files. It loops over volumes and regions using DDARegionPageList, inserting needed values in a copy of the region-template. For PID, we get the region name and volume from DDARegionPageList. That region name is also used to insert as title. The hasTown-relations to be inserted will be taken from the table from the second pass. For the firstpage relation, the pid is simply build using the page number from DDARegionPageList.

Third step

* UNDER CONSTRUCTION *

BR

BR

Checklist For Working On An Action

The Life Cycle of an Action:

Please make sure that you address the below issues, when working on an action: