<?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>Imports | museum-digital: blog</title>
	<atom:link href="https://blog.museum-digital.org/tag/imports/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 17:16:14 +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>Imports | 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, December 2025</title>
		<link>https://blog.museum-digital.org/2026/01/12/state-of-development-december-2025/</link>
					<comments>https://blog.museum-digital.org/2026/01/12/state-of-development-december-2025/#respond</comments>
		
		<dc:creator><![CDATA[Joshua Ramon Enslin]]></dc:creator>
		<pubDate>Mon, 12 Jan 2026 17:15:11 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Importer]]></category>
		<category><![CDATA[musdb]]></category>
		<category><![CDATA[nodac]]></category>
		<category><![CDATA[IIIF]]></category>
		<category><![CDATA[Imports]]></category>
		<category><![CDATA[New Features]]></category>
		<category><![CDATA[Object editing (musdb)]]></category>
		<category><![CDATA[Object images]]></category>
		<category><![CDATA[Object search (musdb)]]></category>
		<category><![CDATA[Single image view]]></category>
		<category><![CDATA[System administration]]></category>
		<category><![CDATA[User interface]]></category>
		<guid isPermaLink="false">https://blog.museum-digital.org/?p=4616</guid>

					<description><![CDATA[December 2025 was an interesting month for museum-digital. An update to the PHP version used as well as a flood of requests by what is most likely AI scrapers forced us to make changes for improved stability, reducing and reformulating features rather than adding new ones and working on matters of systems administration over purely <a href="https://blog.museum-digital.org/2026/01/12/state-of-development-december-2025/" class="more-link">...</a>]]></description>
										<content:encoded><![CDATA[
<p>December 2025 was an interesting month for museum-digital. An update to the PHP version used as well as a flood of requests by what is most likely AI scrapers forced us to make changes for improved stability, reducing and reformulating features rather than adding new ones and working on matters of systems administration over purely matters of code quite often. Add to that the long-promised update of the terms of use for German museums to more structured and lawyer-approved ones, and you get yet more small changes that do not directly concern the work of museums with museum-digital but rather improve the necessary context.</p>



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



<h3 class="wp-block-heading">Object overview</h3>



<p>In the default tile view of the object overview page, hovering over an object image thus far revealed the object&#8217;s name. As object names are often too long to display fully and inventory numbers are the primary means of identifying an object in most museums, this preview text has now been extended to include the inventory numer.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="570" src="https://blog.museum-digital.org/wp-content/uploads/2026/01/20260112_musdb-object-list-1024x570.webp" alt="Screenshot in the object overview." class="wp-image-4613" srcset="https://blog.museum-digital.org/wp-content/uploads/2026/01/20260112_musdb-object-list-1024x570.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2026/01/20260112_musdb-object-list-300x167.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2026/01/20260112_musdb-object-list-1536x855.webp 1536w, https://blog.museum-digital.org/wp-content/uploads/2026/01/20260112_musdb-object-list-2048x1140.webp 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Hovering over an object image in the tile view now also displays the inventory number.</figcaption></figure>



<h3 class="wp-block-heading">User management</h3>



<h4 class="wp-block-heading">New Options for Managing User Accounts: Disabling Accounts &amp; Setting Account Expiry Dates</h4>



<p>Two new options on user editing pages allow disabling logins on an account and setting an expiry date for the account. Both can be useful for administration: If a new worker joins the museum for a project with a clear-cut limitation on funding and time, one can now set the account expiry at the beginning of the project to the end of it. The accounts will then automatically be deleted when the project ends. Similarly, colleagues that leave service temporarily but for a prolonged time (e.g. for a sabbatical) and will not need to use their accounts for that time can have their accounts disabled.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="398" src="https://blog.museum-digital.org/wp-content/uploads/2026/01/20260112_musdb-user-options-1024x398.webp" alt="Screenshot of the user editing page in musdb." class="wp-image-4611" srcset="https://blog.museum-digital.org/wp-content/uploads/2026/01/20260112_musdb-user-options-1024x398.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2026/01/20260112_musdb-user-options-300x116.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2026/01/20260112_musdb-user-options-1536x596.webp 1536w, https://blog.museum-digital.org/wp-content/uploads/2026/01/20260112_musdb-user-options-2048x795.webp 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Two new options allow disabling user accounts and setting expiry dates for user accounts.</figcaption></figure>



<h4 class="wp-block-heading">List of Terms of Use</h4>



<p>A new tab on a user&#8217;s (own) account settings page provides the option to list all usage agreements / terms of use a user has agreed to in the context of their use of museum-digital / musdb and when they agreed to them.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="576" src="https://blog.museum-digital.org/wp-content/uploads/2026/01/20260112_musdb-user-agreement-list-1024x576.webp" alt="Screenshot of the user editing page." class="wp-image-4612" srcset="https://blog.museum-digital.org/wp-content/uploads/2026/01/20260112_musdb-user-agreement-list-1024x576.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2026/01/20260112_musdb-user-agreement-list-300x169.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2026/01/20260112_musdb-user-agreement-list-1536x864.webp 1536w, https://blog.museum-digital.org/wp-content/uploads/2026/01/20260112_musdb-user-agreement-list.webp 1949w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">A new tab on the user page lists all user agreements for musdb that the user has agreed to and when they did so.
<br></figcaption></figure>



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



<h4 class="wp-block-heading">Limiting Report Mail Size</h4>



<p>When a user runs imports themselves using the <a href="https://de.handbook.museum-digital.info/import/importe-selbst-durchfuehren.html">WebDAV upload</a>, the end of the import process &#8211; no matter if it is successful or fails &#8211; is marked by the sending of a report via mail. This report usually contains a list of noteworthy operations that happened during the import, e.g. which objects of which inventory number were imported to which object in musdb, identified by its ID. As imports grow, this list of operation grows. To not encounter issues sending the report, it is henceforth limited to a maximum of 2 MB or 10000 lines.</p>



<h4 class="wp-block-heading">Dry-run Mode</h4>



<p>Sometimes it is useful to try running an import to see if it will actually work but not actually process any data. This option has been available in the importer command line interface for a while, among others powering <a href="https://quality.museum-digital.org/">museum-digital:qa</a>. It is now available in the import configuration for self-run imports as well using the setting <code>dry-run</code>. Enabling the setting accordingly stops the importer from actually writing the data into the database and changes the behavior if values that need to be mapped to values in controlled lists at museum-digital are encountered. Usually an import stops the moment such data is to be imported and not yet mapped. During a dry run, the error is collected and the import proceeds. All unmapped entries are listed together at the end of the import, allowing for a simpler mapping (possibly aided by <a href="https://concordance.museum-digital.org/">concordance.museum-digital.org</a>).</p>



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



<p>The first page of the dashboard, which for almost all users also means the start page of musdb right after the login process, was significantly reworked during the last month. The almost entirely unused notetaking features and discourse integration were removed in favor of a feed of recent blog posts. See also the section <a href="https://blog.museum-digital.org/2025/12/29/trimming/">&#8220;Communications&#8221;</a> in the respective blog post.</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/12/20251229_screenshot-musdb-1024x576.webp" alt="Screenshot of the dashboard in musdb, as of 2025-12-29." class="wp-image-4594" srcset="https://blog.museum-digital.org/wp-content/uploads/2025/12/20251229_screenshot-musdb-1024x576.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2025/12/20251229_screenshot-musdb-300x169.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2025/12/20251229_screenshot-musdb-1536x864.webp 1536w, https://blog.museum-digital.org/wp-content/uploads/2025/12/20251229_screenshot-musdb.webp 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">The dashboard in musdb now features a feed of recent news relevant to the development of museum-digital and whatever is going on regionally. The posts are sorted chronologically.</figcaption></figure>



<h3 class="wp-block-heading">Annotations for the Vocabulary Editing Team</h3>



<p>Each event, displayed as a tile on object editing pages, featured speech bubble icons behind each time / actor / place to provide additional comments and hints for the central vocabulary editing team. This positioning of the annotation feature led to confusion over the years, with some users using the feature to comment on the relationship between the entity and the object (for which the event notes should be used). We hence repositioned the links and moved them to the respective entity&#8217;s page (e.g. a place page for giving hints and comments on a place entry). The hinting / commenting feature for times has been altogether removed, as providing comments to clarify the meaning of e.g. a year never made much sense.</p>



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



<ul class="wp-block-list">
<li>Fixed a bug in the HTML generated for listing other objects linked to an object. Links to the other object were broken and are not anymore.</li>



<li>Image editing pages now embed the image directly instead of using the IIIF API. This reduces resource usage and increases stability at no cost.</li>



<li>Removed option to manually trigger the rewriting of EXIF and IPTC metadata of object images. Rewriting takes place in the background whenever an image or a linked object is updated, making user-triggered updates obsolete.</li>



<li>Re-introduce option to repeat linking to the last used linked object</li>



<li>Updated <a href="https://swagger.io/">Swagger UI</a> to version 5.30.3</li>
</ul>



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



<p>As stated above and lengthily described in the previous blog posts (<a href="https://blog.museum-digital.org/2025/12/09/updates-ai-scrapers-and-resilience/">here</a>, <a href="https://blog.museum-digital.org/2025/12/22/cleaning-out-our-closet/">here</a>, and <a href="https://blog.museum-digital.org/2025/12/29/trimming/">here</a>) we struggled with stability over the last month. This means that most changes in the frontend are aimed at improving stability.</p>



<h3 class="wp-block-heading">Reworked Default Image Page</h3>



<p>Thoroughly described in <a href="https://blog.museum-digital.org/2025/12/09/updates-ai-scrapers-and-resilience/">Updates, AI scrapers, and Resilience</a>, we replaced the default view for single object image pages. While the default view was previously built around the IIIF viewer Mirador, the new default view uses OpenLayers and the unmediated image file for capabilities such as zooming. The new view also brings with it some new features, such as an option to reference specific sections of an image.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="672" src="https://blog.museum-digital.org/wp-content/uploads/2026/01/20260112_frontend-image-page-1024x672.webp" alt="" class="wp-image-4615" srcset="https://blog.museum-digital.org/wp-content/uploads/2026/01/20260112_frontend-image-page-1024x672.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2026/01/20260112_frontend-image-page-300x197.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2026/01/20260112_frontend-image-page-1536x1007.webp 1536w, https://blog.museum-digital.org/wp-content/uploads/2026/01/20260112_frontend-image-page-2048x1343.webp 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">The reworked default image page.</figcaption></figure>



<h3 class="wp-block-heading">Serving Resource-Intensive Pages / Functionalities Only When Resources Are Available</h3>



<p>PDF generation, the IIIF Image API, and the suggestions for alternative search queries on failed search pages are now limited to reduce their impact on the overall system stability. This follows two strategies:</p>



<ul class="wp-block-list">
<li>Suggestions on failed search pages and PDF generation will only appear if the overall load on the system is low. The threshold for when or when they are not provided is influenced by the user&#8217;s browser language: If a user uses a browser set to the primary language of a given instance of museum-digital (e.g. German in Hesse, Hungarian in Budapest), the threshold is much higher, meaning users will be able to access the pages at a medium server load. In the case of PDFs, high server load will forward users to the print dialogue for object pages instead of receiving a PDF generated on the server side.</li>



<li>PDF generation and the IIIF Image API are served with a different PHP configuration and set of processes than the rest of the frontend. This configuration significantly reduces available resources for these two functionalities.</li>



<li>The option to generate PDFs featuring all images of an object with between 10 and 40 images has been entirely removed. Given its constraints, the feature was hard to explain and rarely accessible anyway. The primary &#8220;users&#8221; were noticeably AI scrapers.</li>
</ul>



<h3 class="wp-block-heading">Image Search</h3>



<p>The image search feature was refactored and reduced to further separate it from the primary object search. The number of available search options has been reduced to be more easily explainable and reduce possibilities for very resource-intensive queries.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="602" src="https://blog.museum-digital.org/wp-content/uploads/2026/01/20260112_frontend-image-search-1024x602.webp" alt="" class="wp-image-4614" srcset="https://blog.museum-digital.org/wp-content/uploads/2026/01/20260112_frontend-image-search-1024x602.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2026/01/20260112_frontend-image-search-300x176.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2026/01/20260112_frontend-image-search-1536x903.webp 1536w, https://blog.museum-digital.org/wp-content/uploads/2026/01/20260112_frontend-image-search-2048x1204.webp 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">The reworked image search settings overlay.</figcaption></figure>



<h3 class="wp-block-heading">Batch Export of Object Metadata / OAI</h3>



<p>Updated the LIDO API to almost entirely match the LIDO as generated during exports from musdb</p>



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



<ul class="wp-block-list">
<li>Improved performance of object search by tags and places by filtering searched entities to those who are actually linked in the given instance of museum-digital.</li>



<li>Object groups with only one object are henceforth not displayed and linked on object pages anymore</li>



<li>Fixed link in footer: Clicking on &#8220;museum-digital&#8221; should lead to the home / start page of the given instance of musdb.</li>



<li>Updated <a href="https://swagger.io/">Swagger UI</a> to version 5.30.3</li>
</ul>



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



<ul class="wp-block-list">
<li>User-provided comments / hints have been removed for times (see above)</li>



<li>Tooltips for linked objects now display which institution an object belongs to
<ul class="wp-block-list">
<li>This is particularly important for vocabulary editors who do not have access to the museums&#8217; data. This way they get a limited preview with the required information for unpublished objects despite their otherwise lacking permissions.</li>
</ul>
</li>
</ul>



<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/2026/01/12/state-of-development-december-2025/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-thumbnail><url>https://blog.museum-digital.org/wp-content/uploads/2026/01/20260112_News-Img-1.webp</url><width>600</width><height>467</height></post-thumbnail>	</item>
		<item>
		<title>State of Dev, February 2025</title>
		<link>https://blog.museum-digital.org/2025/03/25/state-of-dev-february-2025/</link>
		
		<dc:creator><![CDATA[Joshua Ramon Enslin]]></dc:creator>
		<pubDate>Tue, 25 Mar 2025 16:07:17 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Importer]]></category>
		<category><![CDATA[musdb]]></category>
		<category><![CDATA[Bugfix]]></category>
		<category><![CDATA[Imports]]></category>
		<category><![CDATA[New Features]]></category>
		<guid isPermaLink="false">https://blog.museum-digital.org/?p=4362</guid>

					<description><![CDATA[In terms of development happening around museum-digital, February 2025 was a rather calm month. While more happened in the "machine room", immediately visible changes are mostly restricted to bugfixes. And a whole new tool.]]></description>
										<content:encoded><![CDATA[
<p>In terms of development happening around museum-digital, February 2025 was a rather calm month. While more happened in the &#8220;machine room&#8221;, immediately visible changes are mostly restricted to bugfixes. And a whole new tool.</p>



<p>Here, as so often, in a list format:</p>



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



<ul class="wp-block-list">
<li><strong>Bugfix</strong>: The detailed description was not reflected in the object API even if set to be so via musdb</li>



<li><strong>Translation</strong>: The frontend is now available in <a href="https://blog.museum-digital.org/2025/03/25/kannada/">Kannada</a></li>
</ul>



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



<ul class="wp-block-list">
<li><strong>Bugfix:</strong> Fixed error in setting up new two factor authentication via TOTP (app-based 2fa)</li>



<li><strong>Bugfix:</strong> Symbols for image rotation switched (counter-clockwise symbol rotated clockwise and vice-versa)</li>



<li><strong>Feature</strong>: If the generation of a PDF catalogue is triggered via the sidebar of series editing pages, the objects will follow their order within the object group</li>
</ul>



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



<ul class="wp-block-list">
<li>If no explicit name/title for a resource (audio, video, PDF, 3D, externally hosted image) was supplied, there was no fallback. Now, the importer follows the same logic as musdb and will fall back to using the linked object&#8217;s object name as a resource title if none is supplied.</li>



<li>The <a href="https://csvxml.imports.museum-digital.org/">CSVXML</a> parser can now handle multiple objects per XML file.</li>
</ul>



<h2 class="wp-block-heading">Auto uploader</h2>



<p>The auto uploader is an entirely new tool. When first started, users will be asked to enter the necessary data for running imports. And they are asked for the path to a folder which will subsequently be monitored for automatic uploads.</p>



<p>Whenever the tool then detects suitable contents for an import in the folder, the data will be uploaded and automatically imported. Intermediate steps like the generation of a settings file for the import are covered by the tool.</p>



<p>The tool can thus be useful for museums that regularly import data formed in a consistent format &#8211; say, museums using museum-digital for publishing while mainting a separate collection management system. It should be uninteresting to those who spend much effort on preparing imports (e.g. via <a href="https://csvxml.imports.museum-digital.org/">CSVXML</a>) or who want to migrate to musdb altogether, as it only becomes useful in the case of regular use.</p>



<p>The code is available <a href="https://gitea.armuli.eu/museum-digital/museum-digital-webdav-uploader">here</a>, licensed under GPL v3.<br>See also the <a href="https://blog.museum-digital.org/de/2025/03/08/das-importieren-automatisieren/">more detailed German-language blog post about the auto uploader</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/2025/03/flower-in-water-AI-gen.webp</url><width>600</width><height>375</height></post-thumbnail>	</item>
		<item>
		<title>State of Dev, December 2024 &#038; January 2025</title>
		<link>https://blog.museum-digital.org/2025/02/14/state-of-dev-december-2024-january-2025/</link>
		
		<dc:creator><![CDATA[Joshua Ramon Enslin]]></dc:creator>
		<pubDate>Thu, 13 Feb 2025 23:48:42 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Importer]]></category>
		<category><![CDATA[musdb]]></category>
		<category><![CDATA[nodac]]></category>
		<category><![CDATA[Batch editing]]></category>
		<category><![CDATA[Change log]]></category>
		<category><![CDATA[Controlled Vocabularies]]></category>
		<category><![CDATA[Imports]]></category>
		<category><![CDATA[New Features]]></category>
		<category><![CDATA[TEI]]></category>
		<category><![CDATA[Version control]]></category>
		<guid isPermaLink="false">https://blog.museum-digital.org/?p=4306</guid>

					<description><![CDATA[Once again a simple change log of the recent updates to museum-digital's different tools.]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">December 2024</h2>



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



<ul class="wp-block-list">
<li>Dates in <a href="https://de.wikipedia.org/wiki/Text_Encoding_Initiative">TEI</a> transcriptions are parsed, irrespective of whether <code>when=""</code> oder <code>when=''</code> was used</li>



<li>Notes for markings are now publicly displayed<br><em>This was missing thus far and is now implemented similar to how event notes are displayed. If a note exists, a small &#8220;[?]&#8221; appears behind the marking title line. Upon hovering over it, a tooltip appears with the relevant information.</em></li>
</ul>



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



<ul class="wp-block-list">
<li>Names and descriptions of exhibitions and object groups can now be translated</li>



<li><a href="https://blog.museum-digital.org/2025/01/13/version-control-batch-transfer-between-data-fields-of-object-records/">Version control</a></li>



<li>Log of “current locations&#8221; of an object can be exported as a CSV file</li>



<li>Uploaded object images can now be hidden or published in one batch operation</li>



<li><a href="https://de.handbook.museum-digital.info/musdb/API/index.html">API</a> extended
<ul class="wp-block-list">
<li>(New functions)</li>



<li>Transfer object dimensions</li>



<li>List images and resources for an object</li>



<li>Image metadata</li>



<li>Publish / hide object images</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">January 2025</h2>



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



<ul class="wp-block-list">
<li><em>Objects can now be sorted by the aesthetics of the thumbnail</em> (A dedicated blog post on this will follow soon)</li>
</ul>



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



<ul class="wp-block-list">
<li><a href="https://blog.museum-digital.org/de/2025/01/13/versionierung-transfer-zwischen-datenfeldern/">Batch transfer between between free text fields of object data</a></li>



<li>Alignment of the maximum field length for notes on opening hours is now consistent between UI and database</li>



<li>Bug fixed with switching between institutions during consistency checks fixed (relevant only to users with administrative access to multiple museums)</li>



<li>Literature can now be searched by editors</li>
</ul>



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



<ul class="wp-block-list">
<li>Core
<ul class="wp-block-list">
<li>Automatic transformation of life dates for actors
<ul class="wp-block-list">
<li>Year of death “01.01.2012” now becomes “2012”, instead of 01.01 as before</li>
</ul>
</li>



<li>&#8220;?&#8221; and &#8220;(?)&#8221; are removed from the beginning and end of imported keywords</li>



<li>Various types of brackets in keyword names are converted to regular brackets</li>
</ul>
</li>



<li>Parser
<ul class="wp-block-list">
<li>Stricter internal implementation of settings, all imports can now implement the <code>start_at</code> setting
<ul class="wp-block-list">
<li>This is particularly useful for the repeated execution of imports that abort due to new, previously uncovered elements and other debugging.</li>
</ul>
</li>



<li>New parsers:
<ul class="wp-block-list">
<li><a href="https://de.wikipedia.org/wiki/Metadata_Object_Description_Schema">MODS</a> (mainly used in library contexts)</li>



<li>Parser for Exports from Faust for the <a href="https://st.museum-digital.de/institution/87">Händel-Haus</a></li>



<li>Parser for XML dumps from MuseumPlus Classic (MsSQL > XML export per table > Import)</li>



<li>Bugfixes
<ul class="wp-block-list">
<li>Field “Verwender” in Primus parser was mapped to production events</li>



<li>Material / technology are now imported correctly in the parser for BeeCollect exports for the Industrial Museums of Saxony</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>



<li>„Frontend“
<ul class="wp-block-list">
<li>CLI now also has options for switching off the import of individual areas</li>



<li>Help text for command line tool</li>
</ul>
</li>
</ul>



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



<ul class="wp-block-list">
<li>Splitting of keywords now also recognizes keywords that should be split into places, times, etc.
<ul class="wp-block-list">
<li>Bsp.: „Helm; Berlin“ > Schlagwort „Helm“ + Ort „Berlin“</li>



<li>Example: “helmet; Berlin” > keyword “helmet” + place “Berlin”</li>
</ul>
</li>



<li>When searching for keywords with ambiguous names, both keywords and generally ambiguous terms are now taken into account</li>



<li>Times can now be merged with others directly from the time edit page</li>
</ul>



<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/2025/02/typing-2025-01.avif</url><width>600</width><height>336</height></post-thumbnail>	</item>
		<item>
		<title>A Concordance Checker for Preparing Imports to museum-digital</title>
		<link>https://blog.museum-digital.org/2025/01/23/a-concordance-checker-for-preparing-imports-to-museum-digital/</link>
		
		<dc:creator><![CDATA[Joshua Ramon Enslin]]></dc:creator>
		<pubDate>Thu, 23 Jan 2025 15:00:40 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Importer]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Imports]]></category>
		<category><![CDATA[New Features]]></category>
		<category><![CDATA[New tools]]></category>
		<guid isPermaLink="false">https://blog.museum-digital.org/?p=4274</guid>

					<description><![CDATA[When one runs an import to museum-digital &#8211; specifically one focused on internal collection management data &#8211; there is a chance to encounter errors of unmatched entries. The import tool identified that one tried to import a yet unknown value to what is a controlled field in musdb. Common issues appear especially with actor roles <a href="https://blog.museum-digital.org/2025/01/23/a-concordance-checker-for-preparing-imports-to-museum-digital/" class="more-link">...</a>]]></description>
										<content:encoded><![CDATA[
<p>When one runs an import to museum-digital &#8211; specifically one focused on internal collection management data &#8211; there is a chance to encounter errors of unmatched entries. The import tool identified that one tried to import a yet unknown value to what is a controlled field in musdb. Common issues appear especially with actor roles and entry types.</p>



<p>Say, a museum&#8217;s previous database used actor roles over an event structure to express who created an object. As such, the museum entered that the object has a linked actor X that is linked to the object as a &#8220;main creator&#8221; and a linked time Y marked as the &#8220;creation time&#8221;. During the import, these roles (&#8220;main creator&#8221; and &#8220;creation time&#8221;) are then translated to museuem-digital&#8217;s event types to form an event: The object was created by actor X at the time Y. This works, because the terms &#8220;main creator&#8221; and &#8220;creation time&#8221; have been matched to the creation event type.</p>



<p>If a term is not yet matched to a corresponding value of a controlled list in museum-digital, the importer will simply abort the import. On the one hand this is a way to uselessly require resources for an import that cannot be completed anyway. On the other, it is tedious. One recognizes yet unmatched entries only one by one.</p>



<h2 class="wp-block-heading">A Small New Tool</h2>



<p>A small new tool, available at <a href="https://concordance.museum-digital.org/">concordance.museum-digital.org</a>, makes the process a bit less tedious. Users can upload all the import data from a given field (e.g. the actor roles) &#8211; one a line &#8211; and check whether they are already matched using the concordance lists or not.</p>



<p>For entries that are not yet matched, the tool will offer selection boxes to perform the matching using the graphical user interface. Once all entries have been matched, one can then generate the relevant lines of code to enter the missing entries to the concordance list upon the click of a button.</p>



<p>While simply checking and extending the relevant <a href="https://gitea.armuli.eu/museum-digital/MDImporterConcordanceLists">open source lists</a> should be trivial even to most non-technical users, this way is certainly more convenient. Importantly, it also removes the need to run the import multiple times until one does not encounter errors caused by unmatched entries anymore. And, well, it certainly is also more convenient to match to regular human language values than to the internal IDs of the target values.</p>



<p>The concordance checker&#8217;s MIT-licensed code can be found <a href="https://gitea.armuli.eu/museum-digital/concordance-checker">here</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/2025/01/20250123_Concordance_checker_en.avif</url><width>600</width><height>385</height></post-thumbnail>	</item>
		<item>
		<title>Importing actors</title>
		<link>https://blog.museum-digital.org/2023/11/22/importing-actors/</link>
					<comments>https://blog.museum-digital.org/2023/11/22/importing-actors/#comments</comments>
		
		<dc:creator><![CDATA[Joshua Ramon Enslin]]></dc:creator>
		<pubDate>Wed, 22 Nov 2023 16:43:03 +0000</pubDate>
				<category><![CDATA[Importer]]></category>
		<category><![CDATA[nodac]]></category>
		<category><![CDATA[Autocorrection]]></category>
		<category><![CDATA[Controlled Vocabularies]]></category>
		<category><![CDATA[Imports]]></category>
		<category><![CDATA[Write-ups]]></category>
		<guid isPermaLink="false">https://blog.museum-digital.org/?p=3922</guid>

					<description><![CDATA[A critical part of museum-digital is the usage of shared controlled vocabularies for actors, places, times, and tags. All museums using museum-digital use these same vocabularies for recording the creation of objects, their use, destruction, etc. Similarly, they are used for a rougher tagging of the objects. Only contacts who are recorded purely for internal <a href="https://blog.museum-digital.org/2023/11/22/importing-actors/" class="more-link">...</a>]]></description>
										<content:encoded><![CDATA[
<p>A critical part of museum-digital is the usage of shared controlled vocabularies for actors, places, times, and tags. All museums using museum-digital use these same vocabularies for recording the creation of objects, their use, destruction, etc. Similarly, they are used for a rougher tagging of the objects. Only contacts who are recorded purely for internal purposes &#8211; like the current owners of objects &#8211; are kept in a separate, museum-specific address book.</p>



<p>On the one hand, using shared controlled vocabularies allows for a centralized editing team. Work that&#8217;s been done for one museum is available for all. This allows for a generally higher data quality, improved search options, etc. The only downside to centralized vocabularies is rules: Without everybody following a basic set of rules for the different vocabularies the vocabularies would surely be overcome by chaos quickly.</p>



<p>The two most basic rules are that 1) all entries need to be clearly identifiable and 2) actor names &#8211; from actual people to companies and governments to peoples &#8211; belong to the controlled vocabularies for actors; place names &#8211; cities, countries, streets &#8211; belong to the vocabulary for places, and so on. In effect, this means that an actor entry &#8220;Gaius Iulius Caesar&#8221; (better yet, &#8220;Gaius Iulius Caesar (-100&#8211;44)&#8221;) is a good one. It is clearly identifiable. An actor name &#8220;Bosch&#8221; should not end up in the controlled vocabularies &#8211; there are many people and companies sharing that name. If one means to actually record the German tool maker, one can specify as much using brackets and / or using the full name, e.g. &#8220;Robert Bosch GmbH&#8221; or &#8220;Bosch (tool making company)&#8221;.</p>



<p>musdb comes with selection lists enabling a simple reuse of existing vocabulary entries. Where a term or a name has not yet been recorded in museum-digital&#8217;s controlled vocabularies, the option to import vocabulary data from Wikipedia / Wikidata and the Gemeinsame Normdatei, and alternatively the need to add a description of at least ten characters enforce some level of identifiable and minimally researched entries.</p>



<p>And then there are imports. During imports, there is no way to force importing users to add additional data. To the contrary, especially during data migrations museums import data from different departments and different decades, leaving one with different spellings for the same person and a very varied quality of the recording overall. Importing thus often means bringing unclean, non-uniform data into the vocabularies. Often enough manual cleanup and enrichment are required to make the data usable &#8211; and to stop the &#8220;unclean&#8221; data from disturbing other users, e.g. by appearing in selection lists and then being falsely linked to another museums entries (a classic example are place entries like &#8220;Frankfurt&#8221;. Both Frankfurt an der Oder and Frankfurt am Main are significant places &#8211; how significant they are depends on where a museum may be located. Leaving the unidentifiable place (name) in the database will easily lead to other museums linking the same entry while actually referring to the <em>other</em> Frankfurt).</p>



<p>Automation can however significantly reduce the work of the colleagues manually editing the vocabularies while also allowing their efforts to have longer-lasting internal benefits to the system. The import tool thus features a number of checks to identify the entries actually referred to. Those checks relevant to the import of references to actors will be introduced over the rest of this blog post.</p>



<h2 class="wp-block-heading">Rough outline</h2>



<p>Actors from (or for) the controlled vocabularies usually enter museum-digital by being linked to objects via events. The same usually happens in the case of imports: The import data states that an object was, e.g., created by a given person. This translates to a new event (what happened to the object? And who did it when and where?) being created. The actor of this event is then set based on the provided name, optionally taking into accounts life dates and links to norm data repositories, in so far as they are made available in the import data.</p>



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



<h4 class="wp-block-heading">Cleaning the name</h4>



<p>To identify the actor name, it is first cleaned and made slightly more uniform on a simple level of spelling.</p>



<ul class="wp-block-list">
<li>Leading and trailing spaces, semi colons, tab stops and newlines are removed</li>



<li>Duplicate white spaces are removed</li>



<li>Brackets of the different types (&#8220;()&#8221;, &#8220;{}&#8221;, &#8220;[]&#8221;) are replaced with simple brackets (&#8220;()&#8221;)</li>



<li>Unwanted components / specifiers of a name are removed (e.g. &#8220;mythological creature&#8221; or empty brackets)</li>



<li>Language-specific name components are replaced with their preferred variants in the vocabularies (German: &#8220;d.Ä.&#8221; is extended to &#8220;(der Ältere)&#8221; [the Elder])</li>



<li>Indicators for uncertainty are stripped from the name, e.g. trailing question marks. They are separately used to identify the certainty of an actor link in a dedicated fields that describes exactly that.</li>
</ul>



<p>Thus, a name stated in the import data as &#8220;; Hans Holbein d.Ä.?&#8221; will be imported as &#8220;Hans Holbein (der Ältere)&#8221;.</p>



<h4 class="wp-block-heading">Parsing life dates from the input name</h4>



<p>If no life dates have been provided explicitly in the import data, they may still be included as part of the actor name. Some museums whose database does not feature dedicated fields for an actor&#8217;s date of birth and death will append the years in brackets. Hence, a check is done to see if there are any brackets at the end of the name &#8211; and if so, whether the bracket contains a parsable time span. In this case, the time span identified will be used for the actor&#8217;s life dates and the brackets&#8217; content will removed from the name (it is not actually a part of the actor&#8217;s name after all).</p>



<p>&#8220;Hans Holbein (der Ältere) (1465-1524)&#8221; with no explicitly provided years of birth and death will thus be transformed to &#8220;Hans Holbein (der Ältere)&#8221;, born 1465 and dead since 1524.</p>



<h3 class="wp-block-heading">Identifying the actor</h3>



<p>After preparing the inputted actor data, it is checked against the database in various ways. The listed checks below take place in a chronological order. If one returns a positive result and works to identify the actor, no following checks are run.</p>



<h4 class="wp-block-heading">Checking based on norm data links</h4>



<p>If links to external norm data repositories (the Library of Congress authority files, the National Diet Library, the French National Library, etc.) are provided in the import data, the actor vocabulary at museum-digital is checked whether it contains an entry featuring the same external ID. If that is the case, this actor is doubtlessly identified.</p>



<h4 class="wp-block-heading">Checking global rewrites</h4>



<p>For many names, there are different spellings. Similarly, many people use different names over the course of their lives. But the person referred to stays the same.</p>



<p>As not all names are significant enough to be listed as synonyms in their own right, museum-digital features a global (though language-specific) list of &#8220;permanent rewrites&#8221;. If a museum exported a reference to a &#8220;Julius Caesar&#8221;, this will be automatically rewritten to &#8220;Gaius Iulius Caesar&#8221;, thus identifying the person of the same name.</p>



<p>This central list is built and extended as the vocabulary editors do their work. Whenever two actor entries are merged in <a href="https://en.about.museum-digital.org/software/nodac/">nodac</a>, editors have the option to mark the name of the actor being merged into the other as to be permanently rewritten.</p>



<h4 class="wp-block-heading">Checking institution-level rewrites</h4>



<p>Whenever a new actor entry is added through musdb or by the way of imports, this is marked down in the database. <em>Which museum</em> used <em>what term</em>, resulting in <em>which entry</em>. <em>Which entry</em> may in the future be updated to refer to another. This is most simply explained using an example from the realm of places &#8211; the above-used example of &#8220;Frankfurt&#8221;:</p>



<p>If a museum newly brings &#8220;Frankfurt&#8221; to the controlled vocabulary for places, an additional entry is made in the database to note that the museum was the first to add an entry named &#8220;Frankfurt&#8221;, and that that finally resulted in the creation of a new place with the ID #99999. The object data itself makes it clear that the museum actually referred to &#8220;Frankfurt am Main&#8221; (ID: #217). If the vocabulary editors thus merge &#8220;Frankfurt&#8221; (#99999) with &#8220;Frankfurt am Main&#8221; (#217), this obviously cannot be a permanent rewrite. But the museum-specific log can be updated: The museum entered &#8220;Frankfurt&#8221;, and it referred to the entry #217 (Frankfurt am Main). If the museum thus enters &#8220;Frankfurt&#8221; without any further specification in the future, the importer and musdb can automatically identify Frankfurt am Main as the place actually referred to. The same logic applies to the import of actor data.</p>



<p>This check is obviously based on the assumption of some level of uniformity between different workers at the same museum. If a museum in Frankfurt an der Oder has almost all of their employees referring to Frankfurt an der Oder as the <em>canonical</em> &#8220;Frankfurt&#8221;, except for one, this will obviously backfire. But it is to be hoped that this case is rare enough &#8211; and that such a very different colleague would recognize their own non-conformity and choose to use the full names for both places to be able to clearly document (and communicate overall) with their colleagues.</p>



<h4 class="wp-block-heading">Checking by name and life dates</h4>



<p>If all the above checks did not work, the actor&#8217;s name and life dates are checked against the controlled vocabulary for actors itself. Does anybody with the same name, who was born and died at the provided years, exist in the actor vocabulary (either going by the language-specific translation of the name or by the &#8220;base entry&#8221; of an any language).</p>



<p>If that is not the case, the actor likely does not exist in the database yet.</p>



<h3 class="wp-block-heading">Identification failed. Should a new entry be created?</h3>



<p>If the actor does not exist in the database yet, they need to be added. Maybe.</p>



<p>Some names are known to be in clear conflict with the rules of the vocabulary for actors.</p>



<h4 class="wp-block-heading">Checking the blacklist</h4>



<p>museum-digital keeps a centralized blacklist for actor names that are known to be in clear conflict to the rules of the actor vocabulary. This list mainly contains either deliberately unspecific actor names (&#8220;unknown&#8221;; &#8220;unidentified&#8221;) or very unspecific ones (&#8220;John&#8221; [a random given name without a family name], &#8220;painter&#8221; [the name of a profession, not even of the actor themselves]).</p>



<p>If the entered actor name is contained in this blacklist, the attempt to link any actor to the event is aborted. The free-text note about the event is instead extended to mark that an actor of the blacklisted name was noted to be related to the event.</p>



<h4 class="wp-block-heading">Checking if the actor is actually a place, time, or tag</h4>



<p>A classic problem is vocabulary entries being entered in an unsuitable vocabulary &#8211; often for simple reasons likely colleagues slipping to a wrong column when working with a table calculation program. And thus one is asked to import an actor &#8220;14th century&#8221;.</p>



<p>The &#8220;14th century&#8221; is obviously a time, not an actor. For this, too, there is a centralized list that can be extended using nodac. Whenever the vocabulary editors move an entry from one vocabulary to another, they have the option to mark the entry&#8217;s name as always being of the target type.</p>



<p>Say the 14th century was previously entered as a tag. A vocabulary editor moved the entry to the vocabulary for times and marked the string &#8220;14th century&#8221; as one always referring to a time. If one then attempts to link a new actor &#8220;14th century&#8221;, the import tool can automatically recognize that this name actually refers to a time and link a time instead of an actor to the event. The attempt to add an actor is thus redirected to a different category.</p>



<h3 class="wp-block-heading">All else failed: The actor is being added</h3>



<p>If all the above checks did neither result in identifying a pre-existing record, nor in identifying the input name as invalid in one way or another, the actor is added to the controlled vocabularies and linked to the event. The entry now needs to be cleaned and enriched manually by the vocabulary editors.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.museum-digital.org/2023/11/22/importing-actors/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Summary of the monthly user meetup (April 2023) / New features and improvements</title>
		<link>https://blog.museum-digital.org/2023/05/07/summary-of-the-monthly-user-meetup-april-2023-new-features-and-improvements/</link>
		
		<dc:creator><![CDATA[Joshua Ramon Enslin]]></dc:creator>
		<pubDate>Sun, 07 May 2023 16:44:42 +0000</pubDate>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Frontend]]></category>
		<category><![CDATA[musdb]]></category>
		<category><![CDATA["List results"]]></category>
		<category><![CDATA[Imports]]></category>
		<category><![CDATA[Location tracking]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[User interface]]></category>
		<guid isPermaLink="false">https://blog.museum-digital.org/?p=3731</guid>

					<description><![CDATA[We continued the series of monthly user meetups and again discussed the new features and improvements. A summary can be found below. New Developments The last month has been an exceptionally slow month in terms of technical development around museum-digital. There are however some newsworthy tidbits. musdb Recording external IDs for museums Museums, like all <a href="https://blog.museum-digital.org/2023/05/07/summary-of-the-monthly-user-meetup-april-2023-new-features-and-improvements/" class="more-link">...</a>]]></description>
										<content:encoded><![CDATA[
<p>We continued the series of monthly user meetups and again discussed the new features and improvements. A summary can be found below.</p>



<h2 class="wp-block-heading" id="h-new-developments">New Developments</h2>



<p>The last month has been an exceptionally slow month in terms of technical development around museum-digital. There are however some newsworthy tidbits.</p>



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



<h4 class="wp-block-heading" id="h-recording-external-ids-for-museums">Recording external IDs for museums</h4>



<p>Museums, like all of us, are present in more and more databases. For linking different databases, it is useful &#8211; sometimes necessary &#8211; to know the ID of the same entity in both databases. Hungarian law thus mandates collection management systems, which are to be accredited for fully paperless use in museums, to allow storing a museum&#8217;s ID with the Hungarian Statistical Office. musdb can now do exactly that: Store external IDs of museums in a given list of external source repositories / databases.</p>



<p>The list of available external databases and the regular expressions to validate IDs in them are available <a href="http://The list of available external databases and the regular expressions to validate IDs in them are available here. For now, the list only contains the Hungarian Statistical Office, but the more options there will be in the future, the better.">here</a>. For now, the list only contains the Hungarian Statistical Office, but the more options there will be in the future, the better.</p>



<h4 class="wp-block-heading" id="h-more-fields-covered-by-list-results-and-excel-export">More fields covered by &#8220;list results&#8221; and Excel export</h4>



<p>The &#8220;list results&#8221; page (a.k.a. table view) for object search results offers the option to view the selected objects&#8217; data in a customizable tabular format. Mainly because of that exact tabular format, it is not possible to display everything a full database view of the object offers using the &#8220;list results&#8221; page. Over the last month, we have nevertheless extended the list of displayable fields in the &#8220;list results&#8221; table.</p>



<p>Thus, it is now possible to display all translations for the object type, object name, descriptions, etc. of an object. Similarly, it is now possible to list all Weblinks linked to the object as a compiled (comma-separated) field. As the automated report generation and the Excel export tools build upon the same basic code as the &#8220;list results&#8221; page, these new fields are now also available in those cases.</p>



<h4 class="wp-block-heading" id="h-new-field-for-objects-last-change-of-permanent-location">New field for objects: &#8220;Last change of permanent location&#8221;</h4>



<p>It is now possible to manually record the last date, the permanent location of a given object has been updated. This obviously makes sense for tracking relocations and re-organizations within the museum. Importantly, the field needs to be manually filled out, as the date of the last change of the permanent location may be far in the past or frankly unrelated to the database, even if there is one (say, the museum moves the depot to a different place, but the date is only later updated in the database via a batch editing process).</p>



<h4 class="wp-block-heading" id="h-user-interface">User interface</h4>



<p>After there were some reports of people not seeing the difference between a valid form in musdb and an invalid / incomplete one, we updated the design of submit buttons. Submit buttons in incomplete forms are now blurred out, to add another hint at the incompleteness of the form.</p>



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



<h4 class="wp-block-heading" id="h-improved-performance-and-decreased-bandwidth-usage-serving-images-in-webp">Improved performance and decreased bandwidth usage: serving images in webp</h4>



<p>Over the last years, there have been a number of new image formats seeking to combine all the features of older and well-established formats like JPG and PNG with an improved compression. The most established format of that newer generation of image formats is <a href="https://en.wikipedia.org/wiki/WebP">webp</a>, which is by now well-supported by all modern browsers and most local image viewers.</p>



<p>To save bandwidth and improve loading speed, we now store and serve full-sized webp versions of newly uploaded object images along with the regular jpg versions. If possible, the webp version is served on object pages. An additional benefit is the aforementioned support for features jpg files do not support, such as transparent image backgrounds.</p>



<h4 class="wp-block-heading" id="h-iframe-embedding-now-only-possible-from-whitelisted-sources">iFrame embedding now only possible from whitelisted sources</h4>



<p>If a museum wants to embed their data from museum-digital into their own website, there are traditionally two ways to do so. The better, but much more complicated option is to use the API to fetch the relevant data and present them in any way one wants. Much easier (and cheaper obviously) is embedding the museum&#8217;s data using iframes.</p>



<p>Unfortunately, iframes can also be used for attacks on users&#8217; login data. We have thus now restricted this option to only allow embedding from whitelisted sources. If a museum wants to embed their data this way, this means that they now need to notify their regional administrators beforehand.</p>



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



<p>The importer now supports imports for exports from Startext&#8217;s <a href="https://www.startext.de/produkte/hida">HiDa</a> in the configuration of the Saxon State Agency for Museums.</p>



<h2 class="wp-block-heading">Other News</h2>



<p>In other news, the <a href="https://www.youtube.com/@museum-digital/">Youtube</a> channel has picked up steam, with some new tutorials both in German and Ukrainian.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>EODEM &#8211; Efficiently Exchange Object Information During Loans</title>
		<link>https://blog.museum-digital.org/2023/02/15/eodem-efficiently-exchange-object-information-during-loans/</link>
		
		<dc:creator><![CDATA[Joshua Ramon Enslin]]></dc:creator>
		<pubDate>Wed, 15 Feb 2023 00:06:37 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[musdb]]></category>
		<category><![CDATA[Collection management]]></category>
		<category><![CDATA[EODEM]]></category>
		<category><![CDATA[Export Tools]]></category>
		<category><![CDATA[Imports]]></category>
		<category><![CDATA[Interoperability]]></category>
		<category><![CDATA[Loan management]]></category>
		<guid isPermaLink="false">https://blog.museum-digital.org/?p=3583</guid>

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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



<div class="wp-block-cgb-cc-by message-body" style="background-color:white;color:black"><img loading="lazy" decoding="async" src="https://blog.museum-digital.org/wp-content/plugins/creative-commons/includes/images/by.png" alt="CC" width="88" height="31"/><p><span class="cc-cgb-name">This content</span> is licensed under a <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International license.</a> <span class="cc-cgb-text"></span></p></div>
]]></content:encoded>
					
		
		
		<post-thumbnail><url>https://blog.museum-digital.org/wp-content/uploads/2023/02/2_04121136417.webp</url><width>560</width><height>373</height></post-thumbnail>	</item>
		<item>
		<title>New Features at museum-digital (November 2022)</title>
		<link>https://blog.museum-digital.org/2023/01/02/new-features-at-museum-digital-november-2022/</link>
		
		<dc:creator><![CDATA[Joshua Ramon Enslin]]></dc:creator>
		<pubDate>Mon, 02 Jan 2023 16:59:27 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Frontend]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Importer]]></category>
		<category><![CDATA[md:term]]></category>
		<category><![CDATA[musdb]]></category>
		<category><![CDATA[Batch editing]]></category>
		<category><![CDATA[Collection management]]></category>
		<category><![CDATA[EODEM]]></category>
		<category><![CDATA[Imports]]></category>
		<category><![CDATA[New Features]]></category>
		<category><![CDATA[Object editing (musdb)]]></category>
		<category><![CDATA[Object search (musdb)]]></category>
		<category><![CDATA[Object selection (musdb)]]></category>
		<guid isPermaLink="false">https://blog.museum-digital.org/?p=3413</guid>

					<description><![CDATA[After trying a monthly change log once some month ago, we have unfortunately been rather lenient with notifying everyone of new features and updates in the last months. To approach betterment, here there is a list of the updates of November 2022 the form of screenshots. As a very large update is upcoming in the <a href="https://blog.museum-digital.org/2023/01/02/new-features-at-museum-digital-november-2022/" class="more-link">...</a>]]></description>
										<content:encoded><![CDATA[
<p>After trying a monthly change log once some month ago, we have unfortunately been rather lenient with notifying everyone of new features and updates in the last months. To approach betterment, here there is a list of the updates of November 2022 the form of screenshots. As a very large update is upcoming in the next days, a separate post on the updates of December 2022 will follow tonight.</p>



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



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



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="674" src="https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_Screenshot_musdb_object_Periods-1024x674.webp" alt="" class="wp-image-3412" srcset="https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_Screenshot_musdb_object_Periods-1024x674.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_Screenshot_musdb_object_Periods-300x198.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_Screenshot_musdb_object_Periods-1536x1011.webp 1536w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_Screenshot_musdb_object_Periods-2048x1348.webp 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">New section for time limits on administration tab of object pages.
Special mention should go to the fields &#8220;Freeze period&#8221; and &#8220;Publish object at&#8221;. Filling out these fields enables some automation:
A &#8220;frozen&#8221; object cannot be published before the entered date has been reached. This may e.g. be useful with archival material that cannot be published before a given date.
The &#8220;Publish object at&#8221; field offers a counterpart to this. If a date has been entered into this field and the date is reached, the object will be published automatically by the system.</figcaption></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="674" src="https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_Screenshot_musdb_object_closer_location-1024x674.webp" alt="" class="wp-image-3411" srcset="https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_Screenshot_musdb_object_closer_location-1024x674.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_Screenshot_musdb_object_closer_location-300x198.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_Screenshot_musdb_object_closer_location-1536x1011.webp 1536w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_Screenshot_musdb_object_closer_location-2048x1348.webp 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">A non-public closer location for an object (which may e.g. be necessary with archeological findings, whose finding spots have no name and are not to be published to not give information to grave robbers) can now be set using a map on the addendum tab.</figcaption></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="674" src="https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_object_remarks-1024x674.webp" alt="" class="wp-image-3409" srcset="https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_object_remarks-1024x674.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_object_remarks-300x197.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_object_remarks-1536x1010.webp 1536w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_object_remarks-2048x1347.webp 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">A number of new fields for noting conditions on how the object should best be displayed in exhibitions, among others, have been added on the &#8220;remarks&#8221; tab of object pages in musdb.</figcaption></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="673" src="https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_object_conservations-1024x673.webp" alt="" class="wp-image-3408" srcset="https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_object_conservations-1024x673.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_object_conservations-300x197.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_object_conservations-1536x1009.webp 1536w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_object_conservations-2048x1346.webp 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">On the &#8220;restoration&#8221; tab of object pages, generic fields can be entered with the name of the described feature and the value. Because of the flexible subject of these fields however, they make searching in the fields much harder.
Hence, new fields that are applicable to almost all museum objects have been added as easily searchable, &#8220;static&#8221; properties of an object: Minimum and maximum viable temperature, minimum and maximum viable humidity, and the maximum lux an object may be exposed to.</figcaption></figure>



<h3 class="wp-block-heading">Other page</h3>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="673" src="https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_open_in_new_tab-1024x673.webp" alt="" class="wp-image-3410" srcset="https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_open_in_new_tab-1024x673.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_open_in_new_tab-300x197.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_open_in_new_tab-1536x1009.webp 1536w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_open_in_new_tab-2048x1345.webp 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">It is quite common for users of musdb to only use the same some event types all the time, while not needing many of the other available event types. People working at archeological museums will likely need the &#8220;found&#8221; event type all the time, while barely ever using the event type &#8220;copied by hand&#8221;. To directly access those often used types, one can now click the &#8220;star&#8221; symbols at the end of a line for an event type when accessing the page for selecting the event type of a new event. Favorited event types will then be listed in a bottom sheet on the page.</figcaption></figure>



<h3 class="wp-block-heading">Batch updating object information</h3>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="674" src="https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_batch_visibility-1024x674.webp" alt="" class="wp-image-3404" srcset="https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_batch_visibility-1024x674.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_batch_visibility-300x197.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_batch_visibility-1536x1010.webp 1536w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_batch_visibility-2048x1347.webp 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">The batch update menu for objects&#8217; visibility can now also be used to set the visibility of publishable fields that are publishable on a field level.</figcaption></figure>



<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/20230102_musdb_batch_assignment-1024x674.webp" alt="" class="wp-image-3402" width="840" height="552" srcset="https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_batch_assignment-1024x674.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_batch_assignment-300x197.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_batch_assignment-1536x1010.webp 1536w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_batch_assignment-2048x1347.webp 2048w" sizes="auto, (max-width: 840px) 100vw, 840px" /><figcaption class="wp-element-caption">The &#8220;batch assignment&#8221; menu can now be used to assign spaces, owners, linked loans, and full events (e.g. the creation of objects by a given artist at a given time) to all objects of a search results list.</figcaption></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="674" src="https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_batch_open_in_new_tab-1024x674.webp" alt="" class="wp-image-3403" srcset="https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_batch_open_in_new_tab-1024x674.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_batch_open_in_new_tab-300x197.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_batch_open_in_new_tab-1536x1011.webp 1536w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_batch_open_in_new_tab-2048x1348.webp 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">A &#8220;smaller&#8221; way of batch updating objects can be used in the object overview by selecting an object by clicking and dragging an object. Now, objects can be selected and updated in bulk.
The menu for doing these updates (visible here at the top of the screenshot) now comes with an additional option: &#8220;Open in new tab&#8221;. By clicking on this menu option, all selected objects are opened in new tabs. As browsers often prevent the opening of multiple tabs in bulk, one may have to allow the opening of pop-ups for musdb in the browser to use this functionality.</figcaption></figure>



<h3 class="wp-block-heading">Instituion-wide settings and adding new objects</h3>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="674" src="https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_institution_settings_bulk_downloads-1024x674.webp" alt="" class="wp-image-3406" srcset="https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_institution_settings_bulk_downloads-1024x674.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_institution_settings_bulk_downloads-300x197.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_institution_settings_bulk_downloads-1536x1011.webp 1536w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_institution_settings_bulk_downloads-2048x1348.webp 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">The download button for images in the frontend has been repurposed to enable bulk downloading of all images of an object. While the images are downloaded, the users see an overlay where the museum may display a message (e.g. on how to use the images, or for asking the users to notify the museum about the images being reused in print). The message can be set in the institution-wide settings (available for users of the role &#8220;museum director&#8221; by hovering over the academy symbol in the navigation in musdb and then selecting the menu option &#8220;settings&#8221;).</figcaption></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="674" src="https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_institution_settings_1-1024x674.webp" alt="" class="wp-image-3405" srcset="https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_institution_settings_1-1024x674.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_institution_settings_1-300x197.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_institution_settings_1-1536x1010.webp 1536w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_institution_settings_1-2048x1347.webp 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">The instituion-wide settings page now also comes with two other new features. On the one hand, users can now be required to select a tag for the object type when adding new objects. On the other, the inventory number suggestion when adding new objects has been improved. It is now possible to generate inventory numbers with variable length numerical components (e.g. ABC-9; followed by ABC-10).</figcaption></figure>



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



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="673" src="https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_notification_settings-1024x673.webp" alt="" class="wp-image-3407" srcset="https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_notification_settings-1024x673.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_notification_settings-300x197.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_notification_settings-1536x1009.webp 1536w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_musdb_notification_settings-2048x1345.webp 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">The notification framework in musdb has been fully rewritten. Along with that comes the option to specifically subscribe to email notifications only for some types of notifications.
To do so, one can navigate to one&#8217;s personal settings. A new tab &#8220;notifications&#8221; on this page allows setting the primary route of notification and a fallback.
If the primary route is set to &#8220;email&#8221; for upcoming ends to loans, the user will immediately receive a mail once the system recognizes an upcoming end to a loan. If the primary route here is set to &#8220;Internal&#8221; and &#8220;Email&#8221; is set to be the fallback route, the user will only see a notification on the upcoming loan in the notification overlay within musdb for a week. If the notification has not been marked as read after a week, a mail will be sent.</figcaption></figure>



<h3 class="wp-block-heading">In other news</h3>



<ul class="wp-block-list">
<li>The calendar feature (accessible under the puzzle symbol in the main navigation) can now display tasks or make them subscribable via WebCal (thus implementing a &#8220;reminder&#8221; as had often been requested)</li>



<li>PDF of all linked information is now in A4 and uses a two-column layout</li>



<li>Ukrainian translation</li>



<li>&#8220;Simple A5 PDF&#8221; now covers inventorization fields on rear side</li>
</ul>



<h3 class="wp-block-heading" id="mdterm">md:term</h3>



<ul class="wp-block-list">
<li>If two actors have been joined and one has an old links to the page of the actor now deleted, one is now referred onwards to the new, single actor entry. The same works with transferrals between vocabularies (an actor that was transformed into a tag, etc.).</li>



<li>Ukrainian Translation</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="673" src="https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_mdterm_ukrainian-1024x673.webp" alt="" class="wp-image-3401" srcset="https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_mdterm_ukrainian-1024x673.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_mdterm_ukrainian-300x197.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_mdterm_ukrainian-1536x1010.webp 1536w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_mdterm_ukrainian-2048x1346.webp 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">md:term is now available in Ukrainian!</figcaption></figure>



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



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



<li>JSON-based settings for specific institution pages have been removed</li>



<li>Bulk download of object images
<ul class="wp-block-list">
<li>An overlay with a message from the museum can be displayed during batch downloads (see above)</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading" id="csvxml">CSVXML</h3>



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



<li>The served page now is completely static and all checks and conversions run directly in the browser. This way, no uploads actually happen and the application is completely uncritical to the server&#8217;s security. On the other hand, this allows for installing CSVXML as a <em>progressive web app</em> and using it offline.</li>



<li>We also added some explanatory texts did small updates to the design of the page. A footer now links to the source code and offers to refresh all cached contents of the page (this may be useful when visiting the page after a long time, as the whole application is cached in the browser for offline use).</li>



<li>A new check also checks for the file encoding. A warning is provided if the data does not appear to be UTF-8-encoded.</li>



<li>CSVXML is now released open source under the AGPL.</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="631" src="https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_csvxml-1024x631.webp" alt="" class="wp-image-3400" srcset="https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_csvxml-1024x631.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_csvxml-300x185.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_csvxml-1536x947.webp 1536w, https://blog.museum-digital.org/wp-content/uploads/2023/01/20230102_csvxml.webp 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">CSVXML has been (almost) completely rewritten).</figcaption></figure>



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



<p>While the individual parsers for the different export formats are updated very often, the core scripts of the importer are very stable. November 2022 however came with a large update to these core sections, as more categories of data that had not before been covered by the importer (many of them new) can now be imported:</p>



<ul class="wp-block-list">
<li>Contact information (e.g. for object owners; loan partner institution)</li>



<li>Object&#8217;s movement log</li>



<li>Minimum and maximum temperature, humidity, and lux of an object</li>



<li>Loans</li>



<li>Events / Appointments</li>
</ul>



<p>In terms of the parsers, we extended the LIDO parser to cover the new fields suggested by the upcoming <a href="https://cidoc.mini.icom.museum/working-groups/documentation-standards/eodem-home/">EODEM</a> standard for exchanging loan object information.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Imports can now be triggered by users</title>
		<link>https://blog.museum-digital.org/2022/06/04/imports-can-now-be-triggered-by-users/</link>
		
		<dc:creator><![CDATA[Joshua Ramon Enslin]]></dc:creator>
		<pubDate>Sat, 04 Jun 2022 14:27:10 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Importer]]></category>
		<category><![CDATA[musdb]]></category>
		<category><![CDATA[Imports]]></category>
		<category><![CDATA[New Features]]></category>
		<guid isPermaLink="false">https://blog.museum-digital.org/?p=3249</guid>

					<description><![CDATA[Until May 2022, the import of new data to museum-digital was always limited by the need to involve a member of the development team. Not least, because users had no option to upload potential import data in bulk. After many years, we have now finally opened up a way for users with access to musdb <a href="https://blog.museum-digital.org/2022/06/04/imports-can-now-be-triggered-by-users/" class="more-link">...</a>]]></description>
										<content:encoded><![CDATA[
<p>Until May 2022, the import of new data to museum-digital was always limited by the need to involve a member of the development team. Not least, because users had no option to upload potential import data in bulk. After many years, we have now finally opened up a way for users with access to musdb to import data on their own.</p>



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



<p>The most important precondition for this was, once again, the option to upload generic data to the server. This can now be done using a newly added <a href="https://en.wikipedia.org/wiki/WebDAV">WebDAV</a> interface. WebDAV is a protocoll that can be used in a roughly analogous way to FTP, but it is built on top of HTTP (the main protocol used for accessing websites). Support for the protocol is hence rather good &#8211; even Windows Explorer can mount WebDAV network drives &#8211; and it should not be blocked by the firewalls of larger museums.</p>



<h2 class="wp-block-heading">How to import data using the new WebDAV interface?</h2>



<p>First, one needs to generate login data to the WebDAV drive for the respective institution (this is always the institution one&#8217;s account was created for, even if one has access to multiple museums&#8217; data. To do so, one needs to login to <a href="https://en.about.museum-digital.org/software/musdb">musdb</a> and then navigate to one&#8217;s account settings. Here, there is a new tab available below the table for basic login information: WebDAV. Once that tab is opened, a short explanation becomes visible alongside a button &#8220;Generate WebDAV password&#8221;. Upon clicking that button, a password is automatically generated the login information is displayed in a dialogue overlay. This login information should then be stored in a safe place (at best, a password manager), as it is not accessible from the server anymore at a later point in time.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="856" src="https://blog.museum-digital.org/wp-content/uploads/2022/06/2022-06-03_Screenshot_WebDAV_Access-1-1024x856.png" alt="" class="wp-image-3250" srcset="https://blog.museum-digital.org/wp-content/uploads/2022/06/2022-06-03_Screenshot_WebDAV_Access-1-1024x856.png 1024w, https://blog.museum-digital.org/wp-content/uploads/2022/06/2022-06-03_Screenshot_WebDAV_Access-1-300x251.png 300w, https://blog.museum-digital.org/wp-content/uploads/2022/06/2022-06-03_Screenshot_WebDAV_Access-1-1536x1283.png 1536w, https://blog.museum-digital.org/wp-content/uploads/2022/06/2022-06-03_Screenshot_WebDAV_Access-1.png 1831w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Once the button &#8220;Generate WebDAV password&#8221; has been clicked, a dialogue with login information for the WebDAV interface opens</figcaption></figure>



<p>Using this data, one can now proceed to connect to the WebDAV drive using one&#8217;s WebDAV client of choice. For first attempts to try out the import process, one can simply use a file manager (as stated above, even Windows Explorer can handle WebDAV), but if one repeatedly wants to work with the import tool, it is advisable to get a dedicated WebDAV client like <a href="https://winscp.net/eng/docs/start">WinSCP</a>. Note that, depending on the client, it may be necessary to change the protocol from <code>davs://</code> to <code>https://</code>.</p>



<h3 class="wp-block-heading">Uploading data for imports and configuring imports</h3>



<p>When one accesses the WebDAV drive for the first, two folders and two files will be listed:</p>



<pre class="wp-block-code"><code>.
├── import_config.sample.txt
├── IMPORT_IMG
├── IMPORT_XML
└── README.md</code></pre>



<p>The meaning of <strong><code>README.md </code></strong>should be evident: here you can also read about the expected folder structure and the next steps required for running an import.</p>



<h3 class="wp-block-heading">Uploading import data</h3>



<p>The folders <strong><code>IMPORT_IMG</code></strong>&nbsp;and&nbsp;<strong><code>IMPORT_XML</code>&nbsp;</strong>are where import data should be uploaded to. Images as well as other media files go to <strong><code>IMPORT_IMG</code></strong>; metadata files &#8211; irrespective of their format &#8211; can be uploaded to <strong><code>IMPORT_XML</code></strong>. It is important to note, that there should be no further subdirectories created within the directories &#8211; the import scripts expect a flat folder structure.</p>



<h3 class="wp-block-heading">Configuring the import</h3>



<p>Finally, the server needs to be told what kind of import data is present here and that there is an import to be done at all. The file <strong><code>import_config.sample.txt</code></strong> can be used for this purpose. Upon opening it in a text editor (e.g. Notepad; <em>not</em> MS Word), one can see all the possible import configuration settings in lines that are to be completed.</p>



<p>Required for running the import are only a mail address and the name of the parser (from the user&#8217;s perspective: the expected import format) to use. The mail address is required to enable the server to give feedback about the success of an import or any error appearing when importing (the occurence of any error automatically halts the import process). Note that the mail address needs to be one of a user in musdb who holds the user role &#8220;museum director&#8221; or &#8220;administrator&#8221;. A detailed list of the available parsers, complete with descriptions, further links and possible parser-specific settings can be found at the end of the file.</p>



<p>All other settings besides the mail address are optional. One may e.g. set objects to be automatically published upon the completion of the import or one can link all the imported objects to a collection, overwriting possible collection links in the import data.</p>



<p>Once the import configuration has been completely filled out, the file should be saved and renamed to <strong><code>import_config.txt</code></strong>.&nbsp;The existence of a file of this name signals to the server, that an import should take place here.</p>



<h3 class="wp-block-heading">The import runs</h3>



<p>The server has a timed script, that checks all WebDAV drives once every four hours to see, if any import data exists there (signaled by the existence of the file <code>import_config.txt</code>). If that is the case, the import will be run.</p>



<p>If the import completes without any problems, the import data and configuration file will be moved to a new directory <code>IMPORTS_SUCCESS</code> and a notification will be sent to the mail address named in the configration file. Eventually, the import data will be removed from the WebDAV drive.</p>



<p>Any problem on the other hand immediately leads to the import being halted and the import data being moved to a folder <code>IMPORTS_FAILED</code>.  Similar to successful imports, a notification will be sent out to the mail address from the configuration file and to the development team. The selected parser or the import data then need to be adjusted and the import data moved back to the main <code>IMPORT_XML</code>&nbsp;and&nbsp;<code>IMPORT_IMG</code> folders before one can try importing again. Potential problems can range from incomplete data to the existence of fields not yet covered by the respective parser in the import script.</p>



<h2 class="wp-block-heading">Necessary adjustments to the import tool</h2>



<p>To enable users to safely import data on their own, the import tool had to be substantially remodelled. In general, the import tool consists of four types of scripts:</p>



<ul class="wp-block-list"><li>Representation of the basic <em>data types</em> available for imports (e.g. objects, events, images, collections)</li><li><em>Writers</em>, that handle writing the imported data to the database in bulk</li><li><em>Parsers</em>, that handle the reading of import data of a given format and translate values from the import data format to the expected data types in museum-digital</li><li><em>Frontend</em> scripts, that provide e.g. the command line interface</li></ul>



<p>Thus far, only the data types and writers had been consistently written using an object-oriented approach. Enabling users to set parser-specific settings required us to refactor the remaining code to similarly use object-oriented programming. As a positive side effect, this allows us to test the parsers much more easily, so that errors in rarely-used parsers arising from updates to other components or the programming language itself will be noticed and solved much more quickly than it would have been the case before.</p>



<p>On the other hand, this refactoring and the new requirement to at least add integration tests for all parsers led us to drop support for some rarely used parsers, for which we could not find example data anymore.</p>



<h2 class="wp-block-heading">Who may profit from the new import option</h2>



<p>While the present update allows users to upload import data and run imports themselves, it only allows limited options to adjusting the parsers themselves. It is thus museums who often import data of the same format who can profit most from the new format.</p>



<p>Museums who have import data in a format that is not yet covered by the available parsers will still need to go with the old way of importing and simply write a mail.</p>



<p>P.S.: An up-to-date description of the import process can be found <a href="https://de.handbook.museum-digital.info/import/importe-selbst-durchfuehren.html">in the German-language handbook</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/06/Screenshot-from-2022-06-05-02-40-32-1.png</url><width>600</width><height>433</height></post-thumbnail>	</item>
	</channel>
</rss>
