CINXE.COM

Enhancing DCAT support in CKAN (DCAT-AP v3, scheming integration, and more)

<!DOCTYPE html> <html class="no-js" lang="en"> <head> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-8271754-21"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-8271754-21'); </script> <!-- PostHog analitics and events collector --> <script> !function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.async=!0,p.src=s.api_host+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled onFeatureFlags getFeatureFlag getFeatureFlagPayload reloadFeatureFlags group updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures getActiveMatchingSurveys getSurveys getNextSurveyStep onSessionId".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]); posthog.init('phc_zjhMXcYodTdsui69Src7Y133OnOx5tPmmR55K7qLFZv', {api_host: 'https://app.posthog.com', person_profiles: 'always'}) </script> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <meta name="twitter:card" content="summary_large_image"> <meta name="twitter:title" content="Enhancing DCAT support in CKAN (DCAT-AP v3, scheming integration, and more)"> <meta name="twitter:description" content="Discover CKAN&#x27;s ckanext-dcat v2.0.0 with DCAT-AP v3 support and ckanext-scheming integration, improving metadata sharing for data portals. Learn how this upgrade helps publishers expose datasets using DCAT."> <meta name="twitter:image" content="https://ckan.org/media/images/28-DCAT-02.original.png"> <meta property="og:url" content="http://ckan.org/blog/enhancing-dcat-support-in-ckan-dcat-ap-v3-scheming-integration-and-more"> <meta property="og:title" content="Enhancing DCAT support in CKAN (DCAT-AP v3, scheming integration, and more)"> <meta property="og:description" content="Discover CKAN&#x27;s ckanext-dcat v2.0.0 with DCAT-AP v3 support and ckanext-scheming integration, improving metadata sharing for data portals. Learn how this upgrade helps publishers expose datasets using DCAT."> <meta property="og:site_name" content="ckanorg"> <meta property="og:image" content="https://ckan.org/media/images/28-DCAT-02.original.png"> <meta property="og:image:width" content="2501"> <meta property="og:image:height" content="1309"> <meta itemprop="url" content="http://ckan.org/blog/enhancing-dcat-support-in-ckan-dcat-ap-v3-scheming-integration-and-more"> <meta itemprop="name" content="Enhancing DCAT support in CKAN (DCAT-AP v3, scheming integration, and more)"> <meta itemprop="description" content="Discover CKAN&#x27;s ckanext-dcat v2.0.0 with DCAT-AP v3 support and ckanext-scheming integration, improving metadata sharing for data portals. Learn how this upgrade helps publishers expose datasets using DCAT."> <meta itemprop="image" content="https://ckan.org/media/images/28-DCAT-02.original.png"> <title>Enhancing DCAT support in CKAN (DCAT-AP v3, scheming integration, and more)</title> <meta name="description" content="Discover CKAN&#x27;s ckanext-dcat v2.0.0 with DCAT-AP v3 support and ckanext-scheming integration, improving metadata sharing for data portals. Learn how this upgrade helps publishers expose datasets using DCAT."> <meta name="keywords" content="DCAT, ckanext-dcat, DCAT-AP v3, ckanext-scheming"> <link href="/static/css/main.css" rel="stylesheet"> <link rel="stylesheet" href="/static/css/slick.css"> <link rel="icon" href="/static/img/ckan.ico"> <link href="/static/css/jquery.fancybox.min.css" rel="stylesheet"> <link href="/static/css/slick-theme.css" rel="stylesheet"> <link href="/static/css/micromodal.css" rel="stylesheet" type="text/css"> <script>window.pipedriveLeadboosterConfig = {base: 'leadbooster-chat.pipedrive.com',companyId: 11632257,playbookUuid: '38318f40-245d-419a-a07f-264a99d52996',version: 2};(function () {var w = window;if (w.LeadBooster) {console.warn('LeadBooster already exists');} else {w.LeadBooster = {q: [],on: function (n, h) {this.q.push({ t: 'o', n: n, h: h });},trigger: function (n) {this.q.push({ t: 't', n: n });},};}})();</script><script src="https://leadbooster-chat.pipedrive.com/assets/loader.js" async></script> </head> <body> <div class="wrapper" id="wrap"> <main class="main"> <div id="loading-spinner"> </div> <header class="header"> <div class="header-holder"> <div class="container"> <div class="logo"> <a href="/"><img src="/static/img/ckan-dpg.svg" alt="Logotype" width="160" height="44"></a> </div> <nav class="nav justify-content-end"> <div class="nav-opener"><span></span></div> <div class="nav-drop"> <ul class="nav-menu"> <li > <a href="/" > Home </a> </li> <li > <a href="/features" > Features </a> </li> <li > <a href="/showcase" > Showcase </a> </li> <div class="dropdown"> <button onclick="clickDropdown('Solutions')" id="dropbtn-Solutions" >Solutions <span class="support-arrow"></span></button> <div id="Solutions_dropdown" class="dropdown-content"> <a href="/government">CKAN for Government</a> <a href="/enterprise">CKAN for Enterprise</a> </div> </div> <div class="dropdown"> <button onclick="clickDropdown('Support')" id="dropbtn-Support" >Support <span class="support-arrow"></span></button> <div id="Support_dropdown" class="dropdown-content"> <a href="/community">Community Support</a> <a href="/commercial">Commercial Support</a> </div> </div> <li class="active" > <a href="/blog" > Blog </a> </li> <li > <a href="/events" > Events </a> </li> <li > <a href="/faq" > FAQ </a> </li> <li > <a href="https://docs.ckan.org/" target="_blank" > Docs <svg width="16" height="16" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 9.64368V13.6437C12 13.997 11.8595 14.3364 11.6095 14.5865C11.3594 14.8365 11.0203 14.977 10.6667 14.977H3.33333C2.97971 14.977 2.64057 14.8365 2.39052 14.5865C2.14048 14.3364 2 13.9973 2 13.6437V6.31035C2 5.95672 2.14048 5.61759 2.39052 5.36754C2.64057 5.11749 2.97971 4.97701 3.33333 4.97701H7.33333" stroke="#666666" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M10 2.97701H14V6.97701" stroke="#666666" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M6.6665 10.3103L13.9998 2.97701" stroke="#666666" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> </a> </li> <li > <a href="https://github.com/ckan/ckan" target="_blank" class="btn btn-sm btn-grey btn-link" > <svg width="17" height="17" viewBox="0 0 17 17" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M8.20235 0.977013C3.67055 0.977013 0 4.64756 0 9.17936C0 12.8089 2.34792 15.8745 5.60836 16.9613C6.01847 17.0331 6.17227 16.787 6.17227 16.5717C6.17227 16.3769 6.16202 15.731 6.16202 15.044C4.10118 15.4234 3.56802 14.5416 3.40398 14.0803C3.3117 13.8444 2.91183 13.1165 2.56323 12.9217C2.27615 12.7679 1.86603 12.3885 2.55298 12.3783C3.19892 12.368 3.6603 12.9729 3.81409 13.219C4.5523 14.4596 5.73139 14.111 6.20303 13.8957C6.2748 13.3626 6.49011 13.0037 6.72593 12.7986C4.9009 12.5936 2.99386 11.8861 2.99386 8.74874C2.99386 7.85673 3.3117 7.11852 3.8346 6.54436C3.75258 6.3393 3.46549 5.49856 3.91662 4.37074C3.91662 4.37074 4.60357 4.15542 6.17227 5.21148C6.82846 5.02692 7.52566 4.93465 8.22286 4.93465C8.92006 4.93465 9.61726 5.02692 10.2734 5.21148C11.8421 4.14517 12.5291 4.37074 12.5291 4.37074C12.9802 5.49856 12.6931 6.3393 12.6111 6.54436C13.134 7.11852 13.4519 7.84648 13.4519 8.74874C13.4519 11.8964 11.5346 12.5936 9.70953 12.7986C10.0069 13.055 10.2632 13.5471 10.2632 14.3161C10.2632 15.4131 10.2529 16.2949 10.2529 16.5717C10.2529 16.787 10.4067 17.0434 10.8168 16.9613C12.4452 16.4116 13.8601 15.3651 14.8625 13.9691C15.8649 12.5732 16.4043 10.898 16.4047 9.17936C16.4047 4.64756 12.7341 0.977013 8.20235 0.977013Z" fill="#333333"/></svg> View on Github </a> </li> <li> <a href="/accounts/login/">Login</a> </li> </ul> </div> </nav> </div> </div> </header> <section class="section-banner"> <div class="container-sm t-center"> <a href="/blog" class="link">Blog <svg width="8" height="13" viewBox="0 0 8 13" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> <path d="M2.00009 0.855957L0.590088 2.26596L5.17009 6.85596L0.590088 11.446L2.00009 12.856L8.00009 6.85596L2.00009 0.855957Z" fill="currentColor"/> </svg> </a> <h1>Enhancing DCAT support in CKAN (DCAT-AP v3, scheming integration, and more)</h1> <p> A review of the recent developments in CKAN&#x27;s DCAT support, and how you can get involved </p> <ul class="article-bread-crumbs"> <li> <a href="/blog/author/amercader" title="Author: Adri脿 Mercader&#013;Email: amercadero@gmail.com&#013;Company: Link Digital"> Adri脿 Mercader </a> </li> <li> <a href="/blog/tag/extensions">extensions, </a> <a href="/blog/tag/dcat">dcat, </a> <a href="/blog/tag/interoperability">interoperability</a> </li> <li>11 Oct 2024</li> <li> <div class="share-container"> <div class="front"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-share-fill" viewBox="0 0 16 16"> <path d="M11 2.5a2.5 2.5 0 1 1 .603 1.628l-6.718 3.12a2.499 2.499 0 0 1 0 1.504l6.718 3.12a2.5 2.5 0 1 1-.488.876l-6.718-3.12a2.5 2.5 0 1 1 0-3.256l6.718-3.12A2.5 2.5 0 0 1 11 2.5z"/> </svg> Share </div> <div class="back"> <div class="twitter"> <a href="https://twitter.com/intent/tweet?text=CKAN:%20News,%20industry%20reports,%20and%20announcements&url=https://ckan.org/blog/enhancing-dcat-support-in-ckan-dcat-ap-v3-scheming-integration-and-more" target="_blank" rel="noopener" title="Tweet this"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="#fff" class="bi bi-twitter" viewBox="0 0 16 16"> <path d="M5.026 15c6.038 0 9.341-5.003 9.341-9.334 0-.14 0-.282-.006-.422A6.685 6.685 0 0 0 16 3.542a6.658 6.658 0 0 1-1.889.518 3.301 3.301 0 0 0 1.447-1.817 6.533 6.533 0 0 1-2.087.793A3.286 3.286 0 0 0 7.875 6.03a9.325 9.325 0 0 1-6.767-3.429 3.289 3.289 0 0 0 1.018 4.382A3.323 3.323 0 0 1 .64 6.575v.045a3.288 3.288 0 0 0 2.632 3.218 3.203 3.203 0 0 1-.865.115 3.23 3.23 0 0 1-.614-.057 3.283 3.283 0 0 0 3.067 2.277A6.588 6.588 0 0 1 .78 13.58a6.32 6.32 0 0 1-.78-.045A9.344 9.344 0 0 0 5.026 15z"/> </svg> </a> </div> <div class="facebook"> <a href="https://www.facebook.com/sharer/sharer.php?u=https://ckan.org/blog/enhancing-dcat-support-in-ckan-dcat-ap-v3-scheming-integration-and-more" target="_blank" rel="noopener" title="Share via Facebook"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="#fff" class="bi bi-facebook" viewBox="0 0 16 16"> <path d="M16 8.049c0-4.446-3.582-8.05-8-8.05C3.58 0-.002 3.603-.002 8.05c0 4.017 2.926 7.347 6.75 7.951v-5.625h-2.03V8.05H6.75V6.275c0-2.017 1.195-3.131 3.022-3.131.876 0 1.791.157 1.791.157v1.98h-1.009c-.993 0-1.303.621-1.303 1.258v1.51h2.218l-.354 2.326H9.25V16c3.824-.604 6.75-3.934 6.75-7.951z"/> </svg> </a> </div> <div class="linkedin"> <a href="https://www.linkedin.com/sharing/share-offsite/?url=https://ckan.org/blog/enhancing-dcat-support-in-ckan-dcat-ap-v3-scheming-integration-and-more" target="_blank" rel="noopener" title="Share via LinkedIn"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="#fff" class="bi bi-linkedin" viewBox="0 0 16 16"> <path d="M0 1.146C0 .513.526 0 1.175 0h13.65C15.474 0 16 .513 16 1.146v13.708c0 .633-.526 1.146-1.175 1.146H1.175C.526 16 0 15.487 0 14.854V1.146zm4.943 12.248V6.169H2.542v7.225h2.401zm-1.2-8.212c.837 0 1.358-.554 1.358-1.248-.015-.709-.52-1.248-1.342-1.248-.822 0-1.359.54-1.359 1.248 0 .694.521 1.248 1.327 1.248h.016zm4.908 8.212V9.359c0-.216.016-.432.08-.586.173-.431.568-.878 1.232-.878.869 0 1.216.662 1.216 1.634v3.865h2.401V9.25c0-2.22-1.184-3.252-2.764-3.252-1.274 0-1.845.7-2.165 1.193v.025h-.016a5.54 5.54 0 0 1 .016-.025V6.169h-2.4c.03.678 0 7.225 0 7.225h2.4z"/> </svg> </a> </div> </div> </div> </li> </ul> </div> <img src="/media/images/28-DCAT-01.2e16d0ba.fill-1440x600.png" alt="28-DCAT-01"> </section> <div class="container-sm article blog-event"> <h2 data-block-key="4jnv4">Summary</h2><p data-block-key="fj52q">Long standing support for the DCAT standard in CKAN has been recently expanded with the release of ckanext-dcat v2.0.0, which includes support for DCAT-AP v3 and seamless integration with ckanext-scheming. We want to keep expanding the DCAT support in CKAN and are keen to hear from publishers and consumers to learn how you are using DCAT and what is missing.</p><h2 data-block-key="868pf">Sharing metadata with DCAT</h2><p data-block-key="6qgp9">Data and metadata sharing is one of the key features of data portals. To be able to fulfill their role in data disseminators, portals need ways to share information about the datasets they host with other systems. Most data portals like CKAN will have some form of API that will enable programmatic access to discover and import metadata records but of course different systems will use different representation formats, API endpoints etc.</p><p data-block-key="cjptn">To help provide a common vocabulary for sharing metadata across data portals, <a href="https://www.w3.org/TR/vocab-dcat-3/">DCAT</a> was formalized as a W3C recommendation back in 2014, building on previous work performed in different institutions. The CKAN community has always been close to these discussions from an early point, with some initial efforts like <a href="https://spec.dataportals.org/">spec.dataportals.org</a> dating back to 2012.</p><p data-block-key="1rmse">DCAT provides a number of classes for different entities like Catalogs, Datasets, and so on, and describes what properties should be included for each of them, as well as the relationships between them. On top of the DCAT recommendation, other profiles can be built. These can focus on specific regions or administrations like <a href="https://semiceu.github.io/DCAT-AP/releases/3.0.0/">DCAT-AP</a> and <a href="https://doi-do.github.io/dcat-us/">DCAT-US</a> for data portals in the European Union or the US respectively, or be domain specific like <a href="https://semiceu.github.io/GeoDCAT-AP">GeoDCAT-AP</a> and <a href="https://joinup.ec.europa.eu/collection/semic-support-centre/solution/statdcat-application-profile-data-portals-europe">StatDCAT-AP</a>.</p><h2 data-block-key="2h5n2">CKAN + DCAT = ckanext-dcat</h2><p data-block-key="meb6">As DCAT grew in popularity and more organizations adopted it, work consolidated around <a href="https://docs.ckan.org/projects/ckanext-dcat/">ckanext-dcat</a>, a CKAN extension that helps data publishers expose and consume metadata serialized using DCAT. Ckanext-dcat is one of the most popular CKAN extensions, and it is used across major sites like the <a href="https://www.govdata.de/">German</a>, <a href="https://data.gov.ie/">Irish</a> or <a href="https://opendata.swiss/en">Swiss</a> national data portals. It allows to expose datasets created in CKAN in a semantic RDF format that is compliant with DCAT specifications.</p><p data-block-key="2p4pi">So a CKAN dataset that looks like this in the CKAN API:</p> <link href="//cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-coy.min.css" rel="stylesheet"><link href="//cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/line-numbers/prism-line-numbers.min.css" rel="stylesheet"><link href="//cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/copy-to-clipboard/prism-copy-to-clipboard.min.css" rel="stylesheet"><link href="//cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/toolbar/prism-toolbar.min.css" rel="stylesheet"><script> /* This is ugly, but to ensure we only create this function once, and only call each JS library once, we need to check here in case there are multiple Wagtail blocks on this page. This will ensure we only load the minimum payload. */ if(typeof loadPrismLanguage != 'function') { window.loadPrismLanguage = function(language) { var libraries = [ { "id": "code-block-prismjs", "url": "//cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/prism.min.js" }, { "id": "code-block-prismjs-" + language, "url": "//cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-" + language + ".min.js" } , { "id": "code-block-line-numbers", "url": "//cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/line-numbers/prism-line-numbers.min.js" } , { "id": "code-block-toolbar", "url": "//cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/toolbar/prism-toolbar.min.js" } , { "id": "code-block-copy-to-clipboard", "url": "//cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/copy-to-clipboard/prism-copy-to-clipboard.min.js" } ]; for(const library of libraries) { if(document.getElementById(library["id"]) == null) { var s = document.createElement("script"); s.id = library["id"]; s.type = "text/javascript"; s.src = library["url"]; s.async = false; document.body.appendChild(s); } } }; } loadPrismLanguage('json'); language_class_name = 'language-json'; </script><pre class="line-numbers"><code id="target-element-current">{ &quot;id&quot;: &quot;425e361b-bad9-4a8f-8cc4-2e147c4e8c18&quot;, &quot;name&quot;: &quot;my-ckan-dataset&quot;, &quot;title&quot;: &quot;An example CKAN dataset&quot;, &quot;description&quot;: &quot;Some notes about the data&quot;, &quot;temporal_coverage&quot;: [ { &quot;start&quot;: &quot;2024-01-01&quot;, &quot;end&quot;: &quot;2024-12-31&quot; } ], &quot;resources&quot;: [ { &quot;id&quot;: &quot;df0fc449-fddf-41af-910a-f972b458956c&quot;, &quot;name&quot;: &quot;Some data in CSV format&quot;, &quot;url&quot;: &quot;http://my-ckan-site.org/dataset/425e361b-bad9-4a8f-8cc4-2e147c4e8c18/resource/df0fc449-fddf-41af-910a-f972b458956c/download/data.csv&quot;, &quot;format&quot;: &quot;CSV&quot; } ] }</code></pre><script> var block_num = (typeof block_num === 'undefined') ? 0 : block_num; block_num++; document.getElementById('target-element-current').className = language_class_name; document.getElementById('target-element-current').id = 'target-element-' + block_num; </script> <p data-block-key="4jnv4">Will look like this as a DCAT serialization:</p> <link href="//cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-coy.min.css" rel="stylesheet"><link href="//cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/line-numbers/prism-line-numbers.min.css" rel="stylesheet"><link href="//cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/copy-to-clipboard/prism-copy-to-clipboard.min.css" rel="stylesheet"><link href="//cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/toolbar/prism-toolbar.min.css" rel="stylesheet"><script> /* This is ugly, but to ensure we only create this function once, and only call each JS library once, we need to check here in case there are multiple Wagtail blocks on this page. This will ensure we only load the minimum payload. */ if(typeof loadPrismLanguage != 'function') { window.loadPrismLanguage = function(language) { var libraries = [ { "id": "code-block-prismjs", "url": "//cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/prism.min.js" }, { "id": "code-block-prismjs-" + language, "url": "//cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-" + language + ".min.js" } , { "id": "code-block-line-numbers", "url": "//cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/line-numbers/prism-line-numbers.min.js" } , { "id": "code-block-toolbar", "url": "//cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/toolbar/prism-toolbar.min.js" } , { "id": "code-block-copy-to-clipboard", "url": "//cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/copy-to-clipboard/prism-copy-to-clipboard.min.js" } ]; for(const library of libraries) { if(document.getElementById(library["id"]) == null) { var s = document.createElement("script"); s.id = library["id"]; s.type = "text/javascript"; s.src = library["url"]; s.async = false; document.body.appendChild(s); } } }; } loadPrismLanguage('css'); language_class_name = 'language-css'; </script><pre class="line-numbers"><code id="target-element-current">@prefix dcat: &lt;http://www.w3.org/ns/dcat#&gt; . @prefix dct: &lt;http://purl.org/dc/terms/&gt; . @prefix xsd: &lt;http://www.w3.org/2001/XMLSchema#&gt; . &lt;http://my-ckan-site.org/dataset/425e361b-bad9-4a8f-8cc4-2e147c4e8c18&gt; a dcat:Dataset ; dct:identifier &quot;425e361b-bad9-4a8f-8cc4-2e147c4e8c18&quot; ; dct:temporal [ a dct:PeriodOfTime ; dcat:endDate &quot;2024-12-31&quot;^^xsd:date ; dcat:startDate &quot;2024-01-01&quot;^^xsd:date ] ; dct:title &quot;An example CKAN dataset&quot; ; dcat:distribution &lt;http://my-ckan-site.org/dataset/425e361b-bad9-4a8f-8cc4-2e147c4e8c18/resource/df0fc449-fddf-41af-910a-f972b458956c&gt; . &lt;http://my-ckan-site.org/dataset/425e361b-bad9-4a8f-8cc4-2e147c4e8c18/resource/df0fc449-fddf-41af-910a-f972b458956c&gt; a dcat:Distribution ; dct:format &quot;CSV&quot; ; dct:title &quot;Some data in CSV format&quot; ; dcat:accessURL &lt;http://my-ckan-site.org/dataset/425e361b-bad9-4a8f-8cc4-2e147c4e8c18/resource/df0fc449-fddf-41af-910a-f972b458956c/download/data.csv&gt; .</code></pre><script> var block_num = (typeof block_num === 'undefined') ? 0 : block_num; block_num++; document.getElementById('target-element-current').className = language_class_name; document.getElementById('target-element-current').id = 'target-element-' + block_num; </script> <p data-block-key="4jnv4">The extension works by allowing different <a href="https://docs.ckan.org/projects/ckanext-dcat/en/latest/profiles/#profiles">profiles</a>, providing builtin base profiles compatible with different versions of DCAT-AP, that can be adapted or expanded by site maintainers to support more targeted profiles.</p><h2 data-block-key="cu9c9">What鈥檚 new on ckanext-dcat 2.0.0</h2><p data-block-key="8omfv">Having supported DCAT-AP version 2 for a while, the new <a href="https://docs.ckan.org/projects/ckanext-dcat/en/latest/changelog/#v200-2024-08-30">2.0.0 version of ckanext-dcat</a> added support for the recently announced DCAT-AP version 3, allowing sites to update their DCAT support. More significantly, it also added support for integrating with the most common way to customize the CKAN metadata schema, <a href="https://github.com/ckan/ckanext-scheming">ckanext-scheming</a>. Ckanext-scheming allows to define different metadata schemas for a CKAN site using just configuration files, and will take care of handling the fields internally, validation, displaying the right template snippets in the UI, etc. Ckanext-dcat now integrates with ckanext-scheming, providing pre-built <a href="https://docs.ckan.org/projects/ckanext-dcat/en/latest/getting-started/#schemas">schemas</a> that can be adapted by sites to provide out-of-the-box DCAT support.</p><h2 data-block-key="bqlpq">What next?</h2><p data-block-key="1ttoj">We want to continue expanding the capabilities of ckanext-dcat to make it easier for publishers to provide their sites metadata</p><ul><li data-block-key="fjqos">Provide support for <a href="https://doi-do.github.io/dcat-us/">DCAT-US</a> as a builtin base profile</li><li data-block-key="bmu5j">Improve the base profiles with support for codelists, multilingual properties, etc.</li><li data-block-key="bcrnd">Explore support for other DCAT entities like <a href="https://www.w3.org/TR/vocab-dcat-3/#dataset-series">Dataset Series</a>. Some initial discussion can be found in this <a href="https://github.com/ckan/ckanext-dcat/issues/298">issue</a> if you want to provide feedback or your potential use case.</li><li data-block-key="3kbpm">Expand support to other application profiles like <a href="https://semiceu.github.io/DCAT-AP/releases/2.2.0-hvd/">DCAT-AP-HVD</a></li></ul><p data-block-key="b511l">To do this, and ensure that CKAN becomes the best metadata and data catalog for extensive DCAT support, we need your help! We need to hear from data publishers and consumers, from various jurisdictions on how you use DCAT, how your adoption of DCAT v3 is evolving, and how we can enable you with solid support in CKAN.</p><p data-block-key="7po3p">As part of the <a href="https://ckan.org/blog/boost-for-ckan-nsf-investment-announced">ongoing initiative funded by POSE</a> to strengthen the CKAN community, we are planning on fostering a community of practice around CKAN and DCAT. In the meantime, if you are interested in this work, have questions or want to provide feedback feel free to reach out by creating <a href="https://github.com/ckan/ckan/discussions">a discussion on GitHub</a>.</p> </div> <div class="more-posts-bottom"> <div class="container-md"> <div class="indent"> <div class="container-sm t-center"> <span class="upper">More posts</span> </div> </div> <div class="post"> <div class="post-img narrow"> <a href="/blog/new-patch-releases-for-ckan-211x-and-210x-are-now-available"> <img src="/media/images/09-feb2025-new-patch-releases-BLOG.2e16d0ba.fill-520x390.png" alt="09-feb2025-new-patch-releases-BLOG"> </a> </div> <div class="post-info"> <span class="date">In Category on 06 Feb 2025</span> <br> <a href="/blog/new-patch-releases-for-ckan-211x-and-210x-are-now-available"><h2 class="h2">New patch releases for CKAN 2.11.x and 2.10.x are now available</h2></a> <p> The new patch releases include important bug and security fixes, so users should upgrade as soon as possible to the latest patch release聽for the CKAN version they are using. </p> </div> </div> <div class="post"> <div class="post-img narrow"> <a href="/blog/2024-a-year-in-review"> <img src="/media/images/29-Recap-01.2e16d0ba.fill-520x390.png" alt="29-Recap-01"> </a> </div> <div class="post-info"> <span class="date">In Category on 28 Jan 2025</span> <br> <a href="/blog/2024-a-year-in-review"><h2 class="h2">CKAN in 2024: A Year In Review</h2></a> <p> This year, CKAN continued to cement its status as the go-to Digital Public Good for open data, with more governments and organizations choosing it as their data backbone. Here鈥檚 a quick look at the biggest milestones of 2024. </p> </div> </div> </div> <div class="container-md"> <div class="white-box between"> <h3 class="h3 mb0">Connect with CKAN</h3> <ul class="social bigger"> <li> <a href="https://twitter.com/ckanproject" target="_blank" rel="noopener"> <svg width="37" height="30" viewBox="0 0 20 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M19.688 1.89405C18.9636 2.2153 18.1851 2.43243 17.3681 2.53008C18.2021 2.03016 18.8425 1.23857 19.1441 0.295403C18.3637 0.758239 17.4992 1.0944 16.5791 1.27559C15.8423 0.490562 14.7925 0 13.6308 0C11.4 0 9.59144 1.8085 9.59144 4.03914C9.59144 4.35571 9.62724 4.66401 9.69608 4.95963C6.33906 4.79119 3.36278 3.18311 1.37058 0.739371C1.02289 1.33594 0.8237 2.0298 0.8237 2.77003C0.8237 4.17136 1.53686 5.4077 2.62067 6.13202C1.9585 6.11106 1.33572 5.92937 0.791077 5.62684C0.790789 5.64369 0.790789 5.66061 0.790789 5.67761C0.790789 7.63467 2.18311 9.26724 4.03093 9.63825C3.69196 9.73058 3.33513 9.77991 2.9667 9.77991C2.70644 9.77991 2.45338 9.75463 2.20681 9.70746C2.72077 11.3122 4.21248 12.48 5.98 12.5126C4.59761 13.5959 2.85594 14.2417 0.963552 14.2417C0.637543 14.2417 0.315999 14.2226 0 14.1853C1.78754 15.3313 3.91074 16 6.19179 16C13.6214 16 17.6841 9.84515 17.6841 4.50752C17.6841 4.33238 17.6802 4.15818 17.6725 3.98499C18.4616 3.4155 19.1465 2.70407 19.688 1.89405Z" fill="#777777"/> </svg> </a> </li> <li> <a href="https://www.youtube.com/channel/UCVeS3fHRae7BzXVn8wMcQVw" target="_blank" rel="noopener"> <svg width="41" height="28" viewBox="0 0 41 28" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M36.4535 0.846154C38.1715 1.30769 39.5304 2.66667 39.992 4.38462C40.8381 7.51282 40.8638 14 40.8638 14C40.8638 14 40.8638 20.5128 40.0176 23.6154C39.5561 25.3333 38.1971 26.6923 36.4791 27.1538C33.3766 28 20.8894 28 20.8894 28C20.8894 28 8.40222 28 5.29965 27.1538C3.58171 26.6923 2.22273 25.3333 1.76119 23.6154C0.915039 20.4872 0.915039 14 0.915039 14C0.915039 14 0.915039 7.51282 1.73555 4.41026C2.19709 2.69231 3.55606 1.33333 5.27401 0.871795C8.37658 0.025641 20.8638 0 20.8638 0C20.8638 0 33.3509 0 36.4535 0.846154ZM27.2482 13.9999L16.8893 19.9999V7.99987L27.2482 13.9999Z" fill="#333333"/> </svg> </a> </li> <li> <a href="https://www.linkedin.com/groups/6795833" target="_blank" rel="noopener"> <svg width="30" height="30" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M16.4954 14.4C16.4954 15.2828 15.7781 16 14.9046 16H2.27928C1.40572 16 0.688477 15.2828 0.688477 14.4V1.6C0.688477 0.717241 1.40572 0 2.27928 0H14.9046C15.7873 0 16.4954 0.717241 16.4954 1.6V14.4ZM5.82856 3.90806C5.82856 4.49656 5.39637 4.97472 4.67913 4.97472C4.00787 4.97472 3.57568 4.49656 3.57568 3.90806C3.57568 3.31036 4.02626 2.85059 4.71591 2.85059C5.39637 2.85059 5.81936 3.31036 5.82856 3.90806ZM3.63086 12.6529V5.81151H5.75499V12.6529H3.63086ZM6.97797 5.82072C7.00556 6.43682 7.03314 7.14486 7.03314 8.00004V12.6621H9.15728V8.71728C9.15728 8.52418 9.17567 8.32188 9.23085 8.18394C9.38717 7.78854 9.73659 7.38394 10.3251 7.38394C11.0975 7.38394 11.401 7.98165 11.401 8.86441V12.6621H13.5251V8.61613C13.5251 6.60233 12.4768 5.6644 11.0791 5.6644C9.9297 5.6644 9.24004 6.31728 8.96418 6.76785H8.9274L8.82625 5.82072H6.97797Z" fill="#777777"/> </svg> </a> </li> <li> <a href="https://github.com/ckan/ckan" target="_blank" rel="noopener"> <svg width="30" height="30" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M8.69747 0C4.16567 0 0.495117 3.67055 0.495117 8.20235C0.495117 11.8319 2.84304 14.8975 6.10347 15.9843C6.51359 16.0561 6.66739 15.81 6.66739 15.5947C6.66739 15.3999 6.65713 14.754 6.65713 14.067C4.59629 14.4464 4.06314 13.5646 3.89909 13.1033C3.80682 12.8674 3.40695 12.1395 3.05835 11.9447C2.77127 11.7909 2.36115 11.4115 3.0481 11.4013C3.69403 11.391 4.15542 11.9959 4.30921 12.242C5.04742 13.4826 6.22651 13.134 6.69814 12.9187C6.76992 12.3855 6.98523 12.0267 7.22104 11.8216C5.39602 11.6166 3.48898 10.9091 3.48898 7.77173C3.48898 6.87972 3.80682 6.14151 4.32972 5.56735C4.24769 5.36229 3.96061 4.52155 4.41174 3.39372C4.41174 3.39372 5.09869 3.17841 6.66739 4.23446C7.32357 4.04991 8.02077 3.95763 8.71797 3.95763C9.41517 3.95763 10.1124 4.04991 10.7686 4.23446C12.3373 3.16816 13.0242 3.39372 13.0242 3.39372C13.4753 4.52155 13.1883 5.36229 13.1062 5.56735C13.6291 6.14151 13.947 6.86947 13.947 7.77173C13.947 10.9194 12.0297 11.6166 10.2046 11.8216C10.502 12.078 10.7583 12.5701 10.7583 13.3391C10.7583 14.4361 10.7481 15.3179 10.7481 15.5947C10.7481 15.81 10.9018 16.0664 11.312 15.9843C12.9403 15.4346 14.3552 14.3881 15.3576 12.9921C16.36 11.5961 16.8994 9.92095 16.8998 8.20235C16.8998 3.67055 13.2293 0 8.69747 0Z" fill="#777777"/> </svg> </a> </li> </ul> </div> </div> </div> </main> <footer class="footer"> <div class="container-lg"> <div class="two-columns"> <div class="two-columns-item"> <span>CKAN stewards</span> <p>Datopian and Link Digital are co-stewards of the CKAN project and some of the longest standing contributors to CKAN. They both play key roles in ensuring the CKAN project thrives and delivers the best results for CKAN鈥檚 end users and stakeholders.</p> <ul> <li><a href="https://linkdigital.com.au/" target="_blank" rel="noopener"><img class="linkdigital-logo" src="/static/img/linkdigital-logo-footer.svg" alt="LinkDigital"></a></li> <li><a href="https://www.datopian.com/" target="_blank" rel="noopener"><img class="datopian-logo" src="/static/img/datopian-logo-footer.svg" alt="Datopian"></a></li> </ul> <span>Held in trust by</span> <p>CKAN assets are held in trust by <strong>Open Knowledge Foundation</strong>, a non-profit organization, with best practice policies on governing openly and for use of the trademark.</p> <ul> <li><a href="https://okfn.org/en/" target="_blank" rel="noopener"><img class="okfn-logo" src="/static/img/logo-okfn.png" alt="OpenKnowledge"></a></li> </ul> </div> <div class="two-columns-item social-container"> <span>Sign up for our newsletter</span> <p>Sign up to receive news and updates from CKAN. Your information will be used in accordance with our privacy policy. You may opt out at any time.</p> <div class="footer-subscribe"> <form action="#" id="subscribe_form"> <iframe src="/csrf/" style="display: none;"></iframe> <div class="row"> <input type="text" id="subscribe_name" name="name" placeholder="your name" autocomplete="off"/> <input type="text" id="subscribe_email" name="email" placeholder="your@email.com" autocomplete="off"/> <div class="g-recaptcha" data-sitekey="6LfTnUYlAAAAAEefHjCqXUTP0hGLIPaRu2vSBWNg" data-size="invisible"> </div> <input type="submit" value="Subscribe" class="btn btn-sm"/> </div> </form> </div> <span>Connect with us</span> <p>Join our vibrant community! Follow us on Twitter, LinkedIn, Gitter and GitHub for real-time updates, discussions and contributions.</p> <div class="footer-btns"> <ul class="auth-links"> <li> <a href="/accounts/login/">Login</a> </li> </ul> <ul class="social"> <li> <a href="https://twitter.com/ckanproject" target="_blank" rel="noopener"> <svg width="20" height="16" viewBox="0 0 20 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M19.688 1.89405C18.9636 2.2153 18.1851 2.43243 17.3681 2.53008C18.2021 2.03016 18.8425 1.23857 19.1441 0.295403C18.3637 0.758239 17.4992 1.0944 16.5791 1.27559C15.8423 0.490562 14.7925 0 13.6308 0C11.4 0 9.59144 1.8085 9.59144 4.03914C9.59144 4.35571 9.62724 4.66401 9.69608 4.95963C6.33906 4.79119 3.36278 3.18311 1.37058 0.739371C1.02289 1.33594 0.8237 2.0298 0.8237 2.77003C0.8237 4.17136 1.53686 5.4077 2.62067 6.13202C1.9585 6.11106 1.33572 5.92937 0.791077 5.62684C0.790789 5.64369 0.790789 5.66061 0.790789 5.67761C0.790789 7.63467 2.18311 9.26724 4.03093 9.63825C3.69196 9.73058 3.33513 9.77991 2.9667 9.77991C2.70644 9.77991 2.45338 9.75463 2.20681 9.70746C2.72077 11.3122 4.21248 12.48 5.98 12.5126C4.59761 13.5959 2.85594 14.2417 0.963552 14.2417C0.637543 14.2417 0.315999 14.2226 0 14.1853C1.78754 15.3313 3.91074 16 6.19179 16C13.6214 16 17.6841 9.84515 17.6841 4.50752C17.6841 4.33238 17.6802 4.15818 17.6725 3.98499C18.4616 3.4155 19.1465 2.70407 19.688 1.89405Z" fill="#777777"></path> </svg> </a> </li> <li> <a href="https://www.linkedin.com/company/80804045" target="_blank" rel="noopener"> <svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M16.4954 14.4C16.4954 15.2828 15.7781 16 14.9046 16H2.27928C1.40572 16 0.688477 15.2828 0.688477 14.4V1.6C0.688477 0.717241 1.40572 0 2.27928 0H14.9046C15.7873 0 16.4954 0.717241 16.4954 1.6V14.4ZM5.82856 3.90806C5.82856 4.49656 5.39637 4.97472 4.67913 4.97472C4.00787 4.97472 3.57568 4.49656 3.57568 3.90806C3.57568 3.31036 4.02626 2.85059 4.71591 2.85059C5.39637 2.85059 5.81936 3.31036 5.82856 3.90806ZM3.63086 12.6529V5.81151H5.75499V12.6529H3.63086ZM6.97797 5.82072C7.00556 6.43682 7.03314 7.14486 7.03314 8.00004V12.6621H9.15728V8.71728C9.15728 8.52418 9.17567 8.32188 9.23085 8.18394C9.38717 7.78854 9.73659 7.38394 10.3251 7.38394C11.0975 7.38394 11.401 7.98165 11.401 8.86441V12.6621H13.5251V8.61613C13.5251 6.60233 12.4768 5.6644 11.0791 5.6644C9.9297 5.6644 9.24004 6.31728 8.96418 6.76785H8.9274L8.82625 5.82072H6.97797Z" fill="#777777"></path> </svg> </a> </li> <li> <a href="https://gitter.im/ckan/chat" target="_blank" rel="noopener"> <svg width="14" height="20" viewBox="0 0 14 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H1.91947V12.6679H0V0ZM11.6699 3.07099H13.5893V12.6679H11.6699V3.07099ZM3.91557 3.07099H5.83489V20H3.91557V3.07099ZM7.75437 3.07099H9.67384V20H7.75437V3.07099Z" fill="#777777"></path></svg> </a> </li> <li> <iframe src="https://ghbtns.com/github-btn.html?user=ckan&repo=ckan&type=star&count=true&size=large" frameborder="0" scrolling="0" width="150" height="30" title="GitHub"></iframe> </li> </ul> </div> <span>We are here to assist</span> <p>Have questions or need support? Our team is ready to help you navigate and make the most of CKAN.</p> <script src="/static/js/jquery-3.5.1.min.js"></script> <div class="row"> <div class="col-xs-1 text-capitalize" align="center"> <a data-micromodal-trigger="modal-940638497" href="javascript:void(0);" id="contact">Contact Us</a> </div> </div> <div class="modal micromodal-slide" id="modal-940638497" aria-hidden="true"> <div class="modal__overlay" tabindex="-1" data-micromodal-close> <div class="modal__container" id="modal-content" role="dialog" aria-modal="true" aria-labelledby="modal-1-title"> <header class="modal__header"> <h2 class="modal__title" id="modal-1-title"> Contact Us </h2> <button class="modal__close" aria-label="Close modal" data-micromodal-close></button> </header> <form action="/contact-us" method="POST" role="form" class="contact-modal" id="modal-form-213"> <main class="modal__content" id="modal-1-content"> <input type="hidden" name="csrfmiddlewaretoken" value="9EIAZt5dVpx7Cp1uTp3AiqV7X7r4JN1CcPfuNdBTbEq9vvLv44yNCJsx39dopJ34"> <div class="modal-intro"> <p data-block-key="jj22m"><i>Note: Your information will be used in accordance with our Privacy Policy. You may opt-out at any time.</i></p> </div> <p> <label for="id_your_e_mail_address">Your e-mail address</label> <input type="text" name="your_e_mail_address" maxlength="255" required id="id_your_e_mail_address"> </p> <p> <label for="id_your_name">Your name</label> <input type="text" name="your_name" maxlength="255" required id="id_your_name"> </p> <p> <label for="id_your_companyorganization_name">Your Company/Organization Name</label> <input type="text" name="your_companyorganization_name" maxlength="255" required id="id_your_companyorganization_name"> </p> <p> <label for="id_your_phone_number">Your phone number</label> <input type="text" name="your_phone_number" maxlength="255" id="id_your_phone_number"> </p> <p> <label for="id_how_you_heard_about_us">How did you hear about us?</label> <select name="how_you_heard_about_us" id="id_how_you_heard_about_us"> <option value="Search Engine" selected>Search Engine</option> <option value="CKAN Website">CKAN Website</option> <option value="AWS Marketplace">AWS Marketplace</option> <option value="Twitter">Twitter</option> <option value="LinkedIn">LinkedIn</option> <option value="FaceBook">FaceBook</option> <option value="Referral">Referral</option> <option value="Google Advertisement">Google Advertisement</option> <option value="Webinar">Webinar</option> <option value="YouTube">YouTube</option> <option value="Conference or Event">Conference or Event</option> <option value="Other">Other</option> </select> </p> <p> <label for="id_what_brings_you_to_ckanorg_how_can_we_help">What brings you to CKAN.org / How can we help?</label> <textarea name="what_brings_you_to_ckanorg_how_can_we_help" cols="40" rows="10" id="id_what_brings_you_to_ckanorg_how_can_we_help"> </textarea> </p> <p> <label for="id_i_consent_to_ckanorg_sending_me_marketing_emails_i_would_like_to_sign_up_to_receive_email_updates_from_ckanorg">I would like to sign up to receive emails with the latest news, events, and more from ckan.org.</label> <input type="checkbox" name="i_consent_to_ckanorg_sending_me_marketing_emails_i_would_like_to_sign_up_to_receive_email_updates_from_ckanorg" id="id_i_consent_to_ckanorg_sending_me_marketing_emails_i_would_like_to_sign_up_to_receive_email_updates_from_ckanorg"> </p> <p> <img src="/captcha/image/c142cd180e960503feff37b33290786f03507ef7/" alt="captcha" class="captcha" /> <input type="hidden" name="wagtailcaptcha_0" value="c142cd180e960503feff37b33290786f03507ef7" required id="id_wagtailcaptcha_0" autocomplete="off"><input type="text" name="wagtailcaptcha_1" required id="id_wagtailcaptcha_1" autocapitalize="off" autocomplete="off" autocorrect="off" spellcheck="false"> </p> <input name="source-page-id" type="hidden" value="401"> </main> <footer class="modal__footer"> <input id="message-text" type="hidden" value="<h4>Success!</h4> <p>Thank you for getting in touch with us! Your message has been successfully submitted, and we'll respond shortly. Stay tuned!</p>"> <button id="modal-btn-213" class="modal__btn" data-callback="onContactSubmit_213" data-action="submit" disabled> Submit </button> </footer> </form> </div> </div> </div> <script type="text/javascript"> $('a[id=contact]').on("click", function() { var modal_trigger = $(this).attr("data-micromodal-trigger"); var modal_window = $('#' + modal_trigger); var modal_form = modal_window.find("form"); var button = modal_form.find('.modal__btn'); var required = modal_form.find('input[required]:not([id="id_wagtailcaptcha"]), select[required], textarea[required]'); // check whether all required fields are fulfilled required.on('blur keyup change', function() { var all_required_filled = true; required.each(function() { if (!$(this).val()) { all_required_filled = false; }; }); if (all_required_filled) { button.prop("disabled", false).addClass("modal__btn-primary"); } else { button.prop("disabled", true).removeClass("modal__btn-primary"); }; }); }); $('.captcha').click(function () { $.getJSON("/captcha/refresh/", function (result) { $('.captcha').attr('src', result['image_url']); $('#id_captcha_0').val(result['key']) }); }); function onContactSubmit_213(token) { var id = "#modal-" + 213; var message = $(id).find('#message-text').val(); $(id).find(".contact-modal").submit(); $(id).find("#modal-content") .css("width", "100%") .html("<div style='text-align: center; padding: 30px 0px 30px 0px' id='thanks-text'>"+message+"</div>"); }; </script> </div> </div> </div> </footer> <div id="thanks-modal" class="modal"> <div class="modal-content"> <span class="close">&times;</span> <div id="thanks-text"></div> </div> </div> </div> <script src="/static/js/jquery-3.5.1.min.js"></script> <script src="/static/js/readmore.min.js"></script> <script src="/static/js/slick.min.js"></script> <script src="/static/js/jquery.fancybox.min.js"></script> <script src="/static/js/device.js"></script> <script src="/static/js/common.js"></script> <script src="/static/js/dropdown.js"></script> <script src="/static/js/micromodal.min.js"></script> <script src="https://www.google.com/recaptcha/api.js" async defer></script> <script> document.addEventListener("DOMContentLoaded", function() { MicroModal.init(); }); </script> <script src="/static/js/ckanorg.js"></script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10