<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Interoperability | museum-digital: blog</title>
	<atom:link href="https://blog.museum-digital.org/tag/interoperability/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.museum-digital.org</link>
	<description>A blog on museum-digital and the broader digitization of museum work.</description>
	<lastBuildDate>Mon, 24 Nov 2025 16:01:26 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://blog.museum-digital.org/wp-content/uploads/2020/01/cropped-mdlogo-code-512px-32x32.png</url>
	<title>Interoperability | museum-digital: blog</title>
	<link>https://blog.museum-digital.org</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="search" type="application/opensearchdescription+xml" title="Search museum-digital: blog" href="https://blog.museum-digital.org/wp-json/opensearch/1.1/document" />	<item>
		<title>Making Interoperability Easy</title>
		<link>https://blog.museum-digital.org/2025/11/24/making-interoperability-easy/</link>
					<comments>https://blog.museum-digital.org/2025/11/24/making-interoperability-easy/#respond</comments>
		
		<dc:creator><![CDATA[Joshua Ramon Enslin]]></dc:creator>
		<pubDate>Mon, 24 Nov 2025 15:56:37 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Interoperability]]></category>
		<category><![CDATA[New Features]]></category>
		<category><![CDATA[OAI-PMH]]></category>
		<category><![CDATA[Object search (frontend)]]></category>
		<guid isPermaLink="false">https://blog.museum-digital.org/?p=4538</guid>

					<description><![CDATA[Interoperability has been one of the focal issues around museum-digital practically since its inception. Offering different, simple ways to bring data into the system was a necessary requirement to even think of what we do. And offering simple ways to get the data out of the system again is just good practice &#8211; though all <a href="https://blog.museum-digital.org/2025/11/24/making-interoperability-easy/" class="more-link">...</a>]]></description>
										<content:encoded><![CDATA[
<p>Interoperability has been one of the focal issues around museum-digital practically since its inception. Offering different, simple ways to bring data into the system was a necessary requirement to even think of what we do. And offering simple ways to get the data out of the system again is just good practice &#8211; though all too often neglected.</p>



<p>To that end, there have traditionally been two primary ways for data retrieval. In musdb, one could run batch exports and receive a ZIP with some form of XML files. One per object, with the objects matching the results of any given object search.</p>



<p>On the other hand, there is the public API. Using URL manipulation, one can access the (primary) contents of each page in a machine-readable way. To access the JSON representation of an object&#8217;s published metadata, where the object&#8217;s ID is 7141 in the Hesse instance of museum-digital (URL: <a href="https://hessen.museum-digital.de/object/7141"><code>https://hessen.museum-digital.de/object/7141</code></a>), one simply has to insert <code>json</code> to the path: <code><a href="https://hessen.museum-digital.de/json/object/7141">https://hessen.museum-digital.de/json/object/7141</a></code>.</p>



<p>Next to the default JSON output, additional APIs are offered wherever suitable for a given data type. For objects, the primary additional output method is a <a href="http://lido-schema.org/">LIDO</a> API.</p>



<p>Thus far, the main limitation of the public API was that it only allowed one object (or institution, collection, etc.) to be queried at a time.</p>



<h2 class="wp-block-heading">Querying Object Metadata in Batches</h2>



<p>After a significant refactoring of the code to load object data for object pages &#8211; primarily to improve caching and allow for parallelized requests to the database &#8211; we are now finally able to offer APIs for querying object metadata in batch. Thanks to grouped database queries, performance and resource usage scale nicely. Taking simply the currently most recent objects in the Germany-wide instance of museum-digital: Loading all object data of one object and presenting it in JSON takes 0.0087 seconds and loading and generating the JSON for the 100 most recent objects takes 0.197 seconds (or 0.00197 per object). Note that not all queries for all aspects of an object&#8217;s metadata are grouped yet, performance may thus get even better over time. This does also not yet account for the overhead of the many HTTPs requests one would previously need to execute to get each object&#8217;s metadata one by one &#8211; real performance improvements are thus even greater.</p>



<p>Now, how to access object metadata in batches?</p>



<p>The batch access is linked with the search API and reuses its main query parameter (&#8220;s&#8221;). Say, if one is searching for objects related to Berlin (a.k.a. the place of the ID 61), the URL of the respective search page would be <code>https://global.museum-digital.org/objects?s=place%3A61</code>. The corresponding API for retrieving all of the objects&#8217; published metadata would then be <code>https://global.museum-digital.org/export/json/place:61?limit=24&amp;offset=0</code>. Like the search page itself and its primary API (<code>/json/objects</code>), the full batch export API is paginated with a maximum of currently 100 objects per page being returned.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="576" src="https://blog.museum-digital.org/wp-content/uploads/2025/11/20251124_15h36m15s_frontend-batch-export-object-metadata-ui-1024x576.webp" alt="Link to batch exporting search results in the frontend" class="wp-image-4540" srcset="https://blog.museum-digital.org/wp-content/uploads/2025/11/20251124_15h36m15s_frontend-batch-export-object-metadata-ui-1024x576.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2025/11/20251124_15h36m15s_frontend-batch-export-object-metadata-ui-300x169.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2025/11/20251124_15h36m15s_frontend-batch-export-object-metadata-ui.webp 1292w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Additional to URL manipulation, the batch export API is linked in the menu of object search results pages.</figcaption></figure>



<p>Currently, the batch export of full object metadata is available for JSON and LIDO (XML) representations of the object data. More can rather easily be added later, should a demand arise.</p>



<h2 class="wp-block-heading">OAI</h2>



<p>Implementing a performant way to export full object metadata in bulk was one of the two main missing components for the long-missing implementation of an <a href="https://www.openarchives.org/pmh/">OAI-PMH</a> API.</p>



<p>OAI is a standard tailored towards data harvesting. Say, an external service like the German Digital Library or Worldcat wants to do something with external data from diverse sources, e.g. to also display objects or implement a search across the different collections / libraries to find which one has which object / book. To be able to do so, they need to be able to access the respective data in some way. Ideally, using a common standard that describes how to query data, helps to identify any data sets that need to be updated or added (or deleted), and finally presents a uniform way to access the data periodically. That, exactly, is OAI-PMH.</p>



<p>In a nutshell: OAI-PMH allows other services to copy all (published) data from another service in a maschine-readable way and can thus significantly improve reuse in aggregation. Of course this only applies to technical questions; legally, potential re-users need to comply with the metadata license applied by the initial data provider regardless of the (technical) means of access.</p>



<p>Since last week, museum-digital now provides a OAI-PMH API at <code>/oai</code> respective to a given subdomain. E.g.: <code>https://hessen.museum-digital.de/oai</code>. As of now, the OAI-PMH API provides access to the objects&#8217; metadata using LIDO (XML) and the mandatory OAI-DC format.</p>



<p>Note that there are some caveats remaining for now: First, the LIDO representation of object metadata is not (and can by definition not be) as complete and fine-grained as the JSON API. It is also not exactly similar to the LIDO as returned by exports from musdb (one is formed natively in PHP, the other using XSLT, leading to divergent development paths). Also, the LIDO output lists different identifiers from the ones used by the OAI-PMH API and the OAI-DC representations otherwise.</p>



<p>Finally, the OAI-PMH API at museum-digital does not implement OAI-PMH data sets to group collections. Instead, it follows the existing search logic (essentially providing a new endpoint per query). Example searches via OAI might thus look as follows:</p>



<ul class="wp-block-list">
<li>All objects from the Agrargeschichte instance of museum-digital, represented in OAI-DC: <a href="https://agrargeschichte.museum-digital.de/oai?verb=ListRecords&amp;metadataPrefix=oai_dc">https://agrargeschichte.museum-digital.de/oai?verb=ListRecords&amp;metadataPrefix=oai_dc</a></li>



<li>All objects linked to Berlin (place #61), in the Berlin instance of museum-digital, represented in LIDO: <a href="https://berlin.museum-digital.de/oai/place:61?verb=ListRecords&amp;metadataPrefix=lido">https://berlin.museum-digital.de/oai/place:61?verb=ListRecords&amp;metadataPrefix=lido</a></li>



<li>All objects of the Freies Deutsches Hochstift, Frankfurt am Main, represented in LIDO: <a href="https://hessen.museum-digital.de/oai/institution:1?verb=ListRecords&amp;metadataPrefix=lido">https://hessen.museum-digital.de/oai/institution:1?verb=ListRecords&amp;metadataPrefix=lido</a></li>



<li>All objects from Baranya with only their identifiers: <a href="https://ba.hu.museum-digital.org/oai?verb=ListIdentifiers&amp;metadataPrefix=lido">https://ba.hu.museum-digital.org/oai?verb=ListIdentifiers&amp;metadataPrefix=lido</a></li>
</ul>



<h2 class="wp-block-heading">Credits</h2>



<p>Credits where credit is due: the Städel Museum deserves praise for their implementation of OAI-PMH. For me personally, seeing the <a href="https://sammlung.staedelmuseum.de/de/oai/guide">Städel&#8217;s API</a> was the first time I saw a visibly stateless OAI-PMH implementation, enabled by the ingenious idea of using machine-readable, JSON-encoded resumption tokens over UIDs that have to be resolved on the server side. I spent weeks (or months?) making museum-digital&#8217;s frontend stateless. By following the Städel&#8217;s example, it can remain so even while offering an OAI-PMH API.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-cgb-cc-by message-body" style="background-color:white;color:black"><img decoding="async" src="https://blog.museum-digital.org/wp-content/plugins/creative-commons/includes/images/by.png" alt="CC" width="88" height="31"/><p><span class="cc-cgb-name">This content</span> is licensed under a <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International license.</a> <span class="cc-cgb-text"></span></p></div>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.museum-digital.org/2025/11/24/making-interoperability-easy/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-thumbnail><url>https://blog.museum-digital.org/wp-content/uploads/2025/11/20251124-absurdresmasterpiececircuitlight-poster-1024x1024.webp</url><width>600</width><height>600</height></post-thumbnail>	</item>
		<item>
		<title>EODEM &#8211; Efficiently Exchange Object Information During Loans</title>
		<link>https://blog.museum-digital.org/2023/02/15/eodem-efficiently-exchange-object-information-during-loans/</link>
		
		<dc:creator><![CDATA[Joshua Ramon Enslin]]></dc:creator>
		<pubDate>Wed, 15 Feb 2023 00:06:37 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[musdb]]></category>
		<category><![CDATA[Collection management]]></category>
		<category><![CDATA[EODEM]]></category>
		<category><![CDATA[Export Tools]]></category>
		<category><![CDATA[Imports]]></category>
		<category><![CDATA[Interoperability]]></category>
		<category><![CDATA[Loan management]]></category>
		<guid isPermaLink="false">https://blog.museum-digital.org/?p=3583</guid>

					<description><![CDATA[musdb now provides import and export tools for the EODEM standard, allowing for the simple exchange of loan object information.]]></description>
										<content:encoded><![CDATA[
<p>It is a classic situation. One museum loans objects to another. Along with the objects, the receiving museum gets an Word or Excel file containing information relevant to the object&#8217;s conservation (e.g. minimum and maximum viable temperature). The museum then proceeds copying and pasting the data into their collection management system. This obviously takes a lot of time and provides for a lot of opportunities to make mistakes.</p>



<p>On the other hand, it&#8217;s a very clearly defined situation, that is repeated again and again in a very similar pattern. Which is to say, it is a perfect subject for automation.</p>



<p>Now, some years ago, a working group came together in the context of CIDOC to do exactly that. Since not all museums use the same collection management system, the necessary first step towards automating the exchange of object information was obviously to develop an open standard for the same, that could be implemented in the different collection management applications.</p>



<p>The standard thus developed &#8211; <a href="https://cidoc.mini.icom.museum/working-groups/documentation-standards/eodem-home/">EODEM</a>, short for <em>Exhibition Object Digital Exchange Model</em> &#8211; is now mature enough to have gone into a public beta release phase. We&#8217;re very, very late to the party, but it was time to try our hands on implementing an import and export for EODEM. The import had already been done by <a href="https://blog.museum-digital.org/2023/01/02/new-features-at-museum-digital-november-2022/">November</a>, but by the time of the larger update and re-design of January, we also managed to release an EODEM export.</p>



<p>This blog post will continue explaining how to import and export EODEM data before closing on a general perspective on the usefulness of EODEM at this point in time and in the foreseeable future.</p>



<h2 class="wp-block-heading" id="how-to-use-eodem-in-musdb">How to Use EODEM in musdb?</h2>



<p>As with loans in general, there are two situations in which one might want to use EODEM. The receiving museum can save a lot of time by importing EODEM data, while the sending museum can help out colleagues by exporting it.</p>



<h3 class="wp-block-heading" id="importing-eodem-data">Importing EODEM data</h3>



<p>In the (German language) <a href="https://de.handbook.museum-digital.info/import/importe-selbst-durchfuehren.html">handbook</a>, one can read a lengthy explanation of how to import object data into musdb (a less extensive description can be <a href="https://blog.museum-digital.org/2022/06/04/imports-can-now-be-triggered-by-users/">found in the blog</a> as well, this time in English). In short: One first needs to generate a password to access the import folder using a WebDAV client. After mounting the folder, one can proceed to upload the data. Finally, a configuration file needs to be written to enable the import tool to identify the format of the import data, a mail address which is to be notified when the import is done etc. As the server checks all museums&#8217; import directories for available import data every four hours, the object information will then be automatically imported after some time.</p>



<p>EODEM was developed as an application profile for LIDO 1.1, meaning that it builds upon and extends the LIDO standard for exchanging object information. As such, we could simply integrate EODEM into our regular LIDO import. Hence, users who want to import EODEM data need to set the &#8220;parser&#8221; setting to &#8220;Lido&#8221; in the configuration file.</p>



<p>Depending on the way a museum forms its inventory numbers, EODEM however may present a problem regular LIDO imports do not. If an inventory number in the sending museum (say, in the import data) equals an inventory number of one of the receiving museum&#8217;s own objects, the importer would interpret the duplicate inventory number so as to update the existing record of the inventory number rather than adding a new one. In response to this problem, we added a new setting available in the LIDO parser: <code>prefix_inventory_numbers</code> . By entering a value (e.g. the reference number of the loan) to this setting, the given value will be prefixed to the imported inventory number so as to prevent collisions and allow importing objects safely.</p>



<h3 class="wp-block-heading" id="exporting-eodem-data">Exporting EODEM data</h3>



<p>EODEM data can be exported from musdb the same way any other XML export can be run. It is now listed as an additional export format in the regular export form. The export form is accessible either through the navigation for exporting the whole collection &#8211; which obviously makes little sense in the case of EODEM &#8211; or on the search results page once at least one search parameter is set. One can thus filter the collection for all objects of a given loan, click the export button in the sidebar, possibly adjust the list of exported fields (e.g. to exclude a field one does not actually want to export, but which is usually covered by the EODEM export). Finally, one will receive a ZIP file containing the EODEM-encoded object information. This ZIP can then be sent to the receiving museum.</p>



<p>To both promote and simplify the exchange of loan object information using EODEM, a shortcut has been added in the sidebar of loan editing pages. Clicking on &#8220;Objects (EODEM)&#8221; in the export section of the sidebar directly takes one to the EODEM export settings page for all objects of the given loan.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="514" src="https://blog.museum-digital.org/wp-content/uploads/2023/02/musdb-loans-export-eodem.png-1024x514.webp" alt="" class="wp-image-3584" srcset="https://blog.museum-digital.org/wp-content/uploads/2023/02/musdb-loans-export-eodem.png-1024x514.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2023/02/musdb-loans-export-eodem.png-300x151.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2023/02/musdb-loans-export-eodem.png-1536x771.webp 1536w, https://blog.museum-digital.org/wp-content/uploads/2023/02/musdb-loans-export-eodem.png-2048x1028.webp 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">The most simple way to export a loan&#8217;s object information in EODEM is by navigating to the loan&#8217;s page and clicking the EODEM export button in the sidebar.</figcaption></figure>



<h2 class="wp-block-heading" id="in-musdb-and-beyond">In musdb and Beyond</h2>



<p>As stated above, we were very late to the party. EODEM has been in development for some years, but we only started seriously looking into it in late 2022 (all credit for developing EODEM thus goes to others; the working group deserves a lot of thanks!).</p>



<p>On the other hand, it turns out that musdb is the first collection management system to actually feature an EODEM import and export in production. For the time being, exchanging EODEM information thus mainly helps in the case of loans between two museums that both use musdb for collection management.</p>



<p>The working group&#8217;s page however provides a <a href="https://cidoc.mini.icom.museum/working-groups/documentation-standards/eodem-home/eodem-who-is-implementing-eodem/">list of software vendors who plan to implement EODEM imports and / or exports</a>. Many of the big names are already listed there, meaning that a timely implementation of the standard in many of the major collection management systems is almost given.</p>



<p>On the other hand, there are many, many more collection management systems than those ten listed at the time. While EODEM is based on LIDO and thus very simple to implement if a collection management system already features a LIDO import / export, it remains to be seen how many will eventually adopt the it. Hopefully it is many, so that we can improve interoperability and soon enough all save some time when working with loan objects.</p>



<p><em>Image credit: </em>&#8220;<a href="https://nat.museum-digital.de/object/263518">Relief zweier sich die Hände reichenden Männer, Seebronn (?)</a>&#8220;, CC BY-SA @ <a href="https://nat.museum-digital.de/institution/193">Landesmuseum Württemberg</a></p>



<div class="wp-block-cgb-cc-by message-body" style="background-color:white;color:black"><img loading="lazy" decoding="async" src="https://blog.museum-digital.org/wp-content/plugins/creative-commons/includes/images/by.png" alt="CC" width="88" height="31"/><p><span class="cc-cgb-name">This content</span> is licensed under a <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International license.</a> <span class="cc-cgb-text"></span></p></div>
]]></content:encoded>
					
		
		
		<post-thumbnail><url>https://blog.museum-digital.org/wp-content/uploads/2023/02/2_04121136417.webp</url><width>560</width><height>373</height></post-thumbnail>	</item>
	</channel>
</rss>
