Elisa Beshero-Bondar PRO
Professor of Digital Humanities and Chair of the Digital Media, Arts, and Technology Program at Penn State Erie, The Behrend College.
Elisa Beshero-Bondar
Penn State Erie, The Behrend College | TEI Technical Council
DH 2025 in Lisbon
Link to these slides:
source: Andrew Owen, Bulk Updating Documents with XSLT
<xml>
<title>A Big Ball of Text with Special Whatsits Inside</title>
<blob>
<heading>Blob the Second</heading>
<ab>Lorem ipsum odor amet, consectetuer adipiscing elit. Ante lobortis ligula accumsan
conubia; consectetur sem tincidunt.<special whatsIt="magicEgg"/> Rutrum nam neque
praesent tempor adipiscing volutpat. Habitant feugiat mi nullam proin natoque integer
cras vitae integer.<special whatsIt="boss"/> Ipsum sit hac enim; aenean inceptos ac
facilisis habitasse cras! Gravida porttitor fames per ante vestibulum sociosqu.<special
whatsIt="dragon"/> Platea maecenas at phasellus orci congue ipsum. Sagittis ac
sagittis cursus; elementum mattis sagittis. Mi nisi vulputate hendrerit ultricies
dictumst facilisis natoque. Tincidunt vitae natoque, conubia viverra aenean
gravida.</ab>
</blob>
<blob>
<heading>Blob the Third</heading>
<ab>Lorem ipsum odor amet, consectetuer adipiscing elit. Ante lobortis ligula accumsan
conubia; consectetur sem tincidunt.<special whatsIt="jabberwocky"/> Rutrum nam neque
praesent tempor adipiscing volutpat. Habitant feugiat mi nullam proin natoque integer
cras vitae integer.<special whatsIt="shield"/> Ipsum sit hac enim; aenean inceptos ac
facilisis habitasse cras! Gravida porttitor fames per ante vestibulum sociosqu.<special
whatsIt="invisibilityCloak"/> Platea maecenas at phasellus orci congue ipsum.
Sagittis ac sagittis cursus; elementum mattis sagittis. Mi nisi vulputate hendrerit
ultricies dictumst facilisis natoque. Tincidunt vitae natoque, conubia viverra aenean
gravida.</ab>
</blob>
</xml>
<xsl:template match="/">
<html>
<head>
<title>List from <xsl:apply-templates select="descendant::title"/></title>
<!-- Link line for CSS would go here... -->
</head>
<body>
<h1>Hello DIGIT 110!</h1>
<ol>
<xsl:apply-templates select="descendant::blob"/>
</ol>
</body>
</html>
</xsl:template>
<xsl:template match="blob">
<li>
<xsl:apply-templates select="heading"/>
<ul>
<xsl:apply-templates select="descendant::special"/>
</ul>
</li>
</xsl:template>
<xsl:template match="special">
<li>
<xsl:apply-templates select="@whatsIt"/>
</li>
</xsl:template>
John Hughes movie scripts project (Digit Text Analysis): XSLT to SVG
<xsl:variable name="nf:graph-model" as="map(*)*">
<xsl:map>
<xsl:map-entry key="'document'">
<xsl:map>
<xsl:map-entry key="'label'">Document</xsl:map-entry>
<xsl:map-entry key="'xpathPattern'">document()</xsl:map-entry>
<xsl:map-entry key="'cypherVar'">doc</xsl:map-entry>
<xsl:map-entry key="'jsonVar'">value</xsl:map-entry>
<!-- ebb: Literally 'value' is the value of the document imported on load into neo4j. -->
<xsl:map-entry key="'primaryKey'">title</xsl:map-entry>
<xsl:map-entry key="'jsonKeyForPK'">DOCUMENT_TITLE</xsl:map-entry>
<xsl:map-entry key="'properties'">
<xsl:map>
<xsl:map-entry key="'jsonDateTime'">THIS_JSON_DATETIME</xsl:map-entry>
<xsl:map-entry key="'teiSourceDate'">TEI_SOURCE_OUTPUT_DATE</xsl:map-entry>
<xsl:map-entry key="'teiSourceVersion'">TEI_SOURCE_VERSION_NUMBER</xsl:map-entry>
<xsl:map-entry key="'supportInst'">SUPPORTING_INSTITUTION</xsl:map-entry>
<xsl:map-entry key="'byline'">PREPARED_BY</xsl:map-entry>
</xsl:map>
</xsl:map-entry>
<xsl:map-entry key="'children'">
<xsl:sequence select="
array {
map {
'jsonChildrenKey': 'CONTAINS_PARTS',
'childEntityType': 'part',
'relationship': 'HAS_PART',
'isSequence': true()
}
}"/>
</xsl:map-entry>
</xsl:map>
</xsl:map-entry>
<xsl:map>
<xsl:map-entry key="'elements_mentioned'">
<xsl:map>
<xsl:map-entry key="'isListComprehension'" select="true()"/>
<xsl:map-entry key="'sourceArrayPath'" select="'TEI_ENCODING_DISCUSSED.ELEMENTS_MENTIONED'"/>
<xsl:map-entry key="'sourcePropertyKey'" select="'ELEMENT_NAME'"/>
<!-- EBB: Should we change this to match the name we give in an elementSpec? -->
</xsl:map>
</xsl:map-entry>
<xsl:map-entry key="'attributes_mentioned'">
<xsl:map>
<xsl:map-entry key="'isListComprehension'" select="true()"/>
<xsl:map-entry key="'sourceArrayPath'" select="'TEI_ENCODING_DISCUSSED.ATTRIBUTES_MENTIONED'"/>
<xsl:map-entry key="'sourcePropertyKey'" select="'ATTRIBUTE_NAME'"/>
<!-- EBB: Should we change this to match the name we give in a classSpec / attribute definition? -->
</xsl:map>
</xsl:map-entry>
<xsl:map-entry key="'speclist_links'">
<!-- ebb: The <specList> can be children of <p>, or descendants of <p> (within a list[@type='gloss']/item)
The <specDesc> children have a @key that points to the ID of a spec, like so:
<specList>
<specDesc key="correction" atts="status method"/>
</specList>
-->
<xsl:map>
<xsl:map-entry key="'isListComprehension'" select="true()"/>
<xsl:map-entry key="'sourceArrayPath'"
select="'TEI_ENCODING_DISCUSSED.CONTAINS_SPECLISTS.SPECLIST'"/>
<xsl:map-entry key="'sourcePropertyKey'" select="'ID'"/>
</xsl:map>
</xsl:map-entry>
David Berry, "Against infrasomatization
Towards a critical theory of algorithms" Data Politics, Worlds, Subjects, Rights (2019)
“Infrasomatizations are vast infrastructural configurations that create networks of cognitive agents to commodify human capacity for reason and thought.“.””h”
XSLT: declarative writing and remediation process, beyond just reaching into an LLM for normalized answers.
Our templating work can be the means of declaring precise intentions and structures.
By Elisa Beshero-Bondar
A presentation about the significance of XSLT and the importance of teaching it in the time of AI.
Professor of Digital Humanities and Chair of the Digital Media, Arts, and Technology Program at Penn State Erie, The Behrend College.