I spent most of the week working on the Anglo-Norman Dictionary as we’re planning on launching this next week and there was still much to be done before that. One of the big outstanding tasks was to reorder all of the citations in all senses within all entries so they are listed by their date. This was a pretty complex task as each entry may any number of up to four different types of sense: main senses, subsenses and then main senses and subsenses within locutions. My script needed to be able to extract the dates for each citation within each of these blocks, figure out their date order, rearrange the citations by this order and then overwrite the XML section with the reordered data. Any loss of or mangling of the data would be disastrous and with almost 60,000 entries being updated it would not be possible to manually check that everything worked in all circumstances.
Updating the XML proved to be a little tricky as I had been manipulating the data with PHP’s simplexml functionsand it doesn’t include a facility to replace a child node. This meant that I couldn’t tell the script to identify a sense and replace its citations with a new block. In addition, the XML was not structured to include a ‘citations’ element that contained all of the individual citations for an entry but instead just listed each citation as an ‘attestation’ element within the sense, therefore it wasn’t straightforwardly possible to replace the clock of citations with an updated block. Instead I needed to reconstruct the sense XML in its entirety, including both the complete set of citations and all other elements and attributes contained within the sense, such as IDs, categories and labels. With a completely new version of the sense XML stored in memory by the script I then needed to write this to the XML, and for this I needed to use PHP’s DOM manipulation functions because (as mentioned earlier) simplexml has no means of identifying and replacing a child node.
I managed to get a version of my script working and all seemed to be well with the entries I was using for test purposes so I ran the script on the full dataset and replaced the data on the website (ensuring that I kept a record of the pre-reordered data handy in case of any problems). When the editors reviewed the data they noticed that while the reordering had worked successfully for some senses, it had not reordered others. This was a bit strange and I therefore had to return to my script to figure out what had gone wrong. I noticed that only the citations in the first sense / subsense / locution sense / locution subsense had been reordered, with others being skipped. But when I commented out the part of the script that updated the XML all senses were successfully being picked out. This seemed strange to me as I didn’t see why the act of identifying senses should be affected by the writing of data. After some investigation I discovered that with PHP’s simplexml implementation if you iterate through nodes using a ‘foreach’ and then update the item picked out by the loop (so for example in ‘foreach($sense as $s)’ updating $s) then subsequent iterations fail. It would appear that updating $s in this example changes the XML string that’s loaded into memory which then means the loop reckons it’s reached the end of the matching elements and stops. My script had different loops for going through senses / subsenses / locution senses / locution subsenses which is why the first of each type was being updated while others weren’t. After I figured this out I updated my script to use a ‘for’ loop instead of a ‘foreach’ and stored $s within the scope of the loop only and this worked. With the change in place I reran the script on the full dataset and uploaded it to the website and all thankfully appears to have worked.
For the rest of the week I worked through my ‘to do’ list, ticking items off. I updated the ‘Blog’ menu item to point to the existing blog site (this will eventually be migrated across). The ‘Textbase’ menu item now loads a page stating that this feature will be added in 2021. I managed to implement the ‘source texts’ page as it turns out that I’d already developed much of the underpinnings for this page whilst developing other features. As with citation popups, it links into the advanced search and also to the DEAF website. I figured out how to ensure that words with accented characters is citation searches now appear separately in the list from their non-accented versions. E.g. a search for ‘apres*’ now has ‘apres (28)’ separate from ‘après (4)’ and ‘aprés (2229)’. We may need to think about the ordering, though, as accented characters are currently appearing at the end of the list. I also made the words lower case here – they were previously being transformed into upper case. Exact searches (surrounded by quotes) are still accent-sensitive. This is required so that the link through the list of forms to the search results works (otherwise the results display all accented and non-accented forms). I also ensured that word highlighting in snippets in results now works as it should with accented characters and upper case initial letters are now retained too.
I added in an option to return to the list of forms (i.e. the intermediate page) from the search results. In addition to ‘Refine your search’ there is also a ‘Select another form’ button and I ensured that the search results page still appears when there is only one search result for citation and translation searches now. I also figured out why multiple words were sometimes being returned in the citation and translation searches. This was because what looked like spaces between words in the XML were sometimes not regular spaces but non-breaking space characters (\u00a0). As my script split up citations and translations on spaces these were not being picked up as divisions between words. I needed to update my script to deal with these characters and then regenerate all of the citation and translation data again in order to fix this.
I also ensured that when conducting a label search the matching labels in an entry page are now highlighted and the page automatically scrolls down to the first matching label. I also made several tweaks to the XSLT, ensuring that where there are no dates for citations the text ‘TBD’ appears instead and ensuring a number of tags that were not getting properly transformed were handled.
Also this week I made some final changes to the interactive map of Burns Suppers, including tweaking the site icon so it looks a bit nicer and adding in a ‘read more’ button to the intro text and fixing the scrolling issue on small screens, plus updating the text to show 17 filters. I fixed the issue with the attendance filter and have also updated the layout of the filters so they look better on both monitors and mobile devices.
My other main task of the week was to restructure the Mapping Metaphor website based on suggestions for REF from Wendy and Carole. This required a lot of work as the visualisations needed to be moved to different URLs and the Old English map, which was previously a separate site in a subdirectory, needed to be amalgamated with the main site.
I removed the top-level tabs that linked between MM, MMOE and MetaphorIC and also the ‘quick search’ box. The ‘metaphor of the day’ page now displays both a main and an OE connection and the ‘Metaphor Map of English’ / ‘Metaphor Map of Old English’ text in the header has been removed. I reworked the navigation bar in order to allow a sub-navigation bar to appear. It is now positioned within the header and is centre-aligned. ‘Home’ now features introductory text rather than the visualisation. ‘About the project’ now has the new secondary menu rather than the old left-panel menu. This is because the secondary menu on the map pages couldn’t have links in the left-hand panel as it’s already used for something else. It’s better to have the sub-menu displaying consistently across different sections of the site. I updated the text within several ‘About’ pages and ‘How to Use’, which also now has the new secondary menu. The main metaphor map is now in the ‘Metaphor Map of English’ menu item. This has sub-menu items for ‘search’ and ‘browse’. The OE metaphor map is now in the ‘Metaphor Map of Old English’ menu item. It also has sub-menu items for ‘search’ and ‘browse’. The OE pages retain their purple colour to make a clear distinction between the OE map and the main one. MetaphorIC retains the top-level navigation bar but now only features one link back to the main MM site. This is right-aligned to avoid getting in the way of the ‘Home’ icon that appears in the top left of sub-pages. The new site replaced the old one on Friday and I also ensured that all of the old URLs continue to work (e.g. the ‘cite this’ will continue to work.