Create a Unique Value for an xml:id Attribute

Introduction

LEMDO uses @xml:id attributes across the project to give unique identifiers to various entities: people, productions, sources, projects, organizations, characters, divisions in documents, paragraphs in documents, and anchors in documents. We have thousands of @xml:id attributes in the LEMDO project, and the value (ID) of each one of them must be unique across the entire project. Duplicate IDs will break the build.

Principles

No matter the type of file, some principles are true for all xml:ids that you create:
All xml:ids must be unique through the entire LEMDO project.
The xml:id for a file must match the filename (e.g., the file named emdH5_FM.xml has an @xml:id value of "emdH5_FM". Note that you do not need to include the file extension in the xml:id.)
Within a file, all xml:ids must begin with the xml:id of the file followed by an underscore (e.g., all xml:ids for paragraphs in the file with xml:id "emdHW_GenIntro" must begin with "emdHW_GenIntro_").

Practice: Give Entities in Your Edition Unique IDs

For edition files and identifiers within edition files (paragraphs, acts, scenes, speeches, etc.), we meet the need for uniqueness by insisting that every @xml:id value begin with emd followed the abbreviation of the play. For example, every xml:id created for the edition of Famous Victories begins with emdFV. This ensures that each file is unique to the edition.

Practice: Give Entities in Your Anthology Unique IDs

For anthology pages, we meet the need for uniqueness by insisting that every @xml:id value begins with the abbreviation for the anthology. For example, the About page for QME has the @xml:id value of "qme_about", which is also the name of the file (qme_about.xml). The About page for DRE has the @xml:id value of "dre_about". (Note that when we build your final anthology, we remove the qme_ and dre_ portion of the file names to keep your final, public-facing URLs lightweight.)

Practice: Create Unique IDs for Entities in Sitewide Databases

This section pertains mainly to LEMDO Team members at UVic: when you are creating an @xml:id value for an entity in one of the sitewide database files (PERS1, PROS1, GLOSS1, HAND1, BIBL1, PROD1, ORGS1, or TAXO1), you must check the complete list of LEMDO @xml:id values to ensure that you are creating a new value. These ids are generally four uppercase letters followed by a number (JENS1, SHAK1, ADAM1, LEMD3, and so on).
You can view all the @xml:id values in the project (except for the anchor, speech, and paragraph IDs) from the LEMDO-dev site. Note that you must be looking at the most recent build of the site to see the most recently added xml:ids. To this end, we recommend that you refresh the LEMDO-dev site regularly. To view a .txt list of all xml:ids used across the LEMDO project:
Click on the Resources button on the top navigation bar of the LEMDO-dev website.
Select All xml:ids (.txt version).
Search for the ID that you wish to assign using Ctrl+F (Cmd+F on Mac). If it is already taken, assign the next available xml:id. For example, if you want to create an ID beginning with ADAM, search the page for the string ADAM. If your search shows that ADAM1, ADAM2, and ADAM3 have been used, then the next available ID is ADAM4.
Note that this is a lightweight page that loads quickly but does not give any details about the entity that the xml:id is used for. For this reason, this page is useful mainly for determining whether or not an ID has been used already.

Practice: Create Unique IDs for Entities in Documentation

All xml:ids in documentation must begin with "learn" followed by an underscore. The value after that should be descriptive. For more information on creating an xml:id for a documentation page, see Create and Name Documentation Files.
To ensure that the xml:id is unique, check list of all xml:ids on the LEMDO-dev site.

Practice: Find Duplicate IDs in a File

If you do get a validation error related to duplicate IDs in your file, it can be a time consuming and difficult task to find the duplicate xml:ids. You can use XPath on your invalid file to find the duplicate xml:ids. To do so:
Right click on your file in Oxygen’s project pane.
From the drop-down list, select XPath in Files…
In the XPath pane now open on the right side of your Oxygen window, paste the following XPath to find the first instance of a set of duplicate IDs: //*[@xml:id = following::*/@xml:id]/@xml:id
Click the red play button at the top of the XPath pane to run the XPath in the file. This will navigate to and highlight the first instance of the duplicate IDs.
Copy the value of the @xml:id attribute.
Use Ctrl+F (Cmd+F on Mac) to open your find/replace window in Oxygen.
In the Find box, paste the duplicate xml:id that you had copied.
Click the Find All button.
Update the xml:ids so that they all have unique values.
Make sure that you update any links to the updated ID.

Reference Table of xml:id Formats

Entity Type xml:id Format Example(s)
File in a LEMDO edition "emdABBR_identifier" "emdMucd_copies"
Section of a critical paratext, anthology about page, or documentation page ( <div> ) "filename_identifier" "emdMucd_copies_intro"; "dre_citing_peerReview"; "learn_xmlids_table"
Paragraph in a critical paratext, anthology about page, or documentation page ( <p> ) "filename_p#" "emdAHDM_GenIntro_p1"; "dre_history_p1"; "learn_xmlids_p1"
Act in a modernized text "emdABBR_M_a#" "emdH5_FM_a1"
Scene in a modernized text with acts and scenes "emdABBR_M_a#_s#" "emdH5_FM_a1_s1"
Scene in a modernized text without acts "emdABBR_M_s#" "emdAHDM_M_s1"
Speech in a modernized text with acts and scenes "emdABBR_M_a#_s#_sp#" "emdH5_FM_a1_s1_sp1"
Speech in a modernized text without acts "emdABBR_M_s#_sp#" "emdAHDM_M_s1_sp1"
Stage direction in a modernized text with acts and scenes "emdABBR_M_a#_s#_sd#" "emdH5_FM_a1_s1_sd1"
Stage direction in a modernized text without acts "emdABBR_M_s#_sd#" "emdAHDM_M_s1_sd#"
Speech in a semi-diplomatic transcription "emdABBR_Q1_sp#" "emdAHDM_Q1_sp1"
Stage direction in a semi-diplomatic transcription "emdABBR_Q1_sd#" "emdAHDM_Q1_sd1"
Anthology about page "abbr_identifier" "moms_resources"
Sitewide database entity "AAAA#" "JENS1"
Documentation page "learn_identifier" "learn_xmlids"

Prosopography

Isabella Seales

Isabella Seales is a fourth year undergraduate completing her Bachelor of Arts in English at the University of Victoria. She has a special interest in Renaissance and Metaphysical Literature. She is assisting Dr. Jenstad with the MoEML Mayoral Shows anthology as part of the Undergraduate Student Research Award program.

Janelle Jenstad

Janelle Jenstad is a Professor of English at the University of Victoria, Director of The Map of Early Modern London, and Director of Linked Early Modern Drama Online. With Jennifer Roberts-Smith and Mark Beatrice Kaethler, she co-edited Shakespeare’s Language in Digital Media: Old Words, New Tools (Routledge). She has edited John Stow’s A Survey of London (1598 text) for MoEML and is currently editing The Merchant of Venice (with Stephen Wittek) and Heywood’s 2 If You Know Not Me You Know Nobody for DRE. Her articles have appeared in Digital Humanities Quarterly, Elizabethan Theatre, Early Modern Literary Studies, Shakespeare Bulletin, Renaissance and Reformation, and The Journal of Medieval and Early Modern Studies. She contributed chapters to Approaches to Teaching Othello (MLA); Teaching Early Modern Literature from the Archives (MLA); Institutional Culture in Early Modern England (Brill); Shakespeare, Language, and the Stage (Arden); Performing Maternity in Early Modern England (Ashgate); New Directions in the Geohumanities (Routledge); Early Modern Studies and the Digital Turn (Iter); Placing Names: Enriching and Integrating Gazetteers (Indiana); Making Things and Drawing Boundaries (Minnesota); Rethinking Shakespeare Source Study: Audiences, Authors, and Digital Technologies (Routledge); and Civic Performance: Pageantry and Entertainments in Early Modern London (Routledge). For more details, see janellejenstad.com.

Joey Takeda

Joey Takeda is LEMDO’s Consulting Programmer and Designer, a role he assumed in 2020 after three years as the Lead Developer on LEMDO.

Mahayla Galliford

Project manager, 2025-present; research assistant, 2021-present. Mahayla Galliford (she/her) graduated with a BA (Hons with distinction) from the University of Victoria in 2024. Mahayla’s undergraduate research explored early modern stage directions and civic water pageantry. Mahayla continues her studies through UVic’s English MA program and her SSHRC-funded thesis project focuses on editing and encoding girls’ manuscripts, specifically Lady Rachel Fane’s dramatic entertainments, in collaboration with LEMDO.

Martin Holmes

Martin Holmes has worked as a developer in the UVic’s Humanities Computing and Media Centre for over two decades, and has been involved with dozens of Digital Humanities projects. He has served on the TEI Technical Council and as Managing Editor of the Journal of the TEI. He took over from Joey Takeda as lead developer on LEMDO in 2020. He is a collaborator on the SSHRC Partnership Grant led by Janelle Jenstad.

Navarra Houldin

Training and Documentation Lead 2025–present. LEMDO project manager 2022–2025. Textual remediator 2021–present. Navarra Houldin (they/them) completed their BA with a major in history and minor in Spanish at the University of Victoria in 2022. Their primary research was on gender and sexuality in early modern Europe and Latin America. They are continuing their education through an MA program in Gender and Social Justice Studies at the University of Alberta where they will specialize in Digital Humanities.

Nicole Vatcher

Technical Documentation Writer, 2020–2022. Nicole Vatcher completed her BA (Hons.) in English at the University of Victoria in 2021. Her primary research focus was women’s writing in the modernist period.

Si Micari-Lawless

Si Micari-Lawless is a research assistant with LEMDO and MoEML, and an incoming fourth-year English major at the University of Victoria.

Tracey El Hajj

Junior Programmer 2019–2020. Research Associate 2020–2021. Tracey received her PhD from the Department of English at the University of Victoria in the field of Science and Technology Studies. Her research focuses on the algorhythmics of networked communications. She was a 2019–2020 President’s Fellow in Research-Enriched Teaching at UVic, where she taught an advanced course on Artificial Intelligence and Everyday Life. Tracey was also a member of the Map of Early Modern London team, between 2018 and 2021. Between 2020 and 2021, she was a fellow in residence at the Praxis Studio for Comparative Media Studies, where she investigated the relationships between artificial intelligence, creativity, health, and justice. As of July 2021, Tracey has moved into the alt-ac world for a term position, while also teaching in the English Department at the University of Victoria.

Orgography

LEMDO Team (LEMD1)

The LEMDO Team is based at the University of Victoria and normally comprises the project director, the lead developer, project manager, junior developers(s), remediators, encoders, and remediating editors.

Metadata