<?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>API | museum-digital: blog</title>
	<atom:link href="https://blog.museum-digital.org/tag/api-en/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, 12 Jan 2026 16:43:04 +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>API | 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>State of Development, November 2025</title>
		<link>https://blog.museum-digital.org/2025/12/03/state-of-development-november-2025/</link>
					<comments>https://blog.museum-digital.org/2025/12/03/state-of-development-november-2025/#respond</comments>
		
		<dc:creator><![CDATA[Joshua Ramon Enslin]]></dc:creator>
		<pubDate>Wed, 03 Dec 2025 01:53:58 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Importer]]></category>
		<category><![CDATA[musdb]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[New Features]]></category>
		<category><![CDATA[OAI-PMH]]></category>
		<guid isPermaLink="false">https://blog.museum-digital.org/?p=4575</guid>

					<description><![CDATA[Frontend musdb Importer Core Parser]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading"><a href="https://en.about.museum-digital.org/software/frontend/">Frontend</a></h2>



<ul class="wp-block-list">
<li>On source / reference pages, linked objects are now sorted by the position within the source work on which they are referenced or which they do themselves reference</li>



<li>The target URL of the regular / unspecified search bar for objects now follows the new, prettier URL schema</li>



<li>Support for an <a href="https://www.openarchives.org/pmh/">OAI-PMH</a> API for object metadata
<ul class="wp-block-list">
<li>Standardized endpoint for aggregators seeking to retrieve data in batch</li>



<li>Metadata formats thus far supported:
<ul class="wp-block-list">
<li>LIDO</li>



<li>OAI-DC (mandatory)</li>
</ul>
</li>



<li>See also: <a href="https://blog.museum-digital.org/2025/11/24/making-interoperability-easy/">Blog</a></li>
</ul>
</li>



<li>PDFs are only generated for users with a browser set to a non-default language if load on the server is low
<ul class="wp-block-list">
<li>The resource use caused by AI bots scraping museum-digital has been growing and growing. Generally, we see bots included in our mission to enable access to cultural heritage. On the other hand, nobody is served if the service is bogged down by bots. One functionality that is commonly used among bots and resource intensive is the generation of PDFs for object pages. The same information can be loaded from the object page itself and printed to a PDF using the browser&#8217;s print option. There are thus rather few downsides to limiting access to PDF generation to timmes, when server load is low. So that&#8217;s what we did.</li>
</ul>
</li>



<li>Collection-specific ISIL identifiers are now also used in the LIDO API</li>



<li>Alternative numbers of an object can now be displayed on object pages
<ul class="wp-block-list">
<li>This includes tooltips for types of alternative numbers, that can be set by the museum on the institution-wide settings pages of musdb</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading"><a href="https://en.about.museum-digital.org/software/musdb/">musdb</a></h2>



<ul class="wp-block-list">
<li>Search for objects
<ul class="wp-block-list">
<li>Type-ahead search for languages (of the object&#8217;s content)</li>



<li>Search by object&#8217;s revision status (open, read-ony, archived, etc.)</li>
</ul>
</li>



<li>Batch editing of objects&#8217; revision status</li>



<li>Parameters of the full text search index were updated to improve the search of word compounds in German</li>
</ul>



<h3 class="wp-block-heading">Importer</h3>



<h4 class="wp-block-heading">Core</h4>



<ul class="wp-block-list">
<li>The dry-run mode now does not abort an import anymore, if an unmapped value is encountered. Unmapped entries are collected and displayed together afterwards.
<ul class="wp-block-list">
<li>This means, that unmapped entries can now much more easily be copied to and mapped in <a href="https://concordance.museum-digital.org/">concordance.museum-digital.org</a></li>
</ul>
</li>



<li>Support for the import of alternative numbers (of objects)</li>



<li>Support for the import of space hierarchies</li>
</ul>



<h4 class="wp-block-heading">Parser</h4>



<ul class="wp-block-list">
<li><code>AdlibXml</code>
<ul class="wp-block-list">
<li>Support for importing objects&#8217; alternative numbers</li>
</ul>
</li>



<li><code>CsvXml</code>
<ul class="wp-block-list">
<li>Support for importing objects&#8217; alternative numbers</li>
</ul>
</li>



<li><code>CsvLocations</code>
<ul class="wp-block-list">
<li>New parser for csv-based imports of space hierarchies</li>
</ul>
</li>



<li><code>ImageByInvno</code>
<ul class="wp-block-list">
<li>New setting: append_chars (Adds suffixes, that exist in the inventory number, but not in file names)</li>
</ul>
</li>
</ul>



<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/12/03/state-of-development-november-2025/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-thumbnail><url>https://blog.museum-digital.org/wp-content/uploads/2025/12/winter.webp</url><width>600</width><height>467</height></post-thumbnail>	</item>
		<item>
		<title>State of Dev, August 2025</title>
		<link>https://blog.museum-digital.org/2025/11/25/state-of-dev-august-2025/</link>
					<comments>https://blog.museum-digital.org/2025/11/25/state-of-dev-august-2025/#respond</comments>
		
		<dc:creator><![CDATA[Joshua Ramon Enslin]]></dc:creator>
		<pubDate>Tue, 25 Nov 2025 16:53:37 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[musdb]]></category>
		<category><![CDATA[nodac]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[New Features]]></category>
		<category><![CDATA[Poster]]></category>
		<guid isPermaLink="false">https://blog.museum-digital.org/?p=4545</guid>

					<description><![CDATA[A summary of the recent updates and (technical) development around museum-digital in August 2025.]]></description>
										<content:encoded><![CDATA[
<p>The last months have been busy, off and on museum-digital. This is the first of three posts today on recent technical developments around museum-digital to continue the regular state of dev posts.</p>



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



<h3 class="wp-block-heading"><a href="https://en.about.museum-digital.org/software/musdb/">musdb</a></h3>



<ul class="wp-block-list">
<li>Added a tool for the AI-aided detection of displayed subjects in images for tagging
<ul class="wp-block-list">
<li>Has to be explicitly turned on on a per-collection basis, as it makes sense only for certain types of objects (like paintings, drawings, photographs)</li>



<li>Usable within the tagging overlay on object editing pages</li>



<li>See also: <a href="https://blog.museum-digital.org/de/2025/08/27/automatische-erkennung-von-abgebildeten-elementen/">blog post about the feature (German)</a></li>
</ul>
</li>



<li>The maximum length of contents in the data field &#8220;edition&#8221; of literature entries has been extended to 50 characters</li>



<li>Uploaded PDFs may now be up to 40 MB large</li>



<li>New command line option to reset all permissions of a user account to the default provided by their user role</li>



<li>New event type: &#8220;Changed&#8221;</li>
</ul>



<h3 class="wp-block-heading"><a href="https://en.about.museum-digital.org/software/nodac/">nodac</a></h3>



<ul class="wp-block-list">
<li>Added AI-generated suggestions for tag definitions and translations of tag names in a sidebar
<ul class="wp-block-list">
<li>This is also re-used to identify duplicate tags</li>
</ul>
</li>
</ul>



<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/20251125_screenshot-nodac-ai-sidebar.png-1024x576.webp" alt="Screenshot of a tag editing page in nodac, showing the new (August 2025) sidebar with AI-generated aids." class="wp-image-4547" srcset="https://blog.museum-digital.org/wp-content/uploads/2025/11/20251125_screenshot-nodac-ai-sidebar.png-1024x576.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2025/11/20251125_screenshot-nodac-ai-sidebar.png-300x169.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2025/11/20251125_screenshot-nodac-ai-sidebar.png-1536x864.webp 1536w, https://blog.museum-digital.org/wp-content/uploads/2025/11/20251125_screenshot-nodac-ai-sidebar.png.webp 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">The right sidebar of tag editing pages in nodac now features AI-generated tag descriptions as well as possible translations for the title. These are also used to identify possible duplicates of a tag entry (top right, underlined in purple).</figcaption></figure>



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



<ul class="wp-block-list">
<li>Poster presented at <a href="https://www.nfdi.de/cordi-2025/">CoRDI 2025</a> (<a href="https://web.archive.org/web/20250612013921/https://www.nfdi.de/cordi-2025/">Archived</a>) on August 27, 2025, in Aachen: <a href="https://www.jrenslin.de/talks/case-for-underhanded-methods-to-improve-research-data-cordi/">&#8220;To Educate or to Enforce &#8211; The Case for Underhanded Methods to Improve Research Data&#8221;</a>
<ul class="wp-block-list">
<li><a href="https://files.museum-digital.org/en/Posters/2025-08-26_To-Educate-or-to-Enforce_CoRDI2025-Aachen_JRE.pdf">PDF</a></li>



<li><a href="https://www.jrenslin.de/abstracts/cordi-2025-caseforunderhandedmethodsimproveresearchdata/">Abstract</a> / <a href="https://zenodo.org/records/16736291">Zenodo</a></li>
</ul>
</li>
</ul>



<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/25/state-of-dev-august-2025/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-thumbnail><url>https://blog.museum-digital.org/wp-content/uploads/2025/11/AI-gen-blog-202511-state-of-2025-08.png-scaled.webp</url><width>600</width><height>467</height></post-thumbnail>	</item>
		<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 loading="lazy" 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="auto, (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 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>
					
					<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>State of Dev, May 2025</title>
		<link>https://blog.museum-digital.org/2025/07/07/state-of-dev-may-2025/</link>
		
		<dc:creator><![CDATA[Joshua Ramon Enslin]]></dc:creator>
		<pubDate>Mon, 07 Jul 2025 15:00:26 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Importer]]></category>
		<category><![CDATA[musdb]]></category>
		<category><![CDATA[nodac]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[New Features]]></category>
		<category><![CDATA[Object search (musdb)]]></category>
		<guid isPermaLink="false">https://blog.museum-digital.org/?p=4430</guid>

					<description><![CDATA[An overview about recent developments around museum-digital in May 2025.]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading"><a href="https://de.about.museum-digital.org/software/frontend/">Frontend</a></h2>



<h3 class="wp-block-heading">New Features</h3>



<ul class="wp-block-list">
<li>Tabs are available in the configuration when the site is installed as a Progressive Web App (<a href="https://de.wikipedia.org/wiki/Progressive_Webanwendung">PWA</a>) (<a href="https://developer.chrome.com/docs/capabilities/tabbed-application-mode">See also</a>)</li>
</ul>



<h3 class="wp-block-heading">Improvements</h3>



<ul class="wp-block-list">
<li>Duplicate search query parameters for objects associated with times before / after are removed.<br><em>Example: If one searches for &#8220;Objects after 1900, whose first recorded associated time is also after 2000&#8221;, this is a duplicate query. 2000 is always after 1900, so one of the two parameters can be removed.</em><br><em>Searches by time begin / end are also the foundation for the timeline. As the timeline is both beloved by web crawlers and resource-intensive to generate, this change significantly reduced server load.</em></li>



<li>Any links on timeline pages that do not reference single object pages are marked as <code>rel=nofollow</code><br><em>Which is to say that bots are told to ignore them.</em></li>
</ul>



<h2 class="wp-block-heading"><a href="https://de.about.museum-digital.org/software/musdb/">musdb</a></h2>



<h3 class="wp-block-heading">New Features</h3>



<ul class="wp-block-list">
<li>Tabs are available in the configuration when musdb is installed as a Progressive Web App (<a href="https://de.wikipedia.org/wiki/Progressive_Webanwendung">PWA</a>) (<a href="https://developer.chrome.com/docs/capabilities/tabbed-application-mode">See also</a>)</li>



<li>New search option for objects: &#8220;Can be published&#8221;<br><em>Aggregate search for objects that have not yet been published and which comply with the minimum requirements for publication.</em></li>



<li>Separated measurements can now be batch-edited<br><em>Available via &#8220;assign results&#8221;</em></li>



<li>Institution-wide setting to enforce the use of the user-defined object editing interface for all users of the institution</li>



<li>Exhibitions can now be searched via the API (<em><a href="https://de.handbook.museum-digital.info/musdb/API/index.html#/exhibition/exhibitionList">/exhibition/list</a></em>)</li>



<li>A user&#8217;s <a href="https://en.wikipedia.org/wiki/User_agent">user-agent</a> is checked whenever a page is requested. If it changed, the user will be logged out automatically.<br><em>Protection against <a href="https://owasp.org/www-community/attacks/Session_hijacking_attack">session hijacking</a>.</em></li>
</ul>



<h3 class="wp-block-heading">Improvements</h3>



<ul class="wp-block-list">
<li>Panorama images for tours through exhibitions / institutions are calculated down to 2400 px height rather than 1400 px height</li>



<li>The APIs for searching for entries in controlled vocabularies are now available via the main API<br><em>See e.g. </em><code><a href="https://de.handbook.museum-digital.info/musdb/API/index.html#/actor/actorSearchLinkedToObjects">/actor/search_linked_to_objects/{term}</a></code><em> , </em><code><a href="https://de.handbook.museum-digital.info/musdb/API/index.html#/actor/actorSearch">/actor/search/{term}</a></code><em> etc.</em></li>
</ul>



<h3 class="wp-block-heading">Bugfixes</h3>



<ul class="wp-block-list">
<li>Fix: &#8220;Visiting scientists&#8221; couldn&#8217;t open the &#8220;location&#8221; tab (this erroneously required museum-wide editing permissions)</li>



<li>Fix: User-defined defaults for descriptions of new objects were ignored when new objects were to be added</li>



<li>Fix: Thumbnails were displayed as duplicate images linked to exhibitions (tag &#8220;images&#8221;)</li>



<li>Fix: Prefixing via the batch editing was broken</li>
</ul>



<h2 class="wp-block-heading"><a href="https://blog.museum-digital.org/de/category/technik-design/importer-de/">Importer</a></h2>



<h3 class="wp-block-heading">New Features</h3>



<ul class="wp-block-list">
<li>New parser for CSV exports / imports from <a href="https://www.robotron-daphne.de/">Robotron Daphne</a></li>
</ul>



<h3 class="wp-block-heading">Improvements</h3>



<ul class="wp-block-list">
<li>CSVXML Parser
<ul class="wp-block-list">
<li>New literature-related fields (ISSN, editor, etc.) are now covered</li>



<li>References to wikidata are now respected as tags are imported</li>
</ul>
</li>



<li>The maximum length of any single given tag/keyword is centrally set to 95 characters</li>
</ul>



<h4 class="wp-block-heading">Bugfixes</h4>



<ul class="wp-block-list">
<li>Some more recently added fields from the &#8220;admininstration&#8221; tag of musdb&#8217;s object pages had been read by the importer but their transfer into the database had not been implemented thus far.</li>
</ul>



<h2 class="wp-block-heading"><a href="https://de.about.museum-digital.org/software/nodac/">nodac</a></h2>



<h4 class="wp-block-heading">New Features</h4>



<ul class="wp-block-list">
<li>Tabs are available in the configuration when nodac is installed as a Progressive Web App (<a href="https://de.wikipedia.org/wiki/Progressive_Webanwendung">PWA</a>) (<a href="https://developer.chrome.com/docs/capabilities/tabbed-application-mode">See also</a>)</li>
</ul>



<h2 class="wp-block-heading"><a href="https://csvxml.imports.museum-digital.org/">CSVXML</a></h2>



<h3 class="wp-block-heading">Improvements</h3>



<ul class="wp-block-list">
<li>Added new literature fields: type, editor, edition / issue, ISSN</li>
</ul>
]]></content:encoded>
					
		
		
		<post-thumbnail><url>https://blog.museum-digital.org/wp-content/uploads/2025/06/blog-may-2025-sunflowers-scaled.webp</url><width>600</width><height>343</height></post-thumbnail>	</item>
		<item>
		<title>State of Development, October 2024: Searching Objects Currently On Exhibition, Linking Location and Acquisition of Literature</title>
		<link>https://blog.museum-digital.org/2024/11/06/state-of-development-october-2024-searching-objects-currently-on-exhibition-linking-location-and-acquisition-of-literature/</link>
		
		<dc:creator><![CDATA[Joshua Ramon Enslin]]></dc:creator>
		<pubDate>Wed, 06 Nov 2024 12:58:01 +0000</pubDate>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Importer]]></category>
		<category><![CDATA[musdb]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Change log]]></category>
		<category><![CDATA[Object images]]></category>
		<category><![CDATA[Object search (musdb)]]></category>
		<guid isPermaLink="false">https://blog.museum-digital.org/?p=4194</guid>

					<description><![CDATA[After the blog has been very quiet this year with regard to the technical development of museum-digital, we are now trying to publish the summaries of new developments &#8211; enriched with screenshots &#8211; that are prepared for the monthly “regional administrators” rounds in Germany anyway. These are in the form of listings, and this is <a href="https://blog.museum-digital.org/2024/11/06/state-of-development-october-2024-searching-objects-currently-on-exhibition-linking-location-and-acquisition-of-literature/" class="more-link">...</a>]]></description>
										<content:encoded><![CDATA[
<p>After the blog has been very quiet this year with regard to the technical development of museum-digital, we are now trying to publish the summaries of new developments &#8211; enriched with screenshots &#8211; that are prepared for the monthly “regional administrators” rounds in Germany anyway. </p>



<p>These are in the form of listings, and this is how it should be here too.</p>



<h2 class="wp-block-heading"><a href="https://de.about.museum-digital.org/software/frontend/">Frontend</a></h2>



<h3 class="wp-block-heading">Features &amp; Improvements</h3>



<ul class="wp-block-list">
<li>Some improvements in background scripts, especially better handling of timeouts when calculating “Similar objects” in very large instances</li>



<li>Contributors, linked locations and times for an object group are now listed alphabetically by name</li>



<li>Table headers for event components (who, when, where) are now only displayed in the A4 PDF if there is also content for the row</li>



<li>New search option for object searches: “Is currently on display”</li>



<li>Links to the Themator now use the new URL scheme of the Themator<br>(<a href="https://themator.museum-digital.de/t/690">https://themator.museum-digital.de/t/690</a> instead of <a href="https://themator.museum-digital.de/ausgabe/showthema.php?m_tid=690&amp;tid=690">https://themator.museum-digital.de/ausgabe/showthema.php?m_tid=690&amp;tid=690</a>)</li>
</ul>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="826" height="459" data-id="4185" src="https://blog.museum-digital.org/wp-content/uploads/2024/11/frontend_Suche_verfeinern.png.avif" alt="Screenshot aus dem Frontend von museum-digital." class="wp-image-4185" srcset="https://blog.museum-digital.org/wp-content/uploads/2024/11/frontend_Suche_verfeinern.png.avif 826w, https://blog.museum-digital.org/wp-content/uploads/2024/11/frontend_Suche_verfeinern.png-300x167.avif 300w" sizes="auto, (max-width: 826px) 100vw, 826px" /><figcaption class="wp-element-caption">The new filter option “Currently on display” in the overlay for the advanced search for objects in the frontend of museum -digital.</figcaption></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="548" height="583" data-id="4184" src="https://blog.museum-digital.org/wp-content/uploads/2024/11/frontend_MItwirkende_sortiert.png.avif" alt="Screenshot aus dem Frontend von museum-digital." class="wp-image-4184" srcset="https://blog.museum-digital.org/wp-content/uploads/2024/11/frontend_MItwirkende_sortiert.png.avif 548w, https://blog.museum-digital.org/wp-content/uploads/2024/11/frontend_MItwirkende_sortiert.png-282x300.avif 282w" sizes="auto, (max-width: 548px) 100vw, 548px" /><figcaption class="wp-element-caption">The contributors to an object group are now sorted alphabetically by sorted by name .</figcaption></figure>
</figure>



<h3 class="wp-block-heading">Bugfixes</h3>



<ul class="wp-block-list">
<li>Error when searching for controlled list terms that contained multiple spaces via the “Refine search” overlay (search for license “Public Domain Mark”)</li>



<li>Exactness setting in the “refine search” overlay was not transferred to the actual search query</li>



<li>Simple embedding of an object (analogous to YouTube videos, for example; accessible via the “Cite” menu of an object page) had various errors / now works again</li>
</ul>



<h2 class="wp-block-heading"><a href="https://de.about.museum-digital.org/software/musdb/">musdb</a></h2>



<h3 class="wp-block-heading">Features &amp; Improvements</h3>



<ul class="wp-block-list">
<li>In the API documentation of musdb there is now a note that the frontend also has an API
<ul class="wp-block-list">
<li>Frontend API
<ul class="wp-block-list">
<li>You do not need to authenticate yourself to use the frontend API</li>



<li>The frontend API tends to be faster and easier to use</li>



<li>Is read-only</li>
</ul>
</li>



<li>musdb API
<ul class="wp-block-list">
<li>Can do more: Can also see non-public stocks and fields / data types</li>



<li>Is much more granular (more queries for the same data, but you likely get exactly the data you are looking for instead of e.g. all data known about a given object)</li>



<li>Can be used for writing data</li>
</ul>
</li>
</ul>
</li>



<li>Suggestion lists when searching for vocabulary terms in the side column of the object search page have been revised
<ul class="wp-block-list">
<li>Tooltips appear when hovering over</li>



<li>Implementation in Vanilla JS, removing jQuery</li>



<li>(this means significantly better performance of the search results list in list format, because jQuery no longer needs to be loaded)</li>
</ul>
</li>
</ul>



<ul class="wp-block-list">
<li></li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="416" height="1024" src="https://blog.museum-digital.org/wp-content/uploads/2024/11/musdb_Tooltip_in_Auswahlliste.png-416x1024.avif" alt="Screenshot aus musdb." class="wp-image-4188" srcset="https://blog.museum-digital.org/wp-content/uploads/2024/11/musdb_Tooltip_in_Auswahlliste.png-416x1024.avif 416w, https://blog.museum-digital.org/wp-content/uploads/2024/11/musdb_Tooltip_in_Auswahlliste.png-122x300.avif 122w, https://blog.museum-digital.org/wp-content/uploads/2024/11/musdb_Tooltip_in_Auswahlliste.png.avif 714w" sizes="auto, (max-width: 416px) 100vw, 416px" /><figcaption class="wp-element-caption">The suggestion lists for places, times, persons and keywords in the quick search function of the object search mask have been re-implemented. The main visible benefit is that explanations now appear directly when hovering over the terms in the list.</figcaption></figure>



<ul class="wp-block-list">
<li>User page / Login
<ul class="wp-block-list">
<li>Log of logins now also with IP and user agents</li>



<li>Login via login persisted in the browser (“Remember me”) is logged and displayed</li>



<li>All browsers permanently logged in via cookie are forced to log in again after a password change</li>



<li>New option to invalidate all remembered logins on other devices (browser must be logged in again)</li>
</ul>
</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="694" src="https://blog.museum-digital.org/wp-content/uploads/2024/11/musdb_Login_log.png-1024x694.avif" alt="Screenshot aus musdb." class="wp-image-4186" srcset="https://blog.museum-digital.org/wp-content/uploads/2024/11/musdb_Login_log.png-1024x694.avif 1024w, https://blog.museum-digital.org/wp-content/uploads/2024/11/musdb_Login_log.png-300x203.avif 300w, https://blog.museum-digital.org/wp-content/uploads/2024/11/musdb_Login_log.png-1536x1041.avif 1536w, https://blog.museum-digital.org/wp-content/uploads/2024/11/musdb_Login_log.png.avif 1762w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">The “Login log” in the account settings can be used to track when and in what context one&#8217;s own user account was accessed in musdb. This allows for the identification of account takeovers by third parties. Newly logged and/or displayed are: IP address used to log in, the user agent (identification of the browser) and whether the browser was automatically logged in via a permanent login cookie (“Remember me”).</figcaption></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="942" height="678" src="https://blog.museum-digital.org/wp-content/uploads/2024/11/musdb_User_Erinnerte_Logins_loeschen.png.avif" alt="Screenshot aus musdb." class="wp-image-4189" srcset="https://blog.museum-digital.org/wp-content/uploads/2024/11/musdb_User_Erinnerte_Logins_loeschen.png.avif 942w, https://blog.museum-digital.org/wp-content/uploads/2024/11/musdb_User_Erinnerte_Logins_loeschen.png-300x216.avif 300w" sizes="auto, (max-width: 942px) 100vw, 942px" /><figcaption class="wp-element-caption">A new button in the toolbar of the account settings in musdb allows you to log out all permanently logged in browsers / devices from your own account.</figcaption></figure>



<ul class="wp-block-list">
<li>Object
<ul class="wp-block-list">
<li>More restrictions for the publication of object data records.</li>



<li>An object can no longer be published if:
<ul class="wp-block-list">
<li>&#8230; the object name is the same as the object description</li>



<li>&#8230; the description contains the character string “lorem ipsum”</li>
</ul>
</li>



<li>When object entries are unpublished / hidden, the images linked to the image are renamed (thus invalidating links to the images). When publishing the object again, this is reversed so that existing links work again.</li>



<li>Spaces in selection lists are now listed alphabetically as the actual location when linking</li>
</ul>
</li>



<li>Literature
<ul class="wp-block-list">
<li>Acquisitions can now be linked to literature
<ul class="wp-block-list">
<li>Previous owners etc. can thus be linked to a literature entry</li>
</ul>
</li>



<li>Spaces (actual location) can be linked to literature</li>
</ul>
</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="504" src="https://blog.museum-digital.org/wp-content/uploads/2024/11/musdb_Reiter_Verwaltung.png-1024x504.avif" alt="Screenshot aus musdb." class="wp-image-4187" srcset="https://blog.museum-digital.org/wp-content/uploads/2024/11/musdb_Reiter_Verwaltung.png-1024x504.avif 1024w, https://blog.museum-digital.org/wp-content/uploads/2024/11/musdb_Reiter_Verwaltung.png-300x148.avif 300w, https://blog.museum-digital.org/wp-content/uploads/2024/11/musdb_Reiter_Verwaltung.png-1536x756.avif 1536w, https://blog.museum-digital.org/wp-content/uploads/2024/11/musdb_Reiter_Verwaltung.png.avif 1800w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Via the new tab “Administration” tab on tab on the literature editing page, the location and access context of the literature entry can be linked. This can be useful if the literature module is also used to manage the museum library. is also used to manage the museum library .</figcaption></figure>



<h3 class="wp-block-heading">Bugfixes</h3>



<ul class="wp-block-list">
<li>Overlay for setting searches for objects: Multi-word search terms were converted into multiple searches instead of being searched as a string of words (“red helmet” &gt; “red” AND “helmet” instead of “red helmet”)</li>



<li>Error when searching for controlled list terms that contained multiple spaces via the “Refine search” overlay (search for license “Public Domain Mark”)</li>
</ul>



<h2 class="wp-block-heading"><a href="https://blog.museum-digital.org/de/category/technik-design/importer-de/">Importer</a></h2>



<ul class="wp-block-list">
<li>Link between literature and spaces (actual location) as well as acquisitions is implemented in the &#8220;core&#8221; of the import tool</li>



<li>ImageByInvno parser (assignment of images to objects via inventory numbers contained in the file name) can now be used to import PDF files</li>
</ul>



<h2 class="wp-block-heading"><a href="https://files.museum-digital.org/">files.museum-digital.org</a></h2>



<ul class="wp-block-list">
<li>Added a small script to enhance PDF metadata based on an XML sidecar file. See e.g.: <a href="https://files.museum-digital.org/de/Praesentationen/2024-10-18_md-deutschland-eV-stellt-sich-vor_Usertreffen_MA.xml">https://files.museum-digital.org/de/Praesentationen/2024-10-18_md-deutschland-eV-stellt-sich-vor_Usertreffen_MA.xml</a></li>
</ul>



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



<p>Main post image generated using illustriousXL_smoothftSPO</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 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/2024/11/banner.png.avif</url><width>600</width><height>336</height></post-thumbnail>	</item>
		<item>
		<title>Reconciliation APIs arrive to museum-digital</title>
		<link>https://blog.museum-digital.org/2024/07/03/reconciliation-apis-arrive-to-museum-digital/</link>
		
		<dc:creator><![CDATA[Joshua Ramon Enslin]]></dc:creator>
		<pubDate>Wed, 03 Jul 2024 01:36:15 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Frontend]]></category>
		<category><![CDATA[md:term]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Controlled Vocabularies]]></category>
		<category><![CDATA[Data quality]]></category>
		<category><![CDATA[New Features]]></category>
		<category><![CDATA[Reconciliation API]]></category>
		<guid isPermaLink="false">https://blog.museum-digital.org/?p=4164</guid>

					<description><![CDATA[Imagine you have a spreadsheet with potentially unclean data or data that is not confirmed to be interoperable. A museum may want to migrate their data to a different system or share it with an aggregator or a researcher may want to analyze data from different museums where each has their own thesaurus. To make <a href="https://blog.museum-digital.org/2024/07/03/reconciliation-apis-arrive-to-museum-digital/" class="more-link">...</a>]]></description>
										<content:encoded><![CDATA[
<p>Imagine you have a spreadsheet with potentially unclean data or data that is not confirmed to be interoperable. A museum may want to migrate their data to a different system or share it with an aggregator or a researcher may want to analyze data from different museums where each has their own thesaurus. To make the data legible to an external service or to understand that where one museum says &#8220;shoe&#8221; and another says &#8220;shoes&#8221; the exact same thing is meant, it makes sense to check the terms in question against larger (norm data) databases and add their ID for the entity in question. Thus, &#8220;shoe&#8221; and &#8220;shoes&#8221; become understandable as the same.</p>



<p>This process is called reconciliation. One of the most used tools to actually connect to external services and reconcile data this way is OpenRefine. But to do so, OpenRefine needs to be able to communicate with such services. The open standard by which they communicate is the <a href="https://www.w3.org/community/reports/reconciliation/CG-FINAL-specs-0.2-20230410/">Reconciliation API</a> specification. Depending on how completely the API has been implemented, the consuming software may offer additional features such as offering alternatives, suggesting entries or displaying previews of entries made available through the API.</p>



<p>Since this weekend, museum-digital offers such APIs for different types of data.</p>



<p>In md:term, reconciliation APIs were added for each of the available controlled vocabularies. Besides the controlled vocabularies of museum-digital (tags, actors, places, times) this means that users of OpenRefine can now reconcile their data with select other vocabularies such as the <em>Oberbegriffsdatei</em> or the <em>hessische Systematik</em>. Besides implementing exact and partial matching of requested terms, this implementation features previews.</p>



<p>Two additional points are noteworthy in terms of md:term&#8217;s implementation of the reconciliation API specification.</p>



<p>1) Similar to museum-digital&#8217;s import tool, md:term&#8217;s reconciliation service attempts to clean up entered terms before reconciling. As such times are automatically rewritten (&#8220;1912 bis 1914&#8221; [1912 through 1914] becomes &#8220;1912-1914&#8221;), question marks and other markers of uncertainty are removed, and &#8211; whereever known &#8211; autocorrections stored in the city (Frankfurt a.M. &gt; Frankfurt am Main) are applied to the terms.<br>2) Multilinguality: Whereas the current version of the regular reconciliation API does not consider multilinguality, the above-mentioned auto-corrections and rewriting are language-dependent. And so are previews and names of entities in md:term for museum-digital&#8217;s vocabularies. Hence, an additional parameter for the requested language can be supplied.</p>



<p>Reconciliation APIs for md:term may be found on the download page linked in the sidebar. Going this way, the language parameter is automatically set to the user&#8217;s current language.</p>



<h2 class="wp-block-heading">Reconciliation by Inventory Number</h2>



<p>To identify objects available published through museum-digital, a reconciliation API now exists in the frontend as well. It can be found at <code>/reconcile/invno/</code> on each instance of museum-digital (e.g. <a href="https://hessen.museum-digital.de/reconcile/invno/">here</a> for the Hessian instance.<br>It reconciles entries by their inventory number. An additional number may be added to the URL to search only within a single institution. Where <code>https://hessen.museum-digital.de/reconcile/invno/</code> allows matching objects by inventory numbers across all institutions publishing their objects on the Hessian instance of museum-digital, the <code>https://hessen.museum-digital.de/reconcile/invno/1</code> will thus only search within the collections of the Freies Deutsches Hochstift / Frankfurter Goethe-Museum (the institution of the ID 1).</p>



<h2 class="wp-block-heading">Reconciling GLAM data using the MD:term reconciliation API: an example</h2>



<p><em>As they have much more experience with OpenRefine, I asked the colleagues from digiS whether they could provide a description of how to actually use the reconciliation API from a user perspective. This section is theirs:</em></p>



<p>Using the reconciliation API in OpenRefine is straightforward (cf. the <a href="https://openrefine.org/docs/manual/reconciling">OpenRefine documentation</a> for a general introduction). Let’s walk through a typical workflow using GLAM data and the MD:term API!</p>



<p>Our sample dataset (adapted from <a href="https://berlin.museum-digital.de/collection/806">actual data provided by the Sportmuseum Berlin</a>) features, among others, columns on material/technique, object type and places.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="398" data-id="4166" src="https://blog.museum-digital.org/wp-content/uploads/2024/07/OpenRefine-01-Overview-1024x398.png" alt="" class="wp-image-4166" srcset="https://blog.museum-digital.org/wp-content/uploads/2024/07/OpenRefine-01-Overview-1024x398.png 1024w, https://blog.museum-digital.org/wp-content/uploads/2024/07/OpenRefine-01-Overview-300x116.png 300w, https://blog.museum-digital.org/wp-content/uploads/2024/07/OpenRefine-01-Overview-1536x596.png 1536w, https://blog.museum-digital.org/wp-content/uploads/2024/07/OpenRefine-01-Overview.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</figure>



<p>These elements are just strings and consequently not linked to any authority file. Strings are not guaranteed to be unequivocal, nor are they particularly suitable for retrieval, programmatic reuse or multilingual contexts. In order for the data to be as useful as possible, let’s reconcile them with an authority file, in our case the MD:term vocabularies now readily accessible also via a reconciliation API.</p>



<p>If you have never used the MD:term reconciliation service you first have to add it to OpenRefine. Click on the small triangle in the header of the column you want to reconcile. Select <em>Reconcile → Start reconciling. </em></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="838" height="1024" src="https://blog.museum-digital.org/wp-content/uploads/2024/07/OpenRefine-02-Start-reconcile-838x1024.png" alt="" class="wp-image-4167" srcset="https://blog.museum-digital.org/wp-content/uploads/2024/07/OpenRefine-02-Start-reconcile-838x1024.png 838w, https://blog.museum-digital.org/wp-content/uploads/2024/07/OpenRefine-02-Start-reconcile-245x300.png 245w, https://blog.museum-digital.org/wp-content/uploads/2024/07/OpenRefine-02-Start-reconcile.png 903w" sizes="auto, (max-width: 838px) 100vw, 838px" /></figure>



<p>In the following window, add the API endpoint you want to use (cf. <a href="https://term.museum-digital.de/downloads">https://term.museum-digital.de/downloads</a> for a list of MD:term endpoints).</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1004" height="306" src="https://blog.museum-digital.org/wp-content/uploads/2024/07/OpenRefine-03-add-service.png" alt="" class="wp-image-4168" srcset="https://blog.museum-digital.org/wp-content/uploads/2024/07/OpenRefine-03-add-service.png 1004w, https://blog.museum-digital.org/wp-content/uploads/2024/07/OpenRefine-03-add-service-300x91.png 300w" sizes="auto, (max-width: 1004px) 100vw, 1004px" /></figure>



<p>Now you can select the service for reconciliation:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="928" height="473" src="https://blog.museum-digital.org/wp-content/uploads/2024/07/OpenRefine-04-Reconcile1.png" alt="" class="wp-image-4169" srcset="https://blog.museum-digital.org/wp-content/uploads/2024/07/OpenRefine-04-Reconcile1.png 928w, https://blog.museum-digital.org/wp-content/uploads/2024/07/OpenRefine-04-Reconcile1-300x153.png 300w" sizes="auto, (max-width: 928px) 100vw, 928px" /></figure>



<p>In the following window, the only really important decision you have to take is whether or not to automatically match “candidates with high confidence”. Auto-matching speeds up the whole process, but you have less control over what happens with your data.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="671" src="https://blog.museum-digital.org/wp-content/uploads/2024/07/OpenRefine-05-Reconcile2-1024x671.png" alt="" class="wp-image-4170" srcset="https://blog.museum-digital.org/wp-content/uploads/2024/07/OpenRefine-05-Reconcile2-1024x671.png 1024w, https://blog.museum-digital.org/wp-content/uploads/2024/07/OpenRefine-05-Reconcile2-300x197.png 300w, https://blog.museum-digital.org/wp-content/uploads/2024/07/OpenRefine-05-Reconcile2-1536x1006.png 1536w, https://blog.museum-digital.org/wp-content/uploads/2024/07/OpenRefine-05-Reconcile2.png 1804w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Hit “Start reconciling” to trigger the reconciliation process. You can now see that the strings have become links. In fact, they have been linked to possible entries in MD:term. If you choose the auto-match option, the most probable candidates have been selected automatically. If not, you have to select the candidate you want to match manually by clicking the arrow to the left. One arrow matches the value in the selected row only, two arrow match all identical values in the entire columns automatically.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1022" height="626" src="https://blog.museum-digital.org/wp-content/uploads/2024/07/OpenRefine-06-Enriched.png" alt="" class="wp-image-4171" srcset="https://blog.museum-digital.org/wp-content/uploads/2024/07/OpenRefine-06-Enriched.png 1022w, https://blog.museum-digital.org/wp-content/uploads/2024/07/OpenRefine-06-Enriched-300x184.png 300w" sizes="auto, (max-width: 1022px) 100vw, 1022px" /></figure>



<p>Once you’re done with the reconciliation you can, for example, write the IDs of the reconciled values into a new column. Click once again on the small triangle on the left side of the top row of the column you’re working on. Go to <em>Reconcile </em>and <em>Add entity identifiers column.</em></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="696" height="590" src="https://blog.museum-digital.org/wp-content/uploads/2024/07/OpenRefine-07-Add-identifier-column.png" alt="" class="wp-image-4172" srcset="https://blog.museum-digital.org/wp-content/uploads/2024/07/OpenRefine-07-Add-identifier-column.png 696w, https://blog.museum-digital.org/wp-content/uploads/2024/07/OpenRefine-07-Add-identifier-column-300x254.png 300w" sizes="auto, (max-width: 696px) 100vw, 696px" /></figure>



<p>Name the column that is to be added and you will have a new column that contains the MD:term IDs.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="406" src="https://blog.museum-digital.org/wp-content/uploads/2024/07/OpenRefine-08-final-1024x406.png" alt="" class="wp-image-4173" srcset="https://blog.museum-digital.org/wp-content/uploads/2024/07/OpenRefine-08-final-1024x406.png 1024w, https://blog.museum-digital.org/wp-content/uploads/2024/07/OpenRefine-08-final-300x119.png 300w, https://blog.museum-digital.org/wp-content/uploads/2024/07/OpenRefine-08-final.png 1362w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>API documentation for frontend and md:term</title>
		<link>https://blog.museum-digital.org/2023/08/16/api-documentation-for-frontend-and-mdterm/</link>
		
		<dc:creator><![CDATA[Joshua Ramon Enslin]]></dc:creator>
		<pubDate>Wed, 16 Aug 2023 21:44:38 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Frontend]]></category>
		<category><![CDATA[md:term]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[New Features]]></category>
		<guid isPermaLink="false">https://blog.museum-digital.org/?p=3831</guid>

					<description><![CDATA[md:term was designed to provide an API first and foremost. The frontend supported a full API providing to all access that the HTML version does since about 2016. We never got around to fully and systematically document the APIs however. Starting today, an OpenAPI documentation is available for both md:term and the frontend of museum-digital. <a href="https://blog.museum-digital.org/2023/08/16/api-documentation-for-frontend-and-mdterm/" class="more-link">...</a>]]></description>
										<content:encoded><![CDATA[
<p>md:term was designed to provide an API first and foremost. The frontend supported a full API providing to all access that the HTML version does since about 2016. We never got around to fully and systematically document the APIs however. Starting today, an <a href="https://www.openapis.org/">OpenAPI</a> documentation is available for both <a href="https://en.about.museum-digital.org/software/term/">md:term</a> and the <a href="https://en.about.museum-digital.org/software/frontend/">frontend</a> of museum-digital.</p>



<p>Along with this, we can gladly annouce a new, updated and much more performant search API for md:term (see the API documentation for now).</p>



<p>You can access the documentation here:</p>



<ul class="wp-block-list">
<li><a href="https://term.museum-digital.de/swagger/">md:term</a></li>



<li><a href="https://global.museum-digital.org/swagger/">frontend</a> (via the global portal)</li>
</ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Upcoming Major Update to musdb</title>
		<link>https://blog.museum-digital.org/2023/01/04/upcoming-major-update-to-musdb/</link>
					<comments>https://blog.museum-digital.org/2023/01/04/upcoming-major-update-to-musdb/#respond</comments>
		
		<dc:creator><![CDATA[Joshua Ramon Enslin]]></dc:creator>
		<pubDate>Wed, 04 Jan 2023 01:55:20 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[musdb]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Custom reports (musdb)]]></category>
		<category><![CDATA[EODEM]]></category>
		<category><![CDATA[Exhibition management]]></category>
		<category><![CDATA[Integrations]]></category>
		<category><![CDATA[Loan management]]></category>
		<category><![CDATA[Map views]]></category>
		<category><![CDATA[New Features]]></category>
		<category><![CDATA[Object editing (musdb)]]></category>
		<category><![CDATA[Object search (musdb)]]></category>
		<guid isPermaLink="false">https://blog.museum-digital.org/?p=3417</guid>

					<description><![CDATA[Usually the development of musdb (and the other parts of museum-digital software) follows a rolling release paradigm. A new feature is developed, tested, and then distributed. Updates are &#8211; usually &#8211; not held back. Over the last month, we made an exception, as there will be a lot of new features and a slight redesign <a href="https://blog.museum-digital.org/2023/01/04/upcoming-major-update-to-musdb/" class="more-link">...</a>]]></description>
										<content:encoded><![CDATA[
<p>Usually the development of <a href="https://en.about.museum-digital.org/software/musdb/">musdb</a> (and the other parts of museum-digital software) follows a rolling release paradigm. A new feature is developed, tested, and then distributed. Updates are &#8211; usually &#8211; not held back. Over the last month, we made an exception, as there will be a lot of new features and a slight redesign to musdb overall.</p>



<p>To allow administrators and users to get acquainted with the updated design and new features ahead of time, a preview follows below. The update will be distributed on January 11th.</p>



<h2 class="wp-block-heading" id="a-slight-redesign">A slight redesign</h2>



<p>Sometime in late 2020 or early 2021 &#8211; when the reworked dashboard was released &#8211; we introduced a new, different design to musdb. While the old design had sidebars with a margin to the window border, the dashboard&#8217;s sidebar goes all the way to the windows left end. Where the old design positioned all page contents (minus sidebars and navigation) directly on the background, the dashboard features clearly defined boxes for each section of a page.</p>



<p>Bit by bit, pages that had undergone major updates (e.g. the institution-wide settings page and the image editing page) or were newly added altogether (task management; calendar) also received the new page layout. That way, we could slowly phase in the new design and hopefully managed to warm up users to what musdb would look like in the future.</p>



<p>But keeping two different page layouts side by side also comes at the cost of a harder maintenance and (obviously) a less consistent user experience. With the update, the &#8220;new&#8221; page layout will hence be extended to all pages.</p>



<p>A few additional improvements beyond even what the dashboard suggested have been made however. Sidebars are now used for displaying additional, directly usable information gained from a given entity&#8217;s data much more frequently (e.g. a copy-pastable address block of a contact is now displayed on the contact / address book page). And sidebars of editing pages now (almost) always come with an indicator displaying where the user currently is (&#8220;collection&#8221;) and the ID of the given entity. This hopefully allows users to better reference the entities down the line &#8211; especially when integrating musdb with other applications like Nextcloud (see below).</p>



<p>The clearly distinguishable boxes for each section of a page are now also used on pages for adding or updating entities. Again, to allow users a quicker grasp of where they actually are, these pages also come with much more visible headlines.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="799" src="https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Redesign_Object-page-1024x799.webp" alt="" class="wp-image-3424" srcset="https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Redesign_Object-page-1024x799.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Redesign_Object-page-300x234.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Redesign_Object-page-1536x1198.webp 1536w, https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Redesign_Object-page.webp 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Editing pages now feature boxes around the main sections of the page. In the sidebar there is a indicator (colored in the color of the current section of musdb) showing that this is an object page.</figcaption></figure>



<h3 class="wp-block-heading" id="in-other-news">In other news &#8230;</h3>



<p>In November 2022 we introduced maps on which the location of a museum or an object&#8217;s closer, unnamed location (e.g. a finding spot of archeological objects) could be determined by a simple click on the map. The colleagues from Baden-Württemberg requested to be able to enter geo-coordinates directly into an input field that interacts with the map, as they already know the coordinates they were to select. The maps thus now come with a button on the top right that allows the user to open a dialogue, in which the location can be entered using pastable geo-coordinates.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="633" src="https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Coordinates_on_map-1024x633.webp" alt="" class="wp-image-3420" srcset="https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Coordinates_on_map-1024x633.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Coordinates_on_map-300x186.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Coordinates_on_map.webp 1536w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading" id="user-defined-reports">User-Defined Reports in musdb</h2>



<p>Thus far reports in musdb were exclusively pre-written and provided together with the rest of the software. But in the end, museums are often bound by local regulations or already have forms or reports that may be generally used for a given purpose. Users can now define templates for report formats themselves and generate reports based on a search result, an exhibition (and its objects) or a loan (and its objects) independently. This may e.g. be used for automatically generating loan contracts.</p>



<p>To define a report format, one needs to hold the user role &#8220;museum director&#8221; and navigate to the institution-wide settings page. At the bottom of the page, one can upload a report template with placeholders marking the spots where object information is to be filled in by the system.</p>



<p>To simplify the implementation and improve security on the server side, only plain-text reports may be uploaded. HTML may be the most useful format for textual information with formatting; CSV for tabular information.</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Institution-settings_Custom-Reports-1024x721.webp" alt="" class="wp-image-3422" width="840" height="591" srcset="https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Institution-settings_Custom-Reports-1024x721.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Institution-settings_Custom-Reports-300x211.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Institution-settings_Custom-Reports-1536x1082.webp 1536w, https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Institution-settings_Custom-Reports.webp 1920w" sizes="auto, (max-width: 840px) 100vw, 840px" /><figcaption class="wp-element-caption"><br>Custom report templates and scheduling of timed reports on instituion-specific settings page</figcaption></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="803" src="https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Custom_Report_Object_List-1024x803.webp" alt="" class="wp-image-3421" srcset="https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Custom_Report_Object_List-1024x803.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Custom_Report_Object_List-300x235.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Custom_Report_Object_List-1536x1204.webp 1536w, https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Custom_Report_Object_List.webp 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Instituion-specific, custom reports accessible in the sidebar of object list</figcaption></figure>



<h2 class="wp-block-heading" id="timed-generation-of-reports-and-exports">Timed Generation of Reports and Exports</h2>



<p>One feature that was often requested, but thus far hard to implement, is to enable museums to generate exports automatically and without user input. This is now possible, both for XML reports and the new custom report formats.</p>



<p>Timed reports and exports are configurable on the institution-wide settings page. Each timed report requires the setting of:</p>



<ul class="wp-block-list">
<li>a start date (when should the first report be sent?)</li>



<li>an interval (weekly, monthly, annual)</li>



<li>a selector; usually a search query, written in the query language for searching objects</li>



<li>mail address of a recipient</li>
</ul>



<p><em>Note: As musdb is used by many museums together, we had to set some limitation on this feature. If an export file size exceeds 10 MB (which is also a size that many mail servers simply would deny for attachments), the configuration for the automatic report is automatically removed and a warning mail is sent to the recipient.</em></p>



<h2 class="wp-block-heading" id="literature-entries">Literature entries</h2>



<p>Probably the aspect of musdb with the most requests for improvements is the handling of literature entries. Almost any request for making literature entries interoperable with other software (e.g. Zotero for bibliography management or library catalogues) essentially requires a field for defining the <strong>type of a given literature entry</strong>. The same goes for most common citation standards: Within a citation style, the way of citing for books differs from that for articles, for webpages, or for archival material.</p>



<p>We have now added that rather essential field and &#8211; as that is possible using the new field &#8211; display a <strong>BibTeX</strong> representation of the literature entry in the new sidebar of literature pages.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="787" src="https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Updates_Literature_BibTeX_Type-1024x787.webp" alt="" class="wp-image-3426" srcset="https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Updates_Literature_BibTeX_Type-1024x787.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Updates_Literature_BibTeX_Type-300x231.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Updates_Literature_BibTeX_Type-1536x1181.webp 1536w, https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Updates_Literature_BibTeX_Type.webp 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">New features on literature pages: A field &#8220;type&#8221; has been added and a BibTeX representation of the literature entry is displayed in the sidebar.</figcaption></figure>



<h2 class="wp-block-heading" id="user-specific-defaults-for-adding-new-objects">User-specific defaults for adding new Objects</h2>



<p>Museums have specializations, and so do people. It&#8217;s not rare for people to almost always enter objects of e.g. a given object type, especially if they are working within the context of a project focusing on a given collection (&#8220;Digitize all paintings of the museum&#8221;). Similarly, all users in the museum likely use the same units for values and measurements of objects.</p>



<p>To speed up the data entry in the case of such fields with unchanging contents, users will now be able set default values for &#8220;direct&#8221; text fields of an object. Unfortunately, setting defaults for links [e.g. to collections or spaces] and repeatable fields is much harder to implement and not yet covered by this update. Default values for the form for adding new objects can be set in the personal settings.</p>



<p>Take note that defaults can only be set for fields that are displayed on the object addition page. The most basic and generally required fields aside, one can determine which fields are available on the object addition page in the institution-wide settings.</p>



<h2 class="wp-block-heading" id="loans">Loans</h2>



<p>To be able to better represent the process of a loan in a museum &#8211; from the request to the discussion with insurers to the final sending of the objects &#8211; we have now added a concise but hopefully reasonably complete <strong>checklist</strong> of the steps a loan takes within a museum in the sidebar of the loans page. The checklist covers the most common steps within a loan lifecycle and allows simply marking a progress in working on the loan. The last user to update a given entry in the checklist is displayed if a field has been updated at one point to allow following the progress later on.</p>



<p>We were also notified of a very obvious, but thus far overlooked case: <strong>Loan requests that are denied</strong>. We added the missing field to cover this status of a loan.</p>



<p>Finally, it is now possible to <strong>links loans to exhibitions</strong>. All loans of an exhibition can be listed together on a tab of the respective exhibition page.</p>



<p>To return to the checklist for a moment: One of the more noteworthy selectable points in the loan checklist is &#8220;metadata exchanged&#8221;. Adding this point may be opinionated, but hints at the next steps. In November 2022 we added the option to import loan object information following the upcoming EODEM standard. We hope to be able to implement an EODEM export before the update is pushed to the production instances, so that at least museums using musdb can handle loans with minimal duplicate data entry.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="702" src="https://blog.museum-digital.org/wp-content/uploads/2023/01/20230103_musdb_Loan_Checklist-1024x702.webp" alt="" class="wp-image-3427" srcset="https://blog.museum-digital.org/wp-content/uploads/2023/01/20230103_musdb_Loan_Checklist-1024x702.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230103_musdb_Loan_Checklist-300x206.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230103_musdb_Loan_Checklist-1536x1053.webp 1536w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230103_musdb_Loan_Checklist.webp 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Loan pages now allow tracking the status of the loan using a checklist and the new &#8220;Loan denied&#8221; field.</figcaption></figure>



<h2 class="wp-block-heading" id="exhibitions">Exhibitions</h2>



<p>As mentioned above, loans can now be linked to exhibitions. A new tab on the exhibition page allows listing all loans that happened in the context of the given exhibition.</p>



<p>The list of objects of an exhibition is now also redesigned. When linking an object with an exhibition, it is now possible to enter the exhibition room in which the object will be displayed. If this information has been entered for the objects of an exhibition, the list of objects of that exhibition will be grouped by the objects&#8217; locations.</p>



<h2 class="wp-block-heading" id="integration-with-nextcloud">Integration with Nextcloud</h2>



<p>Keeping with the theme of allowing for a deeper integration of musdb into the actual everyday work of museums, we have added the option to integrate musdb with a museum&#8217;s Nextcloud instance. If the Nextcloud integration is activated, a new widget will be accessible in the sidebar of most editing pages (e.g. for loans).</p>



<p>This widget displays a reference ID of the entity (e.g. LOA-000000005 for the loan with the ID 5). If this ID is present in a folder or filename on Nextcloud (say, there is a folder for everything concerning the loan, which will then be named something like &#8220;2022 Loan Brisbane [LOA-000000005]&#8221;), musdb can identify the folder or file as belonging to loan and list it in the widget. If the ID is present in a folder name, the folder contents will be listed in musdb.</p>



<p>For this integration to work, musdb connects to Nextcloud using WebDAV (unfortunately we needed to use some properties exclusive to Nextcloud&#8217;s and likely OwnCloud&#8217;s WebDAV interfaces, which makes our integration incompatible to other storage solutions that also use WebDAV like Google Drive). And to connect via WebDAV, it needs the information to get an authorized access.</p>



<p>To configure the Nextcloud integration, one hence first has to set the base URL to an institution&#8217;s Nextcloud instance on the institution-wide settings page. This only has to be done once per institution and simply gives musdb the information necessary to locate the Nextcloud instance.<br>Once a base URL for the Nextcloud instance has been entered, the username and password for Nextcloud (ideally an app token [can be generated in Settings &gt; Security in Nextcloud]) can be entered on the personal settings page in musdb. Once those are entered, the Nextcloud integration is activated.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="702" src="https://blog.museum-digital.org/wp-content/uploads/2023/01/20230103_musdb_Nextcloud_Integration-1024x702.webp" alt="" class="wp-image-3428" srcset="https://blog.museum-digital.org/wp-content/uploads/2023/01/20230103_musdb_Nextcloud_Integration-1024x702.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230103_musdb_Nextcloud_Integration-300x206.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230103_musdb_Nextcloud_Integration-1536x1053.webp 1536w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230103_musdb_Nextcloud_Integration.webp 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">The Nextcloud integration widget can be found at the bottom left of the page in the sidebar.</figcaption></figure>



<h2 class="wp-block-heading" id="institution-and-contacts-pages">Institution and contacts pages</h2>



<p>The layout aside, institution and contacts pages have only been minimally changed. A simple but maybe useful small widget has however been added in the sidebars of these pages: An address block to quickly copy-paste the address to e.g. a letter head.</p>



<h2 class="wp-block-heading" id="objects">Objects</h2>



<p>Finally: Objects. Objects have seen the addition of a lot of new fields, mainly for administrative purposes.</p>



<p>On the &#8220;administration&#8221; tab of object pages, one can now <strong>reserve</strong> an object. If an object is currently reserved or will be so in the next week, an indicator will appear in the sidebar.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="702" src="https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Reserved_object-1024x702.webp" alt="" class="wp-image-3425" srcset="https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Reserved_object-1024x702.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Reserved_object-300x206.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Reserved_object-1536x1053.webp 1536w, https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Reserved_object.webp 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">This object is currently reserved. Hence, a notification is displayed at the top of the sidebar.</figcaption></figure>



<p>For logging an object&#8217;s history within the museum, we added a number of logs for:</p>



<ul class="wp-block-list">
<li>Damages to an object (Tab: &#8220;Restoration&#8221;)</li>



<li>Conservation and restoration treatments for an object (Tab: &#8220;Restoration&#8221;)</li>



<li>Scheduled Checks (Tab: Administration). These checks cover e.g. condition checks, but also audits of whether the object information in musdb is complete. This section comes with a notification that can be sent if a check is upcoming.</li>
</ul>



<p>Deaccessions can similarly now be covered in musdb.</p>



<p>Again reaching for the most practical applications, we have finally implemented linking an object&#8217;s actual / permanent location as a &#8220;space&#8221; rather than simply identifying it using a text field. This way, it is now possible to search for objects that are not currently in the location their expected permanent location.</p>



<p>We also added some simple text fields that are often present in imports and suggested by the Canadian Heritage Information Network&#8217;s software requirements checklist. Namely: sex of the object (for biological specimen), the color of the object, and form of the object.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="909" src="https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Object_Damages_Restoration-1024x909.webp" alt="" class="wp-image-3423" srcset="https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Object_Damages_Restoration-1024x909.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Object_Damages_Restoration-300x266.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Object_Damages_Restoration-1536x1363.webp 1536w, https://blog.museum-digital.org/wp-content/uploads/2023/01/202301_musdb_Object_Damages_Restoration.webp 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Damages and restoration / conservation log on object page (Tab: Restoration)</figcaption></figure>



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



<p>Post image: <a href="https://www.jpl.nasa.gov/galleries/visions-of-the-future">Courtesy NASA/JPL-Caltech</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.museum-digital.org/2023/01/04/upcoming-major-update-to-musdb/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-thumbnail><url>https://blog.museum-digital.org/wp-content/uploads/2023/01/mars.webp</url><width>600</width><height>455</height></post-thumbnail>	</item>
		<item>
		<title>Monthly museum-digital user meetup (August 2022) / New features</title>
		<link>https://blog.museum-digital.org/2022/08/16/monthly-museum-digital-user-meetup-august-2022-new-features/</link>
		
		<dc:creator><![CDATA[Joshua Ramon Enslin]]></dc:creator>
		<pubDate>Tue, 16 Aug 2022 12:45:11 +0000</pubDate>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Importer]]></category>
		<category><![CDATA[musdb]]></category>
		<category><![CDATA[Project page www.museum-digital.org]]></category>
		<category><![CDATA["Objects on map"]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Map views]]></category>
		<category><![CDATA[Monthly meetup]]></category>
		<category><![CDATA[New Features]]></category>
		<category><![CDATA[Object search (musdb)]]></category>
		<category><![CDATA[Object selection (musdb)]]></category>
		<guid isPermaLink="false">https://blog.museum-digital.org/?p=3351</guid>

					<description><![CDATA[On Tuesday last week we had our first international user meetup. As proposed, we mainly discussed recent updates and new features before opening up the general discussion. In the process, we also wrote a list of the new features introduced with short notes on each. You can find it below. The next monthly meetup is <a href="https://blog.museum-digital.org/2022/08/16/monthly-museum-digital-user-meetup-august-2022-new-features/" class="more-link">...</a>]]></description>
										<content:encoded><![CDATA[
<p>On Tuesday last week we had our first international user meetup. As proposed, we mainly discussed recent updates and new features before opening up the general discussion. In the process, we also wrote a list of the new features introduced with short notes on each. You can find it below.</p>



<p>The next monthly meetup is scheduled for Tuesday, September 6th 2022, 5 p.m. (this post will be updated with a link to the meeting about a week before the meeting, as we are currently trying to organize a meeting room at Zoom or a similar service).</p>



<p><strong>Update</strong>: The meeting will take place at https://meet.jit.si/museum-digital-meetup-202209</p>



<span id="more-3351"></span>



<h2 class="wp-block-heading">Recent Updates and New Features</h2>



<h3 class="wp-block-heading">musdb</h3>



<h4 class="wp-block-heading">XML Export</h4>



<p>Creating new export formats for XML exports (beyond the main export formats md:xml and LIDO 1.0) is now possible using XSL files stored in a new git sub-repository. This git sub-repository is open source. As registration on our main Gitea instance is however restricted, please send a mail before contributing.</p>



<p>In line with this, we have also improved the representation of uncertainty in our default LIDO 1.0 exports. As version 1.1 of the LIDO standard has been recently released, we have also begun working on a LIDO 1.1 export.</p>



<p>Note: The pre-generated exports available through the &#8220;quick export&#8221; option are and will still only generated for LIDO 1.0 and md:xml.</p>



<h4 class="wp-block-heading">Required coordinates when adding new museums</h4>



<p>This update is only relevant to regional administrators. Coordinates of the institution are now required for adding new institutions.</p>



<h4 class="wp-block-heading">QR Codes</h4>



<p>QR codes can now also be exported in <a href="https://en.wikipedia.org/wiki/Scalable_Vector_Graphics">SVG</a> and <a href="https://en.wikipedia.org/wiki/Encapsulated_PostScript">EPS</a>, the two primary vector graphics format for use on the web and professional print layouting.</p>



<p>Another important improvement on QR codes is a new page that simply lists all QR codes leading to the object editing pages of a given search result in musdb. This page offers the option to manually set the size of the QR codes, so that suitable QR codes for internal collection and location management can be printed in bulk in a less paper-consuming way.</p>



<h4 class="wp-block-heading">Calendar</h4>



<p>A calendar view for all the events in the museum (events, start and end of an exhibition, start and end of loans) is now available. It can be reached by hovering the mouse over the puzzle symbol in the navigation. On the calendar page, single calendars can be selected or deselected and one subscribed to using one&#8217;s external calendar programm (e.g. Outlook, Thunderbird, or a mobile phone&#8217;s calendar).</p>



<p>The calendar, and especially the possibility to subscribe to the calendars, is also a first step towards enabling users to set reminders on object pages as this makes much more sense if the reminders can be integrated with one&#8217;s regular calendar application.</p>



<p>The calendar view is built using <a href="https://ui.toast.com/tui-calendar">TUI calendar</a>.</p>



<h4 class="wp-block-heading">Institution-wide Settings and Adding Objects</h4>



<p>The page for institution-wide settings has been re-designed to make it easier navigatable. The table of contents is now always visible, and the section &#8220;links to the institution elsewhere on the web&#8221; has been moved to the institution page.</p>



<p>There however are also some new options on the page. On the one hand, users can now enable or disable the image categorization when uploading images directly when adding new objects (the image recognition is render blocking and often hurts performance more than it actually benefits the inventorization). On the other, it is now possible to add additional fields to be directly accessible upon adding new objects and to make these required. It thus, for example, becomes possible to require a location to be provided before it can be recorded in the system altogether.</p>



<h4 class="wp-block-heading">Watch list</h4>



<p>The watch list feature has been completely re-implemented. The watch list is now generated completely in the browser using easily cache-able data retrieved from APIs. This, first of all, makes the watch list much faster to load and much less of a burden on the server side.</p>



<p>But the new watch list also comes with some new features:</p>



<ul class="wp-block-list">
<li>Users can now have multiple watch lists on the server</li>



<li>Users can share their currently active watch list with other users of the same museum</li>



<li>It is now possible to search objects by a watch list (or transfer the watch list into a search result). Thus, all batch editing and export functions available for object search results are now also available for watch lists. Obviously, this also allows for the watch list&#8217;s objects to be filtered by their place, collection, etc.</li>



<li>Objects can now be added to the watch list in bulk.</li>
</ul>



<h4 class="wp-block-heading">Object search</h4>



<p>The map view of object search results now updates the URL with positions and zoom factor when one browses the map. One can thus share a link to the exact same position one is currently viewing to one&#8217;s colleagues.</p>



<h4 class="wp-block-heading">API</h4>



<p>The API can now be used to delete objects.</p>



<h4 class="wp-block-heading">Design</h4>



<p>Error messages are now visible for four seconds as opposed to the regular 2.4 seconds other feedback messages on inputs are visible.</p>



<h3 class="wp-block-heading">Frontend</h3>



<p>Similar to the referencable maps of object search results in musdb, &#8220;objects on a map&#8221; maps in the frontend <a href="https://blog.museum-digital.org/2022/07/22/referencable-maps-in-the-frontend-and-in-musdb/">are now also referencable</a>. We have also added a legend of event types on the same map.</p>



<h3 class="wp-block-heading"><a href="http://museum-digital.org">museum-digital.org</a></h3>



<p><a href="http://museum-digital.org">museum-digital.org</a>, the general website introducing museum-digital, has been reworked on a new technical basis. It is now statically generated once a day, reducing server costs and increasing performance. There are also many new texts, some new features (such as FAQs) and banner pictures that make the page more attractive.</p>



<p>The contents of the page are licensed under CC BY 4.0 International and can be edited on GitHub (See the repositories for the <a href="https://github.com/museum-digital/museum-digital.org-en">English version</a> of the site and the <a href="https://github.com/museum-digital/museum-digital.org-de">German version</a>).</p>



<h3 class="wp-block-heading">Importer</h3>



<p>The parser for importing images by their file names now offers a setting option to mark a certain part of a file name as an indicator to import the given image file as a hidden / non-public image.</p>



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



<p>Image: <a href="https://www.jpl.nasa.gov/galleries/visions-of-the-future">Courtesy NASA/JPL-Caltech</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/2022/08/55-cancri-e_cut.jpg</url><width>539</width><height>600</height></post-thumbnail>	</item>
		<item>
		<title>Managing object information using the musdb API</title>
		<link>https://blog.museum-digital.org/2022/06/20/managing-object-information-using-the-musdb-api/</link>
		
		<dc:creator><![CDATA[Joshua Ramon Enslin]]></dc:creator>
		<pubDate>Sun, 19 Jun 2022 23:52:56 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[musdb]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[New Features]]></category>
		<category><![CDATA[Object editing (musdb)]]></category>
		<category><![CDATA[Object selection (musdb)]]></category>
		<guid isPermaLink="false">https://blog.museum-digital.org/?p=3282</guid>

					<description><![CDATA[The public API of the frontend of museum-digital has long been in use &#8211; for example for embedding objects directly from museum-digital in a given museum&#8217;s website. The API is stable and well-established. In musdb, our inventorization and museum management tool, however, the situation is more complicated. On the one hand, musdb is simply much <a href="https://blog.museum-digital.org/2022/06/20/managing-object-information-using-the-musdb-api/" class="more-link">...</a>]]></description>
										<content:encoded><![CDATA[
<p>The public API of the <a href="https://en.about.museum-digital.org/software/frontend">frontend</a> of museum-digital has long been in use &#8211; for example for embedding objects directly from museum-digital in a given museum&#8217;s website. The API is stable and well-established. </p>



<p>In <a href="https://en.about.museum-digital.org/software/musdb">musdb</a>, our inventorization and museum management tool, however, the situation is more complicated. On the one hand, musdb is simply much larger in terms of the offered functionality. Many features have no public equivalent, while the whole question of updating the database is not present in the frontend. The tab-based user interface and the unfortunately often still rather tight coupling between user interface and loading of data from the database has been hindering the development of an API for musdb. A simple API design like the one in the frontend, where you can just add &amp;output=json (or ?output=json) to a page&#8217;s URL to retrieve the page&#8217;s information in a machine-readable format is made largely impossible by that very architecture. Just adding &amp;output=json to a URL in musdb provides that machine-readable information in an astonishingly high number of cases, but often it is incomplete or otherwise of limited use.</p>



<p>Finally, it is especially musdb where a well-designed API may become interesting to have in the future. It would be great if museums could use their inventory app of choice besides musdb &#8211; and any update to public objects would automatically be mirrored in musdb and the frontend of museum-digital in the background. Currently, the same objective can almost be reached using <a href="https://blog.museum-digital.org/2022/06/04/imports-can-now-be-triggered-by-users/">imports</a>, but imports are limited to updates of the same type and do not happen in real-time. </p>



<h2 class="wp-block-heading">Off to a Good Start: Updating Object Information Using musdb&#8217;s API</h2>



<p>A first step towards a dedicated API for musdb has now been taken. For the start, all fields directly relevant to the management of objects have been made available using a new public (though obviously authenticated) API for musdb. Further functionalities will be added when the need arises.</p>



<p>Obviously, starting over and writing a whole new API offers a chance to implement things cleanly. Adding the new API required us to refactor the code considerably &#8211; and that in turn provided a good opportunity to write unit tests for all functions relevant to the API. The API is thus ensured to stay stable for the foreseeable future (extensions notwithstanding).</p>



<p>In designing and documenting the new API, we took the opportunity to write the documentation using the OpenAPI standard. A desciption of the API in machine-readable JSON can be accessed at /musdb/api in each instance, e.g. at <a href="https://hessen.museum-digital.de/musdb/api">https://hessen.museum-digital.de/musdb/api</a>.</p>



<p>Using OpenAPI also opens the way to all those tools that build on OpenAPI in general. Hence, a human-readable interface for reading about and testing the API could be generated using <a href="https://swagger.io/">Swagger UI</a> (thanks!) and is linked in the <a href="https://de.handbook.museum-digital.info/musdb/API/">German-language handbook</a>. Since each musdb API is linked to its respective regional instance, the &#8220;try out&#8221; buttons do not work in the handbook, but working Swagger UI instances describing the musdb API can be found linked in the &#8220;tools&#8221; menu of the navigation of musdb.</p>



<h2 class="wp-block-heading">Next Steps</h2>



<p>Even though object information can now be read and updated using the musdb API, there are a lot of features not yet covered. Even a simple task like listing the collections available to the API user is still missing. As this hinders the finding of IDs for linking with objects, it is a natural next step for implementation.</p>



<p>Working with OpenAPI on the other hand has been a pleasure. We are looking forward to eventually (hopefully sooner than later) being able to provide an OpenAPI description of the frontend API as well.</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/2022/06/Screenshot-OpenAPI-Musdb.jpg</url><width>600</width><height>400</height></post-thumbnail>	</item>
		<item>
		<title>Multilinguality in md:term</title>
		<link>https://blog.museum-digital.org/2020/02/02/multilinguality-in-mdterm/</link>
		
		<dc:creator><![CDATA[Joshua Ramon Enslin]]></dc:creator>
		<pubDate>Sun, 02 Feb 2020 13:16:55 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[md:term]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Controlled Vocabularies]]></category>
		<category><![CDATA[Multilinguality]]></category>
		<guid isPermaLink="false">https://blog.museum-digital.org/?p=731</guid>

					<description><![CDATA[Since last weekend, the last publicly accessible page of museum-digital has been made fully multilingual: md:term. md:term is the central public frontend for our controlled vocabularies of actors, places, tags, and time terms. The probably most important part of md:term is its API, which is also &#8211; for example &#8211; used by the &#8220;graph navigation&#8221; <a href="https://blog.museum-digital.org/2020/02/02/multilinguality-in-mdterm/" class="more-link">...</a>]]></description>
										<content:encoded><![CDATA[
<p>Since last weekend, the last publicly accessible page of museum-digital has been made fully multilingual:  <a href="https://de.about.museum-digital.org/software/term_nodac">md:term</a>. md:term is the central public frontend for our controlled vocabularies of actors, places, tags, and time terms.</p>



<p>The probably most important part of md:term is its API, which is also &#8211; for example &#8211; used by the <a href="https://blog.museum-digital.org/de/2019/05/09/die-graphennavigation-netzwerke-und-verbindungen-in-museum-digital-erkennen/">&#8220;graph navigation&#8221;</a> and is available for external use as well. Since we &#8211; like anywhere else &#8211; do not require authentication for accessing the md:term API, we don&#8217;t have a full list of API consumers which we could contact about API changes. Hence, we hope that this blog post will also alert them to make necessary changes.</p>



<span id="more-731"></span>



<p>How then, is md:term made multilingual? And how does it express itself in md:term?</p>



<p>Months ago, we implemented the multilinguality in our controlled vocabularies by adding an additional translation table, which means that there is the base entry, which is entered by the museums. The &#8220;norm data editors&#8221; then enrich the data and also attempt to add translations to a separate table by fetching data from <a href="https://www.wikidata.org/">Wikidata</a>. If translations in the user&#8217;s language are available, they replace the &#8220;base entry&#8221; when outputting the data.</p>



<p>In the API, the base entries are replaced as well. If they are used, it hence makes sense to explicitly state the wanted language of the entry. To fetch German language information on Berlin easily, one should thus query  <code><a href="https://term.museum-digital.de/md-de/place/61/json?lang=de">https://term.museum-digital.de/md-de/place/61/json?lang=de</a></code> instead of <code><a href="https://term.museum-digital.de/md-de/place/61/json">https://term.museum-digital.de/md-de/place/61/json</a></code> (which, before multilinguality, would have been the appropriate URL).</p>



<p>Alternatively, there is a new section in the JSON API: <code>langs</code>. All available translations can be found there listed by language.</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/2020/02/Screenshot-md-term-Multilinguality-2020-02-1.png</url><width>600</width><height>401</height></post-thumbnail>	</item>
	</channel>
</rss>
