<?xml version="1.0" encoding="utf-8"?><article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0-subset Balisage-1.5">
	<title>A Centralised Index of the Sisterhood of Markup Events</title>
	<info>
    <confgroup>
      <conftitle>Balisage: The Markup Conference 2026</conftitle>
      <confdates>August 3-7, 2026</confdates>
   </confgroup>
		<abstract>
			<para>When I have an idea for a paper, I like to check if someone's already presented it or something similar. If it's not a new topic, then maybe I can build on what's gone before — but I need to know what that was.  There are also occasions when the research is not driven by a prospective project but simply curiosity or to support learning.  Each time I go through this process, I think to myself, <quote>Wouldn't it be nice if there was a centralised index of all the markup papers?</quote>  This paper is a case study on the creation of (somewhat) such an index, in particular its scope, processes, challenges and solutions.</para>
		</abstract>
		<author>
			<personname>
<firstname>Sheila</firstname> 
<othername>E.</othername> 
<surname>Thomson</surname></personname>
			<personblurb>
				<para>Sheila Thomson is a software developer who has been working with XML technologies since the early 2000s, in domains such as online news and journal publishing, banking and manufacturing, for a variety of organisations, but highlights include the BBC, Nature, LexisNexis, Sopra Steria and, most recently, Saxonica. She has a BA(Hons) in Information Studies and Librarianship and an MSc in Computer Science and is honoured to have been a member of a team that won a Webby Award. She is based in London and, when not developing, sings in a local community choir, chauffeurs Basset Hounds for a charity and takes deep dives down family history-related rabbit holes (such as shoemakers in 18th century Glasgow).</para>
			</personblurb>	
		</author>
<legalnotice><para>Copyright © Sheila Ellen Thomson 2026</para></legalnotice>
		<keywordset role="author">
			<keyword>Aggregation</keyword>
			<keyword>Standardisation</keyword>
			<keyword>Standardization</keyword>
			<keyword>Indexing</keyword>
			<keyword>Markup Conferences</keyword>
			<keyword>XML</keyword>
			<keyword>HTML</keyword>
			<keyword>XProc</keyword>
			<keyword>XSLT</keyword>
		</keywordset>
	</info>
	<section>
		<title>Introduction</title>
		<para>When I have an idea for a paper, I like to check if someone has already presented it or something similar. If it's not a new topic, then maybe I can build on what's gone before — but I need to know what that was.  There are also occasions when the research is not driven by a prospective project but simply curiosity or to support learning.</para>		
		<para>Fortunately, in the domain of XML and, more broadly, markup, a wealth of past papers are published online, by the organisers of conferences such as this and sister events. The search and indexing options provided by each event vary.  Balisage is exceptional for maintaining a Master Bibliography, listing all the papers from all its meetings, plus author and topic indexes for the same complete corpus.  For most other events, search is scoped per meeting so a literature search involves repeating the same query many times, not just per conference website but (in most cases) per each issue of the proceedings.</para>
		<para>General purpose search engines, such as Google, are useful when the scope is broad.  Relevant matches from Balisage are often included in the first page of results, but sadly this is less common for results from other events, leading to low confidence in the comprehensiveness of such searches. A potential workaround on Google is to use <code>site:</code> to limit the scope of the search to a specific website, but this still requires repeating the query per site.</para>
		<para>Each time I go through this process, I think to myself, <quote>Wouldn't it be nice if there was a centralised index of all the markup papers?</quote>  This paper is a case study on the creation of (somewhat) such an index, in particular its scope, processes, challenges and solutions.</para>
	</section>
	<section>
		<title>What is the Sisterhood?</title>
		<para>On the <link linkend="Balisage" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">home page</link> of Balisage, there is a section titled <quote>Sister Conferences &amp; Related Events</quote>. (<emphasis role="ital">See</emphasis> <xref linkend="fig-1"/>.)</para>
		<figure xml:id="fig-1">
			<title>Balisage's list of sister conferences</title>
			<mediaobject>
				<imageobject>
					<imagedata format="png" fileref="../../../vol31/graphics/Thomson01/Thomson01-001.png"/>
				</imageobject>
			</mediaobject>
			<caption>
				<para><emphasis role="ital">A partial screenshot of the Balisage home page, showing the section listing sister conferences and related events.</emphasis></para>
			</caption>
		</figure>
		<para>The websites for the events listed in <xref linkend="fig-1"/> each feature a similar list. <xref linkend="table-1"/> collects together those lists and their headings.</para>
		<table xml:id="table-1">
			<caption>
				<para><emphasis role="ital">How some markup events self-describe their relationship to each other.</emphasis></para>
			</caption>
			<thead>
				<tr>
					<th>Event</th>
					<th>List Heading</th>
					<th>Events in list</th>
				</tr>
			</thead>
			<tbody>
				<tr>
					<td>XML Prague</td>
					<td>Sister events</td>
					<td>Markup UK; Balisage; XML Summer School; Declarative Amsterdam; Markup Forum; DocEng</td>
				</tr>
				<tr>
					<td>Markup UK</td>
					<td>Sister events</td>
					<td>XML Prague; Balisage; Declarative Amsterdam; XML Summer School</td>
				</tr>
				<tr>
					<td>Balisage</td>
					<td>Sister Conferences &amp; Related Events</td>
					<td>Declarative Amsterdam; XML Prague; Markup UK; XML Summer School</td>
				</tr>
				<tr>
					<td>Declarative Amsterdam</td>
					<td>Sister conferences</td>
					<td>Balisage; Markup UK; XML Prague; XML Summer School</td>
				</tr>
				<tr>
					<td>XML Summer School</td>
					<td>Sister Conferences</td>
					<td>Markup UK; XML Prague; Declarative Amsterdam; Balisage</td>
				</tr>
				<tr>
					<td>Markup Forum</td>
					<td>Partner Events</td>
					<td>XML Prague; xugs</td>
				</tr>
				<tr>
					<td>xugs</td>
					<td><emphasis role="ital">no list</emphasis></td>
					<td><emphasis role="ital">no list</emphasis></td>
				</tr>
				<tr>
					<td>DocEng</td>
					<td>Sister event</td>
					<td>XML Prague</td>
				</tr>
			</tbody>
		</table>
		<para>The data was collected by: <orderedlist>
				<listitem>
					<para>Making a list of all the <quote>Sister events</quote> listed by <link linkend="XMLPrague" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">XML Prague</link>.</para>					
				</listitem>
				<listitem>
					<para>Visiting the website for each of the listed events and repeating step 1 for that event.</para>
				</listitem>
				<listitem>
					<para>Repeating steps 1 and 2 until there were no new sister events to add to the list.</para>
				</listitem>
		</orderedlist></para>
		<para><xref linkend="fig-2"/> is a graphical representation of the network implied by that data.</para>
		<figure xml:id="fig-2">
			<title>A network graph of related markup events</title>
			<mediaobject>
				<imageobject>
					<imagedata format="svg" fileref="../../../vol31/graphics/Thomson01/Thomson01-002.svg"/>
				</imageobject>
			</mediaobject>
			<caption>
				<para><emphasis role="ital">Showing how the events describe their relationships to each other.</emphasis></para>
			</caption>
		</figure>
		
		<para>Five events all bi-directionally self-describe as being related to each other (clockwise):<itemizedlist>
				<listitem>
					<para><link linkend="MarkupUK" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">Markup UK</link></para>					
				</listitem>
				<listitem>
					<para><link linkend="XMLPrague" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">XML Prague</link></para>
				</listitem>
				<listitem>
					<para><link linkend="DecAmSis" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">Declarative Amsterdam</link></para>
				</listitem>
				<listitem>
					<para><link linkend="Balisage" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">Balisage</link></para>
				</listitem>
				<listitem>
					<para><link linkend="XMLSumS" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">XML Summer School</link></para>
				</listitem>
		</itemizedlist></para>
		<para>They are all either primarily about markup technologies or heavily feature them, and the label these events use for their relationship is <quote>sister event</quote> or <quote>sister conference</quote>, so it seems obvious to collectively describe them as a <quote>sisterhood of markup events</quote>.</para>
		<para>Three events (<link linkend="DocEng" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">DocEng</link>, <link linkend="MarkupF" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">Markup Forum</link> and <link linkend="Xugs" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">xugs</link>) are in the network but excluded from the sisterhood because they don't share a bi-directional relationship with all the events in the sisterhood.</para>
		<para>In the past, other events would have appeared in this graph and potentially also the sisterhood, but they are no longer listed because they've ceased meeting, for example: <link linkend="XMLLon" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">XML London</link>, <link linkend="XMLAm" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">XML Amsterdam</link>. Collecting the data to extend the graph back in time is a more challenging task and was therefore deemed out-of-scope for the initial iteration of this project.  The same currently applies for conferences that feature papers about markup or markup-related technologies but aren't linked to from any of the events in the network above.  The purpose of this exercise was to identify a reasonable starting point for scoping data sources for the project.</para>		
	</section>
	<section>
		<title>Scoping the first iteration</title>
		<para>According to Wikipedia, an index is:<blockquote>
				<para>A list of words or phrases (<quote>headings</quote>) and associated pointers (<quote>locators</quote>) to where useful material relating to that heading can be found in a document or collection of documents.</para>
				<attribution><link linkend="wikipIndex" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">Wikipedia article on <emphasis role="ital">Index (publishing)</emphasis></link></attribution>
		</blockquote></para>
		<para>For the initial iteration of the project, scope was limited to a title index, which is a type of heading index; more simply put, it's a list of titles in alphabetical order.  Each entry consists of:<itemizedlist>
				<listitem>
					<para>the title of a paper presented at an in-scope event</para>					
				</listitem>
				<listitem>
					<para>a list of the authors of that paper</para>
				</listitem>
				<listitem>
					<para>the name and year of the event at which the paper was presented</para>
				</listitem>
				<listitem>
					<para>a short excerpt of the abstract</para>
				</listitem>
		</itemizedlist></para>
		<para>Although XML Summer School is a member of the sisterhood, it is not an event that publishes papers, so it is currently deemed out-of-scope for this project.</para>
		<para>Due to time constraints, content from Declarative Amsterdam is also absent from the first version of the index and also content from XML Prague prior to 2016.</para>
		<section>
			<title>Copyright</title>
			<para>Indexing can be a contentious topic when it comes to copyright.  It's impossible to create an index without accessing the content to be indexed, but under copyright law in many countries, it is illegal to make a copy of a substantial part of that content without permission of the copyright owner.  It is commonly considered fair use to reproduce basic bibliographic metadata (title, author, publisher, publication date, etc.) but not abstracts [<xref linkend="SoAcademia"/>, <xref linkend="Swansea"/>, <xref linkend="I4OpenAbstracts"/>, <xref linkend="Kinstellar"/>].</para>
			<para>While the output of this project respects these obligations, this project relies on the goodwill of the organisers of the events indexed, as the methodology followed might be interpreted as meeting only the spirit of the law, rather than its letter.  An objective of the project is to increase the visibility and use of these papers by making them easier to find, and consequently also to raise awareness of the events that publish them; redirecting web traffic back to the event sites is a high priority.</para>
		</section>
	</section>
	<section>
		<title>Methodology</title>
		<para><xref linkend="fig-4"/> provides a very high-level overview of the end-to-end process, from collating the source data to storing the generated HTML index page.  For a key to the symbols in this and subsequent process diagrams, see <xref linkend="app-1"/>.</para>  
		<para>Using <link linkend="XProc31" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">XProc 3.1</link>, the data flows from one step to another, held in memory unless explicitly stored. This means that it's not necessary to store the retrieved source content, nor even the standardised, aggregated intermediary; only the generated HTML index page.</para>
		<figure xml:id="fig-4">
			<title>High-level process overview</title>
			<mediaobject>
				<imageobject>
					<imagedata format="png" fileref="../../../vol31/graphics/Thomson01/Thomson01-003.png"/>
				</imageobject>
			</mediaobject>
			<caption>
				<para><emphasis role="ital">The main stages in the end-to-end process.</emphasis></para>
			</caption>
		</figure>
		<para>However, during development, options were implemented to enable storing the intermediary inputs and outputs, to support:<orderedlist>
				<listitem>
					<para>debugging, and</para>
				</listitem>
				<listitem>
					<para>to avoid spamming the event websites with a multitude of requests each time a tweak was made, for example, to improve whitespace handling.</para>
				</listitem>
		</orderedlist></para>
		<para>Storage option 1 was implemented using <code>&lt;p:store use-when="$debug = true()" … /&gt;</code>.  A common pattern to support debugging during XProc development, controlled by a boolean parameter (<code>$debug</code>).  In this project, the default value of <code>$debug</code> is <code>false()</code>, but that can be overridden at runtime.  When set to <code>true()</code>, whatever input is fed into the <code>p:store</code> step is saved within a <code>debug</code> directory; a temporary storage location that is deleted manually, ad-hoc.</para>
		<para>Storage option 2 is controlled per event, via attributes in the sources XML file that is fed into the pipeline as its initial input (see <xref linkend="app-2"/>).  When <code>/s:sources/s:event/@store</code> is set to <code>true()</code>, the application saves a copy of any retrieved sources on the local filesystem.  If <code>/s:sources/s:event/@retrieve</code> is set to <code>false()</code>, then the application attempts to load sources from the local filesystem.  The default mode is to retrieve without storing.  However, it isn't possible <emphasis role="ital">not to retrieve</emphasis> unless a snapshot of content has previously been saved and is still available.  While convenient, the process doesn't depend on storing retrieved content locally, and this is also deleted manually ad-hoc.</para>
		<para>Another convenience implemented during development is a control to target specific events or sources.  If <code>s:event/@include</code> is set to <code>false()</code>, then the sources from that event aren't retrieved or processed.  Similarly, if <code>s:source/@include</code> is set to <code>false()</code>, then that specific source isn't retrieved or processed, even if the include flag for the event it's associated with is set to <code>true()</code>.  This latter use case is illustrated in the settings for XML Prague in <xref linkend="app-2"/> because the application hasn't yet been updated to handle sources earlier than 2016.</para>
		<section>
			<title>Sub-processes</title>
			<para>The diagrams below aim to provide a summarised view of the main sub-processes involved in creating the title index.</para>
			<section>
				<title>Aggregation</title>
				<para>The input into the Aggregate sub-process (<xref linkend="fig-5"/>) is expected to be a file that conforms to the sources content model (namespace: <code>http://xylarium.org/ns/xml/grammars/salix/sources</code>, schema: <link xlink:href="https://github.com/Xylarium/salix/blob/main/schemas/sources.rnc" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">https://github.com/Xylarium/salix/blob/main/schemas/sources.rnc</link>).  See <xref linkend="app-2"/> for an example of a sources input file.</para>
				<figure xml:id="fig-5">
					<title>Sub-process: Aggregate</title>
					<mediaobject>
						<imageobject>
							<imagedata format="png" fileref="../../../vol31/graphics/Thomson01/Thomson01-004.png"/>
						</imageobject>
					</mediaobject>
					<caption>
						<para><emphasis role="ital">The sub-process that orchestrates collating source data from all events.</emphasis></para>
					</caption>
				</figure>
			</section>
			<section>
				<title>Collation</title>
				<para>In this context, <emphasis role="ital">collate</emphasis> is being used to mean <emphasis role="ital">collect and combine data</emphasis>, and <emphasis role="ital">collation</emphasis> is the act of doing that.</para>
				<para>The sources for each event are collated separately (<xref linkend="fig-6"/>), using the core XProc 3.1 step <code>p:viewport</code> to iterate through each <code>/s:sources/s:event</code>.  This step leaves the <code>/s:sources</code> wrapper unchanged, modifying only the <code>s:event</code> and its contents.</para>
				<para>By the end of this step, it's expected that each source will contain a bibliography of all the sessions documented in the source, conforming to a custom content model (namespace: <code>http://xylarium.org/ns/xml/grammars/salix/bibliography</code>, schema: <link xlink:href="https://github.com/Xylarium/salix/blob/main/schemas/bibliography.rnc" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">https://github.com/Xylarium/salix/blob/main/schemas/bibliography.rnc</link>).</para>
				<para>For Markup UK each source usually documents all the sessions for a multi-day occurence of the conference.  For XML Prague, sources for events after 2015 document all sessions in a single day of the conference: one source per day.  Before 2016, like Markup UK, the sources for XML Prague document all the sessions across all the days of the conference: one source per year. For Balisage and Declarative Amsterdam, a single source documents all the sessions held during all occurrences of the conference: just one source document.</para>
				<para>Some sources already include the abstract, but, if not, once the source has been standardised and converted to a bibliography, <code>p:viewport</code> is again used to loop over each of the entries (<code>b:bibliography/b:entries/b:entry</code>) and attempt to retrieve an abstract for it.  If found, that too needs to be standardised before insertion into the <code>b:entry</code>.</para>
				<figure xml:id="fig-6">
					<title>Sub-process: Collate Event Sources</title>
					<mediaobject>
						<imageobject>
							<imagedata format="png" fileref="../../../vol31/graphics/Thomson01/Thomson01-005.png"/>
						</imageobject>
					</mediaobject>
					<caption>
						<para><emphasis role="ital">The sub-process that orchestrates retrieving and standardising source data per event.</emphasis></para>
					</caption>
				</figure>
				<para><xref linkend="fig-7"/> shows the same basic sub-process that is used for retrieving and standardising the data for an individual source, regardless of whether it is a literal <code>s:source</code> or, if attempting to retrieve an abstract, an <code>b:entry</code>.</para>
				<figure xml:id="fig-7">
					<title>Sub-process: Collate Source</title>
					<mediaobject>
						<imageobject>
							<imagedata format="png" fileref="../../../vol31/graphics/Thomson01/Thomson01-006.png"/>
						</imageobject>
					</mediaobject>
					<caption>
						<para><emphasis role="ital">The sub-process that orchestrates retrieving and standardising each individual source or abstract.</emphasis></para>
					</caption>
				</figure>
			</section>
			<section>
				<title>Retrieval</title>
				<para>The <link linkend="XProc31SL" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">standard XProc 3.1 step</link> for making an http-request (<code>p:http-request</code>) is used to retrieve source data from its remote host (see <xref linkend="fig-8"/>).</para>
				<para>As the response is sometimes HTML5, <code>p:cast-content-type</code> is used to convert it to well-formed XHTML; another standard XProc 3.1 step.</para>
				<figure xml:id="fig-8">
					<title>Sub-process: Retrieve Source</title>
					<mediaobject>
						<imageobject>
							<imagedata format="png" fileref="../../../vol31/graphics/Thomson01/Thomson01-007.png"/>
						</imageobject>
					</mediaobject>
					<caption>
						<para><emphasis role="ital">The sub-process that orchestrates retrieving an individual source or abstract from an event's website.</emphasis></para>
					</caption>
				</figure>
				<para>An error will be thrown if the input doesn't include a URL to submit the request to, exiting the application.  However, if the response to a request is an error, it's caught and logged but shouldn't end the process; the result of this sub-process would be a copy of the input fed into the step.</para>
			</section>
			<section>
				<title>Standardisation</title>
				<para>The most challenging aspect of this project has been transforming the retrieved content into a standardised intermediary structure.</para>
				<para>Although all the sources are some version of HTML, each event has used different structures and semantics to markup their content. Unsurprisingly, because content models evolve over time, these factors also often vary between sources from the same event.</para>
				<para>There is also variation in the scope and purpose of the source documents. The organisers of Balisage maintain an excellent <link linkend="BalMBib" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest"><emphasis role="ital">Master Bibliography</emphasis></link> that includes all the published sessions from Balisage meetings since 2008. The organisers of Markup UK and XML Prague don't maintain a master bibliography, and the sources this project chose to use from these events are primarily intended to serve as schedules, not conduits of bibliographic data.</para> 
				<figure xml:id="fig-9">
					<title>Sub-process: Standardise Source</title>
					<mediaobject>
						<imageobject>
							<imagedata format="png" fileref="../../../vol31/graphics/Thomson01/Thomson01-008.png"/>
						</imageobject>
					</mediaobject>
					<caption>
						<para><emphasis role="ital">The sub-process that orchestrates standardising an individual source or abstract.</emphasis></para>
					</caption>
				</figure>	
				<para>There are several advantages to standardising the content prior to indexing:<itemizedlist>
						<listitem>
							<para>It supports simplicity in the indexing process because the inputs conform to a single content model, so the only logic required is for generating the index.</para>
						</listitem>
						<listitem>
							<para>During development, validating against an expected content model can help to flag up missing or unexpected data and highlight previously unnoticed differences between sources.</para>
						</listitem>
						<listitem>
							<para>Automated validation can be used to detect flaws in the content at the earliest possible point in the process, which can be used to halt the process if the nature of the flaw means it would be a waste of time to continue past that point.</para>
						</listitem>
						<listitem>
							<para>The standardisation logic varies between events but some of it may be relevant to multiple sources within an event. <xref linkend="fig-9"/> simplifies the actual process somewhat, as it is sometimes the case that multiple fixes need to be applied, and rather than bundling them in a single stylesheet (<code>fixes.xsl</code>), the fix for each known problem has its own stylesheet, and they're applied incrementally.  This helps when a fix isn't working as it's possible to compare the results from each step to pin-point exactly where the problem occurs.</para>
						</listitem>
				</itemizedlist></para>
				<para>If the content isn't standardised beforehand, then logic to handle the differences in source structure and semantics would need to be interwoven with the logic to create the index.  This would make the index stylesheet more complex and thus more difficult to read, understand and maintain.  As more indexes are created, it's likely that the standardisation logic would need to be duplicated in each index stylesheet.  Making the indexing stylesheets modular, so that the standardisation logic could be shared across them, might help, but the two concerns would still largely need to be separated to avoid duplication.</para>
				<para>There are surprisingly few classes of <quote>fix</quote> that need to be made.  Most commonly they involve:<itemizedlist>					
						<listitem>
							<para>Enriching the source markup with missing or more detailed semantic markup, for example, by adding class names or additional structural wrappers.</para>
						</listitem>
						<listitem>
							<para>Deleting empty elements.</para>
						</listitem>
						<listitem>
							<para>Tidying up lists of contributors:<itemizedlist>
									<listitem>
										<para>Ensuring the expected delimiters are present.</para>
									</listitem>
									<listitem>
										<para>Clearly separating a contributor's affiliation from their name.</para>
									</listitem>
							</itemizedlist></para>
						</listitem>
						<listitem>
							<para>Correcting structural anomalies; usually a paragraph in the wrong place.</para>
						</listitem>
				</itemizedlist>
				</para>
				<para>An unexpected workaround unique to Markup UK 2021 was the need to un-comment the conference schedule; the page included a third-party javascript widget which may have originally used the comments as a data source.  Happily,, this approach was only used for one year, when the conference met virtually as a consequence of the COVID-19 pandemic.</para>
			</section>
			<section>
				<title>Indexing</title>
				<para>Once the source content has been aggregated and standardised, it is easy to create a title index using a single, simple XSLT stylesheet.</para>
				<figure xml:id="fig-10">
					<title>Sub-process: Index</title>
					<mediaobject>
						<imageobject>
							<imagedata format="png" fileref="../../../vol31/graphics/Thomson01/Thomson01-009.png"/>
						</imageobject>
					</mediaobject>
					<caption>
						<para><emphasis role="ital">The sub-process that generates an index from the result of the aggregation process.</emphasis></para>
					</caption>
				</figure>
				<para>Version 1.0.0 of the title index contains 894 entries, from 3 events (Balisage, Markup UK, XML Prague).  See <xref linkend="fig-3"/> for a screenshot of the first 6 entries.</para>
				<figure xml:id="fig-3">
					<title>Title index</title>
					<mediaobject>
						<imageobject>
							<imagedata format="png" fileref="../../../vol31/graphics/Thomson01/Thomson01-010.png"/>
						</imageobject>
					</mediaobject>
					<caption>
						<para><emphasis role="ital">A screenshot of the first few entries in the first version of the title index.</emphasis></para>
					</caption>
				</figure>			
				<para>The entries are sorted alphabetically.  A potential future improvement is to ignore punctuation during sorting.</para>
				<para>The title of each entry links back to the event website from which its data was sourced; ideally to the paper itself.  The same URL is used for the <code>[more]</code> link at the end of the abstract excerpt.  The event name lozenge links to the current home page of the event.</para>
				<para>The most complicated aspect of this transformation (which still isn't very complicated) is creating the abstract excerpt:<orderedlist>
						<listitem>
							<para>Use <code>fn:substring</code> to get the first 100 characters of the string value of the abstract.</para>
						</listitem>
						<listitem>
							<para>If the result of step 1 doesn't end with a space (<code>fn:ends-with</code>), it may end with a partial word, so use <code>fn:tokenize</code> to drop everything after the last space and then <code>fn:string-join</code> to stitch the tokens/words back together again.</para>
						</listitem>
						<listitem>
							<para>If the result of step 2 ends with a colon, drop the colon.</para>
						</listitem>
						<listitem>
							<para>Append an ellipsis to indicate that this is an excerpt.</para>
						</listitem>
						<listitem>
							<para>Append a <code>[more]</code> link, inviting the reader to go to the original source if they wish to read on.</para>
						</listitem>
				</orderedlist></para>
				<para>The majority of the above steps exist only to implement optional stylistic preferences.</para>
				<para>This project began as an attempt to aggregate information about <emphasis role="ital">papers</emphasis> presented at the sisterhood of markup conferences, but, at time of writing, the entries represent a variety of different types of sessions, not all of which are associated with a paper. Known types of session are:<itemizedlist>
						<listitem>
							<para>presenting a paper</para>
						</listitem>
						<listitem>
							<para>workshop</para>
						</listitem>
						<listitem>
							<para>user-group meeting</para>
						</listitem>
						<listitem>
							<para>an opening or closing talk</para>
						</listitem>
				</itemizedlist></para>
				<para>Further analysis is required to check for other types of sessions and develop a methodology for reliably identifying each type.  It's likely that that would then support an option for index users to filter by session type, rather than exclude non-paper sessions during the collation process.</para>
			</section>			
		</section>
	</section>
	<section>
		<title>Going live</title>
		<para>The title index was published just before this paper was presented, on Friday 7th of August, 2026, at <link xlink:href="https://xylarium.github.io/salix/sessions/" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">https://xylarium.github.io/salix/sessions/</link>.</para>
		<section>
			<title>Event indexes</title>
			<para>Happily, there was also time, post-submission, to extend the publishing process to generate a collection of event indexes:<itemizedlist>
					<listitem>
						<para>the top-level <link xlink:href="https://xylarium.github.io/salix/events/" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">event index</link>, that lists all the events represented in the title index and the range of meeting years indexed (see <xref linkend="fig-11"/>);</para>
					</listitem>
					<listitem>
						<para>a profile page for each of the events, that includes: a link to the homepage of the event's website, a chronological list of all its indexed meetings, and the total number of indexed sessions per meeting (see <xref linkend="fig-12"/>);</para>
					</listitem>
					<listitem>
						<para>a profile page for each of the event meetings, that lists all the indexed sessions from that meeting, effectively providing a meeting-specific title index (see <xref linkend="fig-13"/>).</para>
					</listitem>
			</itemizedlist></para>
			<figure xml:id="fig-11">
				<title>Events list</title>
				<mediaobject>
					<imageobject>
						<imagedata format="png" fileref="../../../vol31/graphics/Thomson01/Thomson01-011.png"/>
					</imageobject>
				</mediaobject>
				<caption>
					<para><emphasis role="ital">A screenshot of the top-level event index.</emphasis></para>
				</caption>
			</figure>
			<figure xml:id="fig-12">
				<title>Event profile</title>
				<mediaobject>
					<imageobject>
						<imagedata format="png" fileref="../../../vol31/graphics/Thomson01/Thomson01-012.png"/>
					</imageobject>
				</mediaobject>
				<caption>
					<para><emphasis role="ital">A screenshot of the event profile for Balisage.</emphasis></para>
				</caption>
			</figure>
			<figure xml:id="fig-13">
				<title>Meeting profile</title>
				<mediaobject>
					<imageobject>
						<imagedata format="png" fileref="../../../vol31/graphics/Thomson01/Thomson01-013.png"/>
					</imageobject>
				</mediaobject>
				<caption>
					<para><emphasis role="ital">A partial screenshot of the meeting profile for Balisage, 2009, showing the first 4 entries in the index.</emphasis></para>
				</caption>
			</figure>
			<para>The meeting indexes are generated from the same aggregated, standardised data that the title index is generated from.  Consequently, it was possible to re-use some of the XSLT written for the title index.  This was implemented by moving the common logic and settings into <link xlink:href="https://github.com/Xylarium/salix/blob/033af12f5fe62ec933f758c19ab7fae046b00401/src/index/shared.xsl" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest"><code>shared.xsl</code></link>. Continuing the theme of separating concerns, there is a dedicated stylesheet for each of the classes of page that needs to be created (<link xlink:href="https://github.com/Xylarium/salix/blob/033af12f5fe62ec933f758c19ab7fae046b00401/src/index/sessions.xsl" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">title index</link>, <link xlink:href="https://github.com/Xylarium/salix/blob/033af12f5fe62ec933f758c19ab7fae046b00401/src/index/events.xsl" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">events list</link>, <link xlink:href="https://github.com/Xylarium/salix/blob/033af12f5fe62ec933f758c19ab7fae046b00401/src/index/event.xsl" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">event profile</link>, <link xlink:href="https://github.com/Xylarium/salix/blob/033af12f5fe62ec933f758c19ab7fae046b00401/src/index/meetings.xsl" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">meeting profile</link>) and each of these imports <code>shared.xsl</code>.</para>
		</section>
		<section>
			<title>Essentials</title>
			<para>The content and style of the website is minimalist, but there are a few basics that needed to be added to all pages in addition to their core content and a title:<itemizedlist>
					<listitem>
						<para>style instructions - <emphasis role="ital">viewport settings and a CSS stylesheet</emphasis> (see <xref linkend="fig-15"/>);</para>
					</listitem>
					<listitem>
						<para>page header - <emphasis role="ital">the website title</emphasis> (see <xref linkend="fig-14"/> and <xref linkend="fig-15"/>), which also provides a link back to the home page;</para>
					</listitem>
					<listitem>
						<para>page footer - <emphasis role="ital">a site navigation menu</emphasis> (see <xref linkend="fig-14"/> and <xref linkend="fig-15"/>) that provides links to each of the top-level pages.</para>
					</listitem>
			</itemizedlist></para>	
			<para><code>shared.xsl</code> includes a named template for each of these components, so that the markup and content are consistent across all pages on the website and changes only need to be made once.</para>			
			<figure xml:id="fig-14">
				<title>Visible global page components</title>
				<mediaobject>
					<imageobject>
						<imagedata format="svg" fileref="../../../vol31/graphics/Thomson01/Thomson01-014.svg"/>
					</imageobject>
				</mediaobject>
				<caption>
					<para><emphasis role="ital">An annotated screenshot of the home page, labelling the visible global page components.</emphasis></para>
				</caption>
			</figure>
			<figure xml:id="fig-15">
				<title>XHTML markup</title>
				<mediaobject>
					<imageobject>
						<imagedata format="svg" fileref="../../../vol31/graphics/Thomson01/Thomson01-015.svg"/>
					</imageobject>
				</mediaobject>
				<caption>
					<para><emphasis role="ital">An annotated screenshot of the XHTML markup for the home page, labelling the global page components.</emphasis></para>
				</caption>
			</figure>
		</section>
		<section>
			<title>Updates</title>
			<para>Now that the index is public, it will be important to keep it up-to-date.  Technically, it should be possible to monitor the sources for changes, based on HTTP headers, and trigger an update if a change is detected.  However, the monitoring service would need to be hosted somewhere, and extra error handling would need to be implemented to mitigate against automatically publishing a broken index.  It would also be necessary to implement a process to predict and verify new source URLs and add those to the sources input file.  With the closing of Balisage, in the future, sadly, there will probably be no more than a couple of events per year from which to incorporate new data.  The low frequency of required updates means that the complexity and risk associated with automating updates are currently outweighed by the simplicity and lower risk of generating and applying updates manually.</para>
			<para>Another question related to updates is how soon after the end of an event should the index be updated?  And what happens if an event publishes a correction?  The answer to both of these questions may yet still lie in automated change detection to raise an alert.</para>
		</section>
	</section>
	<section>
		<title>Potential future work</title>
		<itemizedlist>
			<listitem>
				<para>Index papers from:<itemizedlist>
						<listitem>
							<para>XML Prague, prior to 2016</para>
						</listitem>
						<listitem>
							<para>Declarative Amsterdam</para>
						</listitem>
						<listitem>
							<para>events that have ceased meeting, such as XML London, XML Amsterdam</para>
						</listitem>
						<listitem>
							<para>related events, such as JATS-Con</para>
						</listitem>
				</itemizedlist></para>
			</listitem>
			<listitem>
				<para>Create more heading indexes:<itemizedlist>
						<listitem>
							<para>author index</para>
						</listitem>
						<listitem>
							<para>subject index</para>
						</listitem>
				</itemizedlist></para>
			</listitem>
			<listitem>
				<para>Create author profile pages, containing:<itemizedlist>
						<listitem>
							<para>statistics (total papers published, total events)</para>
						</listitem>
						<listitem>
							<para>a chronological list of their papers</para>
						</listitem>
				</itemizedlist></para> 
			</listitem>
			<listitem>
				<para>Display the version number on each index, plus when the source content was last updated.</para>
			</listitem>
			<listitem>
				<para>Implement automated validation checks.</para>
			</listitem>
			<listitem>
				<para>Publish the indexes as XML as well as HTML.</para>
			</listitem>			
			<listitem>
				<para>Differentiate between types of session, e.g., paper, workshop, user group meeting, introduction, closing summary, and supporting filtering by type.</para>
			</listitem>
			<listitem>
				<para>Ignore punctuation when sorting titles.</para>
			</listitem>
			<listitem>
				<para>Replace the custom Salix content model for a bibliography with one from a more commonly used standard, such as JATS, BITS or DocBook.</para>
			</listitem>
			<listitem>
				<para>An option to generate bibliomixed citation markup for selected entries.</para>
			</listitem>						
		</itemizedlist>
	</section>
	<section>
		<title>Conclusion</title>
		<para>While it <emphasis role="ital">would</emphasis> be nice if there was a centralised index of all the markup papers, that dream is too broad for the first iteration of the project; even the reduced scope (all sessions from the sisterhood of markup events that publish papers) turned out to be unachievable in the time available.  However, the site has already been of use to me, to check (after the fact) that no one seems to have written about attempting this endeavour before (within the corpus of sessions indexed so far, at least).  As a side-effect, I also now have a growing list of recently discovered interesting papers to read.  I hope that this resource will prove similarly useful to others too.
		</para>
		<para>As this project progressed, two central themes emerged: separation of concerns, and consistency.  XSLT and XProc were obvious technology choices for implementing an application that needed to consume, transform and generate XHTML as it is essentially XML, and this is the format that they were originally primarily designed to process.  Anyone who is familiar with the latest versions of these languages will know that they are also extremely well suited for implementing a flexible, incremental process and supporting re-use.  The former is exactly what you need when you are trying to isolate discrete steps and apply them conditionally, and the latter is essential for consistency.  Together, these technologies made implementing the process so easy that the challenges all lay in dealing with the (expected <emphasis role="ital">and</emphasis> unexpected) lack of consistency in the source data.</para>  
		<para>In addition to updating the indexes to include sessions presented at future meetings, work is also on-going to add in the missing historical content from XML Prague (prior to 2016) and Declarative Amsterdam.  Once those are complete, the next step will be selected from the potential future improvements already identified (above) or suggested by users.  If there's a feature that you would like implemented, please suggest it by raising an issue at <link xlink:href="https://github.com/Xylarium/salix/issues" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">https://github.com/Xylarium/salix/issues</link>.</para>
	</section>
	<appendix xml:id="app-1" xreflabel="Appendix 1">
		<title>A Key to the Symbols used in the Process Diagrams</title>
		<mediaobject>
			<imageobject>
				<imagedata format="png" fileref="../../../vol31/graphics/Thomson01/Thomson01-016.png"/>
			</imageobject>
		</mediaobject>
	</appendix>
	<appendix xml:id="app-2" xreflabel="Appendix 2">
		<title>Source Data Manifest</title>
		<para>The aggregation process depends knowing which sources to retrieve and collate.  These are listed in a manifest file that is required to conform to a custom, project-specific content model, known internally as the <quote>sources</quote> content model.</para>
		<figure xml:id="fig-16">
			<title>Sources content model</title>
			<mediaobject>
				<imageobject>
					<imagedata format="svg" fileref="../../../vol31/graphics/Thomson01/Thomson01-017.svg"/>
				</imageobject>
			</mediaobject>
			<caption>
				<para><emphasis role="ital">A diagram enumerating the entities in the content model (rectangles) and their properties (ovals).</emphasis></para>
			</caption>
		</figure>
		<para>If you are used to the way that Balisage models events, in particular, then <xref linkend="fig-17"/> may be helpful as it shows how that differs from the model used by this project.</para>
		<figure xml:id="fig-17">
			<title>Alternative approaches to modelling events</title>
			<mediaobject>
				<imageobject>
					<imagedata format="svg" fileref="../../../vol31/graphics/Thomson01/Thomson01-018.svg"/>
				</imageobject>
			</mediaobject>
			<caption>
				<para><emphasis role="ital">A side-by-side comparison of the conceptual event models used by this project and Balisage.</emphasis></para>
			</caption>
		</figure>
		<para>Below is a partial sample of a sources data manifest.</para>
<programlisting language="XML" xml:space="preserve">
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;?xml-model href="http://xylarium.org/ns/xml/grammars/salix/sources" type="application/relax-ng-compact-syntax"?&gt;
&lt;sources xmlns="http://xylarium.org/ns/xml/grammars/salix/sources" xmlns:m="http://xylarium.org/ns/xml/documentation"&gt;
	&lt;event id="balisage" include="true" retrieve="true" store="false" standardise="true" href="https://www.balisage.net/" name="Balisage"&gt;
		&lt;source href="https://www.balisage.net/Proceedings/bibliography.html" /&gt;
	&lt;/event&gt;		
	&lt;event id="xml-prague" include="true" retrieve="true" store="false" standardise="true" href="https://www.xmlprague.cz/" name="XML Prague"&gt;
		&lt;source href="https://archive.xmlprague.cz/2005/program.html" include="false" /&gt;
		&lt;source href="https://archive.xmlprague.cz/2006/program.html" include="false" /&gt;
		&lt;source href="https://archive.xmlprague.cz/2007/program.html" include="false" /&gt;
		&lt;m:note&gt;
			&lt;m:p&gt;No event in 2008&lt;/m:p&gt;
		&lt;/m:note&gt;
		&lt;source href="https://archive.xmlprague.cz/2009/sessions.html" include="false" /&gt;
		&lt;source href="https://archive.xmlprague.cz/2010/sessions.html" include="false" /&gt;
		&lt;source href="https://archive.xmlprague.cz/2011/sessions.html" include="false" /&gt;
		&lt;source href="https://archive.xmlprague.cz/2012/sessions.html" include="false" /&gt;
		&lt;source href="https://www.xmlprague.cz/sessions2013/" include="false" /&gt;
		&lt;source href="https://www.xmlprague.cz/sessions2014/" include="false" /&gt;
		&lt;source href="https://www.xmlprague.cz/sessions2015/" include="false" /&gt;
		&lt;source href="https://www.xmlprague.cz/day1-2016/" /&gt;
		&lt;source href="https://www.xmlprague.cz/day2-2016/" /&gt;
		&lt;source href="https://www.xmlprague.cz/day3-2016/" /&gt;
		&lt;source href="https://www.xmlprague.cz/day1-2017/" /&gt;
		&lt;source href="https://www.xmlprague.cz/day2-2017/" /&gt;
		&lt;source href="https://www.xmlprague.cz/day3-2017/" /&gt;
		&lt;source href="https://www.xmlprague.cz/day1-2018/" /&gt;
		&lt;source href="https://www.xmlprague.cz/day2-2018/" /&gt;
		&lt;source href="https://www.xmlprague.cz/day3-2018/" /&gt;
		&lt;source href="https://www.xmlprague.cz/day1-2019/" /&gt;
		&lt;source href="https://www.xmlprague.cz/day2-2019/" /&gt;
		&lt;source href="https://www.xmlprague.cz/day3-2019/" /&gt;
		&lt;source href="https://www.xmlprague.cz/day1-2020/" /&gt;
		&lt;source href="https://www.xmlprague.cz/day2-2020/" /&gt;
		&lt;source href="https://www.xmlprague.cz/day3-2020/" /&gt;
		&lt;source href="https://www.xmlprague.cz/day1-2022/" /&gt;
		&lt;source href="https://www.xmlprague.cz/day2-2022/" /&gt;
		&lt;source href="https://www.xmlprague.cz/day3-2022/" /&gt;
		&lt;source href="https://www.xmlprague.cz/day1-2024/" /&gt;
		&lt;source href="https://www.xmlprague.cz/day2-2024/" /&gt;
		&lt;source href="https://www.xmlprague.cz/day3-2024/" /&gt;
	&lt;/event&gt;
&lt;/sources&gt;
</programlisting>
	</appendix>	
	<bibliography>
		<title>References</title>
		<bibliomixed xml:id="Balisage" xreflabel="Balisage"><quote>Balisage: The Markup Conference</quote>. <link xlink:href="https://www.balisage.net/" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">https://www.balisage.net/</link> (accessed April 11, 2026).</bibliomixed>
		<bibliomixed xml:id="XMLPrague" xreflabel="XMLPrague"><quote>XML Prague</quote>. <link xlink:href="https://www.xmlprague.cz/" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">https://www.xmlprague.cz/</link> (accessed April 11, 2026).</bibliomixed>
		<bibliomixed xml:id="DocEng" xreflabel="DocEng"><quote>DocEng: The ACM Symposium on Document Engineering</quote>.  <link xlink:href="https://doceng.org/" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">https://doceng.org/</link> (accessed April 11, 2026).</bibliomixed>
		<bibliomixed xml:id="MarkupF" xreflabel="MarkupF"><quote>&lt;Markup Forum/&gt;</quote>. <link xlink:href="https://www.markupforum.de/" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">https://www.markupforum.de/</link> (accessed April 11, 2026).</bibliomixed>
		<bibliomixed xml:id="Xugs" xreflabel="Xugs"><quote>./xml_user_group_stuttgart</quote>. <link xlink:href="https://xugs.de/" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">https://xugs.de/</link> (accessed April 11, 2026).</bibliomixed>
		<bibliomixed xml:id="MarkupUK" xreflabel="MarkupUK"><quote>Markup UK</quote>. <link xlink:href="https://markupuk.org/" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">https://markupuk.org/</link> (accessed April 11, 2026).</bibliomixed>
		<bibliomixed xml:id="DecAmSis" xreflabel="DecAmSis">Declarative Amsterdam. <quote>Sister conferences</quote>. <link xlink:href="https://declarative.amsterdam/sister-conferences/" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">https://declarative.amsterdam/sister-conferences/</link> (accessed April 11, 2026).</bibliomixed>
		<bibliomixed xml:id="XMLSumS" xreflabel="XMLSumS"><quote>XML Summer School</quote>. <link xlink:href="https://xmlsummerschool.org/" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">https://xmlsummerschool.org/</link> (accessed April 11, 2026).</bibliomixed>
		<bibliomixed xml:id="XMLLon" xreflabel="XMLLon"><quote>XML London</quote>. <link xlink:href="https://xmllondon.com/" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">https://xmllondon.com/</link> (accessed April 11, 2026).</bibliomixed>		
		<bibliomixed xml:id="XMLAm" xreflabel="XMLAm"><quote>XML Amsterdam</quote>, <emphasis role="ital">Internet Archive</emphasis>. <link xlink:href="https://web.archive.org/web/20210225015112/http://www.xmlamsterdam.com/" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">https://web.archive.org/web/20210225015112/http://www.xmlamsterdam.com/</link> (accessed April 11, 2026).</bibliomixed>
		<bibliomixed xml:id="wikipIndex" xreflabel="WikipIndex">Wikipedia contributors. <quote>Index (publishing)</quote>.  In <emphasis role="ital">Wikipedia, The Free Encyclopedia</emphasis>. <link xlink:href="https://en.wikipedia.org/w/index.php?title=Index_(publishing)&amp;oldid=1347240285" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">https://en.wikipedia.org/w/index.php?title=Index_(publishing)&amp;oldid=1347240285</link> (accessed April 12, 2026).</bibliomixed>
		<bibliomixed xml:id="BalMBib" xreflabel="BalMBib">Balisage Series on Markup Technologies. <quote>Master Bibliography</quote>. <link xlink:href="https://www.balisage.net/Proceedings/bibliography.html" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">https://www.balisage.net/Proceedings/bibliography.html</link> (accessed April 11, 2026).</bibliomixed>
		<bibliomixed xml:id="XProc31" xreflabel="XProc31">XProc Next Community Group. <quote>XProc 3.1: An XML Pipeline Language</quote>. <link xlink:href="https://spec.xproc.org/lastcall-2024-08/head/xproc/" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">https://spec.xproc.org/lastcall-2024-08/head/xproc/</link> (accessed April 11, 2026).</bibliomixed>
		<bibliomixed xml:id="XProc31SL" xreflabel="XProc31SL">XProc Next Community Group. <quote>XProc 3.1: Standard Step Library</quote>. <link xlink:href="https://spec.xproc.org/3.1/steps/" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">https://spec.xproc.org/3.1/steps/</link> (accessed April 11, 2026).</bibliomixed>
		<bibliomixed xml:id="SoAcademia" xreflabel="SoAcademia">Stack Overflow Academia contributors.  <quote>Can I collect meta information on papers and put this online?</quote>. <link xlink:href="https://academia.stackexchange.com/questions/26479/can-i-collect-meta-information-on-papers-and-put-this-online" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">https://academia.stackexchange.com/questions/26479/can-i-collect-meta-information-on-papers-and-put-this-online</link> (accessed August 4, 2026).</bibliomixed>
		<bibliomixed xml:id="Swansea" xreflabel="Swansea">Swansea University. <quote>Copyright: Information for Researchers</quote>. <link xlink:href="https://libguides.swansea.ac.uk/copyright/researchers" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">https://libguides.swansea.ac.uk/copyright/researchers</link> (accessed August 4, 2026).</bibliomixed>
		<bibliomixed xml:id="I4OpenAbstracts" xreflabel="I4OpenAbstracts">Initiative for Open Abstracts. <quote>Frequently Asked Questions</quote>.  <link xlink:href="https://i4oa.org/faqs.html" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">https://i4oa.org/faqs.html</link> (accessed August 4, 2026).</bibliomixed>
		<bibliomixed xml:id="Kinstellar" xreflabel="Kinstellar">Kinstellar. <quote>Liability of search engines for copyright infringement under Czech law</quote>.  <link xlink:href="https://www.kinstellar.com/news-and-insights/detail/13/liability-of-search-engines-for-copyright-infringement-under-czech-law" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">https://www.kinstellar.com/news-and-insights/detail/13/liability-of-search-engines-for-copyright-infringement-under-czech-law</link> (accessed August 4, 2026).</bibliomixed>
	</bibliography>
</article>